summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/CMakeLists.txt2
-rw-r--r--indra/cmake/00-Common.cmake5
-rw-r--r--indra/cmake/Copy3rdPartyLibs.cmake18
-rw-r--r--indra/cmake/FMOD.cmake14
-rw-r--r--indra/cmake/FindAutobuild.cmake10
-rw-r--r--indra/cmake/FindJsonCpp.cmake4
-rw-r--r--indra/cmake/FindLLQtWebkit.cmake2
-rw-r--r--indra/cmake/FindZLIB.cmake6
-rw-r--r--indra/cmake/GoogleMock.cmake2
-rw-r--r--indra/cmake/GooglePerfTools.cmake2
-rw-r--r--indra/cmake/LLPlugin.cmake4
-rw-r--r--indra/cmake/LLPrimitive.cmake2
-rw-r--r--indra/cmake/LScript.cmake2
-rw-r--r--indra/cmake/NDOF.cmake20
-rw-r--r--indra/cmake/WebKitLibPlugin.cmake22
-rw-r--r--indra/fix-incredibuild.py23
-rw-r--r--indra/integration_tests/llimage_libtest/CMakeLists.txt6
-rw-r--r--indra/integration_tests/llimage_libtest/llimage_libtest.cpp4
-rw-r--r--indra/integration_tests/llui_libtest/llwidgetreg.cpp2
-rw-r--r--indra/lib/python/indra/base/cllsd_test.py22
-rw-r--r--indra/lib/python/indra/base/lluuid.py6
-rw-r--r--indra/lib/python/indra/ipc/httputil.py21
-rw-r--r--indra/lib/python/indra/ipc/russ.py2
-rw-r--r--indra/lib/python/indra/ipc/siesta_test.py21
-rw-r--r--indra/lib/python/uuid.py21
-rw-r--r--indra/linux_crash_logger/linux_crash_logger.cpp14
-rw-r--r--indra/linux_crash_logger/llcrashloggerlinux.cpp2
-rw-r--r--indra/llaudio/llaudioengine_fmod.cpp2
-rw-r--r--indra/llaudio/llvorbisencode.cpp9
-rw-r--r--indra/llcharacter/CMakeLists.txt12
-rw-r--r--indra/llcharacter/llbvhloader.cpp3
-rw-r--r--indra/llcharacter/llcharacter.cpp25
-rw-r--r--indra/llcharacter/llcharacter.h1
-rw-r--r--indra/llcharacter/llkeyframemotion.cpp73
-rw-r--r--indra/llcharacter/llkeyframemotion.h2
-rw-r--r--indra/llcharacter/llkeyframemotionparam.cpp3
-rw-r--r--indra/llcharacter/llstatemachine.cpp3
-rw-r--r--indra/llcommon/CMakeLists.txt6
-rw-r--r--indra/llcommon/indra_constants.h2
-rw-r--r--indra/llcommon/llapp.cpp4
-rw-r--r--indra/llcommon/llapr.cpp445
-rw-r--r--indra/llcommon/llapr.h107
-rw-r--r--indra/llcommon/llaprpool.cpp202
-rw-r--r--indra/llcommon/llaprpool.h256
-rw-r--r--indra/llcommon/llcommon.cpp13
-rw-r--r--indra/llcommon/llcommon.h2
-rw-r--r--indra/llcommon/llerror.cpp5
-rw-r--r--indra/llcommon/llerror.h15
-rw-r--r--indra/llcommon/lleventtimer.cpp20
-rw-r--r--indra/llcommon/llfasttimer_class.cpp37
-rw-r--r--indra/llcommon/llfixedbuffer.cpp3
-rw-r--r--indra/llcommon/llfoldertype.cpp2
-rw-r--r--indra/llcommon/llfoldertype.h5
-rw-r--r--indra/llcommon/llinstancetracker.cpp19
-rw-r--r--indra/llcommon/llinstancetracker.h252
-rw-r--r--indra/llcommon/llmemory.cpp1825
-rw-r--r--indra/llcommon/llmemory.h341
-rw-r--r--indra/llcommon/llscopedvolatileaprpool.h52
-rw-r--r--indra/llcommon/llsdserialize_xml.cpp35
-rw-r--r--indra/llcommon/llsingleton.h20
-rw-r--r--indra/llcommon/llstring.cpp13
-rw-r--r--indra/llcommon/llsys.cpp614
-rw-r--r--indra/llcommon/llsys.h22
-rw-r--r--indra/llcommon/llthread.cpp240
-rw-r--r--indra/llcommon/llthread.h133
-rw-r--r--indra/llcommon/llthreadsafequeue.cpp15
-rw-r--r--indra/llcommon/llthreadsafequeue.h16
-rwxr-xr-x[-rw-r--r--]indra/llcommon/llversionviewer.h6
-rw-r--r--indra/llcommon/llworkerthread.cpp8
-rw-r--r--indra/llcommon/llworkerthread.h3
-rw-r--r--indra/llcommon/tests/llinstancetracker_test.cpp87
-rw-r--r--indra/llcommon/tests/llsdserialize_test.cpp508
-rw-r--r--indra/llcommon/tests/llstring_test.cpp8
-rw-r--r--indra/llcommon/tests/setpython.py19
-rw-r--r--indra/llcrashlogger/llcrashlogger.cpp100
-rw-r--r--indra/llcrashlogger/llcrashlogger.h11
-rw-r--r--indra/llimage/llimage.cpp50
-rw-r--r--indra/llimage/llimage.h14
-rw-r--r--indra/llimage/llimagedimensionsinfo.cpp2
-rw-r--r--indra/llimage/llimagedxt.cpp2
-rw-r--r--indra/llimage/llimagej2c.cpp7
-rw-r--r--indra/llimage/llimageworker.cpp8
-rw-r--r--indra/llimage/llimageworker.h2
-rw-r--r--indra/llinventory/CMakeLists.txt18
-rw-r--r--indra/llinventory/llinventory.cpp3
-rw-r--r--indra/llinventory/llparcel.cpp27
-rw-r--r--indra/llinventory/llparcel.h21
-rw-r--r--indra/llinventory/llparcelflags.h2
-rw-r--r--indra/llkdu/CMakeLists.txt2
-rw-r--r--indra/llmath/CMakeLists.txt4
-rw-r--r--indra/llmath/llcalc.cpp162
-rw-r--r--indra/llmath/llcalc.h100
-rw-r--r--indra/llmath/llcalcparser.cpp63
-rw-r--r--indra/llmath/llcalcparser.h191
-rwxr-xr-x[-rw-r--r--]indra/llmath/llvolume.cpp202
-rw-r--r--indra/llmath/llvolumemgr.cpp4
-rw-r--r--indra/llmath/tests/v3math_test.cpp18
-rw-r--r--indra/llmessage/CMakeLists.txt2
-rw-r--r--indra/llmessage/llares.cpp17
-rw-r--r--indra/llmessage/llcurl.cpp266
-rw-r--r--indra/llmessage/llcurl.h132
-rw-r--r--indra/llmessage/llfiltersd2xmlrpc.cpp12
-rw-r--r--indra/llmessage/llhttpassetstorage.cpp5
-rw-r--r--indra/llmessage/llhttpclient.cpp5
-rw-r--r--indra/llmessage/lliohttpserver.cpp19
-rw-r--r--indra/llmessage/lliohttpserver.h2
-rw-r--r--indra/llmessage/lliosocket.cpp133
-rw-r--r--indra/llmessage/lliosocket.h52
-rw-r--r--indra/llmessage/llioutil.cpp5
-rw-r--r--indra/llmessage/llmail.cpp17
-rw-r--r--indra/llmessage/llmail.h4
-rw-r--r--indra/llmessage/llpacketring.cpp65
-rw-r--r--indra/llmessage/llpacketring.h12
-rw-r--r--indra/llmessage/llproxy.cpp550
-rw-r--r--indra/llmessage/llproxy.h339
-rw-r--r--indra/llmessage/llpumpio.cpp74
-rw-r--r--indra/llmessage/llpumpio.h31
-rw-r--r--indra/llmessage/llsdrpcclient.cpp6
-rw-r--r--indra/llmessage/llsdrpcserver.cpp3
-rw-r--r--indra/llmessage/lltemplatemessagereader.cpp2
-rw-r--r--indra/llmessage/llurlrequest.cpp62
-rw-r--r--indra/llmessage/message.cpp17
-rw-r--r--indra/llmessage/message_prehash.cpp3
-rw-r--r--indra/llmessage/message_prehash.h3
-rw-r--r--indra/llmessage/net.cpp39
-rw-r--r--indra/llmessage/net.h4
-rw-r--r--indra/llmessage/tests/networkio.h9
-rw-r--r--indra/llmessage/tests/test_llsdmessage_peer.py9
-rw-r--r--indra/llmessage/tests/testrunner.py100
-rw-r--r--indra/llplugin/CMakeLists.txt24
-rw-r--r--indra/llplugin/llpluginclassmedia.cpp2881
-rw-r--r--indra/llplugin/llpluginclassmedia.h19
-rw-r--r--indra/llplugin/llpluginclassmediaowner.h2
-rw-r--r--indra/llplugin/llplugininstance.cpp6
-rw-r--r--indra/llplugin/llplugininstance.h4
-rw-r--r--indra/llplugin/llpluginmessagepipe.cpp2
-rw-r--r--indra/llplugin/llpluginmessagepipe.h3
-rw-r--r--indra/llplugin/llpluginprocesschild.cpp4
-rw-r--r--indra/llplugin/llpluginprocessparent.cpp58
-rw-r--r--indra/llplugin/llpluginprocessparent.h4
-rw-r--r--indra/llplugin/llpluginsharedmemory.cpp9
-rw-r--r--indra/llplugin/llpluginsharedmemory.h3
-rw-r--r--indra/llplugin/slplugin/slplugin.cpp4
-rw-r--r--indra/llprimitive/CMakeLists.txt10
-rw-r--r--indra/llprimitive/llmodel.cpp504
-rw-r--r--indra/llprimitive/llmodel.h10
-rwxr-xr-x[-rw-r--r--]indra/llprimitive/llprimitive.h2
-rw-r--r--indra/llrender/llcubemap.cpp12
-rw-r--r--indra/llrender/llfontgl.cpp3
-rw-r--r--indra/llrender/llgl.cpp68
-rw-r--r--indra/llrender/llgl.h2
-rw-r--r--indra/llrender/llglheaders.h39
-rw-r--r--indra/llrender/llglslshader.cpp30
-rw-r--r--indra/llrender/llglslshader.h12
-rw-r--r--indra/llrender/llimagegl.cpp16
-rw-r--r--indra/llrender/llrender.cpp80
-rw-r--r--indra/llrender/llrender.h3
-rw-r--r--indra/llrender/llrendertarget.cpp47
-rw-r--r--indra/llrender/llrendertarget.h14
-rw-r--r--indra/llrender/llshadermgr.cpp148
-rw-r--r--indra/llrender/llvertexbuffer.cpp270
-rw-r--r--indra/llrender/llvertexbuffer.h17
-rw-r--r--indra/llui/CMakeLists.txt26
-rw-r--r--indra/llui/llaccordionctrltab.cpp2
-rw-r--r--indra/llui/llbadge.cpp294
-rw-r--r--indra/llui/llbadge.h167
-rw-r--r--indra/llui/llbadgeholder.cpp45
-rw-r--r--indra/llui/llbadgeholder.h (renamed from indra/newview/lldrawpoolclouds.h)44
-rw-r--r--indra/llui/llbadgeowner.cpp131
-rw-r--r--indra/llui/llbadgeowner.h61
-rw-r--r--indra/llui/llbutton.cpp71
-rw-r--r--indra/llui/llbutton.h16
-rw-r--r--indra/llui/llcombobox.cpp9
-rw-r--r--indra/llui/llconsole.cpp17
-rw-r--r--indra/llui/llfloater.cpp87
-rw-r--r--indra/llui/llfloater.h9
-rw-r--r--indra/llui/llfloaterreg.cpp33
-rw-r--r--indra/llui/llfloaterreg.h2
-rw-r--r--indra/llui/llfunctorregistry.h4
-rw-r--r--indra/llui/lllayoutstack.cpp143
-rw-r--r--indra/llui/lllayoutstack.h36
-rw-r--r--indra/llui/lllineeditor.cpp156
-rw-r--r--indra/llui/lllineeditor.h13
-rw-r--r--indra/llui/llloadingindicator.h2
-rw-r--r--indra/llui/llmenubutton.cpp11
-rw-r--r--indra/llui/llmenubutton.h21
-rw-r--r--indra/llui/llmultislider.cpp2
-rw-r--r--indra/llui/llpanel.cpp12
-rw-r--r--indra/llui/llpanel.h10
-rw-r--r--indra/llui/llsdparam.h9
-rw-r--r--indra/llui/llspinctrl.cpp23
-rw-r--r--indra/llui/lltextbase.cpp13
-rw-r--r--indra/llui/lltextvalidate.cpp33
-rw-r--r--indra/llui/lltextvalidate.h1
-rw-r--r--indra/llui/lltimectrl.cpp432
-rw-r--r--indra/llui/lltimectrl.h131
-rw-r--r--indra/llui/llui.cpp75
-rw-r--r--indra/llui/llui.h13
-rw-r--r--indra/llui/lluictrl.cpp36
-rw-r--r--indra/llui/lluictrl.h8
-rw-r--r--indra/llui/lluiimage.cpp6
-rw-r--r--indra/llui/lluiimage.h4
-rw-r--r--indra/llui/llurlentry.cpp2
-rw-r--r--indra/llui/llview.cpp33
-rw-r--r--indra/llui/tests/llurlentry_stub.cpp6
-rw-r--r--indra/llui/tests/llurlmatch_test.cpp8
-rw-r--r--indra/llvfs/CMakeLists.txt10
-rw-r--r--indra/llvfs/lldiriterator.cpp20
-rw-r--r--indra/llvfs/lllfsthread.cpp10
-rw-r--r--indra/llvfs/llvfs.cpp5
-rw-r--r--indra/llwindow/GL/glh_extensions.h4
-rw-r--r--indra/llwindow/GL/glh_genext.h3
-rw-r--r--indra/llwindow/llwindowwin32.cpp31
-rw-r--r--indra/llxml/CMakeLists.txt28
-rw-r--r--indra/llxml/llcontrol.h3
-rw-r--r--indra/llxuixml/llinitparam.cpp2
-rw-r--r--indra/llxuixml/llinitparam.h50
-rw-r--r--indra/lscript/lscript_compile/bison.bat22
-rw-r--r--indra/lscript/lscript_compile/indra.l2
-rw-r--r--indra/lscript/lscript_compile/windows/unistd.h48
-rw-r--r--indra/mac_crash_logger/CrashReporter.nib/objects.xib2
-rw-r--r--indra/mac_crash_logger/llcrashloggermac.cpp5
-rw-r--r--indra/mac_crash_logger/mac_crash_logger.cpp15
-rw-r--r--indra/media_plugins/example/CMakeLists.txt2
-rw-r--r--indra/media_plugins/gstreamer010/llmediaimplgstreamer.h1
-rw-r--r--indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp15
-rw-r--r--indra/media_plugins/webkit/linux_volume_catcher.cpp14
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp2833
-rw-r--r--indra/newview/CMakeLists.txt198
-rw-r--r--indra/newview/app_settings/CA.pem7626
-rw-r--r--indra/newview/app_settings/cmd_line.xml13
-rw-r--r--indra/newview/app_settings/keys.xml2
-rw-r--r--indra/newview/app_settings/keywords.ini1
-rw-r--r--indra/newview/app_settings/logcontrol.xml1
-rw-r--r--[-rwxr-xr-x]indra/newview/app_settings/settings.xml451
-rw-r--r--indra/newview/app_settings/settings_files.xml5
-rw-r--r--indra/newview/app_settings/settings_minimal.xml13
-rw-r--r--indra/newview/app_settings/settings_per_account.xml11
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl48
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl44
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/giF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/giV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl28
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl45
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl41
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl24
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/skyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/skyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl111
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl46
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/starsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/treeV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/waterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/waterV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/effects/glowV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/environment/waterV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl33
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/highlightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/highlightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl29
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl30
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl33
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl32
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/uiF.glsl31
-rw-r--r--indra/newview/app_settings/shaders/class1/interface/uiV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/bumpF.glsl35
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/bumpV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/impostorF.glsl44
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/impostorV.glsl34
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl25
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class1/windlight/transportF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl77
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl78
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/blurF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/blurV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/extractF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/effects/simpleF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/terrainF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/terrainV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/waterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl48
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl51
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl49
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl23
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl47
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl45
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl49
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/shinyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/objects/simpleV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/skyF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/skyV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class2/windlight/transportF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl20
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/giV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl131
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/deferred/treeF.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl18
-rw-r--r--indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl18
-rw-r--r--indra/newview/app_settings/windlight/days/Colder%20Tones.xml28
-rw-r--r--indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml32
-rw-r--r--indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml44
-rw-r--r--indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml72
-rw-r--r--indra/newview/app_settings/windlight/days/Tropicalia.xml32
-rw-r--r--indra/newview/app_settings/windlight/days/Weird-O.xml56
-rw-r--r--indra/newview/app_settings/windlight/skies/Midday.xml141
-rw-r--r--indra/newview/app_settings/windlight/skies/Midnight.xml141
-rw-r--r--indra/newview/app_settings/windlight/skies/Sunrise.xml141
-rw-r--r--indra/newview/app_settings/windlight/skies/Sunset.xml142
-rw-r--r--indra/newview/featuretable.txt13
-rw-r--r--indra/newview/featuretable_linux.txt10
-rw-r--r--indra/newview/featuretable_mac.txt17
-rw-r--r--indra/newview/featuretable_xp.txt11
-rw-r--r--indra/newview/icons/beta/secondlife.icnsbin0 -> 242261 bytes
-rw-r--r--indra/newview/icons/beta/secondlife.icobin0 -> 78692 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_128.pngbin0 -> 18268 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_16.pngbin0 -> 3536 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_256.pngbin0 -> 49418 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_32.pngbin0 -> 4767 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_48.pngbin0 -> 6438 bytes
-rw-r--r--indra/newview/icons/beta/secondlife_512.pngbin0 -> 151779 bytes
-rw-r--r--indra/newview/icons/development/secondlife.icnsbin0 -> 233026 bytes
-rw-r--r--indra/newview/icons/development/secondlife.icobin0 -> 77117 bytes
-rw-r--r--indra/newview/icons/development/secondlife_128.pngbin0 -> 17499 bytes
-rw-r--r--indra/newview/icons/development/secondlife_16.pngbin0 -> 3471 bytes
-rw-r--r--indra/newview/icons/development/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/development/secondlife_256.pngbin0 -> 47952 bytes
-rw-r--r--indra/newview/icons/development/secondlife_32.pngbin0 -> 4649 bytes
-rw-r--r--indra/newview/icons/development/secondlife_48.pngbin0 -> 6190 bytes
-rw-r--r--indra/newview/icons/development/secondlife_512.pngbin0 -> 147689 bytes
-rw-r--r--indra/newview/icons/project/secondlife.icnsbin0 -> 235133 bytes
-rw-r--r--indra/newview/icons/project/secondlife.icobin0 -> 77791 bytes
-rw-r--r--indra/newview/icons/project/secondlife_128.pngbin0 -> 17706 bytes
-rw-r--r--indra/newview/icons/project/secondlife_16.pngbin0 -> 3471 bytes
-rw-r--r--indra/newview/icons/project/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/project/secondlife_256.pngbin0 -> 48488 bytes
-rw-r--r--indra/newview/icons/project/secondlife_32.pngbin0 -> 4675 bytes
-rw-r--r--indra/newview/icons/project/secondlife_48.pngbin0 -> 6195 bytes
-rw-r--r--indra/newview/icons/project/secondlife_512.pngbin0 -> 149145 bytes
-rw-r--r--indra/newview/icons/release/secondlife.icnsbin0 -> 228390 bytes
-rw-r--r--indra/newview/icons/release/secondlife.icobin0 -> 77552 bytes
-rw-r--r--indra/newview/icons/release/secondlife_128.pngbin0 -> 17198 bytes
-rw-r--r--indra/newview/icons/release/secondlife_16.pngbin0 -> 3524 bytes
-rw-r--r--indra/newview/icons/release/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/release/secondlife_256.pngbin0 -> 47946 bytes
-rw-r--r--indra/newview/icons/release/secondlife_32.pngbin0 -> 4746 bytes
-rw-r--r--indra/newview/icons/release/secondlife_48.pngbin0 -> 6249 bytes
-rw-r--r--indra/newview/icons/release/secondlife_512.pngbin0 -> 147963 bytes
-rw-r--r--indra/newview/icons/test/secondlife.icnsbin0 -> 232905 bytes
-rw-r--r--indra/newview/icons/test/secondlife.icobin0 -> 76861 bytes
-rw-r--r--indra/newview/icons/test/secondlife_128.pngbin0 -> 17156 bytes
-rw-r--r--indra/newview/icons/test/secondlife_16.pngbin0 -> 3471 bytes
-rw-r--r--indra/newview/icons/test/secondlife_256.BMPbin0 -> 196662 bytes
-rw-r--r--indra/newview/icons/test/secondlife_256.pngbin0 -> 47522 bytes
-rw-r--r--indra/newview/icons/test/secondlife_32.pngbin0 -> 4644 bytes
-rw-r--r--indra/newview/icons/test/secondlife_48.pngbin0 -> 6115 bytes
-rw-r--r--indra/newview/icons/test/secondlife_512.pngbin0 -> 146971 bytes
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r6996
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/_DS_Storebin12292 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icnsbin98049 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/firstlook-dmg/background.jpgbin75112 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r6996
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/_DS_Storebin12292 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icnsbin98049 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/publicnightly-dmg/background.jpgbin75112 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r6996
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/_DS_Storebin12292 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icnsbin98049 -> 0 bytes
-rw-r--r--indra/newview/installers/darwin/releasecandidate-dmg/background.jpgbin75112 -> 0 bytes
-rw-r--r--indra/newview/installers/windows/installer_template.nsi1720
-rwxr-xr-x[-rw-r--r--]indra/newview/llagent.cpp27
-rw-r--r--indra/newview/llagentcamera.cpp2
-rw-r--r--indra/newview/llagentwearables.cpp33
-rw-r--r--indra/newview/llagentwearables.h2
-rw-r--r--indra/newview/llappearancemgr.cpp4
-rw-r--r--indra/newview/llappviewer.cpp369
-rw-r--r--indra/newview/llappviewer.h12
-rw-r--r--indra/newview/llappviewerlinux.cpp64
-rw-r--r--indra/newview/llappviewerlinux_api_dbus.cpp14
-rw-r--r--indra/newview/llappviewermacosx.cpp1
-rw-r--r--indra/newview/llappviewerwin32.cpp6
-rwxr-xr-x[-rw-r--r--]indra/newview/llassetuploadresponders.cpp13
-rw-r--r--indra/newview/llassetuploadresponders.h1
-rwxr-xr-xindra/newview/llavataractions.cpp82
-rw-r--r--indra/newview/llavataractions.h3
-rw-r--r--indra/newview/llbottomtray.cpp3
-rw-r--r--indra/newview/llcloud.cpp538
-rw-r--r--indra/newview/llcloud.h199
-rw-r--r--indra/newview/lldateutil.cpp27
-rw-r--r--indra/newview/lldateutil.h14
-rw-r--r--indra/newview/lldaycyclemanager.cpp230
-rw-r--r--indra/newview/lldaycyclemanager.h84
-rw-r--r--indra/newview/lldebugview.cpp3
-rw-r--r--indra/newview/lldrawable.cpp5
-rw-r--r--indra/newview/lldrawpool.cpp6
-rw-r--r--indra/newview/lldrawpoolalpha.cpp84
-rw-r--r--indra/newview/lldrawpoolavatar.cpp28
-rw-r--r--indra/newview/lldrawpoolbump.cpp109
-rw-r--r--indra/newview/lldrawpoolclouds.cpp97
-rw-r--r--indra/newview/lldrawpoolsimple.cpp43
-rw-r--r--indra/newview/lldrawpoolsky.cpp5
-rw-r--r--indra/newview/lldrawpoolterrain.cpp6
-rw-r--r--indra/newview/lldrawpooltree.cpp38
-rw-r--r--indra/newview/lldrawpoolwater.cpp4
-rw-r--r--indra/newview/lldrawpoolwlsky.cpp77
-rw-r--r--indra/newview/lldynamictexture.cpp3
-rw-r--r--indra/newview/llenvmanager.cpp678
-rw-r--r--indra/newview/llenvmanager.h277
-rw-r--r--indra/newview/llestateinfomodel.cpp230
-rw-r--r--indra/newview/llestateinfomodel.h103
-rw-r--r--indra/newview/llexpandabletextbox.cpp9
-rw-r--r--indra/newview/llexpandabletextbox.h4
-rw-r--r--indra/newview/llface.cpp90
-rw-r--r--indra/newview/llfasttimerview.cpp10
-rw-r--r--indra/newview/llfeaturemanager.cpp8
-rw-r--r--indra/newview/llfilteredwearablelist.cpp1
-rw-r--r--indra/newview/llfloaterabout.cpp67
-rw-r--r--indra/newview/llfloateranimpreview.cpp3
-rw-r--r--indra/newview/llfloaterauction.cpp18
-rw-r--r--indra/newview/llfloaterbuildoptions.cpp68
-rw-r--r--indra/newview/llfloaterbuildoptions.h23
-rw-r--r--indra/newview/llfloaterbuyland.cpp10
-rw-r--r--indra/newview/llfloaterdaycycle.cpp531
-rw-r--r--indra/newview/llfloaterdaycycle.h120
-rw-r--r--indra/newview/llfloaterdeleteenvpreset.cpp285
-rw-r--r--indra/newview/llfloaterdeleteenvpreset.h62
-rw-r--r--indra/newview/llfloatereditdaycycle.cpp825
-rw-r--r--indra/newview/llfloatereditdaycycle.h137
-rw-r--r--indra/newview/llfloatereditsky.cpp923
-rw-r--r--indra/newview/llfloatereditsky.h113
-rw-r--r--indra/newview/llfloatereditwater.cpp772
-rw-r--r--indra/newview/llfloatereditwater.h (renamed from indra/newview/llfloaterwater.h)112
-rw-r--r--indra/newview/llfloaterenvironmentsettings.cpp282
-rw-r--r--indra/newview/llfloaterenvironmentsettings.h71
-rw-r--r--indra/newview/llfloaterenvsettings.cpp268
-rw-r--r--indra/newview/llfloaterenvsettings.h83
-rw-r--r--indra/newview/llfloatergesture.cpp2
-rw-r--r--indra/newview/llfloaterhelpbrowser.cpp9
-rw-r--r--indra/newview/llfloaterhelpbrowser.h1
-rw-r--r--indra/newview/llfloaterland.cpp30
-rw-r--r--indra/newview/llfloaterland.h1
-rw-r--r--indra/newview/llfloatermemleak.cpp5
-rwxr-xr-x[-rw-r--r--]indra/newview/llfloatermodelpreview.cpp553
-rw-r--r--indra/newview/llfloatermodelpreview.h44
-rw-r--r--indra/newview/llfloatermodeluploadbase.cpp58
-rw-r--r--indra/newview/llfloatermodeluploadbase.h61
-rw-r--r--indra/newview/llfloatermodelwizard.cpp303
-rw-r--r--indra/newview/llfloatermodelwizard.h37
-rw-r--r--indra/newview/llfloaterpostcard.cpp4
-rwxr-xr-xindra/newview/llfloaterpreference.cpp272
-rw-r--r--indra/newview/llfloaterpreference.h30
-rw-r--r--indra/newview/llfloaterproperties.cpp20
-rw-r--r--indra/newview/llfloaterregioninfo.cpp1356
-rw-r--r--indra/newview/llfloaterregioninfo.h133
-rw-r--r--indra/newview/llfloatersearch.cpp132
-rw-r--r--indra/newview/llfloatersearch.h28
-rw-r--r--indra/newview/llfloatersellland.cpp3
-rw-r--r--indra/newview/llfloatertools.cpp149
-rw-r--r--indra/newview/llfloatertools.h4
-rw-r--r--indra/newview/llfloatervoiceeffect.cpp2
-rw-r--r--indra/newview/llfloaterwater.cpp625
-rw-r--r--indra/newview/llfloaterwebcontent.cpp188
-rw-r--r--indra/newview/llfloaterwebcontent.h31
-rw-r--r--indra/newview/llfloaterwindlight.cpp875
-rw-r--r--indra/newview/llfloaterwindlight.h112
-rwxr-xr-xindra/newview/llfloaterworldmap.cpp77
-rw-r--r--indra/newview/llfloaterworldmap.h5
-rw-r--r--indra/newview/llfolderview.cpp133
-rw-r--r--indra/newview/llfolderview.h28
-rw-r--r--indra/newview/llfolderviewitem.cpp204
-rw-r--r--indra/newview/llfolderviewitem.h42
-rw-r--r--indra/newview/llglsandbox.cpp2
-rw-r--r--indra/newview/llgroupmgr.cpp81
-rw-r--r--indra/newview/llhudnametag.cpp2
-rw-r--r--indra/newview/llinventorybridge.cpp98
-rw-r--r--indra/newview/llinventorybridge.h4
-rw-r--r--indra/newview/llinventoryfilter.cpp123
-rw-r--r--indra/newview/llinventoryfilter.h6
-rw-r--r--indra/newview/llinventoryfunctions.h24
-rw-r--r--indra/newview/llinventorymodel.cpp90
-rw-r--r--indra/newview/llinventorymodel.h3
-rw-r--r--indra/newview/llinventorymodelbackgroundfetch.cpp8
-rw-r--r--indra/newview/llinventoryobserver.cpp28
-rw-r--r--indra/newview/llinventoryobserver.h22
-rw-r--r--indra/newview/llinventorypanel.cpp487
-rw-r--r--indra/newview/llinventorypanel.h53
-rw-r--r--indra/newview/lllocationinputctrl.cpp13
-rw-r--r--indra/newview/lllocationinputctrl.h16
-rw-r--r--indra/newview/llloginhandler.cpp6
-rw-r--r--indra/newview/lllogininstance.cpp1
-rw-r--r--indra/newview/llmainlooprepeater.cpp2
-rw-r--r--indra/newview/llmediactrl.cpp48
-rw-r--r--indra/newview/llmediactrl.h9
-rwxr-xr-xindra/newview/llmeshrepository.cpp1101
-rwxr-xr-x[-rw-r--r--]indra/newview/llmeshrepository.h60
-rw-r--r--indra/newview/llnavigationbar.cpp2
-rw-r--r--indra/newview/llnearbychathandler.cpp37
-rw-r--r--indra/newview/lloutfitslist.cpp2
-rw-r--r--indra/newview/llpanelappearancetab.cpp1
-rw-r--r--indra/newview/llpanelcontents.cpp2
-rw-r--r--indra/newview/llpanelface.cpp21
-rw-r--r--indra/newview/llpanelgrouplandmoney.cpp39
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp95
-rw-r--r--indra/newview/llpanelimcontrolpanel.h8
-rw-r--r--indra/newview/llpanellandaudio.cpp22
-rw-r--r--indra/newview/llpanellandaudio.h2
-rw-r--r--indra/newview/llpanellandmarks.cpp7
-rw-r--r--indra/newview/llpanellogin.cpp2
-rw-r--r--indra/newview/llpanellogin.h8
-rw-r--r--indra/newview/llpanelmaininventory.cpp20
-rw-r--r--indra/newview/llpanelmaininventory.h4
-rw-r--r--indra/newview/llpanelmarketplaceinbox.cpp236
-rw-r--r--indra/newview/llpanelmarketplaceinbox.h78
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.cpp208
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.h92
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.cpp194
-rw-r--r--indra/newview/llpanelmarketplaceoutbox.h82
-rw-r--r--indra/newview/llpanelobject.cpp51
-rw-r--r--indra/newview/llpanelobjectinventory.cpp118
-rw-r--r--indra/newview/llpaneloutfitedit.cpp2
-rw-r--r--indra/newview/llpanelplaceprofile.cpp50
-rw-r--r--indra/newview/llpanelplaceprofile.h2
-rw-r--r--indra/newview/llpaneltopinfobar.cpp8
-rw-r--r--indra/newview/llpaneltopinfobar.h13
-rw-r--r--indra/newview/llpanelvoicedevicesettings.cpp64
-rw-r--r--indra/newview/llpanelvoicedevicesettings.h3
-rw-r--r--indra/newview/llpanelwearing.cpp26
-rw-r--r--indra/newview/llpanelwearing.h2
-rw-r--r--indra/newview/llparticipantlist.cpp14
-rw-r--r--indra/newview/llplacesinventorypanel.cpp85
-rw-r--r--indra/newview/llplacesinventorypanel.h2
-rw-r--r--indra/newview/llpreview.cpp19
-rw-r--r--indra/newview/llpreviewgesture.cpp1
-rw-r--r--indra/newview/llprogressview.cpp163
-rw-r--r--indra/newview/llprogressview.h25
-rw-r--r--indra/newview/llregioninfomodel.cpp217
-rw-r--r--indra/newview/llregioninfomodel.h99
-rw-r--r--indra/newview/llsceneview.cpp15
-rw-r--r--indra/newview/llsecapi.h6
-rw-r--r--indra/newview/llsechandler_basic.cpp8
-rw-r--r--indra/newview/llselectmgr.cpp2
-rw-r--r--indra/newview/llsidepanelappearance.cpp1
-rw-r--r--indra/newview/llsidepanelinventory.cpp504
-rw-r--r--indra/newview/llsidepanelinventory.h36
-rw-r--r--indra/newview/llsidepanelinventorysubpanel.cpp4
-rw-r--r--indra/newview/llsidepanelinventorysubpanel.h2
-rw-r--r--indra/newview/llsidepaneliteminfo.cpp7
-rw-r--r--indra/newview/llsidepaneliteminfo.h2
-rw-r--r--indra/newview/llsidetray.cpp190
-rw-r--r--indra/newview/llsidetray.h13
-rw-r--r--indra/newview/llslurl.cpp6
-rw-r--r--indra/newview/llspatialpartition.cpp16
-rw-r--r--indra/newview/llspatialpartition.h9
-rw-r--r--indra/newview/llstartup.cpp295
-rw-r--r--indra/newview/llstartup.h2
-rw-r--r--indra/newview/llstatusbar.cpp33
-rw-r--r--indra/newview/llstatusbar.h2
-rw-r--r--indra/newview/llsurface.cpp11
-rw-r--r--indra/newview/llsurface.h3
-rw-r--r--indra/newview/lltexlayer.cpp94
-rw-r--r--indra/newview/lltexlayer.h6
-rw-r--r--indra/newview/lltexturecache.cpp91
-rw-r--r--indra/newview/lltexturecache.h3
-rw-r--r--indra/newview/lltexturectrl.cpp5
-rw-r--r--indra/newview/lltexturefetch.cpp17
-rw-r--r--indra/newview/lltoastnotifypanel.cpp25
-rw-r--r--indra/newview/lltooldraganddrop.cpp1
-rw-r--r--indra/newview/lltoolpie.cpp1
-rw-r--r--indra/newview/lluploadfloaterobservers.cpp56
-rw-r--r--indra/newview/lluploadfloaterobservers.h97
-rw-r--r--indra/newview/llvieweraudio.cpp16
-rw-r--r--indra/newview/llviewercontrol.cpp4
-rw-r--r--indra/newview/llviewerdisplay.cpp38
-rw-r--r--indra/newview/llviewerfloaterreg.cpp39
-rw-r--r--indra/newview/llviewerfoldertype.cpp4
-rw-r--r--indra/newview/llviewerhelp.cpp16
-rw-r--r--indra/newview/llviewerinventory.cpp35
-rw-r--r--indra/newview/llviewermedia.cpp92
-rw-r--r--indra/newview/llviewermedia.h2
-rw-r--r--indra/newview/llviewermenu.cpp331
-rw-r--r--indra/newview/llviewermenufile.cpp5
-rw-r--r--indra/newview/llviewermessage.cpp238
-rw-r--r--indra/newview/llviewermessage.h3
-rw-r--r--indra/newview/llviewernetwork.cpp2
-rw-r--r--indra/newview/llviewerobject.cpp109
-rw-r--r--indra/newview/llviewerobject.h13
-rw-r--r--indra/newview/llviewerobjectlist.cpp49
-rw-r--r--indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--indra/newview/llviewerparceloverlay.cpp27
-rw-r--r--indra/newview/llviewerparceloverlay.h1
-rw-r--r--indra/newview/llviewerprecompiledheaders.h2
-rw-r--r--indra/newview/llviewerregion.cpp252
-rw-r--r--indra/newview/llviewerregion.h19
-rw-r--r--indra/newview/llviewershadermgr.cpp343
-rw-r--r--indra/newview/llviewershadermgr.h35
-rw-r--r--indra/newview/llviewertexture.cpp36
-rw-r--r--indra/newview/llviewertexture.h3
-rw-r--r--indra/newview/llviewertexturelist.cpp21
-rw-r--r--indra/newview/llviewertexturelist.h7
-rw-r--r--indra/newview/llviewerwindow.cpp123
-rw-r--r--indra/newview/llviewerwindow.h2
-rw-r--r--indra/newview/llvlmanager.cpp2
-rw-r--r--indra/newview/llvoavatar.cpp37
-rw-r--r--indra/newview/llvocache.cpp35
-rw-r--r--indra/newview/llvocache.h1
-rw-r--r--indra/newview/llvoclouds.cpp297
-rw-r--r--indra/newview/llvoclouds.h79
-rw-r--r--indra/newview/llvoicevivox.cpp308
-rw-r--r--indra/newview/llvoicevivox.h15
-rw-r--r--indra/newview/llvosky.cpp47
-rw-r--r--indra/newview/llvotree.cpp1
-rwxr-xr-x[-rw-r--r--]indra/newview/llvovolume.cpp80
-rw-r--r--indra/newview/llvovolume.h2
-rw-r--r--indra/newview/llvowater.cpp6
-rw-r--r--indra/newview/llvowlsky.cpp4
-rw-r--r--indra/newview/llwatchdog.cpp6
-rw-r--r--indra/newview/llwaterparammanager.cpp332
-rw-r--r--indra/newview/llwaterparammanager.h76
-rw-r--r--indra/newview/llwaterparamset.cpp44
-rw-r--r--indra/newview/llwaterparamset.h1
-rw-r--r--indra/newview/llweb.cpp31
-rw-r--r--indra/newview/llwlanimator.cpp202
-rw-r--r--indra/newview/llwlanimator.h86
-rw-r--r--indra/newview/llwldaycycle.cpp240
-rw-r--r--indra/newview/llwldaycycle.h54
-rw-r--r--indra/newview/llwlhandlers.cpp197
-rw-r--r--indra/newview/llwlhandlers.h100
-rw-r--r--indra/newview/llwlparammanager.cpp574
-rw-r--r--indra/newview/llwlparammanager.h210
-rw-r--r--indra/newview/llwlparamset.cpp60
-rw-r--r--indra/newview/llwlparamset.h3
-rw-r--r--indra/newview/llworld.cpp100
-rw-r--r--indra/newview/llworldmapview.cpp4
-rw-r--r--indra/newview/llxmlrpctransaction.cpp23
-rw-r--r--indra/newview/pipeline.cpp412
-rw-r--r--indra/newview/pipeline.h7
-rw-r--r--indra/newview/res-sdl/ll_icon.BMPbin262198 -> 0 bytes
-rw-r--r--indra/newview/res/ll_icon.BMPbin262198 -> 0 bytes
-rw-r--r--indra/newview/res/ll_icon.icobin367958 -> 0 bytes
-rw-r--r--indra/newview/res/ll_icon.pngbin29561 -> 0 bytes
-rw-r--r--indra/newview/res/viewerRes.rc6
-rw-r--r--indra/newview/skins/default/colors.xml21
-rw-r--r--indra/newview/skins/default/textures/icons/Inv_Gift.pngbin0 -> 1335 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Disabled.pngbin0 -> 1848 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Off.pngbin0 -> 1835 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_On.pngbin0 -> 1851 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_On_Over.pngbin0 -> 1863 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.pngbin0 -> 1912 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Over.pngbin0 -> 1826 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Press.pngbin0 -> 1891 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.pngbin0 -> 1848 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.pngbin0 -> 1807 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.pngbin0 -> 1819 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.pngbin0 -> 1894 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.pngbin0 -> 1921 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.pngbin0 -> 1853 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected.pngbin0 -> 1894 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.pngbin0 -> 1840 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.pngbin0 -> 1870 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.pngbin0 -> 1912 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.pngbin0 -> 3194 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.pngbin0 -> 3189 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.pngbin0 -> 3011 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.pngbin0 -> 3011 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Disabled.pngbin0 -> 1187 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Enabled.pngbin0 -> 1168 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_1.pngbin0 -> 1149 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_2.pngbin0 -> 1147 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_3.pngbin0 -> 1211 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_4.pngbin0 -> 1205 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_5.pngbin0 -> 1137 bytes
-rw-r--r--indra/newview/skins/default/textures/icons/Sync_Progress_6.pngbin0 -> 1164 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml41
-rw-r--r--indra/newview/skins/default/textures/widgets/Badge_Background.pngbin0 -> 1352 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Badge_Background_New.pngbin0 -> 1369 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/Badge_Border.pngbin0 -> 1565 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.pngbin0 -> 1067 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.pngbin0 -> 1086 bytes
-rw-r--r--indra/newview/skins/default/xui/da/floater_day_cycle_options.xml96
-rw-r--r--indra/newview/skins/default/xui/da/floater_env_settings.xml31
-rw-r--r--indra/newview/skins/default/xui/da/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/da/floater_water.xml103
-rw-r--r--indra/newview/skins/default/xui/da/floater_windlight_options.xml228
-rw-r--r--indra/newview/skins/default/xui/da/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/da/notifications.xml3
-rw-r--r--indra/newview/skins/default/xui/da/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/da/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/da/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/da/strings.xml9
-rw-r--r--indra/newview/skins/default/xui/de/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/de/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/de/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/de/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/de/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/de/floater_env_settings.xml26
-rw-r--r--indra/newview/skins/default/xui/de/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/de/floater_model_wizard.xml260
-rw-r--r--indra/newview/skins/default/xui/de/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/de/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/de/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/de/floater_water.xml72
-rw-r--r--indra/newview/skins/default/xui/de/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/de/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/de/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/de/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/de/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/de/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_outfit_edit.xml4
-rw-r--r--indra/newview/skins/default/xui/de/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/de/panel_people.xml12
-rw-r--r--indra/newview/skins/default/xui/de/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/de/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/de/panel_region_terrain.xml74
-rw-r--r--indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml2
-rw-r--r--indra/newview/skins/default/xui/de/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/de/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/de/strings.xml126
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml78
-rw-r--r--indra/newview/skins/default/xui/en/floater_about_land.xml96
-rw-r--r--indra/newview/skins/default/xui/en/floater_build_options.xml73
-rw-r--r--indra/newview/skins/default/xui/en/floater_buy_land.xml16
-rw-r--r--indra/newview/skins/default/xui/en/floater_day_cycle_options.xml558
-rw-r--r--indra/newview/skins/default/xui/en/floater_delete_env_preset.xml59
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml485
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml953
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_water_preset.xml448
-rw-r--r--indra/newview/skins/default/xui/en/floater_env_settings.xml164
-rw-r--r--indra/newview/skins/default/xui/en/floater_environment_settings.xml162
-rw-r--r--indra/newview/skins/default/xui/en/floater_help_browser.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_media_browser.xml2
-rwxr-xr-x[-rw-r--r--]indra/newview/skins/default/xui/en/floater_model_preview.xml140
-rw-r--r--indra/newview/skins/default/xui/en/floater_model_wizard.xml821
-rw-r--r--indra/newview/skins/default/xui/en/floater_openobject.xml1
-rw-r--r--indra/newview/skins/default/xui/en/floater_postcard.xml12
-rw-r--r--indra/newview/skins/default/xui/en/floater_preferences_proxy.xml273
-rw-r--r--indra/newview/skins/default/xui/en/floater_region_info.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_search.xml75
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_sound_devices.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml217
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_effect.xml40
-rw-r--r--indra/newview/skins/default/xui/en/floater_water.xml503
-rw-r--r--indra/newview/skins/default/xui/en/floater_web_content.xml16
-rw-r--r--indra/newview/skins/default/xui/en/floater_windlight_options.xml1288
-rw-r--r--indra/newview/skins/default/xui/en/inspect_avatar.xml3
-rw-r--r--indra/newview/skins/default/xui/en/main_view.xml15
-rw-r--r--indra/newview/skins/default/xui/en/menu_inventory_add.xml16
-rw-r--r--indra/newview/skins/default/xui/en/menu_media_ctrl.xml12
-rw-r--r--indra/newview/skins/default/xui/en/menu_mode_change.xml24
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml181
-rw-r--r--indra/newview/skins/default/xui/en/menu_wearing_gear.xml7
-rw-r--r--[-rwxr-xr-x]indra/newview/skins/default/xui/en/notifications.xml304
-rw-r--r--indra/newview/skins/default/xui/en/panel_activeim_row.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_avatar_list_item.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_cof_wearables.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_inbox_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_instant_message.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_login.xml36
-rw-r--r--indra/newview/skins/default/xui/en/panel_navigation_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_outbox_inventory.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_list.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml15
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml35
-rw-r--r--indra/newview/skins/default/xui/en/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_setup.xml87
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_sound.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_progress.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_environment.xml149
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_estate.xml324
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_terrain.xml349
-rw-r--r--indra/newview/skins/default/xui/en/panel_region_texture.xml327
-rw-r--r--indra/newview/skins/default/xui/en/panel_side_tray.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_sound_devices.xml178
-rw-r--r--indra/newview/skins/default/xui/en/panel_status_bar.xml30
-rw-r--r--indra/newview/skins/default/xui/en/panel_topinfo_bar.xml10
-rw-r--r--indra/newview/skins/default/xui/en/sidepanel_inventory.xml230
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml56
-rw-r--r--indra/newview/skins/default/xui/en/widgets/badge.xml20
-rw-r--r--indra/newview/skins/default/xui/en/widgets/button.xml1
-rw-r--r--indra/newview/skins/default/xui/en/widgets/combo_box.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml19
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml2
-rw-r--r--indra/newview/skins/default/xui/en/widgets/inventory_panel.xml10
-rw-r--r--indra/newview/skins/default/xui/en/widgets/location_input.xml8
-rw-r--r--indra/newview/skins/default/xui/en/widgets/panel.xml3
-rw-r--r--indra/newview/skins/default/xui/en/widgets/time.xml16
-rw-r--r--indra/newview/skins/default/xui/es/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/es/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/es/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/es/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/es/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/es/floater_env_settings.xml28
-rw-r--r--indra/newview/skins/default/xui/es/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/es/floater_model_wizard.xml272
-rw-r--r--indra/newview/skins/default/xui/es/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/es/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/es/floater_tools.xml52
-rw-r--r--indra/newview/skins/default/xui/es/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/es/floater_water.xml88
-rw-r--r--indra/newview/skins/default/xui/es/floater_windlight_options.xml190
-rw-r--r--indra/newview/skins/default/xui/es/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/es/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/es/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/es/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/es/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/es/panel_people.xml10
-rw-r--r--indra/newview/skins/default/xui/es/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_colors.xml4
-rw-r--r--indra/newview/skins/default/xui/es/panel_preferences_sound.xml28
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/es/panel_region_terrain.xml67
-rw-r--r--indra/newview/skins/default/xui/es/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/es/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/es/strings.xml124
-rw-r--r--indra/newview/skins/default/xui/fr/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/fr/floater_build_options.xml25
-rw-r--r--indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/fr/floater_env_settings.xml29
-rw-r--r--indra/newview/skins/default/xui/fr/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/fr/floater_model_wizard.xml262
-rw-r--r--indra/newview/skins/default/xui/fr/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/fr/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/fr/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/fr/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/fr/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/fr/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/fr/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/fr/panel_people.xml16
-rw-r--r--indra/newview/skins/default/xui/fr/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/fr/panel_places.xml4
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/fr/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/fr/panel_region_terrain.xml63
-rw-r--r--indra/newview/skins/default/xui/fr/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/fr/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/fr/strings.xml124
-rw-r--r--indra/newview/skins/default/xui/it/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/it/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/it/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/it/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/it/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/it/floater_env_settings.xml29
-rw-r--r--indra/newview/skins/default/xui/it/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/it/floater_model_wizard.xml262
-rw-r--r--indra/newview/skins/default/xui/it/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/it/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/it/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/it/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/it/floater_water.xml95
-rw-r--r--indra/newview/skins/default/xui/it/floater_windlight_options.xml190
-rw-r--r--indra/newview/skins/default/xui/it/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/it/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/it/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/it/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/it/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/it/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/it/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/it/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/it/panel_region_terrain.xml65
-rw-r--r--indra/newview/skins/default/xui/it/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/it/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/it/strings.xml126
-rw-r--r--indra/newview/skins/default/xui/ja/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/ja/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/ja/floater_env_settings.xml25
-rw-r--r--indra/newview/skins/default/xui/ja/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/ja/floater_model_wizard.xml262
-rw-r--r--indra/newview/skins/default/xui/ja/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tools.xml84
-rw-r--r--indra/newview/skins/default/xui/ja/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/ja/floater_water.xml70
-rw-r--r--indra/newview/skins/default/xui/ja/floater_windlight_options.xml189
-rw-r--r--indra/newview/skins/default/xui/ja/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/ja/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/notifications.xml77
-rw-r--r--indra/newview/skins/default/xui/ja/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/ja/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/ja/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/ja/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/ja/panel_region_terrain.xml74
-rw-r--r--indra/newview/skins/default/xui/ja/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/ja/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/ja/strings.xml122
-rw-r--r--indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml94
-rw-r--r--indra/newview/skins/default/xui/nl/floater_env_settings.xml24
-rw-r--r--indra/newview/skins/default/xui/nl/floater_water.xml89
-rw-r--r--indra/newview/skins/default/xui/nl/floater_windlight_options.xml190
-rw-r--r--indra/newview/skins/default/xui/nl/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/nl/strings.xml11
-rw-r--r--indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml96
-rw-r--r--indra/newview/skins/default/xui/pl/floater_env_settings.xml28
-rw-r--r--indra/newview/skins/default/xui/pl/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/pl/floater_water.xml103
-rw-r--r--indra/newview/skins/default/xui/pl/floater_windlight_options.xml228
-rw-r--r--indra/newview/skins/default/xui/pl/menu_viewer.xml1
-rw-r--r--indra/newview/skins/default/xui/pl/notifications.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/pl/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/pl/strings.xml9
-rw-r--r--indra/newview/skins/default/xui/pt/floater_about_land.xml14
-rw-r--r--indra/newview/skins/default/xui/pt/floater_build_options.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml67
-rw-r--r--indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml35
-rw-r--r--indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml104
-rw-r--r--indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml143
-rw-r--r--indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml72
-rw-r--r--indra/newview/skins/default/xui/pt/floater_env_settings.xml27
-rw-r--r--indra/newview/skins/default/xui/pt/floater_environment_settings.xml36
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_preview.xml51
-rw-r--r--indra/newview/skins/default/xui/pt/floater_model_wizard.xml270
-rw-r--r--indra/newview/skins/default/xui/pt/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tools.xml50
-rw-r--r--indra/newview/skins/default/xui/pt/floater_voice_effect.xml108
-rw-r--r--indra/newview/skins/default/xui/pt/floater_water.xml86
-rw-r--r--indra/newview/skins/default/xui/pt/floater_windlight_options.xml187
-rw-r--r--indra/newview/skins/default/xui/pt/menu_login.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/menu_viewer.xml22
-rw-r--r--indra/newview/skins/default/xui/pt/menu_wearing_gear.xml5
-rw-r--r--indra/newview/skins/default/xui/pt/notifications.xml76
-rw-r--r--indra/newview/skins/default/xui/pt/panel_edit_pick.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_outfits_list.xml6
-rw-r--r--indra/newview/skins/default/xui/pt/panel_people.xml8
-rw-r--r--indra/newview/skins/default/xui/pt/panel_place_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml13
-rw-r--r--indra/newview/skins/default/xui/pt/panel_preferences_sound.xml26
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_environment.xml33
-rw-r--r--indra/newview/skins/default/xui/pt/panel_region_terrain.xml65
-rw-r--r--indra/newview/skins/default/xui/pt/panel_sound_devices.xml12
-rw-r--r--indra/newview/skins/default/xui/pt/sidepanel_inventory.xml32
-rw-r--r--indra/newview/skins/default/xui/pt/strings.xml126
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_about_land.xml46
-rw-r--r--indra/newview/skins/default/xui/zh/floater_animation_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_auction.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_avatar_picker.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_avatar_textures.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/floater_bulk_perms.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/floater_bumps.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_currency.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_land.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_buy_object.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_camera.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/floater_choose_group.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_display_name.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_env_settings.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_gesture.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_god_tools.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_land_holdings.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_moveview.xml24
-rw-r--r--indra/newview/skins/default/xui/zh/floater_mute_object.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_pay.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_pay_object.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_perm_prefs.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_gesture.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_notecard.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_preview_sound.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_publish_classified.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_region_debug_console.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_preview.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_script_queue.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_search.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/floater_settings_debug.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_stats.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_tools.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/floater_top_objects.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/floater_voice_controls.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_web_content.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/floater_windlight_options.xml60
-rw-r--r--indra/newview/skins/default/xui/zh/floater_world_map.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_group.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/inspect_remote_object.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_other.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_attachment_self.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_other.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_avatar_self.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_gesture_gear.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_group_plus.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory_add.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_outfit_gear.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_participant_list.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/menu_place_add_button.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/menu_url_group.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/menu_viewer.xml69
-rw-r--r--indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types.xml34
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types_linux.xml28
-rw-r--r--indra/newview/skins/default/xui/zh/mime_types_mac.xml40
-rw-r--r--indra/newview/skins/default/xui/zh/notifications.xml230
-rw-r--r--indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_classified_info.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_alpha.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_classified.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_physics.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_shoes.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_edit_wearable.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_control_panel.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_general.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml16
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_invite.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_land_money.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_notices.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_notify.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_group_roles.xml26
-rw-r--r--indra/newview/skins/default/xui/zh/panel_landmarks.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_general.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_media_settings_security.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_navigation_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_nearby_media.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_notes.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_people.xml42
-rw-r--r--indra/newview/skins/default/xui/zh/panel_picks.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_place_profile.xml32
-rw-r--r--indra/newview/skins/default/xui/zh/panel_places.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_chat.xml10
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_general.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml74
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_move.xml12
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_setup.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_preferences_sound.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_profile.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_covenant.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_debug.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_estate.xml8
-rw-r--r--indra/newview/skins/default/xui/zh/panel_region_general.xml18
-rw-r--r--indra/newview/skins/default/xui/zh/panel_script_ed.xml6
-rw-r--r--indra/newview/skins/default/xui/zh/panel_side_tray.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/panel_status_bar.xml4
-rw-r--r--indra/newview/skins/default/xui/zh/panel_world_map.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/role_actions.xml14
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_item_info.xml2
-rw-r--r--indra/newview/skins/default/xui/zh/sidepanel_task_info.xml22
-rw-r--r--indra/newview/skins/default/xui/zh/strings.xml440
-rw-r--r--indra/newview/skins/default/xui/zh/teleport_strings.xml18
-rw-r--r--indra/newview/skins/minimal/xui/da/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/da/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/de/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/minimal/xui/de/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/en/floater_help_browser.xml11
-rw-r--r--indra/newview/skins/minimal/xui/en/floater_web_content.xml11
-rw-r--r--indra/newview/skins/minimal/xui/en/main_view.xml4
-rw-r--r--indra/newview/skins/minimal/xui/en/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml242
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_login.xml30
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml2
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_people.xml6
-rw-r--r--indra/newview/skins/minimal/xui/en/panel_status_bar.xml25
-rw-r--r--indra/newview/skins/minimal/xui/en/widgets/location_input.xml8
-rw-r--r--indra/newview/skins/minimal/xui/es/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml16
-rw-r--r--indra/newview/skins/minimal/xui/es/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/fr/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/minimal/xui/fr/panel_people.xml10
-rw-r--r--indra/newview/skins/minimal/xui/it/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml16
-rw-r--r--indra/newview/skins/minimal/xui/it/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/ja/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/minimal/xui/ja/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/pl/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/pl/panel_people.xml8
-rw-r--r--indra/newview/skins/minimal/xui/pt/notifications.xml2
-rw-r--r--indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml16
-rw-r--r--indra/newview/skins/minimal/xui/pt/panel_people.xml6
-rw-r--r--indra/newview/tests/lldir_stub.cpp62
-rw-r--r--indra/newview/tests/llglslshader_stub.cpp39
-rw-r--r--indra/newview/tests/llpipeline_stub.cpp32
-rw-r--r--indra/newview/tests/llsechandler_basic_test.cpp3
-rw-r--r--indra/newview/tests/llsky_stub.cpp37
-rw-r--r--indra/newview/tests/llviewernetwork_test.cpp12
-rw-r--r--indra/newview/tests/llviewershadermgr_stub.cpp50
-rw-r--r--indra/newview/tests/llwlanimator_stub.cpp29
-rw-r--r--indra/newview/tests/llwldaycycle_stub.cpp52
-rw-r--r--indra/newview/tests/llwlparammanager_test.cpp271
-rw-r--r--indra/newview/tests/llwlparamset_stub.cpp41
-rw-r--r--indra/newview/tests/llworldmap_test.cpp1
-rw-r--r--indra/newview/viewer_manifest.py89
-rw-r--r--indra/test/io.cpp32
-rw-r--r--indra/test/lliohttpserver_tut.cpp6
-rw-r--r--indra/test/lltemplatemessagebuilder_tut.cpp2
-rw-r--r--indra/test/message_tut.cpp2
-rw-r--r--indra/test/test.cpp17
-rw-r--r--indra/test_apps/llplugintest/llmediaplugintest.cpp4
-rw-r--r--indra/viewer_components/updater/CMakeLists.txt6
-rw-r--r--indra/viewer_components/updater/llupdateinstaller.cpp4
-rw-r--r--indra/win_crash_logger/CMakeLists.txt2
-rw-r--r--indra/win_crash_logger/llcrashloggerwindows.cpp7
-rw-r--r--indra/win_crash_logger/llcrashloggerwindows.h1
-rw-r--r--indra/win_crash_logger/win_crash_logger.cpp35
1342 files changed, 55692 insertions, 49748 deletions
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index f96fe59326..39e33831d2 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -1,4 +1,3 @@
-
# -*- cmake -*-
# cmake_minimum_required should appear before any
@@ -62,7 +61,6 @@ if (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
add_subdirectory(${LIBS_CLOSED_PREFIX}copy_win_scripts)
endif (WINDOWS AND EXISTS ${LIBS_CLOSED_DIR}copy_win_scripts)
-
add_custom_target(viewer)
if (VIEWER)
add_subdirectory(${LIBS_OPEN_PREFIX}llcrashlogger)
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 2c974fb4ff..0266239454 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -171,7 +171,10 @@ if (LINUX)
add_definitions(-fvisibility=hidden)
# don't catch SIGCHLD in our base application class for the viewer - some of our 3rd party libs may need their *own* SIGCHLD handler to work. Sigh! The viewer doesn't need to catch SIGCHLD anyway.
add_definitions(-DLL_IGNORE_SIGCHLD)
- add_definitions(-march=pentium4 -mfpmath=sse)
+ if (WORD_SIZE EQUAL 32)
+ add_definitions(-march=pentium4)
+ endif (WORD_SIZE EQUAL 32)
+ add_definitions(-mfpmath=sse)
#add_definitions(-ftree-vectorize) # THIS CRASHES GCC 3.1-3.2
if (NOT STANDALONE)
# this stops us requiring a really recent glibc at runtime
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index d9efc8f40d..394db362b1 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -40,7 +40,7 @@ if(WINDOWS)
ssleay32.dll
libeay32.dll
libcollada14dom22-d.dll
- glod.dll
+ glod.dll
)
set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
@@ -71,7 +71,7 @@ if(WINDOWS)
if (MSVC80)
FIND_PATH(debug_msvc8_redist_path msvcr80d.dll
PATHS
- ${MSVC_DEBUG_REDIST_PATH}
+ ${MSVC_DEBUG_REDIST_PATH}
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
NO_DEFAULT_PATH
NO_DEFAULT_PATH
@@ -96,7 +96,7 @@ if (MSVC80)
FIND_PATH(release_msvc8_redist_path msvcr80.dll
PATHS
- ${MSVC_REDIST_PATH}
+ ${MSVC_REDIST_PATH}
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
NO_DEFAULT_PATH
NO_DEFAULT_PATH
@@ -212,11 +212,11 @@ elseif(DARWIN)
libexpat.1.5.2.dylib
libexpat.dylib
libGLOD.dylib
- libllqtwebkit.dylib
- libminizip.a
+ libllqtwebkit.dylib
+ libminizip.a
libndofdev.dylib
libexception_handler.dylib
- libcollada14dom.dylib
+ libcollada14dom.dylib
)
# fmod is statically linked on darwin
@@ -252,19 +252,19 @@ elseif(LINUX)
libaprutil-1.so.0
libatk-1.0.so
libbreakpad_client.so.0
- libcollada14dom.so
+ libcollada14dom.so
libcrypto.so.1.0.0
libdb-5.1.so
libexpat.so
libexpat.so.1
- libglod.so
+ libglod.so
libgmock_main.so
libgmock.so.0
libgmodule-2.0.so
libgobject-2.0.so
libgtest_main.so
libgtest.so.0
- libminizip.so
+ libminizip.so
libopenal.so
libopenjpeg.so
libssl.so
diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake
index cb5124812d..3586c1160a 100644
--- a/indra/cmake/FMOD.cmake
+++ b/indra/cmake/FMOD.cmake
@@ -16,15 +16,15 @@ if (FMOD)
include(FindFMOD)
else (STANDALONE)
if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
- # If the path have been specified in the arguments, use that
+ # If the path have been specified in the arguments, use that
set(FMOD_LIBRARIES ${FMOD_LIBRARY})
- MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}")
+ MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}")
else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
- # If not, we're going to try to get the package listed in autobuild.xml
- # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)
- # as accessing the private LL location will fail if you don't have the credential
- include(Prebuilt)
- use_prebuilt_binary(fmod)
+ # If not, we're going to try to get the package listed in autobuild.xml
+ # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL)
+ # as accessing the private LL location will fail if you don't have the credential
+ include(Prebuilt)
+ use_prebuilt_binary(fmod)
if (WINDOWS)
set(FMOD_LIBRARY fmod)
elseif (DARWIN)
diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake
index 45db2b6ed0..4b5fd484ae 100644
--- a/indra/cmake/FindAutobuild.cmake
+++ b/indra/cmake/FindAutobuild.cmake
@@ -21,10 +21,10 @@ IF (NOT AUTOBUILD_EXECUTABLE)
AUTOBUILD_EXECUTABLE
NAMES ${AUTOBUILD_EXE_NAMES}
PATHS
- ENV PATH
- ${CMAKE_SOURCE_DIR}/..
- ${CMAKE_SOURCE_DIR}/../..
- ${CMAKE_SOURCE_DIR}/../../..
+ ENV PATH
+ ${CMAKE_SOURCE_DIR}/..
+ ${CMAKE_SOURCE_DIR}/../..
+ ${CMAKE_SOURCE_DIR}/../../..
PATH_SUFFIXES "/autobuild/bin/"
)
@@ -33,7 +33,7 @@ IF (NOT AUTOBUILD_EXECUTABLE)
MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}")
ELSE (AUTOBUILD_EXECUTABLE)
IF (AUTOBUILD_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Could not find autobuild executable")
+ MESSAGE(FATAL_ERROR "Could not find autobuild executable")
ENDIF (AUTOBUILD_FIND_REQUIRED)
ENDIF (AUTOBUILD_EXECUTABLE)
diff --git a/indra/cmake/FindJsonCpp.cmake b/indra/cmake/FindJsonCpp.cmake
index cf84b309c1..0b056ada58 100644
--- a/indra/cmake/FindJsonCpp.cmake
+++ b/indra/cmake/FindJsonCpp.cmake
@@ -24,8 +24,8 @@ EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
# Try to find a library that was compiled with the same compiler version as we currently use.
SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so)
IF (STANDALONE)
- # On standalone, assume that the system installed library was compiled with the used compiler.
- SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so)
+ # On standalone, assume that the system installed library was compiled with the used compiler.
+ SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so)
ENDIF (STANDALONE)
FIND_LIBRARY(JSONCPP_LIBRARY
NAMES ${JSONCPP_NAMES}
diff --git a/indra/cmake/FindLLQtWebkit.cmake b/indra/cmake/FindLLQtWebkit.cmake
index 4bf5f5cb73..2f666d3bf0 100644
--- a/indra/cmake/FindLLQtWebkit.cmake
+++ b/indra/cmake/FindLLQtWebkit.cmake
@@ -35,7 +35,7 @@ find_path(LLQTWEBKIT_INCLUDE_DIR llqtwebkit.h NO_SYSTEM_ENVIRONMENT_PATH HINTS $
find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS})
-if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
+if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config.
set(LLQTWEBKIT_LIBRARIES llqtwebkit)
get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH)
endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND)
diff --git a/indra/cmake/FindZLIB.cmake b/indra/cmake/FindZLIB.cmake
index 6d630f1ba9..03a7db9d6f 100644
--- a/indra/cmake/FindZLIB.cmake
+++ b/indra/cmake/FindZLIB.cmake
@@ -30,12 +30,12 @@ endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR)
if (ZLIB_FOUND)
if (NOT ZLIB_FIND_QUIETLY)
- message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}")
- SET(ZLIB_FIND_QUIETLY TRUE)
+ message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}")
+ SET(ZLIB_FIND_QUIETLY TRUE)
endif (NOT ZLIB_FIND_QUIETLY)
else (ZLIB_FOUND)
if (ZLIB_FIND_REQUIRED)
- message(FATAL_ERROR "Could not find ZLIB library")
+ message(FATAL_ERROR "Could not find ZLIB library")
endif (ZLIB_FIND_REQUIRED)
endif (ZLIB_FOUND)
diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake
index 06d6d847a0..c4c96a9af7 100644
--- a/indra/cmake/GoogleMock.cmake
+++ b/indra/cmake/GoogleMock.cmake
@@ -8,7 +8,7 @@ set(GOOGLEMOCK_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include)
if (LINUX)
- # VWR-24366: gmock is underlinked, it needs gtest.
+ # VWR-24366: gmock is underlinked, it needs gtest.
set(GOOGLEMOCK_LIBRARIES
gmock -Wl,--no-as-needed
gtest -Wl,--as-needed)
diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake
index 8740e36753..d9f91193be 100644
--- a/indra/cmake/GooglePerfTools.cmake
+++ b/indra/cmake/GooglePerfTools.cmake
@@ -14,7 +14,7 @@ else (STANDALONE)
if (LINUX)
use_prebuilt_binary(tcmalloc)
set(TCMALLOC_LIBRARIES
- tcmalloc)
+ tcmalloc)
set(PROFILER_LIBRARIES profiler)
set(GOOGLE_PERFTOOLS_INCLUDE_DIR
${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake
index 7ee404b9bd..399cb332dd 100644
--- a/indra/cmake/LLPlugin.cmake
+++ b/indra/cmake/LLPlugin.cmake
@@ -8,7 +8,7 @@ set(LLPLUGIN_INCLUDE_DIRS
if (LINUX)
# In order to support using ld.gold on linux, we need to explicitely
# specify all libraries that llplugin uses.
- set(LLPLUGIN_LIBRARIES llplugin pthread)
+ set(LLPLUGIN_LIBRARIES llplugin pthread)
else (LINUX)
- set(LLPLUGIN_LIBRARIES llplugin)
+ set(LLPLUGIN_LIBRARIES llplugin)
endif (LINUX)
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
index e68d16ed08..f15a2c2649 100644
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -10,7 +10,7 @@ set(LLPRIMITIVE_INCLUDE_DIRS
${LIBS_OPEN_DIR}/llprimitive
)
if (WINDOWS)
- set(LLPRIMITIVE_LIBRARIES
+ set(LLPRIMITIVE_LIBRARIES
debug llprimitive
optimized llprimitive
debug libcollada14dom22-d
diff --git a/indra/cmake/LScript.cmake b/indra/cmake/LScript.cmake
index 86bfcb7440..21e78fc2c0 100644
--- a/indra/cmake/LScript.cmake
+++ b/indra/cmake/LScript.cmake
@@ -13,4 +13,4 @@ set(LSCRIPT_LIBRARIES
lscript_library
)
-set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono) \ No newline at end of file
+set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono)
diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake
index 7a463d1190..be6fe415f2 100644
--- a/indra/cmake/NDOF.cmake
+++ b/indra/cmake/NDOF.cmake
@@ -5,19 +5,19 @@ set(NDOF ON CACHE BOOL "Use NDOF space navigator joystick library.")
if (NDOF)
if (STANDALONE)
- set(NDOF_FIND_REQUIRED ON)
- include(FindNDOF)
+ set(NDOF_FIND_REQUIRED ON)
+ include(FindNDOF)
else (STANDALONE)
- use_prebuilt_binary(ndofdev)
+ use_prebuilt_binary(ndofdev)
- if (WINDOWS)
- set(NDOF_LIBRARY libndofdev)
- elseif (DARWIN OR LINUX)
- set(NDOF_LIBRARY ndofdev)
- endif (WINDOWS)
+ if (WINDOWS)
+ set(NDOF_LIBRARY libndofdev)
+ elseif (DARWIN OR LINUX)
+ set(NDOF_LIBRARY ndofdev)
+ endif (WINDOWS)
- set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev)
- set(NDOF_FOUND 1)
+ set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev)
+ set(NDOF_FOUND 1)
endif (STANDALONE)
endif (NDOF)
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 7131445464..91b49e75d7 100644
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -8,21 +8,21 @@ if (STANDALONE)
include(${QT_USE_FILE})
set(QTDIR $ENV{QTDIR})
if (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin")
- message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; "
- "Qt is found by looking for qmake in your PATH. "
- "Please set your PATH such that 'qmake' is found in \$QTDIR/bin, "
- "or unset QTDIR if the found Qt is correct.")
- endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin")
+ message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; "
+ "Qt is found by looking for qmake in your PATH. "
+ "Please set your PATH such that 'qmake' is found in \$QTDIR/bin, "
+ "or unset QTDIR if the found Qt is correct.")
+ endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin")
find_package(LLQtWebkit REQUIRED QUIET)
# Add the plugins.
set(QT_PLUGIN_LIBRARIES)
foreach(qlibname qgif qjpeg)
- find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH)
- if (QT_PLUGIN_${qlibname})
- list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}})
- else (QT_PLUGIN_${qtlibname})
- message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!")
- endif (QT_PLUGIN_${qlibname})
+ find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH)
+ if (QT_PLUGIN_${qlibname})
+ list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}})
+ else (QT_PLUGIN_${qtlibname})
+ message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!")
+ endif (QT_PLUGIN_${qlibname})
endforeach(qlibname)
# qjpeg depends on libjpeg
list(APPEND QT_PLUGIN_LIBRARIES jpeg)
diff --git a/indra/fix-incredibuild.py b/indra/fix-incredibuild.py
index b96b00dc85..98f16e9d97 100644
--- a/indra/fix-incredibuild.py
+++ b/indra/fix-incredibuild.py
@@ -1,3 +1,26 @@
+#!/usr/bin/env python
+##
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
+
import sys
import os
import glob
diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt
index a687e60610..af5c9fb2e7 100644
--- a/indra/integration_tests/llimage_libtest/CMakeLists.txt
+++ b/indra/integration_tests/llimage_libtest/CMakeLists.txt
@@ -59,15 +59,15 @@ endif (DARWIN)
# Libraries on which this application depends on
# Sort by high-level to low-level
target_link_libraries(llimage_libtest
- ${LLCOMMON_LIBRARIES}
- ${LLVFS_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
+ ${LLVFS_LIBRARIES}
${LLIMAGE_LIBRARIES}
${LLKDU_LIBRARIES}
${KDU_LIBRARY}
${LLIMAGEJ2COJ_LIBRARIES}
${OS_LIBRARIES}
)
-
+
if (DARWIN)
# Path inside the app bundle where we'll need to copy libraries
set(LLIMAGE_LIBTEST_DESTINATION_DIR
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
index 976aae08bb..48e876429d 100644
--- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
+++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
@@ -38,6 +38,7 @@
#include "llimagetga.h"
#include "llimagej2c.h"
#include "lldir.h"
+#include "lldiriterator.h"
// system libraries
#include <iostream>
@@ -201,7 +202,8 @@ void store_input_file(std::list<std::string> &input_filenames, const std::string
{
// If file name is a pattern, iterate to get each file name and store
std::string next_name;
- while (gDirUtilp->getNextFileInDir(dir,name,next_name))
+ LLDirIterator iter(dir, name);
+ while (iter.next(next_name))
{
std::string file_name = dir + gDirUtilp->getDirDelimiter() + next_name;
input_filenames.push_back(file_name);
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
index 0d0d9fbff6..cbf6021119 100644
--- a/indra/integration_tests/llui_libtest/llwidgetreg.cpp
+++ b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
@@ -49,6 +49,7 @@
#include "lltabcontainer.h"
#include "lltextbox.h"
#include "lltexteditor.h"
+#include "lltimectrl.h"
#include "llflyoutbutton.h"
#include "llfiltereditor.h"
#include "lllayoutstack.h"
@@ -92,6 +93,7 @@ void LLWidgetReg::initClass(bool register_widgets)
//LLDefaultChildRegistry::Register<LLPlaceHolderPanel> placeholder("placeholder");
LLDefaultChildRegistry::Register<LLTabContainer> tab_container("tab_container");
LLDefaultChildRegistry::Register<LLTextBox> text("text");
+ LLDefaultChildRegistry::Register<LLTimeCtrl> time("time");
LLDefaultChildRegistry::Register<LLTextEditor> simple_text_editor("simple_text_editor");
LLDefaultChildRegistry::Register<LLUICtrl> ui_ctrl("ui_ctrl");
LLDefaultChildRegistry::Register<LLStatView> stat_view("stat_view");
diff --git a/indra/lib/python/indra/base/cllsd_test.py b/indra/lib/python/indra/base/cllsd_test.py
index 0b20d99d80..1f06898ffd 100644
--- a/indra/lib/python/indra/base/cllsd_test.py
+++ b/indra/lib/python/indra/base/cllsd_test.py
@@ -1,3 +1,25 @@
+#!/usr/bin/python
+##
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
from indra.base import llsd, lluuid
from datetime import datetime
import cllsd
diff --git a/indra/lib/python/indra/base/lluuid.py b/indra/lib/python/indra/base/lluuid.py
index 1cdd8e915b..369ae4e92f 100644
--- a/indra/lib/python/indra/base/lluuid.py
+++ b/indra/lib/python/indra/base/lluuid.py
@@ -163,7 +163,7 @@ class UUID(object):
def setFromMemoryDump(self, gdb_string):
"""
We expect to get gdb_string as four hex units. eg:
- 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2
+ 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2
Which will be translated to:
db547d14-1b3f4bc3-9b984f71-d22f890a
Returns self.
@@ -187,7 +187,7 @@ class UUID(object):
def getAsString(self):
"""
Return a different string representation of the form
- AAAAAAAA-AAAABBBB-BBBBBBBB-BBCCCCCC (a 128-bit number in hex)
+ AAAAAAAA-AAAABBBB-BBBBBBBB-BBCCCCCC (a 128-bit number in hex)
where A=network address, B=timestamp, C=random.
"""
i1 = _binstr2int(self._bits[0:4])
@@ -233,7 +233,7 @@ NULL = UUID()
def printTranslatedMemory(four_hex_uints):
"""
We expect to get the string as four hex units. eg:
- 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2
+ 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2
Which will be translated to:
db547d14-1b3f4bc3-9b984f71-d22f890a
"""
diff --git a/indra/lib/python/indra/ipc/httputil.py b/indra/lib/python/indra/ipc/httputil.py
index c4ac0a379d..d53f34a771 100644
--- a/indra/lib/python/indra/ipc/httputil.py
+++ b/indra/lib/python/indra/ipc/httputil.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
import warnings
diff --git a/indra/lib/python/indra/ipc/russ.py b/indra/lib/python/indra/ipc/russ.py
index 35d8afb158..ac780f128b 100644
--- a/indra/lib/python/indra/ipc/russ.py
+++ b/indra/lib/python/indra/ipc/russ.py
@@ -110,7 +110,7 @@ def format(format_str, context):
def _find_sub_matches(format_str):
"""@brief Find all of the substitution matches.
-@param format_str the RUSS conformant format string.
+@param format_str the RUSS conformant format string.
@return Returns an array of depths of arrays of positional matches in input.
"""
depth = 0
diff --git a/indra/lib/python/indra/ipc/siesta_test.py b/indra/lib/python/indra/ipc/siesta_test.py
index 177ea710d1..a35eed2460 100644
--- a/indra/lib/python/indra/ipc/siesta_test.py
+++ b/indra/lib/python/indra/ipc/siesta_test.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
from indra.base import llsd, lluuid
from indra.ipc import siesta
import datetime, math, unittest
diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py
index 0bc21a35f8..e956383cca 100644
--- a/indra/lib/python/uuid.py
+++ b/indra/lib/python/uuid.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+## $LicenseInfo:firstyear=2011&license=viewerlgpl$
+## Second Life Viewer Source Code
+## Copyright (C) 2011, Linden Research, Inc.
+##
+## This library is free software; you can redistribute it and/or
+## modify it under the terms of the GNU Lesser General Public
+## License as published by the Free Software Foundation;
+## version 2.1 of the License only.
+##
+## This library is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public
+## License along with this library; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+##
+## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+## $/LicenseInfo$
r"""UUID objects (universally unique identifiers) according to RFC 4122.
This module provides immutable UUID objects (class UUID) and the functions
diff --git a/indra/linux_crash_logger/linux_crash_logger.cpp b/indra/linux_crash_logger/linux_crash_logger.cpp
index 8beae555fb..99d0ad7e14 100644
--- a/indra/linux_crash_logger/linux_crash_logger.cpp
+++ b/indra/linux_crash_logger/linux_crash_logger.cpp
@@ -24,16 +24,24 @@
* $/LicenseInfo$
*/
+#include "linden_common.h"
#include "llcrashloggerlinux.h"
int main(int argc, char **argv)
{
+ llinfos << "Starting crash reporter." << llendl;
+
LLCrashLoggerLinux app;
app.parseCommandOptions(argc, argv);
- app.init();
+
+ if (! app.init())
+ {
+ llwarns << "Unable to initialize application." << llendl;
+ return 1;
+ }
+
app.mainLoop();
app.cleanup();
+ llinfos << "Crash reporter finished normally." << llendl;
return 0;
}
-
-
diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp
index 7449c6426f..7316717193 100644
--- a/indra/linux_crash_logger/llcrashloggerlinux.cpp
+++ b/indra/linux_crash_logger/llcrashloggerlinux.cpp
@@ -30,8 +30,6 @@
#include "linden_common.h"
-#include "boost/tokenizer.hpp"
-
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
#include "llerror.h"
#include "llfile.h"
diff --git a/indra/llaudio/llaudioengine_fmod.cpp b/indra/llaudio/llaudioengine_fmod.cpp
index a40de9fa68..88dfdb9c24 100644
--- a/indra/llaudio/llaudioengine_fmod.cpp
+++ b/indra/llaudio/llaudioengine_fmod.cpp
@@ -673,7 +673,7 @@ bool LLAudioBufferFMOD::loadWAV(const std::string& filename)
return false;
}
- if (!LLAPRFile::isExist(filename, NULL, LL_APR_RPB))
+ if (!LLAPRFile::isExist(filename, LL_APR_RPB))
{
// File not found, abort.
return false;
diff --git a/indra/llaudio/llvorbisencode.cpp b/indra/llaudio/llvorbisencode.cpp
index 0e0c80a456..44eeea0ca4 100644
--- a/indra/llaudio/llvorbisencode.cpp
+++ b/indra/llaudio/llvorbisencode.cpp
@@ -82,8 +82,7 @@ S32 check_for_invalid_wav_formats(const std::string& in_fname, std::string& erro
error_msg.clear();
//********************************
- LLAPRFile infile ;
- infile.open(in_fname,LL_APR_RB);
+ LLAPRFile infile(in_fname, LL_APR_RB);
//********************************
if (!infile.getFileHandle())
{
@@ -233,8 +232,7 @@ S32 encode_vorbis_file(const std::string& in_fname, const std::string& out_fname
S32 data_left = 0;
- LLAPRFile infile ;
- infile.open(in_fname,LL_APR_RB);
+ LLAPRFile infile(in_fname,LL_APR_RB);
if (!infile.getFileHandle())
{
llwarns << "Couldn't open temporary ogg file for writing: " << in_fname
@@ -242,8 +240,7 @@ S32 encode_vorbis_file(const std::string& in_fname, const std::string& out_fname
return(LLVORBISENC_SOURCE_OPEN_ERR);
}
- LLAPRFile outfile ;
- outfile.open(out_fname,LL_APR_WPB);
+ LLAPRFile outfile(out_fname, LL_APR_WPB);
if (!outfile.getFileHandle())
{
llwarns << "Couldn't open upload sound file for reading: " << in_fname
diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt
index 6eb154458d..a1712699eb 100644
--- a/indra/llcharacter/CMakeLists.txt
+++ b/indra/llcharacter/CMakeLists.txt
@@ -79,11 +79,11 @@ add_library (llcharacter ${llcharacter_SOURCE_FILES})
# Add tests
if (LL_TESTS)
- include(LLAddBuildTest)
- # UNIT TESTS
- SET(llcharacter_TEST_SOURCE_FILES
- lljoint.cpp
- )
- LL_ADD_PROJECT_UNIT_TESTS(llcharacter "${llcharacter_TEST_SOURCE_FILES}")
+ include(LLAddBuildTest)
+ # UNIT TESTS
+ SET(llcharacter_TEST_SOURCE_FILES
+ lljoint.cpp
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llcharacter "${llcharacter_TEST_SOURCE_FILES}")
endif (LL_TESTS)
diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp
index f3cf950afa..c3c7f03247 100644
--- a/indra/llcharacter/llbvhloader.cpp
+++ b/indra/llcharacter/llbvhloader.cpp
@@ -219,8 +219,7 @@ ELoadStatus LLBVHLoader::loadTranslationTable(const char *fileName)
//--------------------------------------------------------------------
std::string path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName);
- LLAPRFile infile ;
- infile.open(path, LL_APR_R);
+ LLAPRFile infile(path, LL_APR_R);
apr_file_t *fp = infile.getFileHandle();
if (!fp)
return E_ST_NO_XLT_FILE;
diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp
index 5f84be2c5d..c9fb8534f1 100644
--- a/indra/llcharacter/llcharacter.cpp
+++ b/indra/llcharacter/llcharacter.cpp
@@ -38,7 +38,7 @@
LLStringTable LLCharacter::sVisualParamNames(1024);
std::vector< LLCharacter* > LLCharacter::sInstances;
-
+BOOL LLCharacter::sAllowInstancesChange = TRUE ;
//-----------------------------------------------------------------------------
// LLCharacter()
@@ -51,8 +51,10 @@ LLCharacter::LLCharacter()
mAppearanceSerialNum( 0 ),
mSkeletonSerialNum( 0 )
{
- mMotionController.setCharacter( this );
+ llassert_always(sAllowInstancesChange) ;
sInstances.push_back(this);
+
+ mMotionController.setCharacter( this );
mPauseRequest = new LLPauseRequestHandle();
}
@@ -62,18 +64,29 @@ LLCharacter::LLCharacter()
// Class Destructor
//-----------------------------------------------------------------------------
LLCharacter::~LLCharacter()
-{
+{
for (LLVisualParam *param = getFirstVisualParam();
param;
param = getNextVisualParam())
{
delete param;
}
- std::vector<LLCharacter*>::iterator iter = std::find(sInstances.begin(), sInstances.end(), this);
- if (iter != sInstances.end())
+
+ U32 i ;
+ U32 size = sInstances.size() ;
+ for(i = 0 ; i < size ; i++)
{
- sInstances.erase(iter);
+ if(sInstances[i] == this)
+ {
+ break ;
+ }
}
+
+ llassert_always(i < size) ;
+
+ llassert_always(sAllowInstancesChange) ;
+ sInstances[i] = sInstances[size - 1] ;
+ sInstances.pop_back() ;
}
diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
index a6347fcc3c..e81a27c2bc 100644
--- a/indra/llcharacter/llcharacter.h
+++ b/indra/llcharacter/llcharacter.h
@@ -266,6 +266,7 @@ public:
void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; }
static std::vector< LLCharacter* > sInstances;
+ static BOOL sAllowInstancesChange ; //debug use
protected:
LLMotionController mMotionController;
diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp
index 9df033a4ca..c6f45bffa2 100644
--- a/indra/llcharacter/llkeyframemotion.cpp
+++ b/indra/llcharacter/llkeyframemotion.cpp
@@ -467,13 +467,15 @@ LLPointer<LLJointState>& LLKeyframeMotion::getJointState(U32 index)
}
//-----------------------------------------------------------------------------
-// getJoin()
+// getJoint()
//-----------------------------------------------------------------------------
LLJoint* LLKeyframeMotion::getJoint(U32 index)
{
llassert_always (index < mJointStates.size());
LLJoint* joint = mJointStates[index]->getJoint();
- llassert_always (joint);
+
+ //Commented out 06-28-11 by Aura.
+ //llassert_always (joint);
return joint;
}
@@ -821,7 +823,11 @@ void LLKeyframeMotion::initializeConstraint(JointConstraint* constraint)
S32 joint_num;
LLVector3 source_pos = mCharacter->getVolumePos(shared_data->mSourceConstraintVolume, shared_data->mSourceConstraintOffset);
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[0]);
-
+ if ( !cur_joint )
+ {
+ return;
+ }
+
F32 source_pos_offset = dist_vec(source_pos, cur_joint->getWorldPosition());
constraint->mTotalLength = constraint->mJointLengths[0] = dist_vec(cur_joint->getParent()->getWorldPosition(), source_pos);
@@ -872,6 +878,10 @@ void LLKeyframeMotion::activateConstraint(JointConstraint* constraint)
for (joint_num = 1; joint_num < shared_data->mChainLength; joint_num++)
{
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+ if ( !cur_joint )
+ {
+ return;
+ }
constraint->mPositions[joint_num] = (cur_joint->getWorldPosition() - mPelvisp->getWorldPosition()) * ~mPelvisp->getWorldRotation();
}
@@ -932,6 +942,11 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
}
LLJoint* root_joint = getJoint(shared_data->mJointStateIndices[shared_data->mChainLength]);
+ if (! root_joint)
+ {
+ return;
+ }
+
LLVector3 root_pos = root_joint->getWorldPosition();
// LLQuaternion root_rot =
root_joint->getParent()->getWorldRotation();
@@ -943,6 +958,11 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
for (joint_num = 0; joint_num <= shared_data->mChainLength; joint_num++)
{
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+ if (!cur_joint)
+ {
+ return;
+ }
+
if (joint_mask[cur_joint->getJointNum()] >= (0xff >> (7 - getPriority())))
{
// skip constraint
@@ -1033,7 +1053,14 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
if (shared_data->mChainLength)
{
- LLQuaternion end_rot = getJoint(shared_data->mJointStateIndices[0])->getWorldRotation();
+ LLJoint* end_joint = getJoint(shared_data->mJointStateIndices[0]);
+
+ if (!end_joint)
+ {
+ return;
+ }
+
+ LLQuaternion end_rot = end_joint->getWorldRotation();
// slam start and end of chain to the proper positions (rest of chain stays put)
positions[0] = lerp(keyframe_source_pos, target_pos, weight);
@@ -1042,7 +1069,14 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
// grab keyframe-specified positions of joints
for (joint_num = 1; joint_num < shared_data->mChainLength; joint_num++)
{
- LLVector3 kinematic_position = getJoint(shared_data->mJointStateIndices[joint_num])->getWorldPosition() +
+ LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+
+ if (!cur_joint)
+ {
+ return;
+ }
+
+ LLVector3 kinematic_position = cur_joint->getWorldPosition() +
(source_to_target * constraint->mJointLengthFractions[joint_num]);
// convert intermediate joint positions to world coordinates
@@ -1088,7 +1122,17 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
for (joint_num = shared_data->mChainLength; joint_num > 0; joint_num--)
{
LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+
+ if (!cur_joint)
+ {
+ return;
+ }
LLJoint* child_joint = getJoint(shared_data->mJointStateIndices[joint_num - 1]);
+ if (!child_joint)
+ {
+ return;
+ }
+
LLQuaternion parent_rot = cur_joint->getParent()->getWorldRotation();
LLQuaternion cur_rot = cur_joint->getWorldRotation();
@@ -1122,7 +1166,6 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
cur_joint->setRotation(target_rot);
}
- LLJoint* end_joint = getJoint(shared_data->mJointStateIndices[0]);
LLQuaternion end_local_rot = end_rot * ~end_joint->getParent()->getWorldRotation();
if (weight == 1.f)
@@ -1150,7 +1193,13 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
//reset old joint rots
for (joint_num = 0; joint_num <= shared_data->mChainLength; joint_num++)
{
- getJoint(shared_data->mJointStateIndices[joint_num])->setRotation(old_rots[joint_num]);
+ LLJoint* cur_joint = getJoint(shared_data->mJointStateIndices[joint_num]);
+ if (!cur_joint)
+ {
+ return;
+ }
+
+ cur_joint->setRotation(old_rots[joint_num]);
}
}
// simple positional constraint (pelvis only)
@@ -1775,7 +1824,15 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
constraintp->mJointStateIndices[i] = -1;
for (U32 j = 0; j < mJointMotionList->getNumJointMotions(); j++)
{
- if(getJoint(j) == joint)
+ LLJoint* constraint_joint = getJoint(j);
+
+ if ( !constraint_joint )
+ {
+ llwarns << "Invalid joint " << j << llendl;
+ return FALSE;
+ }
+
+ if(constraint_joint == joint)
{
constraintp->mJointStateIndices[i] = (S32)j;
break;
diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h
index 1fe9af40b3..b1422b2b90 100644
--- a/indra/llcharacter/llkeyframemotion.h
+++ b/indra/llcharacter/llkeyframemotion.h
@@ -70,7 +70,7 @@ public:
private:
// private helper functions to wrap some asserts
LLPointer<LLJointState>& getJointState(U32 index);
- LLJoint* getJoint(U32 index);
+ LLJoint* getJoint(U32 index );
public:
//-------------------------------------------------------------------------
diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp
index 82fe8971f5..c3d5dec875 100644
--- a/indra/llcharacter/llkeyframemotionparam.cpp
+++ b/indra/llcharacter/llkeyframemotionparam.cpp
@@ -351,8 +351,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
// open the file
//-------------------------------------------------------------------------
S32 fileSize = 0;
- LLAPRFile infile ;
- infile.open(path, LL_APR_R, NULL, &fileSize);
+ LLAPRFile infile(path, LL_APR_R, &fileSize);
apr_file_t* fp = infile.getFileHandle() ;
if (!fp || fileSize == 0)
{
diff --git a/indra/llcharacter/llstatemachine.cpp b/indra/llcharacter/llstatemachine.cpp
index e0454131a5..dcc4ff5f0e 100644
--- a/indra/llcharacter/llstatemachine.cpp
+++ b/indra/llcharacter/llstatemachine.cpp
@@ -204,8 +204,7 @@ LLFSMState* LLStateDiagram::getState(U32 state_id)
BOOL LLStateDiagram::saveDotFile(const std::string& filename)
{
- LLAPRFile outfile ;
- outfile.open(filename, LL_APR_W);
+ LLAPRFile outfile(filename, LL_APR_W);
apr_file_t* dot_file = outfile.getFileHandle() ;
if (!dot_file)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 9910281b64..cc6bddc4da 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -31,6 +31,7 @@ set(llcommon_SOURCE_FILES
llallocator_heap_profile.cpp
llapp.cpp
llapr.cpp
+ llaprpool.cpp
llassettype.cpp
llavatarname.cpp
llbase32.cpp
@@ -80,6 +81,7 @@ set(llcommon_SOURCE_FILES
llrand.cpp
llrefcount.cpp
llrun.cpp
+ llscopedvolatileaprpool.h
llsd.cpp
llsdserialize.cpp
llsdserialize_xml.cpp
@@ -122,6 +124,7 @@ set(llcommon_HEADER_FILES
llavatarname.h
llapp.h
llapr.h
+ llaprpool.h
llassettype.h
llassoclist.h
llavatarconstants.h
@@ -317,7 +320,8 @@ if (LL_TESTS)
LL_ADD_INTEGRATION_TEST(lllazy "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llprocessor "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llrand "" "${test_libs}")
- LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llsdserialize "" "${test_libs}"
+ "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/tests/setpython.py")
LL_ADD_INTEGRATION_TEST(llstring "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(lltreeiterators "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}")
diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h
index d0f287657e..0745696ef3 100644
--- a/indra/llcommon/indra_constants.h
+++ b/indra/llcommon/indra_constants.h
@@ -387,8 +387,6 @@ const S32 MAP_SIM_RETURN_NULL_SIMS = 0x00010000;
const S32 MAP_SIM_PRELUDE = 0x00020000;
// Crash reporter behavior
-const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
-const char* const CRASH_BEHAVIOR_SETTING = "CrashSubmitBehavior";
const S32 CRASH_BEHAVIOR_ASK = 0;
const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
const S32 CRASH_BEHAVIOR_NEVER_SEND = 2;
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index ed192a9975..a8b7106078 100644
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -137,10 +137,6 @@ void LLApp::commonCtor()
mOptions.append(sd);
}
- // Make sure we clean up APR when we exit
- // Don't need to do this if we're cleaning up APR in the destructor
- //atexit(ll_cleanup_apr);
-
// Set the application to this instance.
sApplication = this;
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
index d1c44c9403..1e4a51102e 100644
--- a/indra/llcommon/llapr.cpp
+++ b/indra/llcommon/llapr.cpp
@@ -29,212 +29,8 @@
#include "linden_common.h"
#include "llapr.h"
#include "apr_dso.h"
+#include "llscopedvolatileaprpool.h"
-apr_pool_t *gAPRPoolp = NULL; // Global APR memory pool
-LLVolatileAPRPool *LLAPRFile::sAPRFilePoolp = NULL ; //global volatile APR memory pool.
-apr_thread_mutex_t *gLogMutexp = NULL;
-apr_thread_mutex_t *gCallStacksLogMutexp = NULL;
-
-const S32 FULL_VOLATILE_APR_POOL = 1024 ; //number of references to LLVolatileAPRPool
-
-void ll_init_apr()
-{
- if (!gAPRPoolp)
- {
- // Initialize APR and create the global pool
- apr_initialize();
- apr_pool_create(&gAPRPoolp, NULL);
-
- // Initialize the logging mutex
- apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp);
- apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, gAPRPoolp);
- }
-
- if(!LLAPRFile::sAPRFilePoolp)
- {
- LLAPRFile::sAPRFilePoolp = new LLVolatileAPRPool(FALSE) ;
- }
-}
-
-
-void ll_cleanup_apr()
-{
- LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL;
-
- if (gLogMutexp)
- {
- // Clean up the logging mutex
-
- // All other threads NEED to be done before we clean up APR, so this is okay.
- apr_thread_mutex_destroy(gLogMutexp);
- gLogMutexp = NULL;
- }
- if (gCallStacksLogMutexp)
- {
- // Clean up the logging mutex
-
- // All other threads NEED to be done before we clean up APR, so this is okay.
- apr_thread_mutex_destroy(gCallStacksLogMutexp);
- gCallStacksLogMutexp = NULL;
- }
- if (gAPRPoolp)
- {
- apr_pool_destroy(gAPRPoolp);
- gAPRPoolp = NULL;
- }
- if (LLAPRFile::sAPRFilePoolp)
- {
- delete LLAPRFile::sAPRFilePoolp ;
- LLAPRFile::sAPRFilePoolp = NULL ;
- }
- apr_terminate();
-}
-
-//
-//
-//LLAPRPool
-//
-LLAPRPool::LLAPRPool(apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag)
- : mParent(parent),
- mReleasePoolFlag(releasePoolFlag),
- mMaxSize(size),
- mPool(NULL)
-{
- createAPRPool() ;
-}
-
-LLAPRPool::~LLAPRPool()
-{
- releaseAPRPool() ;
-}
-
-void LLAPRPool::createAPRPool()
-{
- if(mPool)
- {
- return ;
- }
-
- mStatus = apr_pool_create(&mPool, mParent);
- ll_apr_warn_status(mStatus) ;
-
- if(mMaxSize > 0) //size is the number of blocks (which is usually 4K), NOT bytes.
- {
- apr_allocator_t *allocator = apr_pool_allocator_get(mPool);
- if (allocator)
- {
- apr_allocator_max_free_set(allocator, mMaxSize) ;
- }
- }
-}
-
-void LLAPRPool::releaseAPRPool()
-{
- if(!mPool)
- {
- return ;
- }
-
- if(!mParent || mReleasePoolFlag)
- {
- apr_pool_destroy(mPool) ;
- mPool = NULL ;
- }
-}
-
-//virtual
-apr_pool_t* LLAPRPool::getAPRPool()
-{
- return mPool ;
-}
-
-LLVolatileAPRPool::LLVolatileAPRPool(BOOL is_local, apr_pool_t *parent, apr_size_t size, BOOL releasePoolFlag)
- : LLAPRPool(parent, size, releasePoolFlag),
- mNumActiveRef(0),
- mNumTotalRef(0),
- mMutexPool(NULL),
- mMutexp(NULL)
-{
- //create mutex
- if(!is_local) //not a local apr_pool, that is: shared by multiple threads.
- {
- apr_pool_create(&mMutexPool, NULL); // Create a pool for mutex
- apr_thread_mutex_create(&mMutexp, APR_THREAD_MUTEX_UNNESTED, mMutexPool);
- }
-}
-
-LLVolatileAPRPool::~LLVolatileAPRPool()
-{
- //delete mutex
- if(mMutexp)
- {
- apr_thread_mutex_destroy(mMutexp);
- apr_pool_destroy(mMutexPool);
- }
-}
-
-//
-//define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
-//
-//virtual
-apr_pool_t* LLVolatileAPRPool::getAPRPool()
-{
- return LLVolatileAPRPool::getVolatileAPRPool() ;
-}
-
-apr_pool_t* LLVolatileAPRPool::getVolatileAPRPool()
-{
- LLScopedLock lock(mMutexp) ;
-
- mNumTotalRef++ ;
- mNumActiveRef++ ;
-
- if(!mPool)
- {
- createAPRPool() ;
- }
-
- return mPool ;
-}
-
-void LLVolatileAPRPool::clearVolatileAPRPool()
-{
- LLScopedLock lock(mMutexp) ;
-
- if(mNumActiveRef > 0)
- {
- mNumActiveRef--;
- if(mNumActiveRef < 1)
- {
- if(isFull())
- {
- mNumTotalRef = 0 ;
-
- //destroy the apr_pool.
- releaseAPRPool() ;
- }
- else
- {
- //This does not actually free the memory,
- //it just allows the pool to re-use this memory for the next allocation.
- apr_pool_clear(mPool) ;
- }
- }
- }
- else
- {
- llassert_always(mNumActiveRef > 0) ;
- }
-
- //paranoia check if the pool is jammed.
- //will remove the check before going to release.
- llassert_always(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;
-}
-
-BOOL LLVolatileAPRPool::isFull()
-{
- return mNumTotalRef > FULL_VOLATILE_APR_POOL ;
-}
//---------------------------------------------------------------------
//
// LLScopedLock
@@ -313,15 +109,17 @@ void ll_apr_assert_status(apr_status_t status, apr_dso_handle_t *handle)
//
LLAPRFile::LLAPRFile()
: mFile(NULL),
- mCurrentFilePoolp(NULL)
+ mVolatileFilePoolp(NULL),
+ mRegularFilePoolp(NULL)
{
}
-LLAPRFile::LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool)
+LLAPRFile::LLAPRFile(std::string const& filename, apr_int32_t flags, S32* sizep, access_t access_type)
: mFile(NULL),
- mCurrentFilePoolp(NULL)
+ mVolatileFilePoolp(NULL),
+ mRegularFilePoolp(NULL)
{
- open(filename, flags, pool);
+ open(filename, flags, access_type, sizep);
}
LLAPRFile::~LLAPRFile()
@@ -338,36 +136,58 @@ apr_status_t LLAPRFile::close()
mFile = NULL ;
}
- if(mCurrentFilePoolp)
+ if (mVolatileFilePoolp)
{
- mCurrentFilePoolp->clearVolatileAPRPool() ;
- mCurrentFilePoolp = NULL ;
+ mVolatileFilePoolp->clearVolatileAPRPool() ;
+ mVolatileFilePoolp = NULL ;
+ }
+
+ if (mRegularFilePoolp)
+ {
+ delete mRegularFilePoolp;
+ mRegularFilePoolp = NULL;
}
return ret ;
}
-apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool, S32* sizep)
+apr_status_t LLAPRFile::open(std::string const& filename, apr_int32_t flags, access_t access_type, S32* sizep)
{
- apr_status_t s ;
-
- //check if already open some file
- llassert_always(!mFile) ;
- llassert_always(!mCurrentFilePoolp) ;
-
- apr_pool_t* apr_pool = pool ? pool->getVolatileAPRPool() : NULL ;
- s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, getAPRFilePool(apr_pool));
+ llassert_always(!mFile);
+ llassert_always(!mVolatileFilePoolp && !mRegularFilePoolp);
- if (s != APR_SUCCESS || !mFile)
+ apr_status_t status;
+ {
+ apr_pool_t* apr_file_open_pool; // The use of apr_pool_t is OK here.
+ // This is a temporary variable for a pool that is passed directly to apr_file_open below.
+ if (access_type == short_lived)
+ {
+ // Use a "volatile" thread-local pool.
+ mVolatileFilePoolp = &LLThreadLocalData::tldata().mVolatileAPRPool;
+ // Access the pool and increment its reference count.
+ // The reference count of LLVolatileAPRPool objects will be decremented
+ // again in LLAPRFile::close by calling mVolatileFilePoolp->clearVolatileAPRPool().
+ apr_file_open_pool = mVolatileFilePoolp->getVolatileAPRPool();
+ }
+ else
+ {
+ mRegularFilePoolp = new LLAPRPool(LLThreadLocalData::tldata().mRootPool);
+ apr_file_open_pool = (*mRegularFilePoolp)();
+ }
+ status = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, apr_file_open_pool);
+ }
+ if (status != APR_SUCCESS || !mFile)
{
mFile = NULL ;
-
+ close() ;
if (sizep)
{
*sizep = 0;
}
+ return status;
}
- else if (sizep)
+
+ if (sizep)
{
S32 file_size = 0;
apr_off_t offset = 0;
@@ -381,49 +201,7 @@ apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, LLV
*sizep = file_size;
}
- if(!mCurrentFilePoolp)
- {
- mCurrentFilePoolp = pool ;
-
- if(!mFile)
- {
- close() ;
- }
- }
-
- return s ;
-}
-
-//use gAPRPoolp.
-apr_status_t LLAPRFile::open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool)
-{
- apr_status_t s;
-
- //check if already open some file
- llassert_always(!mFile) ;
- llassert_always(!mCurrentFilePoolp) ;
- llassert_always(use_global_pool) ; //be aware of using gAPRPoolp.
-
- s = apr_file_open(&mFile, filename.c_str(), flags, APR_OS_DEFAULT, gAPRPoolp);
- if (s != APR_SUCCESS || !mFile)
- {
- mFile = NULL ;
- close() ;
- return s;
- }
-
- return s;
-}
-
-apr_pool_t* LLAPRFile::getAPRFilePool(apr_pool_t* pool)
-{
- if(!pool)
- {
- mCurrentFilePoolp = sAPRFilePoolp ;
- return mCurrentFilePoolp->getVolatileAPRPool() ;
- }
-
- return pool ;
+ return status;
}
// File I/O
@@ -482,45 +260,6 @@ S32 LLAPRFile::seek(apr_seek_where_t where, S32 offset)
//
//static
-apr_status_t LLAPRFile::close(apr_file_t* file_handle, LLVolatileAPRPool* pool)
-{
- apr_status_t ret = APR_SUCCESS ;
- if(file_handle)
- {
- ret = apr_file_close(file_handle);
- file_handle = NULL ;
- }
-
- if(pool)
- {
- pool->clearVolatileAPRPool() ;
- }
-
- return ret ;
-}
-
-//static
-apr_file_t* LLAPRFile::open(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags)
-{
- apr_status_t s;
- apr_file_t* file_handle ;
-
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
-
- s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool());
- if (s != APR_SUCCESS || !file_handle)
- {
- ll_apr_warn_status(s);
- LL_WARNS("APR") << " Attempting to open filename: " << filename << LL_ENDL;
- file_handle = NULL ;
- close(file_handle, pool) ;
- return NULL;
- }
-
- return file_handle ;
-}
-
-//static
S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset)
{
if(!file_handle)
@@ -553,13 +292,15 @@ S32 LLAPRFile::seek(apr_file_t* file_handle, apr_seek_where_t where, S32 offset)
}
//static
-S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool)
+S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes)
{
- //*****************************************
- apr_file_t* file_handle = open(filename, pool, APR_READ|APR_BINARY);
- //*****************************************
- if (!file_handle)
+ apr_file_t* file_handle;
+ LLScopedVolatileAPRPool pool;
+ apr_status_t s = apr_file_open(&file_handle, filename.c_str(), APR_READ|APR_BINARY, APR_OS_DEFAULT, pool);
+ if (s != APR_SUCCESS || !file_handle)
{
+ ll_apr_warn_status(s);
+ LL_WARNS("APR") << " while attempting to open file \"" << filename << '"' << LL_ENDL;
return 0;
}
@@ -589,14 +330,13 @@ S32 LLAPRFile::readEx(const std::string& filename, void *buf, S32 offset, S32 nb
}
}
- //*****************************************
- close(file_handle, pool) ;
- //*****************************************
+ apr_file_close(file_handle);
+
return (S32)bytes_read;
}
//static
-S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool)
+S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes)
{
apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY;
if (offset < 0)
@@ -605,11 +345,13 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n
offset = 0;
}
- //*****************************************
- apr_file_t* file_handle = open(filename, pool, flags);
- //*****************************************
- if (!file_handle)
+ apr_file_t* file_handle;
+ LLScopedVolatileAPRPool pool;
+ apr_status_t s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool);
+ if (s != APR_SUCCESS || !file_handle)
{
+ ll_apr_warn_status(s);
+ LL_WARNS("APR") << " while attempting to open file \"" << filename << '"' << LL_ENDL;
return 0;
}
@@ -639,21 +381,18 @@ S32 LLAPRFile::writeEx(const std::string& filename, void *buf, S32 offset, S32 n
}
}
- //*****************************************
- LLAPRFile::close(file_handle, pool);
- //*****************************************
+ apr_file_close(file_handle);
return (S32)bytes_written;
}
//static
-bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool)
+bool LLAPRFile::remove(const std::string& filename)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_remove(filename.c_str(), pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_remove(filename.c_str(), pool);
if (s != APR_SUCCESS)
{
@@ -665,13 +404,12 @@ bool LLAPRFile::remove(const std::string& filename, LLVolatileAPRPool* pool)
}
//static
-bool LLAPRFile::rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool)
+bool LLAPRFile::rename(const std::string& filename, const std::string& newname)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_rename(filename.c_str(), newname.c_str(), pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_rename(filename.c_str(), newname.c_str(), pool);
if (s != APR_SUCCESS)
{
@@ -683,49 +421,44 @@ bool LLAPRFile::rename(const std::string& filename, const std::string& newname,
}
//static
-bool LLAPRFile::isExist(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags)
+bool LLAPRFile::isExist(const std::string& filename, apr_int32_t flags)
{
- apr_file_t* apr_file;
+ apr_file_t* file_handle;
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_open(&apr_file, filename.c_str(), flags, APR_OS_DEFAULT, pool->getVolatileAPRPool());
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_open(&file_handle, filename.c_str(), flags, APR_OS_DEFAULT, pool);
- if (s != APR_SUCCESS || !apr_file)
+ if (s != APR_SUCCESS || !file_handle)
{
- pool->clearVolatileAPRPool() ;
return false;
}
else
{
- apr_file_close(apr_file) ;
- pool->clearVolatileAPRPool() ;
+ apr_file_close(file_handle);
return true;
}
}
//static
-S32 LLAPRFile::size(const std::string& filename, LLVolatileAPRPool* pool)
+S32 LLAPRFile::size(const std::string& filename)
{
- apr_file_t* apr_file;
+ apr_file_t* file_handle;
apr_finfo_t info;
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_open(&apr_file, filename.c_str(), APR_READ, APR_OS_DEFAULT, pool->getVolatileAPRPool());
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_open(&file_handle, filename.c_str(), APR_READ, APR_OS_DEFAULT, pool);
- if (s != APR_SUCCESS || !apr_file)
+ if (s != APR_SUCCESS || !file_handle)
{
- pool->clearVolatileAPRPool() ;
-
return 0;
}
else
{
- apr_status_t s = apr_file_info_get(&info, APR_FINFO_SIZE, apr_file);
+ apr_status_t s = apr_file_info_get(&info, APR_FINFO_SIZE, file_handle);
- apr_file_close(apr_file) ;
- pool->clearVolatileAPRPool() ;
+ apr_file_close(file_handle) ;
if (s == APR_SUCCESS)
{
@@ -739,31 +472,29 @@ S32 LLAPRFile::size(const std::string& filename, LLVolatileAPRPool* pool)
}
//static
-bool LLAPRFile::makeDir(const std::string& dirname, LLVolatileAPRPool* pool)
+bool LLAPRFile::makeDir(const std::string& dirname)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_dir_make(dirname.c_str(), APR_FPROT_OS_DEFAULT, pool);
if (s != APR_SUCCESS)
{
ll_apr_warn_status(s);
- LL_WARNS("APR") << " Attempting to make directory: " << dirname << LL_ENDL;
+ LL_WARNS("APR") << " while attempting to make directory: " << dirname << LL_ENDL;
return false;
}
return true;
}
//static
-bool LLAPRFile::removeDir(const std::string& dirname, LLVolatileAPRPool* pool)
+bool LLAPRFile::removeDir(const std::string& dirname)
{
apr_status_t s;
- pool = pool ? pool : LLAPRFile::sAPRFilePoolp ;
- s = apr_file_remove(dirname.c_str(), pool->getVolatileAPRPool());
- pool->clearVolatileAPRPool() ;
+ LLScopedVolatileAPRPool pool;
+ s = apr_file_remove(dirname.c_str(), pool);
if (s != APR_SUCCESS)
{
diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
index af33ce666f..3f846f1314 100644
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -50,71 +50,9 @@
#include "apr_atomic.h"
#include "llstring.h"
-extern LL_COMMON_API apr_thread_mutex_t* gLogMutexp;
-extern apr_thread_mutex_t* gCallStacksLogMutexp;
-
struct apr_dso_handle_t;
-
-/**
- * @brief initialize the common apr constructs -- apr itself, the
- * global pool, and a mutex.
- */
-void LL_COMMON_API ll_init_apr();
-
-/**
- * @brief Cleanup those common apr constructs.
- */
-void LL_COMMON_API ll_cleanup_apr();
-
-//
-//LL apr_pool
-//manage apr_pool_t, destroy allocated apr_pool in the destruction function.
-//
-class LL_COMMON_API LLAPRPool
-{
-public:
- LLAPRPool(apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE) ;
- virtual ~LLAPRPool() ;
-
- virtual apr_pool_t* getAPRPool() ;
- apr_status_t getStatus() {return mStatus ; }
-
-protected:
- void releaseAPRPool() ;
- void createAPRPool() ;
-
-protected:
- apr_pool_t* mPool ; //pointing to an apr_pool
- apr_pool_t* mParent ; //parent pool
- apr_size_t mMaxSize ; //max size of mPool, mPool should return memory to system if allocated memory beyond this limit. However it seems not to work.
- apr_status_t mStatus ; //status when creating the pool
- BOOL mReleasePoolFlag ; //if set, mPool is destroyed when LLAPRPool is deleted. default value is true.
-};
-
-//
-//volatile LL apr_pool
-//which clears memory automatically.
-//so it can not hold static data or data after memory is cleared
-//
-class LL_COMMON_API LLVolatileAPRPool : public LLAPRPool
-{
-public:
- LLVolatileAPRPool(BOOL is_local = TRUE, apr_pool_t *parent = NULL, apr_size_t size = 0, BOOL releasePoolFlag = TRUE);
- virtual ~LLVolatileAPRPool();
-
- /*virtual*/ apr_pool_t* getAPRPool() ; //define this virtual function to avoid any mistakenly calling LLAPRPool::getAPRPool().
- apr_pool_t* getVolatileAPRPool() ;
- void clearVolatileAPRPool() ;
-
- BOOL isFull() ;
-
-private:
- S32 mNumActiveRef ; //number of active pointers pointing to the apr_pool.
- S32 mNumTotalRef ; //number of total pointers pointing to the apr_pool since last creating.
-
- apr_thread_mutex_t *mMutexp;
- apr_pool_t *mMutexPool;
-} ;
+class LLAPRPool;
+class LLVolatileAPRPool;
/**
* @class LLScopedLock
@@ -205,15 +143,20 @@ class LL_COMMON_API LLAPRFile : boost::noncopyable
// make this non copyable since a copy closes the file
private:
apr_file_t* mFile ;
- LLVolatileAPRPool *mCurrentFilePoolp ; //currently in use apr_pool, could be one of them: sAPRFilePoolp, or a temp pool.
+ LLVolatileAPRPool* mVolatileFilePoolp; // (Thread local) APR pool currently in use.
+ LLAPRPool* mRegularFilePoolp; // ...or a regular pool.
public:
+ enum access_t {
+ long_lived, // Use a global pool for long-lived file accesses.
+ short_lived // Use a volatile pool for short-lived file accesses.
+ };
+
LLAPRFile() ;
- LLAPRFile(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL);
+ LLAPRFile(std::string const& filename, apr_int32_t flags, S32* sizep = NULL, access_t access_type = short_lived);
~LLAPRFile() ;
-
- apr_status_t open(const std::string& filename, apr_int32_t flags, LLVolatileAPRPool* pool = NULL, S32* sizep = NULL);
- apr_status_t open(const std::string& filename, apr_int32_t flags, BOOL use_global_pool); //use gAPRPoolp.
+
+ apr_status_t open(const std::string& filename, apr_int32_t flags, access_t access_type, S32* sizep = NULL);
apr_status_t close() ;
// Returns actual offset, -1 if seek fails
@@ -226,32 +169,24 @@ public:
apr_file_t* getFileHandle() {return mFile;}
-private:
- apr_pool_t* getAPRFilePool(apr_pool_t* pool) ;
-
//
//*******************************************************************************************************************************
//static components
//
-public:
- static LLVolatileAPRPool *sAPRFilePoolp ; //a global apr_pool for APRFile, which is used only when local pool does not exist.
-
private:
- static apr_file_t* open(const std::string& filename, LLVolatileAPRPool* pool, apr_int32_t flags);
- static apr_status_t close(apr_file_t* file, LLVolatileAPRPool* pool) ;
static S32 seek(apr_file_t* file, apr_seek_where_t where, S32 offset);
public:
// returns false if failure:
- static bool remove(const std::string& filename, LLVolatileAPRPool* pool = NULL);
- static bool rename(const std::string& filename, const std::string& newname, LLVolatileAPRPool* pool = NULL);
- static bool isExist(const std::string& filename, LLVolatileAPRPool* pool = NULL, apr_int32_t flags = APR_READ);
- static S32 size(const std::string& filename, LLVolatileAPRPool* pool = NULL);
- static bool makeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
- static bool removeDir(const std::string& dirname, LLVolatileAPRPool* pool = NULL);
+ static bool remove(const std::string& filename);
+ static bool rename(const std::string& filename, const std::string& newname);
+ static bool isExist(const std::string& filename, apr_int32_t flags = APR_READ);
+ static S32 size(const std::string& filename);
+ static bool makeDir(const std::string& dirname);
+ static bool removeDir(const std::string& dirname);
// Returns bytes read/written, 0 if read/write fails:
- static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL);
- static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes, LLVolatileAPRPool* pool = NULL); // offset<0 means append
+ static S32 readEx(const std::string& filename, void *buf, S32 offset, S32 nbytes);
+ static S32 writeEx(const std::string& filename, void *buf, S32 offset, S32 nbytes); // offset<0 means append
//*******************************************************************************************************************************
};
@@ -267,6 +202,4 @@ bool LL_COMMON_API ll_apr_warn_status(apr_status_t status, apr_dso_handle_t* han
void LL_COMMON_API ll_apr_assert_status(apr_status_t status);
void LL_COMMON_API ll_apr_assert_status(apr_status_t status, apr_dso_handle_t* handle);
-extern "C" LL_COMMON_API apr_pool_t* gAPRPoolp; // Global APR memory pool
-
#endif // LL_LLAPR_H
diff --git a/indra/llcommon/llaprpool.cpp b/indra/llcommon/llaprpool.cpp
new file mode 100644
index 0000000000..6f21b61b65
--- /dev/null
+++ b/indra/llcommon/llaprpool.cpp
@@ -0,0 +1,202 @@
+/**
+ * @file llaprpool.cpp
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ * CHANGELOG
+ * and additional copyright holders.
+ *
+ * 04/04/2010
+ * - Initial version, written by Aleric Inglewood @ SL
+ *
+ * 10/11/2010
+ * - Added APR_HAS_THREADS #if's to allow creation and destruction
+ * of subpools by threads other than the parent pool owner.
+ */
+
+#include "linden_common.h"
+
+#include "llerror.h"
+#include "llaprpool.h"
+#include "llthread.h"
+
+// Create a subpool from parent.
+void LLAPRPool::create(LLAPRPool& parent)
+{
+ llassert(!mPool); // Must be non-initialized.
+ mParent = &parent;
+ if (!mParent) // Using the default parameter?
+ {
+ // By default use the root pool of the current thread.
+ mParent = &LLThreadLocalData::tldata().mRootPool;
+ }
+ llassert(mParent->mPool); // Parent must be initialized.
+#if APR_HAS_THREADS
+ // As per the documentation of APR (ie http://apr.apache.org/docs/apr/1.4/apr__pools_8h.html):
+ //
+ // Note that most operations on pools are not thread-safe: a single pool should only be
+ // accessed by a single thread at any given time. The one exception to this rule is creating
+ // a subpool of a given pool: one or more threads can safely create subpools at the same
+ // time that another thread accesses the parent pool.
+ //
+ // In other words, it's safe for any thread to create a (sub)pool, independent of who
+ // owns the parent pool.
+ mOwner = apr_os_thread_current();
+#else
+ mOwner = mParent->mOwner;
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+#endif
+ apr_status_t const apr_pool_create_status = apr_pool_create(&mPool, mParent->mPool);
+ llassert_always(apr_pool_create_status == APR_SUCCESS);
+ llassert(mPool); // Initialized.
+ apr_pool_cleanup_register(mPool, this, &s_plain_cleanup, &apr_pool_cleanup_null);
+}
+
+// Destroy the (sub)pool, if any.
+void LLAPRPool::destroy(void)
+{
+ // Only do anything if we are not already (being) destroyed.
+ if (mPool)
+ {
+#if !APR_HAS_THREADS
+ // If we are a root pool, then every thread may destruct us: in that case
+ // we have to assume that no other thread will use this pool concurrently,
+ // of course. Otherwise, if we are a subpool, only the thread that owns
+ // the parent may destruct us, since that is the pool that is still alive,
+ // possibly being used by others and being altered here.
+ llassert(!mParent || apr_os_thread_equal(mParent->mOwner, apr_os_thread_current()));
+#endif
+ apr_pool_t* pool = mPool; // The use of apr_pool_t is OK here.
+ // Temporary store before destroying the pool.
+ mPool = NULL; // Mark that we are BEING destructed.
+ apr_pool_cleanup_kill(pool, this, &s_plain_cleanup);
+ apr_pool_destroy(pool);
+ }
+}
+
+bool LLAPRPool::parent_is_being_destructed(void)
+{
+ return mParent && (!mParent->mPool || mParent->parent_is_being_destructed());
+}
+
+LLAPRInitialization::LLAPRInitialization(void)
+{
+ static bool apr_initialized = false;
+
+ if (!apr_initialized)
+ {
+ apr_initialize();
+ }
+
+ apr_initialized = true;
+}
+
+bool LLAPRRootPool::sCountInitialized = false;
+apr_uint32_t volatile LLAPRRootPool::sCount;
+
+apr_thread_mutex_t* gLogMutexp;
+apr_thread_mutex_t* gCallStacksLogMutexp;
+
+LLAPRRootPool::LLAPRRootPool(void) : LLAPRInitialization(), LLAPRPool(0)
+{
+ // sCountInitialized don't need locking because when we get here there is still only a single thread.
+ if (!sCountInitialized)
+ {
+ // Initialize the logging mutex
+ apr_thread_mutex_create(&gLogMutexp, APR_THREAD_MUTEX_UNNESTED, mPool);
+ apr_thread_mutex_create(&gCallStacksLogMutexp, APR_THREAD_MUTEX_UNNESTED, mPool);
+
+ apr_status_t status = apr_atomic_init(mPool);
+ llassert_always(status == APR_SUCCESS);
+ apr_atomic_set32(&sCount, 1); // Set to 1 to account for the global root pool.
+ sCountInitialized = true;
+
+ // Initialize thread-local APR pool support.
+ // Because this recursively calls LLAPRRootPool::LLAPRRootPool(void)
+ // it must be done last, so that sCount is already initialized.
+ LLThreadLocalData::init();
+ }
+ apr_atomic_inc32(&sCount);
+}
+
+LLAPRRootPool::~LLAPRRootPool()
+{
+ if (!apr_atomic_dec32(&sCount))
+ {
+ // The last pool was destructed. Cleanup remainder of APR.
+ LL_INFOS("APR") << "Cleaning up APR" << LL_ENDL;
+
+ if (gLogMutexp)
+ {
+ // Clean up the logging mutex
+
+ // All other threads NEED to be done before we clean up APR, so this is okay.
+ apr_thread_mutex_destroy(gLogMutexp);
+ gLogMutexp = NULL;
+ }
+ if (gCallStacksLogMutexp)
+ {
+ // Clean up the logging mutex
+
+ // All other threads NEED to be done before we clean up APR, so this is okay.
+ apr_thread_mutex_destroy(gCallStacksLogMutexp);
+ gCallStacksLogMutexp = NULL;
+ }
+
+ // Must destroy ALL, and therefore this last LLAPRRootPool, before terminating APR.
+ static_cast<LLAPRRootPool*>(this)->destroy();
+
+ apr_terminate();
+ }
+}
+
+//static
+// Return a global root pool that is independent of LLThreadLocalData.
+// Normally you should NOT use this. Only use for early initialization
+// (before main) and deinitialization (after main).
+LLAPRRootPool& LLAPRRootPool::get(void)
+{
+ static LLAPRRootPool global_APRpool(0);
+ return global_APRpool;
+}
+
+void LLVolatileAPRPool::clearVolatileAPRPool()
+{
+ llassert_always(mNumActiveRef > 0);
+ if (--mNumActiveRef == 0)
+ {
+ if (isOld())
+ {
+ destroy();
+ mNumTotalRef = 0 ;
+ }
+ else
+ {
+ // This does not actually free the memory,
+ // it just allows the pool to re-use this memory for the next allocation.
+ clear();
+ }
+ }
+
+ // Paranoia check if the pool is jammed.
+ llassert(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;
+}
diff --git a/indra/llcommon/llaprpool.h b/indra/llcommon/llaprpool.h
new file mode 100644
index 0000000000..bf4102c584
--- /dev/null
+++ b/indra/llcommon/llaprpool.h
@@ -0,0 +1,256 @@
+/**
+ * @file llaprpool.h
+ * @brief Implementation of LLAPRPool
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ * CHANGELOG
+ * and additional copyright holders.
+ *
+ * 04/04/2010
+ * - Initial version, written by Aleric Inglewood @ SL
+ *
+ * 10/11/2010
+ * - Added APR_HAS_THREADS #if's to allow creation and destruction
+ * of subpools by threads other than the parent pool owner.
+ *
+ * 05/02/2011
+ * - Fixed compilation on windows: Suppress compile warning 4996
+ * and include <winsock2.h> before including <ws2tcpip.h>,
+ * by Merov Linden @ SL.
+ */
+
+#ifndef LL_LLAPRPOOL_H
+#define LL_LLAPRPOOL_H
+
+#ifdef LL_WINDOWS
+#pragma warning(push)
+#pragma warning(disable:4996)
+#include <winsock2.h>
+#include <ws2tcpip.h> // Needed before including apr_portable.h
+#pragma warning(pop)
+#endif
+
+#include "apr_portable.h"
+#include "apr_pools.h"
+#include "llerror.h"
+
+extern void ll_init_apr();
+
+/**
+ * @brief A wrapper around the APR memory pool API.
+ *
+ * Usage of this class should be restricted to passing it to libapr-1 function calls that need it.
+ *
+ */
+class LL_COMMON_API LLAPRPool
+{
+protected:
+ //! Pointer to the underlaying pool. NULL if not initialized.
+ apr_pool_t* mPool; // The use of apr_pool_t is OK here.
+ // This is the wrapped pointer that it is all about!
+ //! Pointer to the parent pool, if any. Only valid when mPool is non-zero.
+ LLAPRPool* mParent;
+ //! The thread that owns this memory pool. Only valid when mPool is non-zero.
+ apr_os_thread_t mOwner;
+
+public:
+ /// Construct an uninitialized (destructed) pool.
+ LLAPRPool(void) : mPool(NULL) { }
+
+ /// Construct a subpool from an existing pool.
+ /// This is not a copy-constructor, this class doesn't have one!
+ LLAPRPool(LLAPRPool& parent) : mPool(NULL) { create(parent); }
+
+ /// Destruct the memory pool (free all of its subpools and allocated memory).
+ ~LLAPRPool() { destroy(); }
+
+protected:
+ /// Create a pool that is allocated from the Operating System. Only used by LLAPRRootPool.
+ LLAPRPool(int) : mPool(NULL), mParent(NULL), mOwner(apr_os_thread_current())
+ {
+ apr_status_t const apr_pool_create_status = apr_pool_create(&mPool, NULL);
+ llassert_always(apr_pool_create_status == APR_SUCCESS);
+ llassert(mPool);
+ apr_pool_cleanup_register(mPool, this, &s_plain_cleanup, &apr_pool_cleanup_null);
+ }
+
+public:
+ /// Create a subpool from parent. May only be called for an uninitialized/destroyed pool.
+ /// The default parameter causes the root pool of the current thread to be used.
+ void create(LLAPRPool& parent = *static_cast<LLAPRPool*>(NULL));
+
+ /// Destroy the (sub)pool, if any.
+ void destroy(void);
+
+ // Use some safebool idiom (http://www.artima.com/cppsource/safebool.html) rather than operator bool.
+ typedef LLAPRPool* const LLAPRPool::* const bool_type;
+ /// Return true if the pool is initialized.
+ operator bool_type() const { return mPool ? &LLAPRPool::mParent : 0; }
+
+ /// Painful, but we have to either provide access to this, or wrap
+ /// every APR function call that needs an apr pool as argument.
+ /// NEVER destroy a pool that is returned by this function!
+ apr_pool_t* operator()(void) const // The use of apr_pool_t is OK here.
+ // This is the accessor for passing the pool to libapr-1 functions.
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ return mPool;
+ }
+
+ /// Free all memory without destructing the pool.
+ void clear(void)
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ apr_pool_clear(mPool);
+ }
+
+// These methods would make this class 'complete' (as wrapper around the libapr
+// pool functions), but we don't use memory pools in the viewer (only when
+// we are forced to pass one to a libapr call), so don't define them in order
+// not to encourage people to use them.
+#if 0
+ void* palloc(size_t size)
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ return apr_palloc(mPool, size);
+ }
+ void* pcalloc(size_t size)
+ {
+ llassert(mPool);
+ llassert(apr_os_thread_equal(mOwner, apr_os_thread_current()));
+ return apr_pcalloc(mPool, size);
+ }
+#endif
+
+private:
+ bool parent_is_being_destructed(void);
+ static apr_status_t s_plain_cleanup(void* userdata) { return static_cast<LLAPRPool*>(userdata)->plain_cleanup(); }
+
+ apr_status_t plain_cleanup(void)
+ {
+ if (mPool && // We are not being destructed,
+ parent_is_being_destructed()) // but our parent is.
+ // This means the pool is being destructed recursively by libapr
+ // because one of its parents is being destructed.
+ {
+ mPool = NULL; // Stop destroy() from destructing the pool again.
+ }
+ return APR_SUCCESS;
+ }
+};
+
+class LLAPRInitialization
+{
+public:
+ LLAPRInitialization(void);
+};
+
+/**
+ * @brief Root memory pool (allocates memory from the operating system).
+ *
+ * This class should only be used by LLThreadLocalData
+ * (and LLMutexRootPool when APR_HAS_THREADS isn't defined).
+ */
+class LL_COMMON_API LLAPRRootPool : public LLAPRInitialization, public LLAPRPool
+{
+private:
+ /// Construct a root memory pool. Should only be used by LLThreadLocalData and LLMutexRootPool.
+ friend class LLThreadLocalData;
+#if !APR_HAS_THREADS
+ friend class LLMutexRootPool;
+#endif
+ /// Construct a root memory pool.
+ /// Should only be used by LLThreadLocalData.
+ LLAPRRootPool(void);
+ ~LLAPRRootPool();
+
+private:
+ // Keep track of how many root pools exist and when the last one is destructed.
+ static bool sCountInitialized;
+ static apr_uint32_t volatile sCount;
+
+public:
+ // Return a global root pool that is independent of LLThreadLocalData.
+ // Normally you should not use this. Only use for early initialization
+ // (before main) and deinitialization (after main).
+ static LLAPRRootPool& get(void);
+
+#if APR_POOL_DEBUG
+ void grab_ownership(void)
+ {
+ // You need a patched libapr to use this.
+ // See http://web.archiveorange.com/archive/v/5XO9y2zoxUOMt6Gmi1OI
+ apr_pool_owner_set(mPool);
+ }
+#endif
+
+private:
+ // Used for constructing the Special Global Root Pool (returned by LLAPRRootPool::get).
+ // It is the same as the default constructor but omits to increment sCount. As a result,
+ // we must be sure that at least one other LLAPRRootPool is created before termination
+ // of the application (which is the case: we create one LLAPRRootPool per thread).
+ LLAPRRootPool(int) : LLAPRInitialization(), LLAPRPool(0) { }
+};
+
+/** Volatile memory pool
+ *
+ * 'Volatile' APR memory pool which normally only clears memory,
+ * and does not destroy the pool (the same pool is reused) for
+ * greater efficiency. However, as a safe guard the apr pool
+ * is destructed every FULL_VOLATILE_APR_POOL uses to allow
+ * the system memory to be allocated more efficiently and not
+ * get scattered through RAM.
+ */
+class LL_COMMON_API LLVolatileAPRPool : protected LLAPRPool
+{
+public:
+ LLVolatileAPRPool(void) : mNumActiveRef(0), mNumTotalRef(0) { }
+
+ void clearVolatileAPRPool(void);
+
+ bool isOld(void) const { return mNumTotalRef > FULL_VOLATILE_APR_POOL; }
+ bool isUnused() const { return mNumActiveRef == 0; }
+
+private:
+ friend class LLScopedVolatileAPRPool;
+ friend class LLAPRFile;
+ apr_pool_t* getVolatileAPRPool(void) // The use of apr_pool_t is OK here.
+ {
+ if (!mPool) create();
+ ++mNumActiveRef;
+ ++mNumTotalRef;
+ return LLAPRPool::operator()();
+ }
+
+private:
+ S32 mNumActiveRef; // Number of active uses of the pool.
+ S32 mNumTotalRef; // Number of total uses of the pool since last creation.
+
+ // Maximum number of references to LLVolatileAPRPool until the pool is recreated.
+ static S32 const FULL_VOLATILE_APR_POOL = 1024;
+};
+
+#endif // LL_LLAPRPOOL_H
diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp
index 8be9e4f4de..b8a7394852 100644
--- a/indra/llcommon/llcommon.cpp
+++ b/indra/llcommon/llcommon.cpp
@@ -31,17 +31,9 @@
#include "llthread.h"
//static
-BOOL LLCommon::sAprInitialized = FALSE;
-
-//static
void LLCommon::initClass()
{
LLMemory::initClass();
- if (!sAprInitialized)
- {
- ll_init_apr();
- sAprInitialized = TRUE;
- }
LLTimer::initClass();
LLThreadSafeRefCount::initThreadSafeRefCount();
// LLWorkerThread::initClass();
@@ -55,10 +47,5 @@ void LLCommon::cleanupClass()
// LLWorkerThread::cleanupClass();
LLThreadSafeRefCount::cleanupThreadSafeRefCount();
LLTimer::cleanupClass();
- if (sAprInitialized)
- {
- ll_cleanup_apr();
- sAprInitialized = FALSE;
- }
LLMemory::cleanupClass();
}
diff --git a/indra/llcommon/llcommon.h b/indra/llcommon/llcommon.h
index ca9cad5d05..171590f3d8 100644
--- a/indra/llcommon/llcommon.h
+++ b/indra/llcommon/llcommon.h
@@ -35,8 +35,6 @@ class LL_COMMON_API LLCommon
public:
static void initClass();
static void cleanupClass();
-private:
- static BOOL sAprInitialized;
};
#endif
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index bb64152407..bda9d7c177 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -379,7 +379,7 @@ namespace
{
/* This pattern, of returning a reference to a static function
variable, is to ensure that this global is constructed before
- it is used, no matter what the global initializeation sequence
+ it is used, no matter what the global initialization sequence
is.
See C++ FAQ Lite, sections 10.12 through 10.14
*/
@@ -866,6 +866,9 @@ You get:
*/
+extern apr_thread_mutex_t* gLogMutexp;
+extern apr_thread_mutex_t* gCallStacksLogMutexp;
+
namespace {
bool checkLevelMap(const LevelMap& map, const std::string& key,
LLError::ELevel& level)
diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h
index 4a42241c4f..369f2a7a97 100644
--- a/indra/llcommon/llerror.h
+++ b/indra/llcommon/llerror.h
@@ -39,7 +39,7 @@
Information for most users:
- Code can log messages with constuctions like this:
+ Code can log messages with constructions like this:
LL_INFOS("StringTag") << "request to fizzbip agent " << agent_id
<< " denied due to timeout" << LL_ENDL;
@@ -47,9 +47,9 @@
Messages can be logged to one of four increasing levels of concern,
using one of four "streams":
- LL_DEBUGS("StringTag") - debug messages that are normally supressed
- LL_INFOS("StringTag") - informational messages that are normall shown
- LL_WARNS("StringTag") - warning messages that singal a problem
+ LL_DEBUGS("StringTag") - debug messages that are normally suppressed
+ LL_INFOS("StringTag") - informational messages that are normal shown
+ LL_WARNS("StringTag") - warning messages that signal a problem
LL_ERRS("StringTag") - error messages that are major, unrecoverable failures
The later (LL_ERRS("StringTag")) automatically crashes the process after the message
@@ -90,7 +90,7 @@
WARN: LLFoo::doSomething: called with a big value for i: 283
- Which messages are logged and which are supressed can be controled at run
+ Which messages are logged and which are suppressed can be controlled at run
time from the live file logcontrol.xml based on function, class and/or
source file. See etc/logcontrol-dev.xml for details.
@@ -106,7 +106,7 @@ namespace LLError
enum ELevel
{
LEVEL_ALL = 0,
- // used to indicate that all messagess should be logged
+ // used to indicate that all messages should be logged
LEVEL_DEBUG = 0,
LEVEL_INFO = 1,
@@ -220,7 +220,7 @@ namespace LLError
// See top of file for example of how to use this
typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
- // Outside a class declartion, or in class without LOG_CLASS(), this
+ // Outside a class declaration, or in class without LOG_CLASS(), this
// typedef causes the messages to not be associated with any class.
@@ -296,5 +296,4 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
Such computation is done iff the message will be logged.
*/
-
#endif // LL_LLERROR_H
diff --git a/indra/llcommon/lleventtimer.cpp b/indra/llcommon/lleventtimer.cpp
index 7743826c60..0d96e03da4 100644
--- a/indra/llcommon/lleventtimer.cpp
+++ b/indra/llcommon/lleventtimer.cpp
@@ -58,19 +58,15 @@ LLEventTimer::~LLEventTimer()
void LLEventTimer::updateClass()
{
std::list<LLEventTimer*> completed_timers;
-
+ for (instance_iter iter = beginInstances(); iter != endInstances(); )
{
- LLInstanceTrackerScopedGuard guard;
- for (instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); )
- {
- LLEventTimer& timer = *iter++;
- F32 et = timer.mEventTimer.getElapsedTimeF32();
- if (timer.mEventTimer.getStarted() && et > timer.mPeriod) {
- timer.mEventTimer.reset();
- if ( timer.tick() )
- {
- completed_timers.push_back( &timer );
- }
+ LLEventTimer& timer = *iter++;
+ F32 et = timer.mEventTimer.getElapsedTimeF32();
+ if (timer.mEventTimer.getStarted() && et > timer.mPeriod) {
+ timer.mEventTimer.reset();
+ if ( timer.tick() )
+ {
+ completed_timers.push_back( &timer );
}
}
}
diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp
index bd594b06cf..ebb5961c91 100644
--- a/indra/llcommon/llfasttimer_class.cpp
+++ b/indra/llcommon/llfasttimer_class.cpp
@@ -219,15 +219,20 @@ LLFastTimer::DeclareTimer::DeclareTimer(const std::string& name)
// static
void LLFastTimer::DeclareTimer::updateCachedPointers()
{
- DeclareTimer::LLInstanceTrackerScopedGuard guard;
// propagate frame state pointers to timer declarations
- for (DeclareTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
// update cached pointer
it->mFrameState = &it->mTimer.getFrameState();
}
+
+ // also update frame states of timers on stack
+ LLFastTimer* cur_timerp = LLFastTimer::sCurTimerData.mCurTimer;
+ while(cur_timerp->mLastTimerData.mCurTimer != cur_timerp)
+ {
+ cur_timerp->mFrameState = &cur_timerp->mFrameState->mTimer->getFrameState();
+ cur_timerp = cur_timerp->mLastTimerData.mCurTimer;
+ }
}
//static
@@ -388,10 +393,7 @@ void LLFastTimer::NamedTimer::buildHierarchy()
// set up initial tree
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
if (&timer == NamedTimerFactory::instance().getRootTimer()) continue;
@@ -519,10 +521,7 @@ void LLFastTimer::NamedTimer::resetFrame()
LLSD sd;
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (NamedTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
FrameState& info = timer.getFrameState();
@@ -559,7 +558,7 @@ void LLFastTimer::NamedTimer::resetFrame()
llassert_always(timerp->mFrameStateIndex < (S32)getFrameStateList().size());
}
- // sort timers by dfs traversal order to improve cache coherency
+ // sort timers by DFS traversal order to improve cache coherency
std::sort(getFrameStateList().begin(), getFrameStateList().end(), SortTimersDFS());
// update pointers into framestatelist now that we've sorted it
@@ -567,10 +566,7 @@ void LLFastTimer::NamedTimer::resetFrame()
// reset for next frame
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (NamedTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
@@ -614,10 +610,7 @@ void LLFastTimer::NamedTimer::reset()
// reset all history
{
- NamedTimer::LLInstanceTrackerScopedGuard guard;
- for (NamedTimer::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
NamedTimer& timer = *it;
if (&timer != NamedTimerFactory::instance().getRootTimer())
@@ -865,7 +858,7 @@ std::string LLFastTimer::sClockType = "rdtsc";
#else
//LL_COMMON_API U64 get_clock_count(); // in lltimer.cpp
-// These use QueryPerformanceCounter, which is arguably fine and also works on amd architectures.
+// These use QueryPerformanceCounter, which is arguably fine and also works on AMD architectures.
U32 LLFastTimer::getCPUClockCount32()
{
return (U32)(get_clock_count()>>8);
diff --git a/indra/llcommon/llfixedbuffer.cpp b/indra/llcommon/llfixedbuffer.cpp
index d394f179fb..4b5cdbe288 100644
--- a/indra/llcommon/llfixedbuffer.cpp
+++ b/indra/llcommon/llfixedbuffer.cpp
@@ -30,8 +30,7 @@
LLFixedBuffer::LLFixedBuffer(const U32 max_lines)
: LLLineBuffer(),
- mMaxLines(max_lines),
- mMutex(NULL)
+ mMaxLines(max_lines)
{
mTimer.reset();
}
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
index c2cfb7286e..f6d0f5bce8 100644
--- a/indra/llcommon/llfoldertype.cpp
+++ b/indra/llcommon/llfoldertype.cpp
@@ -93,6 +93,8 @@ LLFolderDictionary::LLFolderDictionary()
addEntry(LLFolderType::FT_MESH, new FolderEntry("mesh", TRUE));
addEntry(LLFolderType::FT_INBOX, new FolderEntry("inbox", TRUE));
+ addEntry(LLFolderType::FT_OUTBOX, new FolderEntry("outbox", TRUE));
+ addEntry(LLFolderType::FT_BASIC_ROOT, new FolderEntry("basic_rt", TRUE));
addEntry(LLFolderType::FT_NONE, new FolderEntry("-1", FALSE));
};
diff --git a/indra/llcommon/llfoldertype.h b/indra/llcommon/llfoldertype.h
index cb32cb075b..a0c847914f 100644
--- a/indra/llcommon/llfoldertype.h
+++ b/indra/llcommon/llfoldertype.h
@@ -83,8 +83,11 @@ public:
FT_MESH = 49,
FT_INBOX = 50,
+ FT_OUTBOX = 51,
- FT_COUNT = 51,
+ FT_BASIC_ROOT = 52,
+
+ FT_COUNT,
FT_NONE = -1
};
diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp
index f576204511..5dc3ea5d7b 100644
--- a/indra/llcommon/llinstancetracker.cpp
+++ b/indra/llcommon/llinstancetracker.cpp
@@ -35,14 +35,15 @@
//static
void * & LLInstanceTrackerBase::getInstances(std::type_info const & info)
{
- static std::map<std::string, void *> instances;
+ typedef std::map<std::string, void *> InstancesMap;
+ static InstancesMap instances;
- std::string k = info.name();
- if(instances.find(k) == instances.end())
- {
- instances[k] = NULL;
- }
-
- return instances[k];
+ // std::map::insert() is just what we want here. You attempt to insert a
+ // (key, value) pair. If the specified key doesn't yet exist, it inserts
+ // the pair and returns a std::pair of (iterator, true). If the specified
+ // key DOES exist, insert() simply returns (iterator, false). One lookup
+ // handles both cases.
+ return instances.insert(InstancesMap::value_type(info.name(),
+ InstancesMap::mapped_type()))
+ .first->second;
}
-
diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h
index b971b2f914..5a3990a8df 100644
--- a/indra/llcommon/llinstancetracker.h
+++ b/indra/llcommon/llinstancetracker.h
@@ -29,6 +29,7 @@
#define LL_LLINSTANCETRACKER_H
#include <map>
+#include <typeinfo>
#include "string_table.h"
#include <boost/utility.hpp>
@@ -37,10 +38,40 @@
#include <boost/iterator/transform_iterator.hpp>
#include <boost/iterator/indirect_iterator.hpp>
+/**
+ * Base class manages "class-static" data that must actually have singleton
+ * semantics: one instance per process, rather than one instance per module as
+ * sometimes happens with data simply declared static.
+ */
class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable
{
- protected:
- static void * & getInstances(std::type_info const & info);
+protected:
+ /// Get a process-unique void* pointer slot for the specified type_info
+ static void * & getInstances(std::type_info const & info);
+
+ /// Find or create a STATICDATA instance for the specified TRACKED class.
+ /// STATICDATA must be default-constructible.
+ template<typename STATICDATA, class TRACKED>
+ static STATICDATA& getStatic()
+ {
+ void *& instances = getInstances(typeid(TRACKED));
+ if (! instances)
+ {
+ instances = new STATICDATA;
+ }
+ return *static_cast<STATICDATA*>(instances);
+ }
+
+ /// It's not essential to derive your STATICDATA (for use with
+ /// getStatic()) from StaticBase; it's just that both known
+ /// implementations do.
+ struct StaticBase
+ {
+ StaticBase():
+ sIterationNestDepth(0)
+ {}
+ S32 sIterationNestDepth;
+ };
};
/// This mix-in class adds support for tracking all instances of the specified class parameter T
@@ -50,15 +81,89 @@ class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable
template<typename T, typename KEY = T*>
class LLInstanceTracker : public LLInstanceTrackerBase
{
- typedef typename std::map<KEY, T*> InstanceMap;
typedef LLInstanceTracker<T, KEY> MyT;
- typedef boost::function<const KEY&(typename InstanceMap::value_type&)> KeyGetter;
- typedef boost::function<T*(typename InstanceMap::value_type&)> InstancePtrGetter;
+ typedef typename std::map<KEY, T*> InstanceMap;
+ struct StaticData: public StaticBase
+ {
+ InstanceMap sMap;
+ };
+ static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT>(); }
+ static InstanceMap& getMap_() { return getStatic().sMap; }
+
public:
- /// Dereferencing key_iter gives you a const KEY&
- typedef boost::transform_iterator<KeyGetter, typename InstanceMap::iterator> key_iter;
- /// Dereferencing instance_iter gives you a T&
- typedef boost::indirect_iterator< boost::transform_iterator<InstancePtrGetter, typename InstanceMap::iterator> > instance_iter;
+ class instance_iter : public boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag>
+ {
+ public:
+ typedef boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag> super_t;
+
+ instance_iter(const typename InstanceMap::iterator& it)
+ : mIterator(it)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ ~instance_iter()
+ {
+ --getStatic().sIterationNestDepth;
+ }
+
+
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment() { mIterator++; }
+ bool equal(instance_iter const& other) const
+ {
+ return mIterator == other.mIterator;
+ }
+
+ T& dereference() const
+ {
+ return *(mIterator->second);
+ }
+
+ typename InstanceMap::iterator mIterator;
+ };
+
+ class key_iter : public boost::iterator_facade<key_iter, KEY, boost::forward_traversal_tag>
+ {
+ public:
+ typedef boost::iterator_facade<key_iter, KEY, boost::forward_traversal_tag> super_t;
+
+ key_iter(typename InstanceMap::iterator it)
+ : mIterator(it)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ key_iter(const key_iter& other)
+ : mIterator(other.mIterator)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ ~key_iter()
+ {
+ --getStatic().sIterationNestDepth;
+ }
+
+
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment() { mIterator++; }
+ bool equal(key_iter const& other) const
+ {
+ return mIterator == other.mIterator;
+ }
+
+ KEY& dereference() const
+ {
+ return const_cast<KEY&>(mIterator->first);
+ }
+
+ typename InstanceMap::iterator mIterator;
+ };
static T* getInstance(const KEY& k)
{
@@ -66,57 +171,51 @@ public:
return (found == getMap_().end()) ? NULL : found->second;
}
- static key_iter beginKeys()
- {
- return boost::make_transform_iterator(getMap_().begin(),
- boost::bind(&InstanceMap::value_type::first, _1));
+ static instance_iter beginInstances()
+ {
+ return instance_iter(getMap_().begin());
}
- static key_iter endKeys()
+
+ static instance_iter endInstances()
{
- return boost::make_transform_iterator(getMap_().end(),
- boost::bind(&InstanceMap::value_type::first, _1));
+ return instance_iter(getMap_().end());
}
- static instance_iter beginInstances()
+
+ static S32 instanceCount() { return getMap_().size(); }
+
+ static key_iter beginKeys()
{
- return instance_iter(boost::make_transform_iterator(getMap_().begin(),
- boost::bind(&InstanceMap::value_type::second, _1)));
+ return key_iter(getMap_().begin());
}
- static instance_iter endInstances()
+ static key_iter endKeys()
{
- return instance_iter(boost::make_transform_iterator(getMap_().end(),
- boost::bind(&InstanceMap::value_type::second, _1)));
+ return key_iter(getMap_().end());
}
- static S32 instanceCount() { return getMap_().size(); }
+
protected:
LLInstanceTracker(KEY key) { add_(key); }
- virtual ~LLInstanceTracker() { remove_(); }
+ virtual ~LLInstanceTracker()
+ {
+ // it's unsafe to delete instances of this type while all instances are being iterated over.
+ llassert_always(getStatic().sIterationNestDepth == 0);
+ remove_();
+ }
virtual void setKey(KEY key) { remove_(); add_(key); }
- virtual const KEY& getKey() const { return mKey; }
+ virtual const KEY& getKey() const { return mInstanceKey; }
private:
void add_(KEY key)
{
- mKey = key;
+ mInstanceKey = key;
getMap_()[key] = static_cast<T*>(this);
}
void remove_()
{
- getMap_().erase(mKey);
+ getMap_().erase(mInstanceKey);
}
- static InstanceMap& getMap_()
- {
- void * & instances = getInstances(typeid(MyT));
- if (! instances)
- {
- instances = new InstanceMap;
- }
- return * static_cast<InstanceMap*>(instances);
- }
-
private:
-
- KEY mKey;
+ KEY mInstanceKey;
};
/// explicit specialization for default case where KEY is T*
@@ -124,73 +223,78 @@ private:
template<typename T>
class LLInstanceTracker<T, T*> : public LLInstanceTrackerBase
{
- typedef typename std::set<T*> InstanceSet;
typedef LLInstanceTracker<T, T*> MyT;
+ typedef typename std::set<T*> InstanceSet;
+ struct StaticData: public StaticBase
+ {
+ InstanceSet sSet;
+ };
+ static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic<StaticData, MyT>(); }
+ static InstanceSet& getSet_() { return getStatic().sSet; }
+
public:
- /// Dereferencing key_iter gives you a T* (since T* is the key)
- typedef typename InstanceSet::iterator key_iter;
- /// Dereferencing instance_iter gives you a T&
- typedef boost::indirect_iterator<key_iter> instance_iter;
/// for completeness of analogy with the generic implementation
static T* getInstance(T* k) { return k; }
static S32 instanceCount() { return getSet_().size(); }
- // Instantiate this to get access to iterators for this type. It's a 'guard' in the sense
- // that it treats deletes of this type as errors as long as there is an instance of
- // this class alive in scope somewhere (i.e. deleting while iterating is bad).
- class LLInstanceTrackerScopedGuard
+ class instance_iter : public boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag>
{
public:
- LLInstanceTrackerScopedGuard()
+ instance_iter(const typename InstanceSet::iterator& it)
+ : mIterator(it)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ instance_iter(const instance_iter& other)
+ : mIterator(other.mIterator)
+ {
+ ++getStatic().sIterationNestDepth;
+ }
+
+ ~instance_iter()
{
- ++sIterationNestDepth;
+ --getStatic().sIterationNestDepth;
}
- ~LLInstanceTrackerScopedGuard()
+ private:
+ friend class boost::iterator_core_access;
+
+ void increment() { mIterator++; }
+ bool equal(instance_iter const& other) const
{
- --sIterationNestDepth;
+ return mIterator == other.mIterator;
}
- static instance_iter beginInstances() { return instance_iter(getSet_().begin()); }
- static instance_iter endInstances() { return instance_iter(getSet_().end()); }
- static key_iter beginKeys() { return getSet_().begin(); }
- static key_iter endKeys() { return getSet_().end(); }
+ T& dereference() const
+ {
+ return **mIterator;
+ }
+
+ typename InstanceSet::iterator mIterator;
};
+ static instance_iter beginInstances() { return instance_iter(getSet_().begin()); }
+ static instance_iter endInstances() { return instance_iter(getSet_().end()); }
+
protected:
LLInstanceTracker()
{
- // it's safe but unpredictable to create instances of this type while all instances are being iterated over. I hate unpredictable. This assert will probably be turned on early in the next development cycle.
- //llassert(sIterationNestDepth == 0);
+ // it's safe but unpredictable to create instances of this type while all instances are being iterated over. I hate unpredictable. This assert will probably be turned on early in the next development cycle.
getSet_().insert(static_cast<T*>(this));
}
virtual ~LLInstanceTracker()
{
// it's unsafe to delete instances of this type while all instances are being iterated over.
- llassert(sIterationNestDepth == 0);
+ llassert_always(getStatic().sIterationNestDepth == 0);
getSet_().erase(static_cast<T*>(this));
}
LLInstanceTracker(const LLInstanceTracker& other)
{
- //llassert(sIterationNestDepth == 0);
getSet_().insert(static_cast<T*>(this));
}
-
- static InstanceSet& getSet_()
- {
- void * & instances = getInstances(typeid(MyT));
- if (! instances)
- {
- instances = new InstanceSet;
- }
- return * static_cast<InstanceSet *>(instances);
- }
-
- static S32 sIterationNestDepth;
};
-template <typename T> S32 LLInstanceTracker<T, T*>::sIterationNestDepth = 0;
-
#endif
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index 21d1c84d69..8c02ad8290 100644
--- a/indra/llcommon/llmemory.cpp
+++ b/indra/llcommon/llmemory.cpp
@@ -26,14 +26,13 @@
#include "linden_common.h"
-#include "llmemory.h"
-#if MEM_TRACK_MEM
+//#if MEM_TRACK_MEM
#include "llthread.h"
-#endif
+//#endif
#if defined(LL_WINDOWS)
-# include <windows.h>
+//# include <windows.h>
# include <psapi.h>
#elif defined(LL_DARWIN)
# include <sys/types.h>
@@ -43,10 +42,24 @@
# include <unistd.h>
#endif
+#include "llmemory.h"
+
+#include "llsys.h"
+#include "llframetimer.h"
//----------------------------------------------------------------------------
//static
char* LLMemory::reserveMem = 0;
+U32 LLMemory::sAvailPhysicalMemInKB = U32_MAX ;
+U32 LLMemory::sMaxPhysicalMemInKB = 0;
+U32 LLMemory::sAllocatedMemInKB = 0;
+U32 LLMemory::sAllocatedPageSizeInKB = 0 ;
+U32 LLMemory::sMaxHeapSizeInKB = U32_MAX ;
+BOOL LLMemory::sEnableMemoryFailurePrevention = FALSE;
+
+#if __DEBUG_PRIVATE_MEM__
+LLPrivateMemoryPoolManager::mem_allocation_info_t LLPrivateMemoryPoolManager::sMemAllocationTracker;
+#endif
//static
void LLMemory::initClass()
@@ -71,6 +84,148 @@ void LLMemory::freeReserve()
reserveMem = NULL;
}
+//static
+void LLMemory::initMaxHeapSizeGB(F32 max_heap_size_gb, BOOL prevent_heap_failure)
+{
+ sMaxHeapSizeInKB = (U32)(max_heap_size_gb * 1024 * 1024) ;
+ sEnableMemoryFailurePrevention = prevent_heap_failure ;
+}
+
+//static
+void LLMemory::updateMemoryInfo()
+{
+#if LL_WINDOWS
+ HANDLE self = GetCurrentProcess();
+ PROCESS_MEMORY_COUNTERS counters;
+
+ if (!GetProcessMemoryInfo(self, &counters, sizeof(counters)))
+ {
+ llwarns << "GetProcessMemoryInfo failed" << llendl;
+ return ;
+ }
+
+ sAllocatedMemInKB = (U32)(counters.WorkingSetSize / 1024) ;
+ sAllocatedPageSizeInKB = (U32)(counters.PagefileUsage / 1024) ;
+
+ U32 avail_phys, avail_virtual;
+ LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ;
+ sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB);
+
+ if(sMaxPhysicalMemInKB > sAllocatedMemInKB)
+ {
+ sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ;
+ }
+ else
+ {
+ sAvailPhysicalMemInKB = 0 ;
+ }
+#else
+ //not valid for other systems for now.
+ sAllocatedMemInKB = (U32)(LLMemory::getCurrentRSS() / 1024) ;
+ sMaxPhysicalMemInKB = U32_MAX ;
+ sAvailPhysicalMemInKB = U32_MAX ;
+#endif
+
+ return ;
+}
+
+//
+//this function is to test if there is enough space with the size in the virtual address space.
+//it does not do any real allocation
+//if success, it returns the address where the memory chunk can fit in;
+//otherwise it returns NULL.
+//
+//static
+void* LLMemory::tryToAlloc(void* address, U32 size)
+{
+#if LL_WINDOWS
+ address = VirtualAlloc(address, size, MEM_RESERVE | MEM_TOP_DOWN, PAGE_NOACCESS) ;
+ if(address)
+ {
+ if(!VirtualFree(address, 0, MEM_RELEASE))
+ {
+ llerrs << "error happens when free some memory reservation." << llendl ;
+ }
+ }
+ return address ;
+#else
+ return (void*)0x01 ; //skip checking
+#endif
+}
+
+//static
+void LLMemory::logMemoryInfo(BOOL update)
+{
+ if(update)
+ {
+ updateMemoryInfo() ;
+ }
+
+ llinfos << "Current allocated physical memory(KB): " << sAllocatedMemInKB << llendl ;
+ llinfos << "Current allocated page size (KB): " << sAllocatedPageSizeInKB << llendl ;
+ llinfos << "Current availabe physical memory(KB): " << sAvailPhysicalMemInKB << llendl ;
+ llinfos << "Current max usable memory(KB): " << sMaxPhysicalMemInKB << llendl ;
+}
+
+//return 0: everything is normal;
+//return 1: the memory pool is low, but not in danger;
+//return -1: the memory pool is in danger, is about to crash.
+//static
+S32 LLMemory::isMemoryPoolLow()
+{
+ static const U32 LOW_MEMEOY_POOL_THRESHOLD_KB = 64 * 1024 ; //64 MB for emergency use
+
+ if(!sEnableMemoryFailurePrevention)
+ {
+ return 0 ; //no memory failure prevention.
+ }
+
+ if(sAvailPhysicalMemInKB < (LOW_MEMEOY_POOL_THRESHOLD_KB >> 2)) //out of physical memory
+ {
+ return -1 ;
+ }
+
+ if(sAllocatedPageSizeInKB + (LOW_MEMEOY_POOL_THRESHOLD_KB >> 2) > sMaxHeapSizeInKB) //out of virtual address space.
+ {
+ return -1 ;
+ }
+
+ return (S32)(sAvailPhysicalMemInKB < LOW_MEMEOY_POOL_THRESHOLD_KB ||
+ sAllocatedPageSizeInKB + LOW_MEMEOY_POOL_THRESHOLD_KB > sMaxHeapSizeInKB) ;
+}
+
+//static
+U32 LLMemory::getAvailableMemKB()
+{
+ return sAvailPhysicalMemInKB ;
+}
+
+//static
+U32 LLMemory::getMaxMemKB()
+{
+ return sMaxPhysicalMemInKB ;
+}
+
+//static
+U32 LLMemory::getAllocatedMemKB()
+{
+ return sAllocatedMemInKB ;
+}
+
+void* ll_allocate (size_t size)
+{
+ if (size == 0)
+ {
+ llwarns << "Null allocation" << llendl;
+ }
+ void *p = malloc(size);
+ if (p == NULL)
+ {
+ LLMemory::freeReserve();
+ llerrs << "Out of memory Error" << llendl;
+ }
+ return p;
+}
//----------------------------------------------------------------------------
@@ -237,7 +392,7 @@ U64 LLMemory::getCurrentRSS()
U32 LLMemory::getWorkingSetSize()
{
- return 0 ;
+ return 0;
}
#endif
@@ -258,7 +413,7 @@ LLMemTracker::LLMemTracker()
mDrawnIndex = 0 ;
mPaused = FALSE ;
- mMutexp = new LLMutex(NULL) ;
+ mMutexp = new LLMutex() ;
mStringBuffer = new char*[128] ;
mStringBuffer[0] = new char[mCapacity * 128] ;
for(S32 i = 1 ; i < mCapacity ; i++)
@@ -376,3 +531,1661 @@ const char* LLMemTracker::getNextLine()
#endif //MEM_TRACK_MEM
//--------------------------------------------------------------------------------------------------
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+//minimum slot size and minimal slot size interval
+const U32 ATOMIC_MEM_SLOT = 16 ; //bytes
+
+//minimum block sizes (page size) for small allocation, medium allocation, large allocation
+const U32 MIN_BLOCK_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {2 << 10, 4 << 10, 16 << 10} ; //
+
+//maximum block sizes for small allocation, medium allocation, large allocation
+const U32 MAX_BLOCK_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {64 << 10, 1 << 20, 4 << 20} ;
+
+//minimum slot sizes for small allocation, medium allocation, large allocation
+const U32 MIN_SLOT_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {ATOMIC_MEM_SLOT, 2 << 10, 512 << 10};
+
+//maximum slot sizes for small allocation, medium allocation, large allocation
+const U32 MAX_SLOT_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {(2 << 10) - ATOMIC_MEM_SLOT, (512 - 2) << 10, 4 << 20};
+
+//size of a block with multiple slots can not exceed CUT_OFF_SIZE
+const U32 CUT_OFF_SIZE = (64 << 10) ; //64 KB
+
+//max number of slots in a block
+const U32 MAX_NUM_SLOTS_IN_A_BLOCK = llmin(MIN_BLOCK_SIZES[0] / ATOMIC_MEM_SLOT, ATOMIC_MEM_SLOT * 8) ;
+
+//-------------------------------------------------------------
+//align val to be integer times of ATOMIC_MEM_SLOT
+U32 align(U32 val)
+{
+ U32 aligned = (val / ATOMIC_MEM_SLOT) * ATOMIC_MEM_SLOT ;
+ if(aligned < val)
+ {
+ aligned += ATOMIC_MEM_SLOT ;
+ }
+
+ return aligned ;
+}
+
+//-------------------------------------------------------------
+//class LLPrivateMemoryPool::LLMemoryBlock
+//-------------------------------------------------------------
+//
+//each memory block could fit for two page sizes: 0.75 * mSlotSize, which starts from the beginning of the memory chunk and grow towards the end of the
+//the block; another is mSlotSize, which starts from the end of the block and grows towards the beginning of the block.
+//
+LLPrivateMemoryPool::LLMemoryBlock::LLMemoryBlock()
+{
+ //empty
+}
+
+LLPrivateMemoryPool::LLMemoryBlock::~LLMemoryBlock()
+{
+ //empty
+}
+
+//create and initialize a memory block
+void LLPrivateMemoryPool::LLMemoryBlock::init(char* buffer, U32 buffer_size, U32 slot_size)
+{
+ mBuffer = buffer ;
+ mBufferSize = buffer_size ;
+ mSlotSize = slot_size ;
+ mTotalSlots = buffer_size / mSlotSize ;
+
+ llassert_always(buffer_size / mSlotSize <= MAX_NUM_SLOTS_IN_A_BLOCK) ; //max number is 128
+
+ mAllocatedSlots = 0 ;
+ mDummySize = 0 ;
+
+ //init the bit map.
+ //mark free bits
+ if(mTotalSlots > 32) //reserve extra space from mBuffer to store bitmap if needed.
+ {
+ mDummySize = ATOMIC_MEM_SLOT ;
+ mTotalSlots -= (mDummySize + mSlotSize - 1) / mSlotSize ;
+ mUsageBits = 0 ;
+
+ S32 usage_bit_len = (mTotalSlots + 31) / 32 ;
+
+ for(S32 i = 0 ; i < usage_bit_len - 1 ; i++)
+ {
+ *((U32*)mBuffer + i) = 0 ;
+ }
+ for(S32 i = usage_bit_len - 1 ; i < mDummySize / sizeof(U32) ; i++)
+ {
+ *((U32*)mBuffer + i) = 0xffffffff ;
+ }
+
+ if(mTotalSlots & 31)
+ {
+ *((U32*)mBuffer + usage_bit_len - 2) = (0xffffffff << (mTotalSlots & 31)) ;
+ }
+ }
+ else//no extra bitmap space reserved
+ {
+ mUsageBits = 0 ;
+ if(mTotalSlots & 31)
+ {
+ mUsageBits = (0xffffffff << (mTotalSlots & 31)) ;
+ }
+ }
+
+ mSelf = this ;
+ mNext = NULL ;
+ mPrev = NULL ;
+
+ llassert_always(mTotalSlots > 0) ;
+}
+
+//mark this block to be free with the memory [mBuffer, mBuffer + mBufferSize).
+void LLPrivateMemoryPool::LLMemoryBlock::setBuffer(char* buffer, U32 buffer_size)
+{
+ mBuffer = buffer ;
+ mBufferSize = buffer_size ;
+ mSelf = NULL ;
+ mTotalSlots = 0 ; //set the block is free.
+}
+
+//reserve a slot
+char* LLPrivateMemoryPool::LLMemoryBlock::allocate()
+{
+ llassert_always(mAllocatedSlots < mTotalSlots) ;
+
+ //find a free slot
+ U32* bits = NULL ;
+ U32 k = 0 ;
+ if(mUsageBits != 0xffffffff)
+ {
+ bits = &mUsageBits ;
+ }
+ else if(mDummySize > 0)//go to extra space
+ {
+ for(S32 i = 0 ; i < mDummySize / sizeof(U32); i++)
+ {
+ if(*((U32*)mBuffer + i) != 0xffffffff)
+ {
+ bits = (U32*)mBuffer + i ;
+ k = i + 1 ;
+ break ;
+ }
+ }
+ }
+ S32 idx = 0 ;
+ U32 tmp = *bits ;
+ for(; tmp & 1 ; tmp >>= 1, idx++) ;
+
+ //set the slot reserved
+ if(!idx)
+ {
+ *bits |= 1 ;
+ }
+ else
+ {
+ *bits |= (1 << idx) ;
+ }
+
+ mAllocatedSlots++ ;
+
+ return mBuffer + mDummySize + (k * 32 + idx) * mSlotSize ;
+}
+
+//free a slot
+void LLPrivateMemoryPool::LLMemoryBlock::freeMem(void* addr)
+{
+ //bit index
+ U32 idx = ((U32)addr - (U32)mBuffer - mDummySize) / mSlotSize ;
+
+ U32* bits = &mUsageBits ;
+ if(idx >= 32)
+ {
+ bits = (U32*)mBuffer + (idx - 32) / 32 ;
+ }
+
+ //reset the bit
+ if(idx & 31)
+ {
+ *bits &= ~(1 << (idx & 31)) ;
+ }
+ else
+ {
+ *bits &= ~1 ;
+ }
+
+ mAllocatedSlots-- ;
+}
+
+//for debug use: reset the entire bitmap.
+void LLPrivateMemoryPool::LLMemoryBlock::resetBitMap()
+{
+ for(S32 i = 0 ; i < mDummySize / sizeof(U32) ; i++)
+ {
+ *((U32*)mBuffer + i) = 0 ;
+ }
+ mUsageBits = 0 ;
+}
+//-------------------------------------------------------------------
+//class LLMemoryChunk
+//--------------------------------------------------------------------
+LLPrivateMemoryPool::LLMemoryChunk::LLMemoryChunk()
+{
+ //empty
+}
+
+LLPrivateMemoryPool::LLMemoryChunk::~LLMemoryChunk()
+{
+ //empty
+}
+
+//create and init a memory chunk
+void LLPrivateMemoryPool::LLMemoryChunk::init(char* buffer, U32 buffer_size, U32 min_slot_size, U32 max_slot_size, U32 min_block_size, U32 max_block_size)
+{
+ mBuffer = buffer ;
+ mBufferSize = buffer_size ;
+ mAlloatedSize = 0 ;
+
+ mMetaBuffer = mBuffer + sizeof(LLMemoryChunk) ;
+
+ mMinBlockSize = min_block_size; //page size
+ mMinSlotSize = min_slot_size;
+ mMaxSlotSize = max_slot_size ;
+ mBlockLevels = mMaxSlotSize / mMinSlotSize ;
+ mPartitionLevels = max_block_size / mMinBlockSize + 1 ;
+
+ S32 max_num_blocks = (buffer_size - sizeof(LLMemoryChunk) - mBlockLevels * sizeof(LLMemoryBlock*) - mPartitionLevels * sizeof(LLMemoryBlock*)) /
+ (mMinBlockSize + sizeof(LLMemoryBlock)) ;
+ //meta data space
+ mBlocks = (LLMemoryBlock*)mMetaBuffer ; //space reserved for all memory blocks.
+ mAvailBlockList = (LLMemoryBlock**)((char*)mBlocks + sizeof(LLMemoryBlock) * max_num_blocks) ;
+ mFreeSpaceList = (LLMemoryBlock**)((char*)mAvailBlockList + sizeof(LLMemoryBlock*) * mBlockLevels) ;
+
+ //data buffer, which can be used for allocation
+ mDataBuffer = (char*)mFreeSpaceList + sizeof(LLMemoryBlock*) * mPartitionLevels ;
+
+ //alignmnet
+ mDataBuffer = mBuffer + align(mDataBuffer - mBuffer) ;
+
+ //init
+ for(U32 i = 0 ; i < mBlockLevels; i++)
+ {
+ mAvailBlockList[i] = NULL ;
+ }
+ for(U32 i = 0 ; i < mPartitionLevels ; i++)
+ {
+ mFreeSpaceList[i] = NULL ;
+ }
+
+ //assign the entire chunk to the first block
+ mBlocks[0].mPrev = NULL ;
+ mBlocks[0].mNext = NULL ;
+ mBlocks[0].setBuffer(mDataBuffer, buffer_size - (mDataBuffer - mBuffer)) ;
+ addToFreeSpace(&mBlocks[0]) ;
+
+ mNext = NULL ;
+ mPrev = NULL ;
+}
+
+//static
+U32 LLPrivateMemoryPool::LLMemoryChunk::getMaxOverhead(U32 data_buffer_size, U32 min_slot_size,
+ U32 max_slot_size, U32 min_block_size, U32 max_block_size)
+{
+ //for large allocations, reserve some extra memory for meta data to avoid wasting much
+ if(data_buffer_size / min_slot_size < 64) //large allocations
+ {
+ U32 overhead = sizeof(LLMemoryChunk) + (data_buffer_size / min_block_size) * sizeof(LLMemoryBlock) +
+ sizeof(LLMemoryBlock*) * (max_slot_size / min_slot_size) + sizeof(LLMemoryBlock*) * (max_block_size / min_block_size + 1) ;
+
+ //round to integer times of min_block_size
+ overhead = ((overhead + min_block_size - 1) / min_block_size) * min_block_size ;
+ return overhead ;
+ }
+ else
+ {
+ return 0 ; //do not reserve extra overhead if for small allocations
+ }
+}
+
+char* LLPrivateMemoryPool::LLMemoryChunk::allocate(U32 size)
+{
+ if(mMinSlotSize > size)
+ {
+ size = mMinSlotSize ;
+ }
+ if(mAlloatedSize + size > mBufferSize - (mDataBuffer - mBuffer))
+ {
+ return NULL ; //no enough space in this chunk.
+ }
+
+ char* p = NULL ;
+ U32 blk_idx = getBlockLevel(size);
+
+ LLMemoryBlock* blk = NULL ;
+
+ //check if there is free block available
+ if(mAvailBlockList[blk_idx])
+ {
+ blk = mAvailBlockList[blk_idx] ;
+ p = blk->allocate() ;
+
+ if(blk->isFull())
+ {
+ popAvailBlockList(blk_idx) ;
+ }
+ }
+
+ //ask for a new block
+ if(!p)
+ {
+ blk = addBlock(blk_idx) ;
+ if(blk)
+ {
+ p = blk->allocate() ;
+
+ if(blk->isFull())
+ {
+ popAvailBlockList(blk_idx) ;
+ }
+ }
+ }
+
+ //ask for space from larger blocks
+ if(!p)
+ {
+ for(S32 i = blk_idx + 1 ; i < mBlockLevels; i++)
+ {
+ if(mAvailBlockList[i])
+ {
+ blk = mAvailBlockList[i] ;
+ p = blk->allocate() ;
+
+ if(blk->isFull())
+ {
+ popAvailBlockList(i) ;
+ }
+ break ;
+ }
+ }
+ }
+
+ if(p && blk)
+ {
+ mAlloatedSize += blk->getSlotSize() ;
+ }
+ return p ;
+}
+
+void LLPrivateMemoryPool::LLMemoryChunk::freeMem(void* addr)
+{
+ U32 blk_idx = getPageIndex((U32)addr) ;
+ LLMemoryBlock* blk = (LLMemoryBlock*)(mMetaBuffer + blk_idx * sizeof(LLMemoryBlock)) ;
+ blk = blk->mSelf ;
+
+ bool was_full = blk->isFull() ;
+ blk->freeMem(addr) ;
+ mAlloatedSize -= blk->getSlotSize() ;
+
+ if(blk->empty())
+ {
+ removeBlock(blk) ;
+ }
+ else if(was_full)
+ {
+ addToAvailBlockList(blk) ;
+ }
+}
+
+bool LLPrivateMemoryPool::LLMemoryChunk::empty()
+{
+ return !mAlloatedSize ;
+}
+
+bool LLPrivateMemoryPool::LLMemoryChunk::containsAddress(const char* addr) const
+{
+ return (U32)mBuffer <= (U32)addr && (U32)mBuffer + mBufferSize > (U32)addr ;
+}
+
+//debug use
+void LLPrivateMemoryPool::LLMemoryChunk::dump()
+{
+#if 0
+ //sanity check
+ //for(S32 i = 0 ; i < mBlockLevels ; i++)
+ //{
+ // LLMemoryBlock* blk = mAvailBlockList[i] ;
+ // while(blk)
+ // {
+ // blk_list.push_back(blk) ;
+ // blk = blk->mNext ;
+ // }
+ //}
+ for(S32 i = 0 ; i < mPartitionLevels ; i++)
+ {
+ LLMemoryBlock* blk = mFreeSpaceList[i] ;
+ while(blk)
+ {
+ blk_list.push_back(blk) ;
+ blk = blk->mNext ;
+ }
+ }
+
+ std::sort(blk_list.begin(), blk_list.end(), LLMemoryBlock::CompareAddress());
+
+ U32 total_size = blk_list[0]->getBufferSize() ;
+ for(U32 i = 1 ; i < blk_list.size(); i++)
+ {
+ total_size += blk_list[i]->getBufferSize() ;
+ if((U32)blk_list[i]->getBuffer() < (U32)blk_list[i-1]->getBuffer() + blk_list[i-1]->getBufferSize())
+ {
+ llerrs << "buffer corrupted." << llendl ;
+ }
+ }
+
+ llassert_always(total_size + mMinBlockSize >= mBufferSize - ((U32)mDataBuffer - (U32)mBuffer)) ;
+
+ U32 blk_num = (mBufferSize - (mDataBuffer - mBuffer)) / mMinBlockSize ;
+ for(U32 i = 0 ; i < blk_num ; )
+ {
+ LLMemoryBlock* blk = &mBlocks[i] ;
+ if(blk->mSelf)
+ {
+ U32 end = blk->getBufferSize() / mMinBlockSize ;
+ for(U32 j = 0 ; j < end ; j++)
+ {
+ llassert_always(blk->mSelf == blk || !blk->mSelf) ;
+ }
+ i += end ;
+ }
+ else
+ {
+ llerrs << "gap happens" << llendl ;
+ }
+ }
+#endif
+#if 0
+ llinfos << "---------------------------" << llendl ;
+ llinfos << "Chunk buffer: " << (U32)getBuffer() << " size: " << getBufferSize() << llendl ;
+
+ llinfos << "available blocks ... " << llendl ;
+ for(S32 i = 0 ; i < mBlockLevels ; i++)
+ {
+ LLMemoryBlock* blk = mAvailBlockList[i] ;
+ while(blk)
+ {
+ llinfos << "blk buffer " << (U32)blk->getBuffer() << " size: " << blk->getBufferSize() << llendl ;
+ blk = blk->mNext ;
+ }
+ }
+
+ llinfos << "free blocks ... " << llendl ;
+ for(S32 i = 0 ; i < mPartitionLevels ; i++)
+ {
+ LLMemoryBlock* blk = mFreeSpaceList[i] ;
+ while(blk)
+ {
+ llinfos << "blk buffer " << (U32)blk->getBuffer() << " size: " << blk->getBufferSize() << llendl ;
+ blk = blk->mNext ;
+ }
+ }
+#endif
+}
+
+//compute the size for a block, the size is round to integer times of mMinBlockSize.
+U32 LLPrivateMemoryPool::LLMemoryChunk::calcBlockSize(U32 slot_size)
+{
+ //
+ //Note: we try to make a block to have 32 slots if the size is not over 32 pages
+ //32 is the number of bits of an integer in a 32-bit system
+ //
+
+ U32 block_size;
+ U32 cut_off_size = llmin(CUT_OFF_SIZE, (U32)(mMinBlockSize << 5)) ;
+
+ if((slot_size << 5) <= mMinBlockSize)//for small allocations, return one page
+ {
+ block_size = mMinBlockSize ;
+ }
+ else if(slot_size >= cut_off_size)//for large allocations, return one-slot block
+ {
+ block_size = (slot_size / mMinBlockSize) * mMinBlockSize ;
+ if(block_size < slot_size)
+ {
+ block_size += mMinBlockSize ;
+ }
+ }
+ else //medium allocations
+ {
+ if((slot_size << 5) >= cut_off_size)
+ {
+ block_size = cut_off_size ;
+ }
+ else
+ {
+ block_size = ((slot_size << 5) / mMinBlockSize) * mMinBlockSize ;
+ }
+ }
+
+ llassert_always(block_size >= slot_size) ;
+
+ return block_size ;
+}
+
+//create a new block in the chunk
+LLPrivateMemoryPool::LLMemoryBlock* LLPrivateMemoryPool::LLMemoryChunk::addBlock(U32 blk_idx)
+{
+ U32 slot_size = mMinSlotSize * (blk_idx + 1) ;
+ U32 preferred_block_size = calcBlockSize(slot_size) ;
+ U16 idx = getPageLevel(preferred_block_size);
+ LLMemoryBlock* blk = NULL ;
+
+ if(mFreeSpaceList[idx])//if there is free slot for blk_idx
+ {
+ blk = createNewBlock(mFreeSpaceList[idx], preferred_block_size, slot_size, blk_idx) ;
+ }
+ else if(mFreeSpaceList[mPartitionLevels - 1]) //search free pool
+ {
+ blk = createNewBlock(mFreeSpaceList[mPartitionLevels - 1], preferred_block_size, slot_size, blk_idx) ;
+ }
+ else //search for other non-preferred but enough space slot.
+ {
+ S32 min_idx = 0 ;
+ if(slot_size > mMinBlockSize)
+ {
+ min_idx = getPageLevel(slot_size) ;
+ }
+ for(S32 i = (S32)idx - 1 ; i >= min_idx ; i--) //search the small slots first
+ {
+ if(mFreeSpaceList[i])
+ {
+ U32 new_preferred_block_size = mFreeSpaceList[i]->getBufferSize();
+ new_preferred_block_size = (new_preferred_block_size / mMinBlockSize) * mMinBlockSize ; //round to integer times of mMinBlockSize.
+
+ //create a NEW BLOCK THERE.
+ if(new_preferred_block_size >= slot_size) //at least there is space for one slot.
+ {
+
+ blk = createNewBlock(mFreeSpaceList[i], new_preferred_block_size, slot_size, blk_idx) ;
+ }
+ break ;
+ }
+ }
+
+ if(!blk)
+ {
+ for(U16 i = idx + 1 ; i < mPartitionLevels - 1; i++) //search the large slots
+ {
+ if(mFreeSpaceList[i])
+ {
+ //create a NEW BLOCK THERE.
+ blk = createNewBlock(mFreeSpaceList[i], preferred_block_size, slot_size, blk_idx) ;
+ break ;
+ }
+ }
+ }
+ }
+
+ return blk ;
+}
+
+//create a new block at the designed location
+LLPrivateMemoryPool::LLMemoryBlock* LLPrivateMemoryPool::LLMemoryChunk::createNewBlock(LLMemoryBlock* blk, U32 buffer_size, U32 slot_size, U32 blk_idx)
+{
+ //unlink from the free space
+ removeFromFreeSpace(blk) ;
+
+ //check the rest space
+ U32 new_free_blk_size = blk->getBufferSize() - buffer_size ;
+ if(new_free_blk_size < mMinBlockSize) //can not partition the memory into size smaller than mMinBlockSize
+ {
+ new_free_blk_size = 0 ; //discard the last small extra space.
+ }
+
+ //add the rest space back to the free list
+ if(new_free_blk_size > 0) //blk still has free space
+ {
+ LLMemoryBlock* next_blk = blk + (buffer_size / mMinBlockSize) ;
+ next_blk->mPrev = NULL ;
+ next_blk->mNext = NULL ;
+ next_blk->setBuffer(blk->getBuffer() + buffer_size, new_free_blk_size) ;
+ addToFreeSpace(next_blk) ;
+ }
+
+ blk->init(blk->getBuffer(), buffer_size, slot_size) ;
+ //insert to the available block list...
+ mAvailBlockList[blk_idx] = blk ;
+
+ //mark the address map: all blocks covered by this block space pointing back to this block.
+ U32 end = (buffer_size / mMinBlockSize) ;
+ for(U32 i = 1 ; i < end ; i++)
+ {
+ (blk + i)->mSelf = blk ;
+ }
+
+ return blk ;
+}
+
+//delete a block, release the block to the free pool.
+void LLPrivateMemoryPool::LLMemoryChunk::removeBlock(LLMemoryBlock* blk)
+{
+ //remove from the available block list
+ if(blk->mPrev)
+ {
+ blk->mPrev->mNext = blk->mNext ;
+ }
+ if(blk->mNext)
+ {
+ blk->mNext->mPrev = blk->mPrev ;
+ }
+ U32 blk_idx = getBlockLevel(blk->getSlotSize());
+ if(mAvailBlockList[blk_idx] == blk)
+ {
+ mAvailBlockList[blk_idx] = blk->mNext ;
+ }
+
+ blk->mNext = NULL ;
+ blk->mPrev = NULL ;
+
+ //mark it free
+ blk->setBuffer(blk->getBuffer(), blk->getBufferSize()) ;
+
+#if 1
+ //merge blk with neighbors if possible
+ if(blk->getBuffer() > mDataBuffer) //has the left neighbor
+ {
+ if((blk - 1)->mSelf->isFree())
+ {
+ LLMemoryBlock* left_blk = (blk - 1)->mSelf ;
+ removeFromFreeSpace((blk - 1)->mSelf);
+ left_blk->setBuffer(left_blk->getBuffer(), left_blk->getBufferSize() + blk->getBufferSize()) ;
+ blk = left_blk ;
+ }
+ }
+ if(blk->getBuffer() + blk->getBufferSize() <= mBuffer + mBufferSize - mMinBlockSize) //has the right neighbor
+ {
+ U32 d = blk->getBufferSize() / mMinBlockSize ;
+ if((blk + d)->isFree())
+ {
+ LLMemoryBlock* right_blk = blk + d ;
+ removeFromFreeSpace(blk + d) ;
+ blk->setBuffer(blk->getBuffer(), blk->getBufferSize() + right_blk->getBufferSize()) ;
+ }
+ }
+#endif
+
+ addToFreeSpace(blk) ;
+
+ return ;
+}
+
+//the top block in the list is full, pop it out of the list
+void LLPrivateMemoryPool::LLMemoryChunk::popAvailBlockList(U32 blk_idx)
+{
+ if(mAvailBlockList[blk_idx])
+ {
+ LLMemoryBlock* next = mAvailBlockList[blk_idx]->mNext ;
+ if(next)
+ {
+ next->mPrev = NULL ;
+ }
+ mAvailBlockList[blk_idx]->mPrev = NULL ;
+ mAvailBlockList[blk_idx]->mNext = NULL ;
+ mAvailBlockList[blk_idx] = next ;
+ }
+}
+
+//add the block back to the free pool
+void LLPrivateMemoryPool::LLMemoryChunk::addToFreeSpace(LLMemoryBlock* blk)
+{
+ llassert_always(!blk->mPrev) ;
+ llassert_always(!blk->mNext) ;
+
+ U16 free_idx = blk->getBufferSize() / mMinBlockSize - 1;
+
+ (blk + free_idx)->mSelf = blk ; //mark the end pointing back to the head.
+ free_idx = llmin(free_idx, (U16)(mPartitionLevels - 1)) ;
+
+ blk->mNext = mFreeSpaceList[free_idx] ;
+ if(mFreeSpaceList[free_idx])
+ {
+ mFreeSpaceList[free_idx]->mPrev = blk ;
+ }
+ mFreeSpaceList[free_idx] = blk ;
+ blk->mPrev = NULL ;
+ blk->mSelf = blk ;
+
+ return ;
+}
+
+//remove the space from the free pool
+void LLPrivateMemoryPool::LLMemoryChunk::removeFromFreeSpace(LLMemoryBlock* blk)
+{
+ U16 free_idx = blk->getBufferSize() / mMinBlockSize - 1;
+ free_idx = llmin(free_idx, (U16)(mPartitionLevels - 1)) ;
+
+ if(mFreeSpaceList[free_idx] == blk)
+ {
+ mFreeSpaceList[free_idx] = blk->mNext ;
+ }
+ if(blk->mPrev)
+ {
+ blk->mPrev->mNext = blk->mNext ;
+ }
+ if(blk->mNext)
+ {
+ blk->mNext->mPrev = blk->mPrev ;
+ }
+ blk->mNext = NULL ;
+ blk->mPrev = NULL ;
+ blk->mSelf = NULL ;
+
+ return ;
+}
+
+void LLPrivateMemoryPool::LLMemoryChunk::addToAvailBlockList(LLMemoryBlock* blk)
+{
+ llassert_always(!blk->mPrev) ;
+ llassert_always(!blk->mNext) ;
+
+ U32 blk_idx = getBlockLevel(blk->getSlotSize());
+
+ blk->mNext = mAvailBlockList[blk_idx] ;
+ if(blk->mNext)
+ {
+ blk->mNext->mPrev = blk ;
+ }
+ blk->mPrev = NULL ;
+ mAvailBlockList[blk_idx] = blk ;
+
+ return ;
+}
+
+U32 LLPrivateMemoryPool::LLMemoryChunk::getPageIndex(U32 addr)
+{
+ return (addr - (U32)mDataBuffer) / mMinBlockSize ;
+}
+
+//for mAvailBlockList
+U32 LLPrivateMemoryPool::LLMemoryChunk::getBlockLevel(U32 size)
+{
+ llassert(size >= mMinSlotSize && size <= mMaxSlotSize) ;
+
+ //start from 0
+ return (size + mMinSlotSize - 1) / mMinSlotSize - 1 ;
+}
+
+//for mFreeSpaceList
+U16 LLPrivateMemoryPool::LLMemoryChunk::getPageLevel(U32 size)
+{
+ //start from 0
+ U16 level = size / mMinBlockSize - 1 ;
+ if(level >= mPartitionLevels)
+ {
+ level = mPartitionLevels - 1 ;
+ }
+ return level ;
+}
+
+//-------------------------------------------------------------------
+//class LLPrivateMemoryPool
+//--------------------------------------------------------------------
+const U32 CHUNK_SIZE = 4 << 20 ; //4 MB
+const U32 LARGE_CHUNK_SIZE = 4 * CHUNK_SIZE ; //16 MB
+LLPrivateMemoryPool::LLPrivateMemoryPool(S32 type) :
+ mMutexp(NULL),
+ mReservedPoolSize(0),
+ mHashFactor(1),
+ mType(type)
+{
+ const U32 MAX_POOL_SIZE = 256 * 1024 * 1024 ; //256 MB
+
+ mMaxPoolSize = MAX_POOL_SIZE ;
+ if(type == STATIC_THREADED || type == VOLATILE_THREADED)
+ {
+ mMutexp = new LLMutex ;
+ }
+
+ for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++)
+ {
+ mChunkList[i] = NULL ;
+ }
+
+ mNumOfChunks = 0 ;
+}
+
+LLPrivateMemoryPool::~LLPrivateMemoryPool()
+{
+ destroyPool();
+ delete mMutexp ;
+}
+
+char* LLPrivateMemoryPool::allocate(U32 size)
+{
+ if(!size)
+ {
+ return NULL ;
+ }
+
+ //if the asked size larger than MAX_BLOCK_SIZE, fetch from heap directly, the pool does not manage it
+ if(size >= CHUNK_SIZE)
+ {
+ return (char*)malloc(size) ;
+ }
+
+ char* p = NULL ;
+
+ //find the appropriate chunk
+ S32 chunk_idx = getChunkIndex(size) ;
+
+ lock() ;
+
+ LLMemoryChunk* chunk = mChunkList[chunk_idx];
+ while(chunk)
+ {
+ if((p = chunk->allocate(size)))
+ {
+ break ;
+ }
+ chunk = chunk->mNext ;
+ }
+
+ //fetch new memory chunk
+ if(!p)
+ {
+ if(mReservedPoolSize + CHUNK_SIZE > mMaxPoolSize)
+ {
+ chunk = mChunkList[chunk_idx];
+ while(chunk)
+ {
+ if((p = chunk->allocate(size)))
+ {
+ break ;
+ }
+ chunk = chunk->mNext ;
+ }
+ }
+
+ chunk = addChunk(chunk_idx) ;
+ if(chunk)
+ {
+ p = chunk->allocate(size) ;
+ }
+ }
+
+ unlock() ;
+
+ return p ;
+}
+
+void LLPrivateMemoryPool::freeMem(void* addr)
+{
+ if(!addr)
+ {
+ return ;
+ }
+
+ lock() ;
+
+ LLMemoryChunk* chunk = findChunk((char*)addr) ;
+
+ if(!chunk)
+ {
+ free(addr) ; //release from heap
+ }
+ else
+ {
+ chunk->freeMem(addr) ;
+
+ if(chunk->empty())
+ {
+ removeChunk(chunk) ;
+ }
+ }
+
+ unlock() ;
+}
+
+void LLPrivateMemoryPool::dump()
+{
+}
+
+U32 LLPrivateMemoryPool::getTotalAllocatedSize()
+{
+ U32 total_allocated = 0 ;
+
+ LLMemoryChunk* chunk ;
+ for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++)
+ {
+ chunk = mChunkList[i];
+ while(chunk)
+ {
+ total_allocated += chunk->getAllocatedSize() ;
+ chunk = chunk->mNext ;
+ }
+ }
+
+ return total_allocated ;
+}
+
+void LLPrivateMemoryPool::lock()
+{
+ if(mMutexp)
+ {
+ mMutexp->lock() ;
+ }
+}
+
+void LLPrivateMemoryPool::unlock()
+{
+ if(mMutexp)
+ {
+ mMutexp->unlock() ;
+ }
+}
+
+S32 LLPrivateMemoryPool::getChunkIndex(U32 size)
+{
+ S32 i ;
+ for(i = 0 ; size > MAX_SLOT_SIZES[i]; i++);
+
+ llassert_always(i < SUPER_ALLOCATION);
+
+ return i ;
+}
+
+//destroy the entire pool
+void LLPrivateMemoryPool::destroyPool()
+{
+ lock() ;
+
+ if(mNumOfChunks > 0)
+ {
+ llwarns << "There is some memory not freed when destroy the memory pool!" << llendl ;
+ }
+
+ mNumOfChunks = 0 ;
+ mChunkHashList.clear() ;
+ mHashFactor = 1 ;
+ for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++)
+ {
+ mChunkList[i] = NULL ;
+ }
+
+ unlock() ;
+}
+
+void LLPrivateMemoryPool::checkSize(U32 asked_size)
+{
+ if(mReservedPoolSize + asked_size > mMaxPoolSize)
+ {
+ llinfos << "Max pool size: " << mMaxPoolSize << llendl ;
+ llinfos << "Total reserved size: " << mReservedPoolSize + asked_size << llendl ;
+ llinfos << "Total_allocated Size: " << getTotalAllocatedSize() << llendl ;
+
+ llerrs << "The pool is overflowing..." << llendl ;
+ }
+}
+
+LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::addChunk(S32 chunk_index)
+{
+ U32 preferred_size ;
+ U32 overhead ;
+ if(chunk_index < LARGE_ALLOCATION)
+ {
+ preferred_size = CHUNK_SIZE ; //4MB
+ overhead = LLMemoryChunk::getMaxOverhead(preferred_size, MIN_SLOT_SIZES[chunk_index],
+ MAX_SLOT_SIZES[chunk_index], MIN_BLOCK_SIZES[chunk_index], MAX_BLOCK_SIZES[chunk_index]) ;
+ }
+ else
+ {
+ preferred_size = LARGE_CHUNK_SIZE ; //16MB
+ overhead = LLMemoryChunk::getMaxOverhead(preferred_size, MIN_SLOT_SIZES[chunk_index],
+ MAX_SLOT_SIZES[chunk_index], MIN_BLOCK_SIZES[chunk_index], MAX_BLOCK_SIZES[chunk_index]) ;
+ }
+
+ checkSize(preferred_size + overhead) ;
+ mReservedPoolSize += preferred_size + overhead ;
+
+ char* buffer = (char*)malloc(preferred_size + overhead) ;
+ if(!buffer)
+ {
+ return NULL ;
+ }
+
+ LLMemoryChunk* chunk = new (buffer) LLMemoryChunk() ;
+ chunk->init(buffer, preferred_size + overhead, MIN_SLOT_SIZES[chunk_index],
+ MAX_SLOT_SIZES[chunk_index], MIN_BLOCK_SIZES[chunk_index], MAX_BLOCK_SIZES[chunk_index]) ;
+
+ //add to the tail of the linked list
+ {
+ if(!mChunkList[chunk_index])
+ {
+ mChunkList[chunk_index] = chunk ;
+ }
+ else
+ {
+ LLMemoryChunk* cur = mChunkList[chunk_index] ;
+ while(cur->mNext)
+ {
+ cur = cur->mNext ;
+ }
+ cur->mNext = chunk ;
+ chunk->mPrev = cur ;
+ }
+ }
+
+ //insert into the hash table
+ addToHashTable(chunk) ;
+
+ mNumOfChunks++;
+
+ return chunk ;
+}
+
+void LLPrivateMemoryPool::removeChunk(LLMemoryChunk* chunk)
+{
+ if(!chunk)
+ {
+ return ;
+ }
+
+ //remove from the linked list
+ for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++)
+ {
+ if(mChunkList[i] == chunk)
+ {
+ mChunkList[i] = chunk->mNext ;
+ }
+ }
+
+ if(chunk->mPrev)
+ {
+ chunk->mPrev->mNext = chunk->mNext ;
+ }
+ if(chunk->mNext)
+ {
+ chunk->mNext->mPrev = chunk->mPrev ;
+ }
+
+ //remove from the hash table
+ removeFromHashTable(chunk) ;
+
+ mNumOfChunks--;
+ mReservedPoolSize -= chunk->getBufferSize() ;
+
+ //release memory
+ free(chunk->getBuffer()) ;
+}
+
+U16 LLPrivateMemoryPool::findHashKey(const char* addr)
+{
+ return (((U32)addr) / CHUNK_SIZE) % mHashFactor ;
+}
+
+LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::findChunk(const char* addr)
+{
+ U16 key = findHashKey(addr) ;
+ if(mChunkHashList.size() <= key)
+ {
+ return NULL ;
+ }
+
+ return mChunkHashList[key].findChunk(addr) ;
+}
+
+void LLPrivateMemoryPool::addToHashTable(LLMemoryChunk* chunk)
+{
+ static const U16 HASH_FACTORS[] = {41, 83, 193, 317, 419, 523, 0xFFFF};
+
+ U16 i ;
+ if(mChunkHashList.empty())
+ {
+ mHashFactor = HASH_FACTORS[0] ;
+ rehash() ;
+ }
+
+ U16 start_key = findHashKey(chunk->getBuffer()) ;
+ U16 end_key = findHashKey(chunk->getBuffer() + chunk->getBufferSize() - 1) ;
+ bool need_rehash = false ;
+
+ if(mChunkHashList[start_key].hasElement(chunk))
+ {
+ return; //already inserted.
+ }
+ need_rehash = mChunkHashList[start_key].add(chunk) ;
+
+ if(start_key == end_key && !need_rehash)
+ {
+ return ; //done
+ }
+
+ if(!need_rehash)
+ {
+ need_rehash = mChunkHashList[end_key].add(chunk) ;
+ }
+
+ if(!need_rehash)
+ {
+ if(end_key < start_key)
+ {
+ need_rehash = fillHashTable(start_key + 1, mHashFactor, chunk) ;
+ if(!need_rehash)
+ {
+ need_rehash = fillHashTable(0, end_key, chunk) ;
+ }
+ }
+ else
+ {
+ need_rehash = fillHashTable(start_key + 1, end_key, chunk) ;
+ }
+ }
+
+ if(need_rehash)
+ {
+ i = 0 ;
+ while(HASH_FACTORS[i] <= mHashFactor) i++;
+
+ mHashFactor = HASH_FACTORS[i] ;
+ llassert_always(mHashFactor != 0xFFFF) ;//stop point to prevent endlessly recursive calls
+
+ rehash() ;
+ }
+}
+
+void LLPrivateMemoryPool::removeFromHashTable(LLMemoryChunk* chunk)
+{
+ U16 start_key = findHashKey(chunk->getBuffer()) ;
+ U16 end_key = findHashKey(chunk->getBuffer() + chunk->getBufferSize() - 1) ;
+
+ mChunkHashList[start_key].remove(chunk) ;
+ if(start_key == end_key)
+ {
+ return ; //done
+ }
+
+ mChunkHashList[end_key].remove(chunk) ;
+
+ if(end_key < start_key)
+ {
+ for(U16 i = start_key + 1 ; i < mHashFactor; i++)
+ {
+ mChunkHashList[i].remove(chunk) ;
+ }
+ for(U16 i = 0 ; i < end_key; i++)
+ {
+ mChunkHashList[i].remove(chunk) ;
+ }
+ }
+ else
+ {
+ for(U16 i = start_key + 1 ; i < end_key; i++)
+ {
+ mChunkHashList[i].remove(chunk) ;
+ }
+ }
+}
+
+void LLPrivateMemoryPool::rehash()
+{
+ llinfos << "new hash factor: " << mHashFactor << llendl ;
+
+ mChunkHashList.clear() ;
+ mChunkHashList.resize(mHashFactor) ;
+
+ LLMemoryChunk* chunk ;
+ for(U16 i = 0 ; i < SUPER_ALLOCATION ; i++)
+ {
+ chunk = mChunkList[i] ;
+ while(chunk)
+ {
+ addToHashTable(chunk) ;
+ chunk = chunk->mNext ;
+ }
+ }
+}
+
+bool LLPrivateMemoryPool::fillHashTable(U16 start, U16 end, LLMemoryChunk* chunk)
+{
+ for(U16 i = start; i < end; i++)
+ {
+ if(mChunkHashList[i].add(chunk))
+ {
+ return true ;
+ }
+ }
+
+ return false ;
+}
+
+//--------------------------------------------------------------------
+// class LLChunkHashElement
+//--------------------------------------------------------------------
+LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::LLChunkHashElement::findChunk(const char* addr)
+{
+ if(mFirst && mFirst->containsAddress(addr))
+ {
+ return mFirst ;
+ }
+ else if(mSecond && mSecond->containsAddress(addr))
+ {
+ return mSecond ;
+ }
+
+ return NULL ;
+}
+
+//return false if successfully inserted to the hash slot.
+bool LLPrivateMemoryPool::LLChunkHashElement::add(LLPrivateMemoryPool::LLMemoryChunk* chunk)
+{
+ llassert_always(!hasElement(chunk)) ;
+
+ if(!mFirst)
+ {
+ mFirst = chunk ;
+ }
+ else if(!mSecond)
+ {
+ mSecond = chunk ;
+ }
+ else
+ {
+ return true ; //failed
+ }
+
+ return false ;
+}
+
+void LLPrivateMemoryPool::LLChunkHashElement::remove(LLPrivateMemoryPool::LLMemoryChunk* chunk)
+{
+ if(mFirst == chunk)
+ {
+ mFirst = NULL ;
+ }
+ else if(mSecond ==chunk)
+ {
+ mSecond = NULL ;
+ }
+ else
+ {
+ llerrs << "This slot does not contain this chunk!" << llendl ;
+ }
+}
+
+//--------------------------------------------------------------------
+//class LLPrivateMemoryPoolManager
+//--------------------------------------------------------------------
+LLPrivateMemoryPoolManager* LLPrivateMemoryPoolManager::sInstance = NULL ;
+
+LLPrivateMemoryPoolManager::LLPrivateMemoryPoolManager(BOOL enabled)
+{
+ mPoolList.resize(LLPrivateMemoryPool::MAX_TYPES) ;
+
+ for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++)
+ {
+ mPoolList[i] = NULL ;
+ }
+
+ mPrivatePoolEnabled = enabled ;
+}
+
+LLPrivateMemoryPoolManager::~LLPrivateMemoryPoolManager()
+{
+
+#if __DEBUG_PRIVATE_MEM__
+ if(!sMemAllocationTracker.empty())
+ {
+ llwarns << "there is potential memory leaking here. The list of not freed memory blocks are from: " <<llendl ;
+
+ S32 k = 0 ;
+ for(mem_allocation_info_t::iterator iter = sMemAllocationTracker.begin() ; iter != sMemAllocationTracker.end() ; ++iter)
+ {
+ llinfos << k++ << ", " << iter->second << llendl ;
+ }
+ sMemAllocationTracker.clear() ;
+ }
+#endif
+
+#if 0
+ //all private pools should be released by their owners before reaching here.
+ for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++)
+ {
+ llassert_always(!mPoolList[i]) ;
+ }
+ mPoolList.clear() ;
+
+#else
+ //forcefully release all memory
+ for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++)
+ {
+ if(mPoolList[i])
+ {
+ delete mPoolList[i] ;
+ mPoolList[i] = NULL ;
+ }
+ }
+ mPoolList.clear() ;
+#endif
+}
+
+//static
+void LLPrivateMemoryPoolManager::initClass(BOOL enabled)
+{
+ llassert_always(!sInstance) ;
+
+ sInstance = new LLPrivateMemoryPoolManager(enabled) ;
+}
+
+//static
+LLPrivateMemoryPoolManager* LLPrivateMemoryPoolManager::getInstance()
+{
+ //if(!sInstance)
+ //{
+ // sInstance = new LLPrivateMemoryPoolManager(FALSE) ;
+ //}
+ return sInstance ;
+}
+
+//static
+void LLPrivateMemoryPoolManager::destroyClass()
+{
+ if(sInstance)
+ {
+ delete sInstance ;
+ sInstance = NULL ;
+ }
+}
+
+LLPrivateMemoryPool* LLPrivateMemoryPoolManager::newPool(S32 type)
+{
+ if(!mPrivatePoolEnabled)
+ {
+ return NULL ;
+ }
+
+ if(!mPoolList[type])
+ {
+ mPoolList[type] = new LLPrivateMemoryPool(type) ;
+ }
+
+ return mPoolList[type] ;
+}
+
+void LLPrivateMemoryPoolManager::deletePool(LLPrivateMemoryPool* pool)
+{
+ if(pool && pool->isEmpty())
+ {
+ mPoolList[pool->getType()] = NULL ;
+ delete pool;
+ }
+}
+
+//debug
+void LLPrivateMemoryPoolManager::updateStatistics()
+{
+ mTotalReservedSize = 0 ;
+ mTotalAllocatedSize = 0 ;
+
+ for(U32 i = 0; i < mPoolList.size(); i++)
+ {
+ if(mPoolList[i])
+ {
+ mTotalReservedSize += mPoolList[i]->getTotalReservedSize() ;
+ mTotalAllocatedSize += mPoolList[i]->getTotalAllocatedSize() ;
+ }
+ }
+}
+
+#if __DEBUG_PRIVATE_MEM__
+//static
+char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size, const char* function, const int line)
+{
+ char* p ;
+
+ if(!poolp)
+ {
+ p = (char*)malloc(size) ;
+ }
+ else
+ {
+ p = poolp->allocate(size) ;
+ }
+
+ if(p)
+ {
+ char num[16] ;
+ sprintf(num, " line: %d ", line) ;
+ std::string str(function) ;
+ str += num;
+
+ sMemAllocationTracker[p] = str ;
+ }
+
+ return p ;
+}
+#else
+//static
+char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size)
+{
+ if(poolp)
+ {
+ return poolp->allocate(size) ;
+ }
+ else
+ {
+ return (char*)malloc(size) ;
+ }
+}
+#endif
+
+//static
+void LLPrivateMemoryPoolManager::freeMem(LLPrivateMemoryPool* poolp, void* addr)
+{
+ if(!addr)
+ {
+ return ;
+ }
+
+#if __DEBUG_PRIVATE_MEM__
+ sMemAllocationTracker.erase((char*)addr) ;
+#endif
+
+ if(poolp)
+ {
+ poolp->freeMem(addr) ;
+ }
+ else
+ {
+ free(addr) ;
+ }
+}
+
+//--------------------------------------------------------------------
+//class LLPrivateMemoryPoolTester
+//--------------------------------------------------------------------
+#if 0
+LLPrivateMemoryPoolTester* LLPrivateMemoryPoolTester::sInstance = NULL ;
+LLPrivateMemoryPool* LLPrivateMemoryPoolTester::sPool = NULL ;
+LLPrivateMemoryPoolTester::LLPrivateMemoryPoolTester()
+{
+}
+
+LLPrivateMemoryPoolTester::~LLPrivateMemoryPoolTester()
+{
+}
+
+//static
+LLPrivateMemoryPoolTester* LLPrivateMemoryPoolTester::getInstance()
+{
+ if(!sInstance)
+ {
+ sInstance = ::new LLPrivateMemoryPoolTester() ;
+ }
+ return sInstance ;
+}
+
+//static
+void LLPrivateMemoryPoolTester::destroy()
+{
+ if(sInstance)
+ {
+ ::delete sInstance ;
+ sInstance = NULL ;
+ }
+
+ if(sPool)
+ {
+ LLPrivateMemoryPoolManager::getInstance()->deletePool(sPool) ;
+ sPool = NULL ;
+ }
+}
+
+void LLPrivateMemoryPoolTester::run(S32 type)
+{
+ if(sPool)
+ {
+ LLPrivateMemoryPoolManager::getInstance()->deletePool(sPool) ;
+ }
+ sPool = LLPrivateMemoryPoolManager::getInstance()->newPool(type) ;
+
+ //run the test
+ correctnessTest() ;
+ performanceTest() ;
+ //fragmentationtest() ;
+
+ //release pool.
+ LLPrivateMemoryPoolManager::getInstance()->deletePool(sPool) ;
+ sPool = NULL ;
+}
+
+void LLPrivateMemoryPoolTester::test(U32 min_size, U32 max_size, U32 stride, U32 times,
+ bool random_deletion, bool output_statistics)
+{
+ U32 levels = (max_size - min_size) / stride + 1 ;
+ char*** p ;
+ U32 i, j ;
+ U32 total_allocated_size = 0 ;
+
+ //allocate space for p ;
+ if(!(p = ::new char**[times]) || !(*p = ::new char*[times * levels]))
+ {
+ llerrs << "memory initialization for p failed" << llendl ;
+ }
+
+ //init
+ for(i = 0 ; i < times; i++)
+ {
+ p[i] = *p + i * levels ;
+ for(j = 0 ; j < levels; j++)
+ {
+ p[i][j] = NULL ;
+ }
+ }
+
+ //allocation
+ U32 size ;
+ for(i = 0 ; i < times ; i++)
+ {
+ for(j = 0 ; j < levels; j++)
+ {
+ size = min_size + j * stride ;
+ p[i][j] = ALLOCATE_MEM(sPool, size) ;
+
+ total_allocated_size+= size ;
+
+ *(U32*)p[i][j] = i ;
+ *((U32*)p[i][j] + 1) = j ;
+ //p[i][j][size - 1] = '\0' ; //access the last element to verify the success of the allocation.
+
+ //randomly release memory
+ if(random_deletion)
+ {
+ S32 k = rand() % levels ;
+
+ if(p[i][k])
+ {
+ llassert_always(*(U32*)p[i][k] == i && *((U32*)p[i][k] + 1) == k) ;
+ FREE_MEM(sPool, p[i][k]) ;
+ total_allocated_size -= min_size + k * stride ;
+ p[i][k] = NULL ;
+ }
+ }
+ }
+ }
+
+ //output pool allocation statistics
+ if(output_statistics)
+ {
+ }
+
+ //release all memory allocations
+ for(i = 0 ; i < times; i++)
+ {
+ for(j = 0 ; j < levels; j++)
+ {
+ if(p[i][j])
+ {
+ llassert_always(*(U32*)p[i][j] == i && *((U32*)p[i][j] + 1) == j) ;
+ FREE_MEM(sPool, p[i][j]) ;
+ total_allocated_size -= min_size + j * stride ;
+ p[i][j] = NULL ;
+ }
+ }
+ }
+
+ ::delete[] *p ;
+ ::delete[] p ;
+}
+
+void LLPrivateMemoryPoolTester::testAndTime(U32 size, U32 times)
+{
+ LLTimer timer ;
+
+ llinfos << " -**********************- " << llendl ;
+ llinfos << "test size: " << size << " test times: " << times << llendl ;
+
+ timer.reset() ;
+ char** p = new char*[times] ;
+
+ //using the customized memory pool
+ //allocation
+ for(U32 i = 0 ; i < times; i++)
+ {
+ p[i] = ALLOCATE_MEM(sPool, size) ;
+ if(!p[i])
+ {
+ llerrs << "allocation failed" << llendl ;
+ }
+ }
+ //de-allocation
+ for(U32 i = 0 ; i < times; i++)
+ {
+ FREE_MEM(sPool, p[i]) ;
+ p[i] = NULL ;
+ }
+ llinfos << "time spent using customized memory pool: " << timer.getElapsedTimeF32() << llendl ;
+
+ timer.reset() ;
+
+ //using the standard allocator/de-allocator:
+ //allocation
+ for(U32 i = 0 ; i < times; i++)
+ {
+ p[i] = ::new char[size] ;
+ if(!p[i])
+ {
+ llerrs << "allocation failed" << llendl ;
+ }
+ }
+ //de-allocation
+ for(U32 i = 0 ; i < times; i++)
+ {
+ ::delete[] p[i] ;
+ p[i] = NULL ;
+ }
+ llinfos << "time spent using standard allocator/de-allocator: " << timer.getElapsedTimeF32() << llendl ;
+
+ delete[] p;
+}
+
+void LLPrivateMemoryPoolTester::correctnessTest()
+{
+ //try many different sized allocation, and all kinds of edge cases, access the allocated memory
+ //to see if allocation is right.
+
+ //edge case
+ char* p = ALLOCATE_MEM(sPool, 0) ;
+ FREE_MEM(sPool, p) ;
+
+ //small sized
+ // [8 bytes, 2KB), each asks for 256 allocations and deallocations
+ test(8, 2040, 8, 256, true, true) ;
+
+ //medium sized
+ //[2KB, 512KB), each asks for 16 allocations and deallocations
+ test(2048, 512 * 1024 - 2048, 2048, 16, true, true) ;
+
+ //large sized
+ //[512KB, 4MB], each asks for 8 allocations and deallocations
+ test(512 * 1024, 4 * 1024 * 1024, 64 * 1024, 6, true, true) ;
+}
+
+void LLPrivateMemoryPoolTester::performanceTest()
+{
+ U32 test_size[3] = {768, 3* 1024, 3* 1024 * 1024};
+
+ //small sized
+ testAndTime(test_size[0], 8) ;
+
+ //medium sized
+ testAndTime(test_size[1], 8) ;
+
+ //large sized
+ testAndTime(test_size[2], 8) ;
+}
+
+void LLPrivateMemoryPoolTester::fragmentationtest()
+{
+ //for internal fragmentation statistics:
+ //every time when asking for a new chunk during correctness test, and performance test,
+ //print out the chunk usage statistices.
+}
+#endif
+//--------------------------------------------------------------------
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
index 3bd1403576..db753f0d8b 100644
--- a/indra/llcommon/llmemory.h
+++ b/indra/llcommon/llmemory.h
@@ -27,7 +27,6 @@
#define LLMEMORY_H
#include "llmemtype.h"
-
#if LL_DEBUG
inline void* ll_aligned_malloc( size_t size, int align )
{
@@ -105,6 +104,10 @@ inline void ll_aligned_free_32(void *p)
#define ll_aligned_free_32 free
#endif // LL_DEBUG
+#ifndef __DEBUG_PRIVATE_MEM__
+#define __DEBUG_PRIVATE_MEM__ 0
+#endif
+
class LL_COMMON_API LLMemory
{
public:
@@ -115,8 +118,24 @@ public:
// Return value is zero if not known.
static U64 getCurrentRSS();
static U32 getWorkingSetSize();
+ static void* tryToAlloc(void* address, U32 size);
+ static void initMaxHeapSizeGB(F32 max_heap_size_gb, BOOL prevent_heap_failure);
+ static void updateMemoryInfo() ;
+ static void logMemoryInfo(BOOL update = FALSE);
+ static S32 isMemoryPoolLow();
+
+ static U32 getAvailableMemKB() ;
+ static U32 getMaxMemKB() ;
+ static U32 getAllocatedMemKB() ;
private:
static char* reserveMem;
+ static U32 sAvailPhysicalMemInKB ;
+ static U32 sMaxPhysicalMemInKB ;
+ static U32 sAllocatedMemInKB;
+ static U32 sAllocatedPageSizeInKB ;
+
+ static U32 sMaxHeapSizeInKB;
+ static BOOL sEnableMemoryFailurePrevention;
};
//----------------------------------------------------------------------------
@@ -163,6 +182,326 @@ private:
//----------------------------------------------------------------------------
+
+//
+//class LLPrivateMemoryPool defines a private memory pool for an application to use, so the application does not
+//need to access the heap directly fro each memory allocation. Throught this, the allocation speed is faster,
+//and reduces virtaul address space gragmentation problem.
+//Note: this class is thread-safe by passing true to the constructor function. However, you do not need to do this unless
+//you are sure the memory allocation and de-allocation will happen in different threads. To make the pool thread safe
+//increases allocation and deallocation cost.
+//
+class LL_COMMON_API LLPrivateMemoryPool
+{
+ friend class LLPrivateMemoryPoolManager ;
+
+public:
+ class LL_COMMON_API LLMemoryBlock //each block is devided into slots uniformly
+ {
+ public:
+ LLMemoryBlock() ;
+ ~LLMemoryBlock() ;
+
+ void init(char* buffer, U32 buffer_size, U32 slot_size) ;
+ void setBuffer(char* buffer, U32 buffer_size) ;
+
+ char* allocate() ;
+ void freeMem(void* addr) ;
+
+ bool empty() {return !mAllocatedSlots;}
+ bool isFull() {return mAllocatedSlots == mTotalSlots;}
+ bool isFree() {return !mTotalSlots;}
+
+ U32 getSlotSize()const {return mSlotSize;}
+ U32 getTotalSlots()const {return mTotalSlots;}
+ U32 getBufferSize()const {return mBufferSize;}
+ char* getBuffer() const {return mBuffer;}
+
+ //debug use
+ void resetBitMap() ;
+ private:
+ char* mBuffer;
+ U32 mSlotSize ; //when the block is not initialized, it is the buffer size.
+ U32 mBufferSize ;
+ U32 mUsageBits ;
+ U8 mTotalSlots ;
+ U8 mAllocatedSlots ;
+ U8 mDummySize ; //size of extra bytes reserved for mUsageBits.
+
+ public:
+ LLMemoryBlock* mPrev ;
+ LLMemoryBlock* mNext ;
+ LLMemoryBlock* mSelf ;
+
+ struct CompareAddress
+ {
+ bool operator()(const LLMemoryBlock* const& lhs, const LLMemoryBlock* const& rhs)
+ {
+ return (U32)lhs->getBuffer() < (U32)rhs->getBuffer();
+ }
+ };
+ };
+
+ class LL_COMMON_API LLMemoryChunk //is divided into memory blocks.
+ {
+ public:
+ LLMemoryChunk() ;
+ ~LLMemoryChunk() ;
+
+ void init(char* buffer, U32 buffer_size, U32 min_slot_size, U32 max_slot_size, U32 min_block_size, U32 max_block_size) ;
+ void setBuffer(char* buffer, U32 buffer_size) ;
+
+ bool empty() ;
+
+ char* allocate(U32 size) ;
+ void freeMem(void* addr) ;
+
+ char* getBuffer() const {return mBuffer;}
+ U32 getBufferSize() const {return mBufferSize;}
+ U32 getAllocatedSize() const {return mAlloatedSize;}
+
+ bool containsAddress(const char* addr) const;
+
+ static U32 getMaxOverhead(U32 data_buffer_size, U32 min_slot_size,
+ U32 max_slot_size, U32 min_block_size, U32 max_block_size) ;
+
+ void dump() ;
+
+ private:
+ U32 getPageIndex(U32 addr) ;
+ U32 getBlockLevel(U32 size) ;
+ U16 getPageLevel(U32 size) ;
+ LLMemoryBlock* addBlock(U32 blk_idx) ;
+ void popAvailBlockList(U32 blk_idx) ;
+ void addToFreeSpace(LLMemoryBlock* blk) ;
+ void removeFromFreeSpace(LLMemoryBlock* blk) ;
+ void removeBlock(LLMemoryBlock* blk) ;
+ void addToAvailBlockList(LLMemoryBlock* blk) ;
+ U32 calcBlockSize(U32 slot_size);
+ LLMemoryBlock* createNewBlock(LLMemoryBlock* blk, U32 buffer_size, U32 slot_size, U32 blk_idx) ;
+
+ private:
+ LLMemoryBlock** mAvailBlockList ;//256 by mMinSlotSize
+ LLMemoryBlock** mFreeSpaceList;
+ LLMemoryBlock* mBlocks ; //index of blocks by address.
+
+ char* mBuffer ;
+ U32 mBufferSize ;
+ char* mDataBuffer ;
+ char* mMetaBuffer ;
+ U32 mMinBlockSize ;
+ U32 mMinSlotSize ;
+ U32 mMaxSlotSize ;
+ U32 mAlloatedSize ;
+ U16 mBlockLevels;
+ U16 mPartitionLevels;
+
+ public:
+ //form a linked list
+ LLMemoryChunk* mNext ;
+ LLMemoryChunk* mPrev ;
+ } ;
+
+private:
+ LLPrivateMemoryPool(S32 type) ;
+ ~LLPrivateMemoryPool() ;
+
+ char *allocate(U32 size) ;
+ void freeMem(void* addr) ;
+
+ void dump() ;
+ U32 getTotalAllocatedSize() ;
+ U32 getTotalReservedSize() {return mReservedPoolSize;}
+ S32 getType() const {return mType; }
+ bool isEmpty() const {return !mNumOfChunks; }
+
+private:
+ void lock() ;
+ void unlock() ;
+ S32 getChunkIndex(U32 size) ;
+ LLMemoryChunk* addChunk(S32 chunk_index) ;
+ void checkSize(U32 asked_size) ;
+ void removeChunk(LLMemoryChunk* chunk) ;
+ U16 findHashKey(const char* addr);
+ void addToHashTable(LLMemoryChunk* chunk) ;
+ void removeFromHashTable(LLMemoryChunk* chunk) ;
+ void rehash() ;
+ bool fillHashTable(U16 start, U16 end, LLMemoryChunk* chunk) ;
+ LLMemoryChunk* findChunk(const char* addr) ;
+
+ void destroyPool() ;
+
+public:
+ enum
+ {
+ SMALL_ALLOCATION = 0, //from 8 bytes to 2KB(exclusive), page size 2KB, max chunk size is 4MB.
+ MEDIUM_ALLOCATION, //from 2KB to 512KB(exclusive), page size 32KB, max chunk size 4MB
+ LARGE_ALLOCATION, //from 512KB to 4MB(inclusive), page size 64KB, max chunk size 16MB
+ SUPER_ALLOCATION //allocation larger than 4MB.
+ };
+
+ enum
+ {
+ STATIC = 0 , //static pool(each alllocation stays for a long time) without threading support
+ VOLATILE, //Volatile pool(each allocation stays for a very short time) without threading support
+ STATIC_THREADED, //static pool with threading support
+ VOLATILE_THREADED, //volatile pool with threading support
+ MAX_TYPES
+ }; //pool types
+
+private:
+ LLMutex* mMutexp ;
+ U32 mMaxPoolSize;
+ U32 mReservedPoolSize ;
+
+ LLMemoryChunk* mChunkList[SUPER_ALLOCATION] ; //all memory chunks reserved by this pool, sorted by address
+ U16 mNumOfChunks ;
+ U16 mHashFactor ;
+
+ S32 mType ;
+
+ class LLChunkHashElement
+ {
+ public:
+ LLChunkHashElement() {mFirst = NULL ; mSecond = NULL ;}
+
+ bool add(LLMemoryChunk* chunk) ;
+ void remove(LLMemoryChunk* chunk) ;
+ LLMemoryChunk* findChunk(const char* addr) ;
+
+ bool empty() {return !mFirst && !mSecond; }
+ bool full() {return mFirst && mSecond; }
+ bool hasElement(LLMemoryChunk* chunk) {return mFirst == chunk || mSecond == chunk;}
+
+ private:
+ LLMemoryChunk* mFirst ;
+ LLMemoryChunk* mSecond ;
+ };
+ std::vector<LLChunkHashElement> mChunkHashList ;
+};
+
+class LL_COMMON_API LLPrivateMemoryPoolManager
+{
+private:
+ LLPrivateMemoryPoolManager(BOOL enabled) ;
+ ~LLPrivateMemoryPoolManager() ;
+
+public:
+ static LLPrivateMemoryPoolManager* getInstance() ;
+ static void initClass(BOOL enabled) ;
+ static void destroyClass() ;
+
+ LLPrivateMemoryPool* newPool(S32 type) ;
+ void deletePool(LLPrivateMemoryPool* pool) ;
+
+private:
+ static LLPrivateMemoryPoolManager* sInstance ;
+ std::vector<LLPrivateMemoryPool*> mPoolList ;
+ BOOL mPrivatePoolEnabled;
+
+public:
+ //debug and statistics info.
+ void updateStatistics() ;
+
+ U32 mTotalReservedSize ;
+ U32 mTotalAllocatedSize ;
+
+public:
+#if __DEBUG_PRIVATE_MEM__
+ static char* allocate(LLPrivateMemoryPool* poolp, U32 size, const char* function, const int line) ;
+
+ typedef std::map<char*, std::string> mem_allocation_info_t ;
+ static mem_allocation_info_t sMemAllocationTracker;
+#else
+ static char* allocate(LLPrivateMemoryPool* poolp, U32 size) ;
+#endif
+ static void freeMem(LLPrivateMemoryPool* poolp, void* addr) ;
+};
+
+//-------------------------------------------------------------------------------------
+#if __DEBUG_PRIVATE_MEM__
+#define ALLOCATE_MEM(poolp, size) LLPrivateMemoryPoolManager::allocate((poolp), (size), __FUNCTION__, __LINE__)
+#else
+#define ALLOCATE_MEM(poolp, size) LLPrivateMemoryPoolManager::allocate((poolp), (size))
+#endif
+#define FREE_MEM(poolp, addr) LLPrivateMemoryPoolManager::freeMem((poolp), (addr))
+//-------------------------------------------------------------------------------------
+
+//
+//the below singleton is used to test the private memory pool.
+//
+#if 0
+class LL_COMMON_API LLPrivateMemoryPoolTester
+{
+private:
+ LLPrivateMemoryPoolTester() ;
+ ~LLPrivateMemoryPoolTester() ;
+
+public:
+ static LLPrivateMemoryPoolTester* getInstance() ;
+ static void destroy() ;
+
+ void run(S32 type) ;
+
+private:
+ void correctnessTest() ;
+ void performanceTest() ;
+ void fragmentationtest() ;
+
+ void test(U32 min_size, U32 max_size, U32 stride, U32 times, bool random_deletion, bool output_statistics) ;
+ void testAndTime(U32 size, U32 times) ;
+
+#if 0
+public:
+ void* operator new(size_t size)
+ {
+ return (void*)sPool->allocate(size) ;
+ }
+ void operator delete(void* addr)
+ {
+ sPool->freeMem(addr) ;
+ }
+ void* operator new[](size_t size)
+ {
+ return (void*)sPool->allocate(size) ;
+ }
+ void operator delete[](void* addr)
+ {
+ sPool->freeMem(addr) ;
+ }
+#endif
+
+private:
+ static LLPrivateMemoryPoolTester* sInstance;
+ static LLPrivateMemoryPool* sPool ;
+ static LLPrivateMemoryPool* sThreadedPool ;
+};
+#if 0
+//static
+void* LLPrivateMemoryPoolTester::operator new(size_t size)
+{
+ return (void*)sPool->allocate(size) ;
+}
+
+//static
+void LLPrivateMemoryPoolTester::operator delete(void* addr)
+{
+ sPool->free(addr) ;
+}
+
+//static
+void* LLPrivateMemoryPoolTester::operator new[](size_t size)
+{
+ return (void*)sPool->allocate(size) ;
+}
+
+//static
+void LLPrivateMemoryPoolTester::operator delete[](void* addr)
+{
+ sPool->free(addr) ;
+}
+#endif
+#endif
// LLRefCount moved to llrefcount.h
// LLPointer moved to llpointer.h
diff --git a/indra/llcommon/llscopedvolatileaprpool.h b/indra/llcommon/llscopedvolatileaprpool.h
new file mode 100644
index 0000000000..dbaf4edcad
--- /dev/null
+++ b/indra/llcommon/llscopedvolatileaprpool.h
@@ -0,0 +1,52 @@
+/**
+ * @file llscopedvolatileaprpool.h
+ * @brief Implementation of LLScopedVolatileAPRPool
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLSCOPEDVOLATILEAPRPOOL_H
+#define LL_LLSCOPEDVOLATILEAPRPOOL_H
+
+#include "llthread.h"
+
+/** Scoped volatile memory pool.
+ *
+ * As the LLVolatileAPRPool should never keep allocations very
+ * long, its most common use is for allocations with a lifetime
+ * equal to it's scope.
+ *
+ * This is a convenience class that makes just a little easier to type.
+ */
+class LL_COMMON_API LLScopedVolatileAPRPool
+{
+private:
+ LLVolatileAPRPool& mPool;
+ apr_pool_t* mScopedAPRpool; // The use of apr_pool_t is OK here.
+public:
+ LLScopedVolatileAPRPool() : mPool(LLThreadLocalData::tldata().mVolatileAPRPool), mScopedAPRpool(mPool.getVolatileAPRPool()) { }
+ ~LLScopedVolatileAPRPool() { mPool.clearVolatileAPRPool(); }
+ //! @attention Only use this to pass the underlaying pointer to a libapr-1 function that requires it.
+ operator apr_pool_t*() const { return mScopedAPRpool; } // The use of apr_pool_t is OK here.
+};
+
+#endif
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
index c5a7c6fc15..bf216d41bf 100644
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -354,6 +354,7 @@ static unsigned get_till_eol(std::istream& input, char *buf, unsigned bufsize)
return count;
}
+LLFastTimer::DeclareTimer FTM_SD_PARSE_READ_STREAM("LLSD Read Stream");
S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
{
XML_Status status;
@@ -373,10 +374,13 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
{
break;
}
- count = get_till_eol(input, (char *)buffer, BUFFER_SIZE);
- if (!count)
- {
- break;
+ { LLFastTimer _(FTM_SD_PARSE_READ_STREAM);
+
+ count = get_till_eol(input, (char *)buffer, BUFFER_SIZE);
+ if (!count)
+ {
+ break;
+ }
}
status = XML_ParseBuffer(mParser, count, false);
@@ -716,6 +720,7 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name)
case ELEMENT_INTEGER:
{
S32 i;
+ // sscanf okay here with different locales - ints don't change for different locale settings like floats do.
if ( sscanf(mCurrentContent.c_str(), "%d", &i ) == 1 )
{ // See if sscanf works - it's faster
value = i;
@@ -729,15 +734,19 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name)
case ELEMENT_REAL:
{
- F64 r;
- if ( sscanf(mCurrentContent.c_str(), "%lf", &r ) == 1 )
- { // See if sscanf works - it's faster
- value = r;
- }
- else
- {
- value = LLSD(mCurrentContent).asReal();
- }
+ value = LLSD(mCurrentContent).asReal();
+ // removed since this breaks when locale has decimal separator that isn't '.'
+ // investigated changing local to something compatible each time but deemed higher
+ // risk that just using LLSD.asReal() each time.
+ //F64 r;
+ //if ( sscanf(mCurrentContent.c_str(), "%lf", &r ) == 1 )
+ //{ // See if sscanf works - it's faster
+ // value = r;
+ //}
+ //else
+ //{
+ // value = LLSD(mCurrentContent).asReal();
+ //}
}
break;
diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h
index 7aee1bb85f..00757be277 100644
--- a/indra/llcommon/llsingleton.h
+++ b/indra/llcommon/llsingleton.h
@@ -100,12 +100,6 @@ private:
DELETED
} EInitState;
- static void deleteSingleton()
- {
- delete getData().mSingletonInstance;
- getData().mSingletonInstance = NULL;
- }
-
// stores pointer to singleton instance
// and tracks initialization state of singleton
struct SingletonInstanceData
@@ -120,7 +114,11 @@ private:
~SingletonInstanceData()
{
- deleteSingleton();
+ SingletonInstanceData& data = getData();
+ if (data.mInitState != DELETED)
+ {
+ deleteSingleton();
+ }
}
};
@@ -132,6 +130,14 @@ public:
data.mInitState = DELETED;
}
+ // Can be used to control when the singleton is deleted. Not normally needed.
+ static void deleteSingleton()
+ {
+ delete getData().mSingletonInstance;
+ getData().mSingletonInstance = NULL;
+ getData().mInitState = DELETED;
+ }
+
static SingletonInstanceData& getData()
{
// this is static to cache the lookup results
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index f3b48b0156..e7fe656808 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -936,13 +936,18 @@ LLStringUtil::size_type LLStringUtil::getSubstitution(const std::string& instr,
{
const std::string delims (",");
- // Find the first ]
- size_type pos2 = instr.find(']', start);
+ // Find the first [
+ size_type pos1 = instr.find('[', start);
+ if (pos1 == std::string::npos)
+ return std::string::npos;
+
+ //Find the first ] after the initial [
+ size_type pos2 = instr.find(']', pos1);
if (pos2 == std::string::npos)
return std::string::npos;
- // Find the last [ before ]
- size_type pos1 = instr.find_last_of('[', pos2-1);
+ // Find the last [ before ] in case of nested [[]]
+ pos1 = instr.find_last_of('[', pos2-1);
if (pos1 == std::string::npos || pos1 < start)
return std::string::npos;
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index e8616a9be6..d781687175 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -1,6 +1,6 @@
/**
* @file llsys.cpp
- * @brief Impelementation of the basic system query functions.
+ * @brief Implementation of the basic system query functions.
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -24,6 +24,10 @@
* $/LicenseInfo$
*/
+#if LL_WINDOWS
+#pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
+#endif
+
#include "linden_common.h"
#include "llsys.h"
@@ -36,22 +40,45 @@
#endif
#include "llprocessor.h"
+#include "llerrorcontrol.h"
+#include "llevents.h"
+#include "lltimer.h"
+#include "llsdserialize.h"
+#include "llsdutil.h"
+#include <boost/bind.hpp>
+#include <boost/circular_buffer.hpp>
+#include <boost/regex.hpp>
+#include <boost/foreach.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/range.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/type_traits/is_float.hpp>
+
+using namespace llsd;
#if LL_WINDOWS
# define WIN32_LEAN_AND_MEAN
# include <winsock2.h>
# include <windows.h>
+# include <psapi.h> // GetPerformanceInfo() et al.
#elif LL_DARWIN
# include <errno.h>
# include <sys/sysctl.h>
# include <sys/utsname.h>
# include <stdint.h>
# include <Carbon/Carbon.h>
+# include <stdexcept>
+# include <mach/host_info.h>
+# include <mach/mach_host.h>
+# include <mach/task.h>
+# include <mach/task_info.h>
#elif LL_LINUX
# include <errno.h>
# include <sys/utsname.h>
# include <unistd.h>
# include <sys/sysinfo.h>
+# include <stdexcept>
const char MEMINFO_FILE[] = "/proc/meminfo";
#elif LL_SOLARIS
# include <stdio.h>
@@ -70,6 +97,15 @@ extern int errno;
static const S32 CPUINFO_BUFFER_SIZE = 16383;
LLCPUInfo gSysCPU;
+// Don't log memory info any more often than this. It also serves as our
+// framerate sample size.
+static const F32 MEM_INFO_THROTTLE = 20;
+// Sliding window of samples. We intentionally limit the length of time we
+// remember "the slowest" framerate because framerate is very slow at login.
+// If we only triggered FrameWatcher logging when the session framerate
+// dropped below the login framerate, we'd have very little additional data.
+static const F32 MEM_INFO_WINDOW = 10*60;
+
#if LL_WINDOWS
#ifndef DLLVERSIONINFO
typedef struct _DllVersionInfo
@@ -613,8 +649,78 @@ void LLCPUInfo::stream(std::ostream& s) const
s << "->mCPUString: " << mCPUString << std::endl;
}
+// Helper class for LLMemoryInfo: accumulate stats in the form we store for
+// LLMemoryInfo::getStatsMap().
+class Stats
+{
+public:
+ Stats():
+ mStats(LLSD::emptyMap())
+ {}
+
+ // Store every integer type as LLSD::Integer.
+ template <class T>
+ void add(const LLSD::String& name, const T& value,
+ typename boost::enable_if<boost::is_integral<T> >::type* = 0)
+ {
+ mStats[name] = LLSD::Integer(value);
+ }
+
+ // Store every floating-point type as LLSD::Real.
+ template <class T>
+ void add(const LLSD::String& name, const T& value,
+ typename boost::enable_if<boost::is_float<T> >::type* = 0)
+ {
+ mStats[name] = LLSD::Real(value);
+ }
+
+ // Hope that LLSD::Date values are sufficiently unambiguous.
+ void add(const LLSD::String& name, const LLSD::Date& value)
+ {
+ mStats[name] = value;
+ }
+
+ LLSD get() const { return mStats; }
+
+private:
+ LLSD mStats;
+};
+
+// Wrap boost::regex_match() with a function that doesn't throw.
+template <typename S, typename M, typename R>
+static bool regex_match_no_exc(const S& string, M& match, const R& regex)
+{
+ try
+ {
+ return boost::regex_match(string, match, regex);
+ }
+ catch (const std::runtime_error& e)
+ {
+ LL_WARNS("LLMemoryInfo") << "error matching with '" << regex.str() << "': "
+ << e.what() << ":\n'" << string << "'" << LL_ENDL;
+ return false;
+ }
+}
+
+// Wrap boost::regex_search() with a function that doesn't throw.
+template <typename S, typename M, typename R>
+static bool regex_search_no_exc(const S& string, M& match, const R& regex)
+{
+ try
+ {
+ return boost::regex_search(string, match, regex);
+ }
+ catch (const std::runtime_error& e)
+ {
+ LL_WARNS("LLMemoryInfo") << "error searching with '" << regex.str() << "': "
+ << e.what() << ":\n'" << string << "'" << LL_ENDL;
+ return false;
+ }
+}
+
LLMemoryInfo::LLMemoryInfo()
{
+ refresh();
}
#if LL_WINDOWS
@@ -638,11 +744,7 @@ static U32 LLMemoryAdjustKBResult(U32 inKB)
U32 LLMemoryInfo::getPhysicalMemoryKB() const
{
#if LL_WINDOWS
- MEMORYSTATUSEX state;
- state.dwLength = sizeof(state);
- GlobalMemoryStatusEx(&state);
-
- return LLMemoryAdjustKBResult((U32)(state.ullTotalPhys >> 10));
+ return LLMemoryAdjustKBResult(mStatsMap["Total Physical KB"].asInteger());
#elif LL_DARWIN
// This might work on Linux as well. Someone check...
@@ -690,12 +792,82 @@ U32 LLMemoryInfo::getPhysicalMemoryClamped() const
void LLMemoryInfo::getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_virtual_mem_kb)
{
#if LL_WINDOWS
- MEMORYSTATUSEX state;
- state.dwLength = sizeof(state);
- GlobalMemoryStatusEx(&state);
+ // Sigh, this shouldn't be a static method, then we wouldn't have to
+ // reload this data separately from refresh()
+ LLSD statsMap(loadStatsMap());
+
+ avail_physical_mem_kb = statsMap["Avail Physical KB"].asInteger();
+ avail_virtual_mem_kb = statsMap["Avail Virtual KB"].asInteger();
- avail_physical_mem_kb = (U32)(state.ullAvailPhys/1024) ;
- avail_virtual_mem_kb = (U32)(state.ullAvailVirtual/1024) ;
+#elif LL_DARWIN
+ // mStatsMap is derived from vm_stat, look for (e.g.) "kb free":
+ // $ vm_stat
+ // Mach Virtual Memory Statistics: (page size of 4096 bytes)
+ // Pages free: 462078.
+ // Pages active: 142010.
+ // Pages inactive: 220007.
+ // Pages wired down: 159552.
+ // "Translation faults": 220825184.
+ // Pages copy-on-write: 2104153.
+ // Pages zero filled: 167034876.
+ // Pages reactivated: 65153.
+ // Pageins: 2097212.
+ // Pageouts: 41759.
+ // Object cache: 841598 hits of 7629869 lookups (11% hit rate)
+ avail_physical_mem_kb = -1 ;
+ avail_virtual_mem_kb = -1 ;
+
+#elif LL_LINUX
+ // mStatsMap is derived from MEMINFO_FILE:
+ // $ cat /proc/meminfo
+ // MemTotal: 4108424 kB
+ // MemFree: 1244064 kB
+ // Buffers: 85164 kB
+ // Cached: 1990264 kB
+ // SwapCached: 0 kB
+ // Active: 1176648 kB
+ // Inactive: 1427532 kB
+ // Active(anon): 529152 kB
+ // Inactive(anon): 15924 kB
+ // Active(file): 647496 kB
+ // Inactive(file): 1411608 kB
+ // Unevictable: 16 kB
+ // Mlocked: 16 kB
+ // HighTotal: 3266316 kB
+ // HighFree: 721308 kB
+ // LowTotal: 842108 kB
+ // LowFree: 522756 kB
+ // SwapTotal: 6384632 kB
+ // SwapFree: 6384632 kB
+ // Dirty: 28 kB
+ // Writeback: 0 kB
+ // AnonPages: 528820 kB
+ // Mapped: 89472 kB
+ // Shmem: 16324 kB
+ // Slab: 159624 kB
+ // SReclaimable: 145168 kB
+ // SUnreclaim: 14456 kB
+ // KernelStack: 2560 kB
+ // PageTables: 5560 kB
+ // NFS_Unstable: 0 kB
+ // Bounce: 0 kB
+ // WritebackTmp: 0 kB
+ // CommitLimit: 8438844 kB
+ // Committed_AS: 1271596 kB
+ // VmallocTotal: 122880 kB
+ // VmallocUsed: 65252 kB
+ // VmallocChunk: 52356 kB
+ // HardwareCorrupted: 0 kB
+ // HugePages_Total: 0
+ // HugePages_Free: 0
+ // HugePages_Rsvd: 0
+ // HugePages_Surp: 0
+ // Hugepagesize: 2048 kB
+ // DirectMap4k: 434168 kB
+ // DirectMap2M: 477184 kB
+ // (could also run 'free', but easier to read a file than run a program)
+ avail_physical_mem_kb = -1 ;
+ avail_virtual_mem_kb = -1 ;
#else
//do not know how to collect available memory info for other systems.
@@ -708,56 +880,283 @@ void LLMemoryInfo::getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_v
void LLMemoryInfo::stream(std::ostream& s) const
{
+ // We want these memory stats to be easy to grep from the log, along with
+ // the timestamp. So preface each line with the timestamp and a
+ // distinctive marker. Without that, we'd have to search the log for the
+ // introducer line, then read subsequent lines, etc...
+ std::string pfx(LLError::utcTime() + " <mem> ");
+
+ // Max key length
+ size_t key_width(0);
+ BOOST_FOREACH(const MapEntry& pair, inMap(mStatsMap))
+ {
+ size_t len(pair.first.length());
+ if (len > key_width)
+ {
+ key_width = len;
+ }
+ }
+
+ // Now stream stats
+ BOOST_FOREACH(const MapEntry& pair, inMap(mStatsMap))
+ {
+ s << pfx << std::setw(key_width+1) << (pair.first + ':') << ' ';
+ LLSD value(pair.second);
+ if (value.isInteger())
+ s << std::setw(12) << value.asInteger();
+ else if (value.isReal())
+ s << std::fixed << std::setprecision(1) << value.asReal();
+ else if (value.isDate())
+ value.asDate().toStream(s);
+ else
+ s << value; // just use default LLSD formatting
+ s << std::endl;
+ }
+}
+
+LLSD LLMemoryInfo::getStatsMap() const
+{
+ return mStatsMap;
+}
+
+LLMemoryInfo& LLMemoryInfo::refresh()
+{
+ mStatsMap = loadStatsMap();
+
+ LL_DEBUGS("LLMemoryInfo") << "Populated mStatsMap:\n";
+ LLSDSerialize::toPrettyXML(mStatsMap, LL_CONT);
+ LL_ENDL;
+
+ return *this;
+}
+
+LLSD LLMemoryInfo::loadStatsMap()
+{
+ // This implementation is derived from stream() code (as of 2011-06-29).
+ Stats stats;
+
+ // associate timestamp for analysis over time
+ stats.add("timestamp", LLDate::now());
+
#if LL_WINDOWS
MEMORYSTATUSEX state;
state.dwLength = sizeof(state);
GlobalMemoryStatusEx(&state);
- s << "Percent Memory use: " << (U32)state.dwMemoryLoad << '%' << std::endl;
- s << "Total Physical KB: " << (U32)(state.ullTotalPhys/1024) << std::endl;
- s << "Avail Physical KB: " << (U32)(state.ullAvailPhys/1024) << std::endl;
- s << "Total page KB: " << (U32)(state.ullTotalPageFile/1024) << std::endl;
- s << "Avail page KB: " << (U32)(state.ullAvailPageFile/1024) << std::endl;
- s << "Total Virtual KB: " << (U32)(state.ullTotalVirtual/1024) << std::endl;
- s << "Avail Virtual KB: " << (U32)(state.ullAvailVirtual/1024) << std::endl;
+ stats.add("Percent Memory use", state.dwMemoryLoad);
+ stats.add("Total Physical KB", state.ullTotalPhys/1024);
+ stats.add("Avail Physical KB", state.ullAvailPhys/1024);
+ stats.add("Total page KB", state.ullTotalPageFile/1024);
+ stats.add("Avail page KB", state.ullAvailPageFile/1024);
+ stats.add("Total Virtual KB", state.ullTotalVirtual/1024);
+ stats.add("Avail Virtual KB", state.ullAvailVirtual/1024);
+
+ PERFORMANCE_INFORMATION perf;
+ perf.cb = sizeof(perf);
+ GetPerformanceInfo(&perf, sizeof(perf));
+
+ SIZE_T pagekb(perf.PageSize/1024);
+ stats.add("CommitTotal KB", perf.CommitTotal * pagekb);
+ stats.add("CommitLimit KB", perf.CommitLimit * pagekb);
+ stats.add("CommitPeak KB", perf.CommitPeak * pagekb);
+ stats.add("PhysicalTotal KB", perf.PhysicalTotal * pagekb);
+ stats.add("PhysicalAvail KB", perf.PhysicalAvailable * pagekb);
+ stats.add("SystemCache KB", perf.SystemCache * pagekb);
+ stats.add("KernelTotal KB", perf.KernelTotal * pagekb);
+ stats.add("KernelPaged KB", perf.KernelPaged * pagekb);
+ stats.add("KernelNonpaged KB", perf.KernelNonpaged * pagekb);
+ stats.add("PageSize KB", pagekb);
+ stats.add("HandleCount", perf.HandleCount);
+ stats.add("ProcessCount", perf.ProcessCount);
+ stats.add("ThreadCount", perf.ThreadCount);
+
+ PROCESS_MEMORY_COUNTERS_EX pmem;
+ pmem.cb = sizeof(pmem);
+ // GetProcessMemoryInfo() is documented to accept either
+ // PROCESS_MEMORY_COUNTERS* or PROCESS_MEMORY_COUNTERS_EX*, presumably
+ // using the redundant size info to distinguish. But its prototype
+ // specifically accepts PROCESS_MEMORY_COUNTERS*, and since this is a
+ // classic-C API, PROCESS_MEMORY_COUNTERS_EX isn't a subclass. Cast the
+ // pointer.
+ GetProcessMemoryInfo(GetCurrentProcess(), PPROCESS_MEMORY_COUNTERS(&pmem), sizeof(pmem));
+
+ stats.add("Page Fault Count", pmem.PageFaultCount);
+ stats.add("PeakWorkingSetSize KB", pmem.PeakWorkingSetSize/1024);
+ stats.add("WorkingSetSize KB", pmem.WorkingSetSize/1024);
+ stats.add("QutaPeakPagedPoolUsage KB", pmem.QuotaPeakPagedPoolUsage/1024);
+ stats.add("QuotaPagedPoolUsage KB", pmem.QuotaPagedPoolUsage/1024);
+ stats.add("QuotaPeakNonPagedPoolUsage KB", pmem.QuotaPeakNonPagedPoolUsage/1024);
+ stats.add("QuotaNonPagedPoolUsage KB", pmem.QuotaNonPagedPoolUsage/1024);
+ stats.add("PagefileUsage KB", pmem.PagefileUsage/1024);
+ stats.add("PeakPagefileUsage KB", pmem.PeakPagefileUsage/1024);
+ stats.add("PrivateUsage KB", pmem.PrivateUsage/1024);
+
#elif LL_DARWIN
- uint64_t phys = 0;
- size_t len = sizeof(phys);
+ const vm_size_t pagekb(vm_page_size / 1024);
+
+ //
+ // Collect the vm_stat's
+ //
- if(sysctlbyname("hw.memsize", &phys, &len, NULL, 0) == 0)
{
- s << "Total Physical KB: " << phys/1024 << std::endl;
- }
- else
+ vm_statistics_data_t vmstat;
+ mach_msg_type_number_t vmstatCount = HOST_VM_INFO_COUNT;
+
+ if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t) &vmstat, &vmstatCount) != KERN_SUCCESS)
{
- s << "Unable to collect memory information";
+ LL_WARNS("LLMemoryInfo") << "Unable to collect memory information" << LL_ENDL;
+ }
+ else
+ {
+ stats.add("Pages free KB", pagekb * vmstat.free_count);
+ stats.add("Pages active KB", pagekb * vmstat.active_count);
+ stats.add("Pages inactive KB", pagekb * vmstat.inactive_count);
+ stats.add("Pages wired KB", pagekb * vmstat.wire_count);
+
+ stats.add("Pages zero fill", vmstat.zero_fill_count);
+ stats.add("Page reactivations", vmstat.reactivations);
+ stats.add("Page-ins", vmstat.pageins);
+ stats.add("Page-outs", vmstat.pageouts);
+
+ stats.add("Faults", vmstat.faults);
+ stats.add("Faults copy-on-write", vmstat.cow_faults);
+
+ stats.add("Cache lookups", vmstat.lookups);
+ stats.add("Cache hits", vmstat.hits);
+
+ stats.add("Page purgeable count", vmstat.purgeable_count);
+ stats.add("Page purges", vmstat.purges);
+
+ stats.add("Page speculative reads", vmstat.speculative_count);
+ }
}
+
+ //
+ // Collect the misc task info
+ //
+
+ {
+ task_events_info_data_t taskinfo;
+ unsigned taskinfoSize = sizeof(taskinfo);
+
+ if (task_info(mach_task_self(), TASK_EVENTS_INFO, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS)
+ {
+ LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL;
+ }
+ else
+ {
+ stats.add("Task page-ins", taskinfo.pageins);
+ stats.add("Task copy-on-write faults", taskinfo.cow_faults);
+ stats.add("Task messages sent", taskinfo.messages_sent);
+ stats.add("Task messages received", taskinfo.messages_received);
+ stats.add("Task mach system call count", taskinfo.syscalls_mach);
+ stats.add("Task unix system call count", taskinfo.syscalls_unix);
+ stats.add("Task context switch count", taskinfo.csw);
+ }
+ }
+
+ //
+ // Collect the basic task info
+ //
+
+ {
+ task_basic_info_64_data_t taskinfo;
+ unsigned taskinfoSize = sizeof(taskinfo);
+
+ if (task_info(mach_task_self(), TASK_BASIC_INFO_64, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS)
+ {
+ LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL;
+ }
+ else
+ {
+ stats.add("Basic suspend count", taskinfo.suspend_count);
+ stats.add("Basic virtual memory KB", taskinfo.virtual_size / 1024);
+ stats.add("Basic resident memory KB", taskinfo.resident_size / 1024);
+ stats.add("Basic new thread policy", taskinfo.policy);
+ }
+ }
+
#elif LL_SOLARIS
- U64 phys = 0;
+ U64 phys = 0;
- phys = (U64)(sysconf(_SC_PHYS_PAGES)) * (U64)(sysconf(_SC_PAGESIZE)/1024);
+ phys = (U64)(sysconf(_SC_PHYS_PAGES)) * (U64)(sysconf(_SC_PAGESIZE)/1024);
- s << "Total Physical KB: " << phys << std::endl;
-#else
- // *NOTE: This works on linux. What will it do on other systems?
- LLFILE* meminfo = LLFile::fopen(MEMINFO_FILE,"rb");
- if(meminfo)
+ stats.add("Total Physical KB", phys);
+
+#elif LL_LINUX
+ std::ifstream meminfo(MEMINFO_FILE);
+ if (meminfo.is_open())
{
- char line[MAX_STRING]; /* Flawfinder: ignore */
- memset(line, 0, MAX_STRING);
- while(fgets(line, MAX_STRING, meminfo))
+ // MemTotal: 4108424 kB
+ // MemFree: 1244064 kB
+ // Buffers: 85164 kB
+ // Cached: 1990264 kB
+ // SwapCached: 0 kB
+ // Active: 1176648 kB
+ // Inactive: 1427532 kB
+ // ...
+ // VmallocTotal: 122880 kB
+ // VmallocUsed: 65252 kB
+ // VmallocChunk: 52356 kB
+ // HardwareCorrupted: 0 kB
+ // HugePages_Total: 0
+ // HugePages_Free: 0
+ // HugePages_Rsvd: 0
+ // HugePages_Surp: 0
+ // Hugepagesize: 2048 kB
+ // DirectMap4k: 434168 kB
+ // DirectMap2M: 477184 kB
+
+ // Intentionally don't pass the boost::no_except flag. This
+ // boost::regex object is constructed with a string literal, so it
+ // should be valid every time. If it becomes invalid, we WANT an
+ // exception, hopefully even before the dev checks in.
+ boost::regex stat_rx("(.+): +([0-9]+)( kB)?");
+ boost::smatch matched;
+
+ std::string line;
+ while (std::getline(meminfo, line))
{
- line[strlen(line)-1] = ' '; /*Flawfinder: ignore*/
- s << line;
+ LL_DEBUGS("LLMemoryInfo") << line << LL_ENDL;
+ if (regex_match_no_exc(line, matched, stat_rx))
+ {
+ // e.g. "MemTotal: 4108424 kB"
+ LLSD::String key(matched[1].first, matched[1].second);
+ LLSD::String value_str(matched[2].first, matched[2].second);
+ LLSD::Integer value(0);
+ try
+ {
+ value = boost::lexical_cast<LLSD::Integer>(value_str);
+ }
+ catch (const boost::bad_lexical_cast&)
+ {
+ LL_WARNS("LLMemoryInfo") << "couldn't parse '" << value_str
+ << "' in " << MEMINFO_FILE << " line: "
+ << line << LL_ENDL;
+ continue;
+ }
+ // Store this statistic.
+ stats.add(key, value);
+ }
+ else
+ {
+ LL_WARNS("LLMemoryInfo") << "unrecognized " << MEMINFO_FILE << " line: "
+ << line << LL_ENDL;
+ }
}
- fclose(meminfo);
}
else
{
- s << "Unable to collect memory information";
+ LL_WARNS("LLMemoryInfo") << "Unable to collect memory information" << LL_ENDL;
}
+
+#else
+ LL_WARNS("LLMemoryInfo") << "Unknown system; unable to collect memory information" << LL_ENDL;
+
#endif
+
+ return stats.get();
}
std::ostream& operator<<(std::ostream& s, const LLOSInfo& info)
@@ -778,6 +1177,143 @@ std::ostream& operator<<(std::ostream& s, const LLMemoryInfo& info)
return s;
}
+class FrameWatcher
+{
+public:
+ FrameWatcher():
+ // Hooking onto the "mainloop" event pump gets us one call per frame.
+ mConnection(LLEventPumps::instance()
+ .obtain("mainloop")
+ .listen("FrameWatcher", boost::bind(&FrameWatcher::tick, this, _1))),
+ // Initializing mSampleStart to an invalid timestamp alerts us to skip
+ // trying to compute framerate on the first call.
+ mSampleStart(-1),
+ // Initializing mSampleEnd to 0 ensures that we treat the first call
+ // as the completion of a sample window.
+ mSampleEnd(0),
+ mFrames(0),
+ // Both MEM_INFO_WINDOW and MEM_INFO_THROTTLE are in seconds. We need
+ // the number of integer MEM_INFO_THROTTLE sample slots that will fit
+ // in MEM_INFO_WINDOW. Round up.
+ mSamples(int((MEM_INFO_WINDOW / MEM_INFO_THROTTLE) + 0.7)),
+ // Initializing to F32_MAX means that the first real frame will become
+ // the slowest ever, which sounds like a good idea.
+ mSlowest(F32_MAX)
+ {}
+
+ bool tick(const LLSD&)
+ {
+ F32 timestamp(mTimer.getElapsedTimeF32());
+
+ // Count this frame in the interval just completed.
+ ++mFrames;
+
+ // Have we finished a sample window yet?
+ if (timestamp < mSampleEnd)
+ {
+ // no, just keep waiting
+ return false;
+ }
+
+ // Set up for next sample window. Capture values for previous frame in
+ // local variables and reset data members.
+ U32 frames(mFrames);
+ F32 sampleStart(mSampleStart);
+ // No frames yet in next window
+ mFrames = 0;
+ // which starts right now
+ mSampleStart = timestamp;
+ // and ends MEM_INFO_THROTTLE seconds in the future
+ mSampleEnd = mSampleStart + MEM_INFO_THROTTLE;
+
+ // On the very first call, that's all we can do, no framerate
+ // computation is possible.
+ if (sampleStart < 0)
+ {
+ return false;
+ }
+
+ // How long did this actually take? As framerate slows, the duration
+ // of the frame we just finished could push us WELL beyond our desired
+ // sample window size.
+ F32 elapsed(timestamp - sampleStart);
+ F32 framerate(frames/elapsed);
+
+ // Remember previous slowest framerate because we're just about to
+ // update it.
+ F32 slowest(mSlowest);
+ // Remember previous number of samples.
+ boost::circular_buffer<F32>::size_type prevSize(mSamples.size());
+
+ // Capture new framerate in our samples buffer. Once the buffer is
+ // full (after MEM_INFO_WINDOW seconds), this will displace the oldest
+ // sample. ("So they all rolled over, and one fell out...")
+ mSamples.push_back(framerate);
+
+ // Calculate the new minimum framerate. I know of no way to update a
+ // rolling minimum without ever rescanning the buffer. But since there
+ // are only a few tens of items in this buffer, rescanning it is
+ // probably cheaper (and certainly easier to reason about) than
+ // attempting to optimize away some of the scans.
+ mSlowest = framerate; // pick an arbitrary entry to start
+ for (boost::circular_buffer<F32>::const_iterator si(mSamples.begin()), send(mSamples.end());
+ si != send; ++si)
+ {
+ if (*si < mSlowest)
+ {
+ mSlowest = *si;
+ }
+ }
+
+ // We're especially interested in memory as framerate drops. Only log
+ // when framerate drops below the slowest framerate we remember.
+ // (Should always be true for the end of the very first sample
+ // window.)
+ if (framerate >= slowest)
+ {
+ return false;
+ }
+ // Congratulations, we've hit a new low. :-P
+
+ LL_INFOS("FrameWatcher") << ' ';
+ if (! prevSize)
+ {
+ LL_CONT << "initial framerate ";
+ }
+ else
+ {
+ LL_CONT << "slowest framerate for last " << int(prevSize * MEM_INFO_THROTTLE)
+ << " seconds ";
+ }
+ LL_CONT << std::fixed << std::setprecision(1) << framerate << '\n'
+ << LLMemoryInfo() << LL_ENDL;
+
+ return false;
+ }
+
+private:
+ // Storing the connection in an LLTempBoundListener ensures it will be
+ // disconnected when we're destroyed.
+ LLTempBoundListener mConnection;
+ // Track elapsed time
+ LLTimer mTimer;
+ // Some of what you see here is in fact redundant with functionality you
+ // can get from LLTimer. Unfortunately the LLTimer API is missing the
+ // feature we need: has at least the stated interval elapsed, and if so,
+ // exactly how long has passed? So we have to do it by hand, sigh.
+ // Time at start, end of sample window
+ F32 mSampleStart, mSampleEnd;
+ // Frames this sample window
+ U32 mFrames;
+ // Sliding window of framerate samples
+ boost::circular_buffer<F32> mSamples;
+ // Slowest framerate in mSamples
+ F32 mSlowest;
+};
+
+// Need an instance of FrameWatcher before it does any good
+static FrameWatcher sFrameWatcher;
+
BOOL gunzip_file(const std::string& srcfile, const std::string& dstfile)
{
std::string tmpfile;
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
index 41a4f25000..739e795d3a 100644
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -36,6 +36,7 @@
// llinfos << info << llendl;
//
+#include "llsd.h"
#include <iosfwd>
#include <string>
@@ -117,6 +118,27 @@ public:
//get the available memory infomation in KiloBytes.
static void getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_virtual_mem_kb);
+
+ // Retrieve a map of memory statistics. The keys of the map are platform-
+ // dependent. The values are in kilobytes to try to avoid integer overflow.
+ LLSD getStatsMap() const;
+
+ // Re-fetch memory data (as reported by stream() and getStatsMap()) from the
+ // system. Normally this is fetched at construction time. Return (*this)
+ // to permit usage of the form:
+ // @code
+ // LLMemoryInfo info;
+ // ...
+ // info.refresh().getStatsMap();
+ // @endcode
+ LLMemoryInfo& refresh();
+
+private:
+ // set mStatsMap
+ static LLSD loadStatsMap();
+
+ // Memory stats for getStatsMap().
+ LLSD mStatsMap;
};
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index d9400fb5b3..bdde1b5c48 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -36,6 +36,12 @@
#include <sched.h>
#endif
+#if !LL_DARWIN
+U32 ll_thread_local local_thread_ID = 0;
+#endif
+
+U32 LLThread::sIDIter = 0;
+
//----------------------------------------------------------------------------
// Usage:
// void run_func(LLThread* thread)
@@ -56,12 +62,6 @@
//
//----------------------------------------------------------------------------
-#if !LL_DARWIN
-U32 ll_thread_local sThreadID = 0;
-#endif
-
-U32 LLThread::sIDIter = 0;
-
LL_COMMON_API void assert_main_thread()
{
static U32 s_thread_id = LLThread::currentID();
@@ -79,9 +79,12 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
LLThread *threadp = (LLThread *)datap;
#if !LL_DARWIN
- sThreadID = threadp->mID;
+ local_thread_ID = threadp->mID;
#endif
+ // Create a thread local data.
+ LLThreadLocalData::create(threadp);
+
// Run the user supplied function
threadp->run();
@@ -94,40 +97,22 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
}
-LLThread::LLThread(const std::string& name, apr_pool_t *poolp) :
- mPaused(FALSE),
+LLThread::LLThread(std::string const& name) :
+ mPaused(false),
mName(name),
mAPRThreadp(NULL),
- mStatus(STOPPED)
+ mStatus(STOPPED),
+ mThreadLocalData(NULL)
{
- mID = ++sIDIter;
+ mID = ++sIDIter; //flaw: assume this is called only in the main thread!
- // Thread creation probably CAN be paranoid about APR being initialized, if necessary
- if (poolp)
- {
- mIsLocalPool = FALSE;
- mAPRPoolp = poolp;
- }
- else
- {
- mIsLocalPool = TRUE;
- apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
- }
- mRunCondition = new LLCondition(mAPRPoolp);
-
- mLocalAPRFilePoolp = NULL ;
+ mRunCondition = new LLCondition;
}
LLThread::~LLThread()
{
shutdown();
-
- if(mLocalAPRFilePoolp)
- {
- delete mLocalAPRFilePoolp ;
- mLocalAPRFilePoolp = NULL ;
- }
}
void LLThread::shutdown()
@@ -164,7 +149,7 @@ void LLThread::shutdown()
if (!isStopped())
{
// This thread just wouldn't stop, even though we gave it time
- //llwarns << "LLThread::~LLThread() exiting thread before clean exit!" << llendl;
+ //llwarns << "LLThread::shutdown() exiting thread before clean exit!" << llendl;
// Put a stake in its heart.
apr_thread_exit(mAPRThreadp, -1);
return;
@@ -174,15 +159,8 @@ void LLThread::shutdown()
delete mRunCondition;
mRunCondition = 0;
-
- if (mIsLocalPool && mAPRPoolp)
- {
- apr_pool_destroy(mAPRPoolp);
- mAPRPoolp = 0;
- }
}
-
void LLThread::start()
{
llassert(isStopped());
@@ -191,7 +169,7 @@ void LLThread::start()
mStatus = RUNNING;
apr_status_t status =
- apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp);
+ apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, tldata().mRootPool());
if(status == APR_SUCCESS)
{
@@ -216,7 +194,7 @@ void LLThread::pause()
if (!mPaused)
{
// this will cause the thread to stop execution as soon as checkPause() is called
- mPaused = 1; // Does not need to be atomic since this is only set/unset from the main thread
+ mPaused = true; // Does not need to be atomic since this is only set/unset from the main thread
}
}
@@ -224,7 +202,7 @@ void LLThread::unpause()
{
if (mPaused)
{
- mPaused = 0;
+ mPaused = false;
}
wake(); // wake up the thread if necessary
@@ -301,115 +279,76 @@ void LLThread::wakeLocked()
}
}
-//============================================================================
-
-LLMutex::LLMutex(apr_pool_t *poolp) :
- mAPRMutexp(NULL), mCount(0), mLockingThread(NO_THREAD)
-{
- //if (poolp)
- //{
- // mIsLocalPool = FALSE;
- // mAPRPoolp = poolp;
- //}
- //else
- {
- mIsLocalPool = TRUE;
- apr_pool_create(&mAPRPoolp, NULL); // Create a subpool for this thread
- }
- apr_thread_mutex_create(&mAPRMutexp, APR_THREAD_MUTEX_UNNESTED, mAPRPoolp);
-}
+#ifdef SHOW_ASSERT
+// This allows the use of llassert(is_main_thread()) to assure the current thread is the main thread.
+static apr_os_thread_t main_thread_id;
+LL_COMMON_API bool is_main_thread(void) { return apr_os_thread_equal(main_thread_id, apr_os_thread_current()); }
+#endif
+// The thread private handle to access the LLThreadLocalData instance.
+apr_threadkey_t* LLThreadLocalData::sThreadLocalDataKey;
-LLMutex::~LLMutex()
+//static
+void LLThreadLocalData::init(void)
{
-#if MUTEX_DEBUG
- llassert_always(!isLocked()); // better not be locked!
-#endif
- apr_thread_mutex_destroy(mAPRMutexp);
- mAPRMutexp = NULL;
- if (mIsLocalPool)
+ // Only do this once.
+ if (sThreadLocalDataKey)
{
- apr_pool_destroy(mAPRPoolp);
+ return;
}
-}
+ apr_status_t status = apr_threadkey_private_create(&sThreadLocalDataKey, &LLThreadLocalData::destroy, LLAPRRootPool::get()());
+ ll_apr_assert_status(status); // Or out of memory, or system-imposed limit on the
+ // total number of keys per process {PTHREAD_KEYS_MAX}
+ // has been exceeded.
-void LLMutex::lock()
-{
-#if LL_DARWIN
- if (mLockingThread == LLThread::currentID())
-#else
- if (mLockingThread == sThreadID)
-#endif
- { //redundant lock
- mCount++;
- return;
- }
-
- apr_thread_mutex_lock(mAPRMutexp);
-
-#if MUTEX_DEBUG
- // Have to have the lock before we can access the debug info
- U32 id = LLThread::currentID();
- if (mIsLocked[id] != FALSE)
- llerrs << "Already locked in Thread: " << id << llendl;
- mIsLocked[id] = TRUE;
-#endif
+ // Create the thread-local data for the main thread (this function is called by the main thread).
+ LLThreadLocalData::create(NULL);
-#if LL_DARWIN
- mLockingThread = LLThread::currentID();
-#else
- mLockingThread = sThreadID;
+#ifdef SHOW_ASSERT
+ // This function is called by the main thread.
+ main_thread_id = apr_os_thread_current();
#endif
}
-void LLMutex::unlock()
+// This is called once for every thread when the thread is destructed.
+//static
+void LLThreadLocalData::destroy(void* thread_local_data)
{
- if (mCount > 0)
- { //not the root unlock
- mCount--;
- return;
- }
-
-#if MUTEX_DEBUG
- // Access the debug info while we have the lock
- U32 id = LLThread::currentID();
- if (mIsLocked[id] != TRUE)
- llerrs << "Not locked in Thread: " << id << llendl;
- mIsLocked[id] = FALSE;
-#endif
-
- mLockingThread = NO_THREAD;
- apr_thread_mutex_unlock(mAPRMutexp);
+ delete static_cast<LLThreadLocalData*>(thread_local_data);
}
-bool LLMutex::isLocked()
+//static
+void LLThreadLocalData::create(LLThread* threadp)
{
- apr_status_t status = apr_thread_mutex_trylock(mAPRMutexp);
- if (APR_STATUS_IS_EBUSY(status))
+ LLThreadLocalData* new_tld = new LLThreadLocalData;
+ if (threadp)
{
- return true;
- }
- else
- {
- apr_thread_mutex_unlock(mAPRMutexp);
- return false;
+ threadp->mThreadLocalData = new_tld;
}
+ apr_status_t status = apr_threadkey_private_set(new_tld, sThreadLocalDataKey);
+ llassert_always(status == APR_SUCCESS);
}
-U32 LLMutex::lockingThread() const
+//static
+LLThreadLocalData& LLThreadLocalData::tldata(void)
{
- return mLockingThread;
+ if (!sThreadLocalDataKey)
+ {
+ LLThreadLocalData::init();
+ }
+
+ void* data;
+ apr_status_t status = apr_threadkey_private_get(&data, sThreadLocalDataKey);
+ llassert_always(status == APR_SUCCESS);
+ return *static_cast<LLThreadLocalData*>(data);
}
//============================================================================
-LLCondition::LLCondition(apr_pool_t *poolp) :
- LLMutex(poolp)
+LLCondition::LLCondition(LLAPRPool& parent) : LLMutex(parent)
{
- // base class (LLMutex) has already ensured that mAPRPoolp is set up.
-
- apr_thread_cond_create(&mAPRCondp, mAPRPoolp);
+ apr_thread_cond_create(&mAPRCondp, mPool());
}
@@ -422,15 +361,6 @@ LLCondition::~LLCondition()
void LLCondition::wait()
{
- if (!isLocked())
- { //mAPRMutexp MUST be locked before calling apr_thread_cond_wait
- apr_thread_mutex_lock(mAPRMutexp);
-#if MUTEX_DEBUG
- // avoid asserts on destruction in non-release builds
- U32 id = LLThread::currentID();
- mIsLocked[id] = TRUE;
-#endif
- }
apr_thread_cond_wait(mAPRCondp, mAPRMutexp);
}
@@ -445,6 +375,44 @@ void LLCondition::broadcast()
}
//============================================================================
+LLMutexBase::LLMutexBase() :
+ mLockingThread(NO_THREAD),
+ mCount(0)
+{
+}
+
+void LLMutexBase::lock()
+{
+#if LL_DARWIN
+ if (mLockingThread == LLThread::currentID())
+#else
+ if (mLockingThread == local_thread_ID)
+#endif
+ { //redundant lock
+ mCount++;
+ return;
+ }
+
+ apr_thread_mutex_lock(mAPRMutexp);
+
+#if LL_DARWIN
+ mLockingThread = LLThread::currentID();
+#else
+ mLockingThread = local_thread_ID;
+#endif
+}
+
+void LLMutexBase::unlock()
+{
+ if (mCount > 0)
+ { //not the root unlock
+ mCount--;
+ return;
+ }
+ mLockingThread = NO_THREAD;
+
+ apr_thread_mutex_unlock(mAPRMutexp);
+}
//----------------------------------------------------------------------------
@@ -456,7 +424,7 @@ void LLThreadSafeRefCount::initThreadSafeRefCount()
{
if (!sMutex)
{
- sMutex = new LLMutex(0);
+ sMutex = new LLMutex;
}
}
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 40291a2569..c732e3bc77 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -29,7 +29,13 @@
#include "llapp.h"
#include "llapr.h"
+#include "llmemory.h"
#include "apr_thread_cond.h"
+#include "llaprpool.h"
+
+#ifdef SHOW_ASSERT
+extern LL_COMMON_API bool is_main_thread(void);
+#endif
class LLThread;
class LLMutex;
@@ -41,6 +47,22 @@ class LLCondition;
#define ll_thread_local __thread
#endif
+class LL_COMMON_API LLThreadLocalData
+{
+private:
+ static apr_threadkey_t* sThreadLocalDataKey;
+
+public:
+ // Thread-local memory pools.
+ LLAPRRootPool mRootPool;
+ LLVolatileAPRPool mVolatileAPRPool;
+
+ static void init(void);
+ static void destroy(void* thread_local_data);
+ static void create(LLThread* pthread);
+ static LLThreadLocalData& tldata(void);
+};
+
class LL_COMMON_API LLThread
{
private:
@@ -54,7 +76,7 @@ public:
QUITTING= 2 // Someone wants this thread to quit
} EThreadStatus;
- LLThread(const std::string& name, apr_pool_t *poolp = NULL);
+ LLThread(std::string const& name);
virtual ~LLThread(); // Warning! You almost NEVER want to destroy a thread unless it's in the STOPPED state.
virtual void shutdown(); // stops the thread
@@ -69,7 +91,7 @@ public:
// Called from MAIN THREAD.
void pause();
void unpause();
- bool isPaused() { return isStopped() || mPaused == TRUE; }
+ bool isPaused() { return isStopped() || mPaused; }
// Cause the thread to wake up and check its condition
void wake();
@@ -83,13 +105,11 @@ public:
// this kicks off the apr thread
void start(void);
- apr_pool_t *getAPRPool() { return mAPRPoolp; }
- LLVolatileAPRPool* getLocalAPRFilePool() { return mLocalAPRFilePoolp ; }
-
- U32 getID() const { return mID; }
+ // Return thread-local data for the current thread.
+ static LLThreadLocalData& tldata(void) { return LLThreadLocalData::tldata(); }
private:
- BOOL mPaused;
+ bool mPaused;
// static function passed to APR thread creation routine
static void *APR_THREAD_FUNC staticRun(apr_thread_t *apr_threadp, void *datap);
@@ -99,15 +119,11 @@ protected:
LLCondition* mRunCondition;
apr_thread_t *mAPRThreadp;
- apr_pool_t *mAPRPoolp;
- BOOL mIsLocalPool;
EThreadStatus mStatus;
U32 mID;
-
- //a local apr_pool for APRFile operations in this thread. If it exists, LLAPRFile::sAPRFilePoolp should not be used.
- //Note: this pool is used by APRFile ONLY, do NOT use it for any other purposes.
- // otherwise it will cause severe memory leaking!!! --bao
- LLVolatileAPRPool *mLocalAPRFilePoolp ;
+
+ friend void LLThreadLocalData::create(LLThread* threadp);
+ LLThreadLocalData* mThreadLocalData;
void setQuitting();
@@ -137,7 +153,15 @@ protected:
#define MUTEX_DEBUG (LL_DEBUG || LL_RELEASE_WITH_DEBUG_INFO)
-class LL_COMMON_API LLMutex
+#ifdef MUTEX_DEBUG
+// We really shouldn't be using recursive locks. Make sure of that in debug mode.
+#define MUTEX_FLAG APR_THREAD_MUTEX_UNNESTED
+#else
+// Use the fastest platform-optimal lock behavior (can be recursive or non-recursive).
+#define MUTEX_FLAG APR_THREAD_MUTEX_DEFAULT
+#endif
+
+class LL_COMMON_API LLMutexBase
{
public:
typedef enum
@@ -145,32 +169,73 @@ public:
NO_THREAD = 0xFFFFFFFF
} e_locking_thread;
- LLMutex(apr_pool_t *apr_poolp); // NULL pool constructs a new pool for the mutex
- virtual ~LLMutex();
-
- void lock(); // blocks
- void unlock();
- bool isLocked(); // non-blocking, but does do a lock/unlock so not free
- U32 lockingThread() const; //get ID of locking thread
-
+ LLMutexBase() ;
+
+ void lock() ;
+ void unlock() ;
+ // Returns true if lock was obtained successfully.
+ bool trylock() { return !APR_STATUS_IS_EBUSY(apr_thread_mutex_trylock(mAPRMutexp)); }
+
+ // non-blocking, but does do a lock/unlock so not free
+ bool isLocked() { bool is_not_locked = trylock(); if (is_not_locked) unlock(); return !is_not_locked; }
+
protected:
- apr_thread_mutex_t *mAPRMutexp;
+ // mAPRMutexp is initialized and uninitialized in the derived class.
+ apr_thread_mutex_t* mAPRMutexp;
mutable U32 mCount;
mutable U32 mLockingThread;
-
- apr_pool_t *mAPRPoolp;
- BOOL mIsLocalPool;
-
-#if MUTEX_DEBUG
- std::map<U32, BOOL> mIsLocked;
+};
+
+class LL_COMMON_API LLMutex : public LLMutexBase
+{
+public:
+ LLMutex(LLAPRPool& parent = LLThread::tldata().mRootPool) : mPool(parent)
+ {
+ apr_thread_mutex_create(&mAPRMutexp, MUTEX_FLAG, mPool());
+ }
+ ~LLMutex()
+ {
+ llassert(!isLocked()); // better not be locked!
+ apr_thread_mutex_destroy(mAPRMutexp);
+ mAPRMutexp = NULL;
+ }
+
+protected:
+ LLAPRPool mPool;
+};
+
+#if APR_HAS_THREADS
+// No need to use a root pool in this case.
+typedef LLMutex LLMutexRootPool;
+#else // APR_HAS_THREADS
+class LL_COMMON_API LLMutexRootPool : public LLMutexBase
+{
+public:
+ LLMutexRootPool(void)
+ {
+ apr_thread_mutex_create(&mAPRMutexp, MUTEX_FLAG, mRootPool());
+ }
+ ~LLMutexRootPool()
+ {
+#if APR_POOL_DEBUG
+ // It is allowed to destruct root pools from a different thread.
+ mRootPool.grab_ownership();
#endif
+ llassert(!isLocked());
+ apr_thread_mutex_destroy(mAPRMutexp);
+ mAPRMutexp = NULL;
+ }
+
+protected:
+ LLAPRRootPool mRootPool;
};
+#endif // APR_HAS_THREADS
// Actually a condition/mutex pair (since each condition needs to be associated with a mutex).
class LL_COMMON_API LLCondition : public LLMutex
{
public:
- LLCondition(apr_pool_t *apr_poolp); // Defaults to global pool, could use the thread pool as well.
+ LLCondition(LLAPRPool& parent = LLThread::tldata().mRootPool);
~LLCondition();
void wait(); // blocks
@@ -181,10 +246,10 @@ protected:
apr_thread_cond_t *mAPRCondp;
};
-class LLMutexLock
+class LL_COMMON_API LLMutexLock
{
public:
- LLMutexLock(LLMutex* mutex)
+ LLMutexLock(LLMutexBase* mutex)
{
mMutex = mutex;
mMutex->lock();
@@ -194,7 +259,7 @@ public:
mMutex->unlock();
}
private:
- LLMutex* mMutex;
+ LLMutexBase* mMutex;
};
//============================================================================
diff --git a/indra/llcommon/llthreadsafequeue.cpp b/indra/llcommon/llthreadsafequeue.cpp
index 8a73e632a9..05d24944f3 100644
--- a/indra/llcommon/llthreadsafequeue.cpp
+++ b/indra/llcommon/llthreadsafequeue.cpp
@@ -34,19 +34,11 @@
//-----------------------------------------------------------------------------
-LLThreadSafeQueueImplementation::LLThreadSafeQueueImplementation(apr_pool_t * pool, unsigned int capacity):
- mOwnsPool(pool == 0),
- mPool(pool),
+LLThreadSafeQueueImplementation::LLThreadSafeQueueImplementation(unsigned int capacity):
mQueue(0)
{
- if(mOwnsPool) {
- apr_status_t status = apr_pool_create(&mPool, 0);
- if(status != APR_SUCCESS) throw LLThreadSafeQueueError("failed to allocate pool");
- } else {
- ; // No op.
- }
-
- apr_status_t status = apr_queue_create(&mQueue, capacity, mPool);
+ mPool.create();
+ apr_status_t status = apr_queue_create(&mQueue, capacity, mPool());
if(status != APR_SUCCESS) throw LLThreadSafeQueueError("failed to allocate queue");
}
@@ -59,7 +51,6 @@ LLThreadSafeQueueImplementation::~LLThreadSafeQueueImplementation()
" elements;" << "memory will be leaked" << LL_ENDL;
apr_queue_term(mQueue);
}
- if(mOwnsPool && (mPool != 0)) apr_pool_destroy(mPool);
}
diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h
index 58cac38769..43d0b396f2 100644
--- a/indra/llcommon/llthreadsafequeue.h
+++ b/indra/llcommon/llthreadsafequeue.h
@@ -30,9 +30,9 @@
#include <string>
#include <stdexcept>
+#include "llaprpool.h"
-struct apr_pool_t; // From apr_pools.h
class LLThreadSafeQueueImplementation; // See below.
@@ -75,7 +75,7 @@ struct apr_queue_t; // From apr_queue.h
class LL_COMMON_API LLThreadSafeQueueImplementation
{
public:
- LLThreadSafeQueueImplementation(apr_pool_t * pool, unsigned int capacity);
+ LLThreadSafeQueueImplementation(unsigned int capacity);
~LLThreadSafeQueueImplementation();
void pushFront(void * element);
bool tryPushFront(void * element);
@@ -84,8 +84,7 @@ public:
size_t size();
private:
- bool mOwnsPool;
- apr_pool_t * mPool;
+ LLAPRPool mPool; // The pool used for mQueue.
apr_queue_t * mQueue;
};
@@ -99,9 +98,8 @@ class LLThreadSafeQueue
public:
typedef ElementT value_type;
- // If the pool is set to NULL one will be allocated and managed by this
- // queue.
- LLThreadSafeQueue(apr_pool_t * pool = 0, unsigned int capacity = 1024);
+ // Constructor.
+ LLThreadSafeQueue(unsigned int capacity = 1024);
// Add an element to the front of queue (will block if the queue has
// reached capacity).
@@ -139,8 +137,8 @@ private:
template<typename ElementT>
-LLThreadSafeQueue<ElementT>::LLThreadSafeQueue(apr_pool_t * pool, unsigned int capacity):
- mImplementation(pool, capacity)
+LLThreadSafeQueue<ElementT>::LLThreadSafeQueue(unsigned int capacity) :
+ mImplementation(capacity)
{
; // No op.
}
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 69720bb903..ef55cfec89 100644..100755
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -27,9 +27,9 @@
#ifndef LL_LLVERSIONVIEWER_H
#define LL_LLVERSIONVIEWER_H
-const S32 LL_VERSION_MAJOR = 2;
-const S32 LL_VERSION_MINOR = 7;
-const S32 LL_VERSION_PATCH = 6;
+const S32 LL_VERSION_MAJOR = 3;
+const S32 LL_VERSION_MINOR = 0;
+const S32 LL_VERSION_PATCH = 5;
const S32 LL_VERSION_BUILD = 0;
const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 3ac50832fd..6b308bb917 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -37,12 +37,7 @@
LLWorkerThread::LLWorkerThread(const std::string& name, bool threaded) :
LLQueuedThread(name, threaded)
{
- mDeleteMutex = new LLMutex(NULL);
-
- if(!mLocalAPRFilePoolp)
- {
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
- }
+ mDeleteMutex = new LLMutex;
}
LLWorkerThread::~LLWorkerThread()
@@ -204,7 +199,6 @@ LLWorkerClass::LLWorkerClass(LLWorkerThread* workerthread, const std::string& na
mWorkerClassName(name),
mRequestHandle(LLWorkerThread::nullHandle()),
mRequestPriority(LLWorkerThread::PRIORITY_NORMAL),
- mMutex(NULL),
mWorkFlags(0)
{
if (!mWorkerThread)
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index 9bff18303e..bef5ef53fe 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -94,7 +94,6 @@ public:
private:
void deleteWorker(LLWorkerClass* workerclass); // schedule for deletion
-
};
//============================================================================
@@ -194,7 +193,7 @@ protected:
U32 mRequestPriority; // last priority set
private:
- LLMutex mMutex;
+ LLMutexRootPool mMutex; // Use LLMutexRootPool since this object is created and destructed by multiple threads.
LLAtomicU32 mWorkFlags;
};
diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp
index c7cb488ca1..b34d1c5fd3 100644
--- a/indra/llcommon/tests/llinstancetracker_test.cpp
+++ b/indra/llcommon/tests/llinstancetracker_test.cpp
@@ -40,6 +40,7 @@
#include <boost/scoped_ptr.hpp>
// other Linden headers
#include "../test/lltut.h"
+#include "wrapllerrs.h"
struct Keyed: public LLInstanceTracker<Keyed, std::string>
{
@@ -151,33 +152,81 @@ namespace tut
{
Unkeyed one, two, three;
typedef std::set<Unkeyed*> KeySet;
- KeySet keys;
- keys.insert(&one);
- keys.insert(&two);
- keys.insert(&three);
- {
- Unkeyed::LLInstanceTrackerScopedGuard guard;
- for (Unkeyed::key_iter ki(guard.beginKeys()), kend(guard.endKeys());
- ki != kend; ++ki)
- {
- ensure_equals("spurious key", keys.erase(*ki), 1);
- }
- }
- ensure_equals("unreported key", keys.size(), 0);
-
+
KeySet instances;
instances.insert(&one);
instances.insert(&two);
instances.insert(&three);
- {
- Unkeyed::LLInstanceTrackerScopedGuard guard;
- for (Unkeyed::instance_iter ii(guard.beginInstances()), iend(guard.endInstances());
- ii != iend; ++ii)
+
+ for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii)
{
Unkeyed& ref = *ii;
ensure_equals("spurious instance", instances.erase(&ref), 1);
}
- }
+
ensure_equals("unreported instance", instances.size(), 0);
}
+
+ template<> template<>
+ void object::test<5>()
+ {
+ set_test_name("delete Keyed with outstanding instance_iter");
+ std::string what;
+ Keyed* keyed = new Keyed("one");
+ {
+ WrapLL_ERRS wrapper;
+ Keyed::instance_iter i(Keyed::beginInstances());
+ try
+ {
+ delete keyed;
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ what = e.what();
+ }
+ }
+ ensure(! what.empty());
+ }
+
+ template<> template<>
+ void object::test<6>()
+ {
+ set_test_name("delete Keyed with outstanding key_iter");
+ std::string what;
+ Keyed* keyed = new Keyed("one");
+ {
+ WrapLL_ERRS wrapper;
+ Keyed::key_iter i(Keyed::beginKeys());
+ try
+ {
+ delete keyed;
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ what = e.what();
+ }
+ }
+ ensure(! what.empty());
+ }
+
+ template<> template<>
+ void object::test<7>()
+ {
+ set_test_name("delete Unkeyed with outstanding instance_iter");
+ std::string what;
+ Unkeyed* unkeyed = new Unkeyed;
+ {
+ WrapLL_ERRS wrapper;
+ Unkeyed::instance_iter i(Unkeyed::beginInstances());
+ try
+ {
+ delete unkeyed;
+ }
+ catch (const WrapLL_ERRS::FatalException& e)
+ {
+ what = e.what();
+ }
+ }
+ ensure(! what.empty());
+ }
} // namespace tut
diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp
index 7b4c7d6a48..72322c3b72 100644
--- a/indra/llcommon/tests/llsdserialize_test.cpp
+++ b/indra/llcommon/tests/llsdserialize_test.cpp
@@ -25,35 +25,293 @@
* $/LicenseInfo$
*/
-#if !LL_WINDOWS
+
+#include "linden_common.h"
+
+#if LL_WINDOWS
+#include <winsock2.h>
+typedef U32 uint32_t;
+#include <process.h>
+#include <io.h>
+#else
+#include <unistd.h>
#include <netinet/in.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include "llprocesslauncher.h"
#endif
-#include "linden_common.h"
+#include <sstream>
+
+/*==========================================================================*|
+// Whoops, seems Linden's Boost package and the viewer are built with
+// different settings of VC's /Zc:wchar_t switch! Using Boost.Filesystem
+// pathname operations produces Windows link errors:
+// unresolved external symbol "private: static class std::codecvt<unsigned short,
+// char,int> const * & __cdecl boost::filesystem3::path::wchar_t_codecvt_facet()"
+// unresolved external symbol "void __cdecl boost::filesystem3::path_traits::convert()"
+// See:
+// http://boost.2283326.n4.nabble.com/filesystem-v3-unicode-and-std-codecvt-linker-error-td3455549.html
+// which points to:
+// http://msdn.microsoft.com/en-us/library/dh8che7s%28v=VS.100%29.aspx
+
+// As we're not trying to preserve compatibility with old Boost.Filesystem
+// code, but rather writing brand-new code, use the newest available
+// Filesystem API.
+#define BOOST_FILESYSTEM_VERSION 3
+#include "boost/filesystem.hpp"
+#include "boost/filesystem/v3/fstream.hpp"
+|*==========================================================================*/
+#include "boost/range.hpp"
+#include "boost/foreach.hpp"
+#include "boost/function.hpp"
+#include "boost/lambda/lambda.hpp"
+#include "boost/lambda/bind.hpp"
+namespace lambda = boost::lambda;
+/*==========================================================================*|
+// Aaaarrgh, Linden's Boost package doesn't even include Boost.Iostreams!
+#include "boost/iostreams/stream.hpp"
+#include "boost/iostreams/device/file_descriptor.hpp"
+|*==========================================================================*/
+
#include "../llsd.h"
#include "../llsdserialize.h"
+#include "llsdutil.h"
#include "../llformat.h"
#include "../test/lltut.h"
+#include "stringize.h"
+std::vector<U8> string_to_vector(const std::string& str)
+{
+ return std::vector<U8>(str.begin(), str.end());
+}
-#if LL_WINDOWS
-#include <winsock2.h>
-typedef U32 uint32_t;
-#endif
+#if ! LL_WINDOWS
+// We want to call strerror_r(), but alarmingly, there are two different
+// variants. The one that returns int always populates the passed buffer
+// (except in case of error), whereas the other one always returns a valid
+// char* but might or might not populate the passed buffer. How do we know
+// which one we're getting? Define adapters for each and let the compiler
+// select the applicable adapter.
-std::vector<U8> string_to_vector(std::string str)
+// strerror_r() returns char*
+std::string message_from(int /*orig_errno*/, const char* /*buffer*/, const char* strerror_ret)
{
- // bc LLSD can't...
- size_t len = (size_t)str.length();
- std::vector<U8> v(len);
- for (size_t i = 0; i < len ; i++)
- {
- v[i] = str[i];
- }
- return v;
+ return strerror_ret;
}
+// strerror_r() returns int
+std::string message_from(int orig_errno, const char* buffer, int strerror_ret)
+{
+ if (strerror_ret == 0)
+ {
+ return buffer;
+ }
+ // Here strerror_r() has set errno. Since strerror_r() has already failed,
+ // seems like a poor bet to call it again to diagnose its own error...
+ int stre_errno = errno;
+ if (stre_errno == ERANGE)
+ {
+ return STRINGIZE("strerror_r() can't explain errno " << orig_errno
+ << " (buffer too small)");
+ }
+ if (stre_errno == EINVAL)
+ {
+ return STRINGIZE("unknown errno " << orig_errno);
+ }
+ // Here we don't even understand the errno from strerror_r()!
+ return STRINGIZE("strerror_r() can't explain errno " << orig_errno
+ << " (error " << stre_errno << ')');
+}
+#endif // ! LL_WINDOWS
+
+// boost::filesystem::temp_directory_path() isn't yet in Boost 1.45! :-(
+std::string temp_directory_path()
+{
+#if LL_WINDOWS
+ char buffer[4096];
+ GetTempPathA(sizeof(buffer), buffer);
+ return buffer;
+
+#else // LL_DARWIN, LL_LINUX
+ static const char* vars[] = { "TMPDIR", "TMP", "TEMP", "TEMPDIR" };
+ BOOST_FOREACH(const char* var, vars)
+ {
+ const char* found = getenv(var);
+ if (found)
+ return found;
+ }
+ return "/tmp";
+#endif // LL_DARWIN, LL_LINUX
+}
+
+// Windows presents a kinda sorta compatibility layer. Code to the yucky
+// Windows names because they're less likely than the Posix names to collide
+// with any other names in this source.
+#if LL_WINDOWS
+#define _remove DeleteFileA
+#else // ! LL_WINDOWS
+#define _open open
+#define _write write
+#define _close close
+#define _remove remove
+#endif // ! LL_WINDOWS
+
+// Create a text file with specified content "somewhere in the
+// filesystem," cleaning up when it goes out of scope.
+class NamedTempFile
+{
+public:
+ // Function that accepts an ostream ref and (presumably) writes stuff to
+ // it, e.g.:
+ // (lambda::_1 << "the value is " << 17 << '\n')
+ typedef boost::function<void(std::ostream&)> Streamer;
+
+ NamedTempFile(const std::string& ext, const std::string& content):
+ mPath(temp_directory_path())
+ {
+ createFile(ext, lambda::_1 << content);
+ }
+
+ // Disambiguate when passing string literal
+ NamedTempFile(const std::string& ext, const char* content):
+ mPath(temp_directory_path())
+ {
+ createFile(ext, lambda::_1 << content);
+ }
+
+ NamedTempFile(const std::string& ext, const Streamer& func):
+ mPath(temp_directory_path())
+ {
+ createFile(ext, func);
+ }
+
+ ~NamedTempFile()
+ {
+ _remove(mPath.c_str());
+ }
+
+ std::string getName() const { return mPath; }
+
+private:
+ void createFile(const std::string& ext, const Streamer& func)
+ {
+ // Silly maybe, but use 'ext' as the name prefix. Strip off a leading
+ // '.' if present.
+ int pfx_offset = ((! ext.empty()) && ext[0] == '.')? 1 : 0;
+
+#if ! LL_WINDOWS
+ // Make sure mPath ends with a directory separator, if it doesn't already.
+ if (mPath.empty() ||
+ ! (mPath[mPath.length() - 1] == '\\' || mPath[mPath.length() - 1] == '/'))
+ {
+ mPath.append("/");
+ }
+
+ // mkstemp() accepts and modifies a char* template string. Generate
+ // the template string, then copy to modifiable storage.
+ // mkstemp() requires its template string to end in six X's.
+ mPath += ext.substr(pfx_offset) + "XXXXXX";
+ // Copy to vector<char>
+ std::vector<char> pathtemplate(mPath.begin(), mPath.end());
+ // append a nul byte for classic-C semantics
+ pathtemplate.push_back('\0');
+ // std::vector promises that a pointer to the 0th element is the same
+ // as a pointer to a contiguous classic-C array
+ int fd(mkstemp(&pathtemplate[0]));
+ if (fd == -1)
+ {
+ // The documented errno values (http://linux.die.net/man/3/mkstemp)
+ // are used in a somewhat unusual way, so provide context-specific
+ // errors.
+ if (errno == EEXIST)
+ {
+ LL_ERRS("NamedTempFile") << "mkstemp(\"" << mPath
+ << "\") could not create unique file " << LL_ENDL;
+ }
+ if (errno == EINVAL)
+ {
+ LL_ERRS("NamedTempFile") << "bad mkstemp() file path template '"
+ << mPath << "'" << LL_ENDL;
+ }
+ // Shrug, something else
+ int mkst_errno = errno;
+ char buffer[256];
+ LL_ERRS("NamedTempFile") << "mkstemp(\"" << mPath << "\") failed: "
+ << message_from(mkst_errno, buffer,
+ strerror_r(mkst_errno, buffer, sizeof(buffer)))
+ << LL_ENDL;
+ }
+ // mkstemp() seems to have worked! Capture the modified filename.
+ // Avoid the nul byte we appended.
+ mPath.assign(pathtemplate.begin(), (pathtemplate.end()-1));
+
+/*==========================================================================*|
+ // Define an ostream on the open fd. Tell it to close fd on destruction.
+ boost::iostreams::stream<boost::iostreams::file_descriptor_sink>
+ out(fd, boost::iostreams::close_handle);
+|*==========================================================================*/
+
+ // Write desired content.
+ std::ostringstream out;
+ // Stream stuff to it.
+ func(out);
+
+ std::string data(out.str());
+ int written(_write(fd, data.c_str(), data.length()));
+ int closed(_close(fd));
+ llassert_always(written == data.length() && closed == 0);
+
+#else // LL_WINDOWS
+ // GetTempFileName() is documented to require a MAX_PATH buffer.
+ char tempname[MAX_PATH];
+ // Use 'ext' as filename prefix, but skip leading '.' if any.
+ // The 0 param is very important: requests iterating until we get a
+ // unique name.
+ if (0 == GetTempFileNameA(mPath.c_str(), ext.c_str() + pfx_offset, 0, tempname))
+ {
+ // I always have to look up this call... :-P
+ LPSTR msgptr;
+ FormatMessageA(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ LPSTR(&msgptr), // have to cast (char**) to (char*)
+ 0, NULL );
+ LL_ERRS("NamedTempFile") << "GetTempFileName(\"" << mPath << "\", \""
+ << (ext.c_str() + pfx_offset) << "\") failed: "
+ << msgptr << LL_ENDL;
+ LocalFree(msgptr);
+ }
+ // GetTempFileName() appears to have worked! Capture the actual
+ // filename.
+ mPath = tempname;
+ // Open the file and stream content to it. Destructor will close.
+ std::ofstream out(tempname);
+ func(out);
+
+#endif // LL_WINDOWS
+ }
+
+ void peep()
+ {
+ std::cout << "File '" << mPath << "' contains:\n";
+ std::ifstream reader(mPath.c_str());
+ std::string line;
+ while (std::getline(reader, line))
+ std::cout << line << '\n';
+ std::cout << "---\n";
+ }
+
+ std::string mPath;
+};
+
namespace tut
{
struct sd_xml_data
@@ -1494,5 +1752,223 @@ namespace tut
ensureBinaryAndNotation("map", test);
ensureBinaryAndXML("map", test);
}
-}
+ struct TestPythonCompatible
+ {
+ TestPythonCompatible():
+ // Note the peculiar insertion of __FILE__ into this string. Since
+ // this script is being written into a platform-dependent temp
+ // directory, we can't locate indra/lib/python relative to
+ // Python's __file__. Use __FILE__ instead, navigating relative
+ // to this C++ source file. Use Python raw-string syntax so
+ // Windows pathname backslashes won't mislead Python's string
+ // scanner.
+ import_llsd("import os.path\n"
+ "import sys\n"
+ "sys.path.insert(0,\n"
+ " os.path.join(os.path.dirname(r'" __FILE__ "'),\n"
+ " os.pardir, os.pardir, 'lib', 'python'))\n"
+ "try:\n"
+ " from llbase import llsd\n"
+ "except ImportError:\n"
+ " from indra.base import llsd\n")
+ {}
+ ~TestPythonCompatible() {}
+
+ std::string import_llsd;
+
+ template <typename CONTENT>
+ void python(const std::string& desc, const CONTENT& script, int expect=0)
+ {
+ const char* PYTHON(getenv("PYTHON"));
+ ensure("Set $PYTHON to the Python interpreter", PYTHON);
+
+ NamedTempFile scriptfile(".py", script);
+
+#if LL_WINDOWS
+ std::string q("\"");
+ std::string qPYTHON(q + PYTHON + q);
+ std::string qscript(q + scriptfile.getName() + q);
+ int rc = _spawnl(_P_WAIT, PYTHON, qPYTHON.c_str(), qscript.c_str(), NULL);
+ if (rc == -1)
+ {
+ char buffer[256];
+ strerror_s(buffer, errno); // C++ can infer the buffer size! :-O
+ ensure(STRINGIZE("Couldn't run Python " << desc << "script: " << buffer), false);
+ }
+ else
+ {
+ ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc), rc, expect);
+ }
+
+#else // LL_DARWIN, LL_LINUX
+ LLProcessLauncher py;
+ py.setExecutable(PYTHON);
+ py.addArgument(scriptfile.getName());
+ ensure_equals(STRINGIZE("Couldn't launch " << desc << " script"), py.launch(), 0);
+ // Implementing timeout would mean messing with alarm() and
+ // catching SIGALRM... later maybe...
+ int status(0);
+ if (waitpid(py.getProcessID(), &status, 0) == -1)
+ {
+ int waitpid_errno(errno);
+ ensure_equals(STRINGIZE("Couldn't retrieve rc from " << desc << " script: "
+ "waitpid() errno " << waitpid_errno),
+ waitpid_errno, ECHILD);
+ }
+ else
+ {
+ if (WIFEXITED(status))
+ {
+ int rc(WEXITSTATUS(status));
+ ensure_equals(STRINGIZE(desc << " script terminated with rc " << rc),
+ rc, expect);
+ }
+ else if (WIFSIGNALED(status))
+ {
+ ensure(STRINGIZE(desc << " script terminated by signal " << WTERMSIG(status)),
+ false);
+ }
+ else
+ {
+ ensure(STRINGIZE(desc << " script produced impossible status " << status),
+ false);
+ }
+ }
+#endif
+ }
+ };
+
+ typedef tut::test_group<TestPythonCompatible> TestPythonCompatibleGroup;
+ typedef TestPythonCompatibleGroup::object TestPythonCompatibleObject;
+ TestPythonCompatibleGroup pycompat("LLSD serialize Python compatibility");
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<1>()
+ {
+ set_test_name("verify python()");
+ python("hello",
+ "import sys\n"
+ "sys.exit(17)\n",
+ 17); // expect nonzero rc
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<2>()
+ {
+ set_test_name("verify NamedTempFile");
+ python("platform",
+ "import sys\n"
+ "print 'Running on', sys.platform\n");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<3>()
+ {
+ set_test_name("verify sequence to Python");
+
+ LLSD cdata(LLSDArray(17)(3.14)
+ ("This string\n"
+ "has several\n"
+ "lines."));
+
+ const char pydata[] =
+ "def verify(iterable):\n"
+ " it = iter(iterable)\n"
+ " assert it.next() == 17\n"
+ " assert abs(it.next() - 3.14) < 0.01\n"
+ " assert it.next() == '''\\\n"
+ "This string\n"
+ "has several\n"
+ "lines.'''\n"
+ " try:\n"
+ " it.next()\n"
+ " except StopIteration:\n"
+ " pass\n"
+ " else:\n"
+ " assert False, 'Too many data items'\n";
+
+ // Create a something.llsd file containing 'data' serialized to
+ // notation. It's important to separate with newlines because Python's
+ // llsd module doesn't support parsing from a file stream, only from a
+ // string, so we have to know how much of the file to read into a
+ // string.
+ NamedTempFile file(".llsd",
+ // NamedTempFile's boost::function constructor
+ // takes a callable. To this callable it passes the
+ // std::ostream with which it's writing the
+ // NamedTempFile. This lambda-based expression
+ // first calls LLSD::Serialize() with that ostream,
+ // then streams a newline to it, etc.
+ (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1),
+ lambda::_1 << '\n',
+ lambda::bind(LLSDSerialize::toNotation, cdata[1], lambda::_1),
+ lambda::_1 << '\n',
+ lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1),
+ lambda::_1 << '\n'));
+
+ python("read C++ notation",
+ lambda::_1 <<
+ import_llsd <<
+ "def parse_each(iterable):\n"
+ " for item in iterable:\n"
+ " yield llsd.parse(item)\n" <<
+ pydata <<
+ // Don't forget raw-string syntax for Windows pathnames.
+ "verify(parse_each(open(r'" << file.getName() << "')))\n");
+ }
+
+ template<> template<>
+ void TestPythonCompatibleObject::test<4>()
+ {
+ set_test_name("verify sequence from Python");
+
+ // Create an empty data file. This is just a placeholder for our
+ // script to write into. Create it to establish a unique name that
+ // we know.
+ NamedTempFile file(".llsd", "");
+
+ python("write Python notation",
+ lambda::_1 <<
+ "from __future__ import with_statement\n" <<
+ import_llsd <<
+ "DATA = [\n"
+ " 17,\n"
+ " 3.14,\n"
+ " '''\\\n"
+ "This string\n"
+ "has several\n"
+ "lines.''',\n"
+ "]\n"
+ // Don't forget raw-string syntax for Windows pathnames.
+ // N.B. Using 'print' implicitly adds newlines.
+ "with open(r'" << file.getName() << "', 'w') as f:\n"
+ " for item in DATA:\n"
+ " print >>f, llsd.format_notation(item)\n");
+
+ std::ifstream inf(file.getName().c_str());
+ LLSD item;
+ // Notice that we're not doing anything special to parse out the
+ // newlines: LLSDSerialize::fromNotation ignores them. While it would
+ // seem they're not strictly necessary, going in this direction, we
+ // want to ensure that notation-separated-by-newlines works in both
+ // directions -- since in practice, a given file might be read by
+ // either language.
+ ensure_equals("Failed to read LLSD::Integer from Python",
+ LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
+ 1);
+ ensure_equals(item.asInteger(), 17);
+ ensure_equals("Failed to read LLSD::Real from Python",
+ LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
+ 1);
+ ensure_approximately_equals("Bad LLSD::Real value from Python",
+ item.asReal(), 3.14, 7); // 7 bits ~= 0.01
+ ensure_equals("Failed to read LLSD::String from Python",
+ LLSDSerialize::fromNotation(item, inf, LLSDSerialize::SIZE_UNLIMITED),
+ 1);
+ ensure_equals(item.asString(),
+ "This string\n"
+ "has several\n"
+ "lines.");
+ }
+}
diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp
index 304e91ed92..6a1cbf652a 100644
--- a/indra/llcommon/tests/llstring_test.cpp
+++ b/indra/llcommon/tests/llstring_test.cpp
@@ -624,6 +624,14 @@ namespace tut
subcount = LLStringUtil::format(s, fmt_map);
ensure_equals("LLStringUtil::format: Assorted Test2 result", s, "?Am I not a long string?short[A]bbbaaaba[A]");
ensure_equals("LLStringUtil::format: Assorted Test2 result count", 9, subcount);
+
+ // Test on nested brackets
+ std::string srcs6 = "[[TRICK1]][[A]][[B]][[AAA]][[BBB]][[TRICK2]][[KEYLONGER]][[KEYSHORTER]]?[[DELETE]]";
+ s = srcs6;
+ subcount = LLStringUtil::format(s, fmt_map);
+ ensure_equals("LLStringUtil::format: Assorted Test2 result", s, "[[A]][a][b][aaa][bbb][[A]][short][Am I not a long string?]?[]");
+ ensure_equals("LLStringUtil::format: Assorted Test2 result count", 9, subcount);
+
// Test an assorted substitution
std::string srcs8 = "foo[DELETE]bar?";
diff --git a/indra/llcommon/tests/setpython.py b/indra/llcommon/tests/setpython.py
new file mode 100644
index 0000000000..df7b90428e
--- /dev/null
+++ b/indra/llcommon/tests/setpython.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+"""\
+@file setpython.py
+@author Nat Goodspeed
+@date 2011-07-13
+@brief Set PYTHON environment variable for tests that care.
+
+$LicenseInfo:firstyear=2011&license=viewerlgpl$
+Copyright (c) 2011, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import os
+import sys
+import subprocess
+
+if __name__ == "__main__":
+ os.environ["PYTHON"] = sys.executable
+ sys.exit(subprocess.call(sys.argv[1:]))
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 68e45f36e4..514ef6011f 100644
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -31,10 +31,12 @@
#include "llcrashlogger.h"
#include "linden_common.h"
#include "llstring.h"
-#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
+#include "indra_constants.h" // CRASH_BEHAVIOR_...
#include "llerror.h"
+#include "llerrorcontrol.h"
#include "lltimer.h"
#include "lldir.h"
+#include "llfile.h"
#include "llsdserialize.h"
#include "lliopipe.h"
#include "llpumpio.h"
@@ -54,7 +56,7 @@ public:
virtual void error(U32 status, const std::string& reason)
{
- gBreak = true;
+ gBreak = true;
}
virtual void result(const LLSD& content)
@@ -64,21 +66,8 @@ public:
}
};
-bool LLCrashLoggerText::mainLoop()
-{
- std::cout << "Entering main loop" << std::endl;
- sendCrashLogs();
- return true;
-}
-
-void LLCrashLoggerText::updateApplication(const std::string& message)
-{
- LLCrashLogger::updateApplication(message);
- std::cout << message << std::endl;
-}
-
LLCrashLogger::LLCrashLogger() :
- mCrashBehavior(CRASH_BEHAVIOR_ASK),
+ mCrashBehavior(CRASH_BEHAVIOR_ALWAYS_SEND),
mCrashInPreviousExec(false),
mCrashSettings("CrashSettings"),
mSentCrashLogs(false),
@@ -281,26 +270,48 @@ LLSD LLCrashLogger::constructPostData()
return mCrashInfo;
}
+const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
+
S32 LLCrashLogger::loadCrashBehaviorSetting()
{
+ // First check user_settings (in the user's home dir)
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
+ if (! mCrashSettings.loadFromFile(filename))
+ {
+ // Next check app_settings (in the SL program dir)
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, CRASH_SETTINGS_FILE);
+ mCrashSettings.loadFromFile(filename);
+ }
- mCrashSettings.loadFromFile(filename);
-
- S32 value = mCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
-
- if (value < CRASH_BEHAVIOR_ASK || CRASH_BEHAVIOR_NEVER_SEND < value) return CRASH_BEHAVIOR_ASK;
+ // If we didn't load any files above, this will return the default
+ S32 value = mCrashSettings.getS32("CrashSubmitBehavior");
- return value;
+ // Whatever value we got, make sure it's valid
+ switch (value)
+ {
+ case CRASH_BEHAVIOR_NEVER_SEND:
+ return CRASH_BEHAVIOR_NEVER_SEND;
+ case CRASH_BEHAVIOR_ALWAYS_SEND:
+ return CRASH_BEHAVIOR_ALWAYS_SEND;
+ }
+
+ return CRASH_BEHAVIOR_ASK;
}
bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
{
- if (crash_behavior != CRASH_BEHAVIOR_ASK && crash_behavior != CRASH_BEHAVIOR_ALWAYS_SEND) return false;
+ switch (crash_behavior)
+ {
+ case CRASH_BEHAVIOR_ASK:
+ case CRASH_BEHAVIOR_NEVER_SEND:
+ case CRASH_BEHAVIOR_ALWAYS_SEND:
+ break;
+ default:
+ return false;
+ }
- mCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior);
+ mCrashSettings.setS32("CrashSubmitBehavior", crash_behavior);
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
-
mCrashSettings.saveToFile(filename, FALSE);
return true;
@@ -309,14 +320,13 @@ bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg, int retries, int timeout)
{
gBreak = false;
- std::string status_message;
for(int i = 0; i < retries; ++i)
{
- status_message = llformat("%s, try %d...", msg.c_str(), i+1);
+ updateApplication(llformat("%s, try %d...", msg.c_str(), i+1));
LLHTTPClient::post(host, data, new LLCrashLoggerResponder(), timeout);
while(!gBreak)
{
- updateApplication(status_message);
+ updateApplication(); // No new message, just pump the IO
}
if(gSent)
{
@@ -336,7 +346,7 @@ bool LLCrashLogger::sendCrashLogs()
updateApplication("Sending reports...");
std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
- "SecondLifeCrashReport");
+ "SecondLifeCrashReport");
std::string report_file = dump_path + ".log";
std::ofstream out_file(report_file.c_str());
@@ -365,23 +375,37 @@ void LLCrashLogger::updateApplication(const std::string& message)
{
gServicePump->pump();
gServicePump->callback();
+ if (!message.empty()) llinfos << message << llendl;
}
bool LLCrashLogger::init()
{
- LLCurl::initClass();
+ LLCurl::initClass(false);
// We assume that all the logs we're looking for reside on the current drive
gDirUtilp->initAppDirs("SecondLife");
+ LLError::initForApplication(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
+
// Default to the product name "Second Life" (this is overridden by the -name argument)
mProductName = "Second Life";
+
+ // Rename current log file to ".old"
+ std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "crashreport.log.old");
+ std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "crashreport.log");
+ LLFile::rename(log_file.c_str(), old_log_file.c_str());
+
+ // Set the log file to crashreport.log
+ LLError::logToFile(log_file);
- mCrashSettings.declareS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ASK, "Controls behavior when viewer crashes "
- "(0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)");
+ mCrashSettings.declareS32("CrashSubmitBehavior", CRASH_BEHAVIOR_ALWAYS_SEND,
+ "Controls behavior when viewer crashes "
+ "(0 = ask before sending crash report, "
+ "1 = always send crash report, "
+ "2 = never send crash report)");
- llinfos << "Loading crash behavior setting" << llendl;
- mCrashBehavior = loadCrashBehaviorSetting();
+ // llinfos << "Loading crash behavior setting" << llendl;
+ // mCrashBehavior = loadCrashBehaviorSetting();
// If user doesn't want to send, bail out
if (mCrashBehavior == CRASH_BEHAVIOR_NEVER_SEND)
@@ -390,14 +414,14 @@ bool LLCrashLogger::init()
return false;
}
- gServicePump = new LLPumpIO(gAPRPoolp);
- gServicePump->prime(gAPRPoolp);
+ gServicePump = new LLPumpIO;
LLHTTPClient::setPump(*gServicePump);
- //If we've opened the crash logger, assume we can delete the marker file if it exists
+ //If we've opened the crash logger, assume we can delete the marker file if it exists
if( gDirUtilp )
{
- std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.exec_marker");
+ std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
+ "SecondLife.exec_marker");
LLAPRFile::remove( marker_file );
}
diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h
index a5daa74247..5d0cb5931c 100644
--- a/indra/llcrashlogger/llcrashlogger.h
+++ b/indra/llcrashlogger/llcrashlogger.h
@@ -66,15 +66,4 @@ protected:
bool mSentCrashLogs;
};
-class LLCrashLoggerText : public LLCrashLogger
-{
-public:
- LLCrashLoggerText(void) {}
- ~LLCrashLoggerText(void) {}
-
- virtual bool mainLoop();
- virtual void updateApplication(const std::string& message = LLStringUtil::null);
-};
-
-
#endif //LLCRASHLOGGER_H
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index f0d15d9607..23adbf68c8 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -39,6 +39,7 @@
#include "llimagepng.h"
#include "llimagedxt.h"
#include "llimageworker.h"
+#include "llmemory.h"
//---------------------------------------------------------------------------
// LLImage
@@ -47,11 +48,14 @@
//static
std::string LLImage::sLastErrorMessage;
LLMutex* LLImage::sMutex = NULL;
+LLPrivateMemoryPool* LLImageBase::sPrivatePoolp = NULL ;
//static
void LLImage::initClass()
{
- sMutex = new LLMutex(NULL);
+ sMutex = new LLMutex;
+
+ LLImageBase::createPrivatePool() ;
}
//static
@@ -59,6 +63,8 @@ void LLImage::cleanupClass()
{
delete sMutex;
sMutex = NULL;
+
+ LLImageBase::destroyPrivatePool() ;
}
//static
@@ -97,6 +103,25 @@ LLImageBase::~LLImageBase()
deleteData(); // virtual
}
+//static
+void LLImageBase::createPrivatePool()
+{
+ if(!sPrivatePoolp)
+ {
+ sPrivatePoolp = LLPrivateMemoryPoolManager::getInstance()->newPool(LLPrivateMemoryPool::STATIC_THREADED) ;
+ }
+}
+
+//static
+void LLImageBase::destroyPrivatePool()
+{
+ if(sPrivatePoolp)
+ {
+ LLPrivateMemoryPoolManager::getInstance()->deletePool(sPrivatePoolp) ;
+ sPrivatePoolp = NULL ;
+ }
+}
+
// virtual
void LLImageBase::dump()
{
@@ -130,7 +155,7 @@ void LLImageBase::sanityCheck()
// virtual
void LLImageBase::deleteData()
{
- delete[] mData;
+ FREE_MEM(sPrivatePoolp, mData) ;
mData = NULL;
mDataSize = 0;
}
@@ -167,7 +192,7 @@ U8* LLImageBase::allocateData(S32 size)
{
deleteData(); // virtual
mBadBufferAllocation = false ;
- mData = new U8[size];
+ mData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size);
if (!mData)
{
llwarns << "allocate image data: " << size << llendl;
@@ -185,7 +210,7 @@ U8* LLImageBase::allocateData(S32 size)
U8* LLImageBase::reallocateData(S32 size)
{
LLMemType mt1(mMemType);
- U8 *new_datap = new U8[size];
+ U8 *new_datap = (U8*)ALLOCATE_MEM(sPrivatePoolp, size);
if (!new_datap)
{
llwarns << "Out of memory in LLImageBase::reallocateData" << llendl;
@@ -195,7 +220,7 @@ U8* LLImageBase::reallocateData(S32 size)
{
S32 bytes = llmin(mDataSize, size);
memcpy(new_datap, mData, bytes); /* Flawfinder: ignore */
- delete[] mData;
+ FREE_MEM(sPrivatePoolp, mData) ;
}
mData = new_datap;
mDataSize = size;
@@ -341,6 +366,7 @@ BOOL LLImageRaw::resize(U16 width, U16 height, S8 components)
return TRUE;
}
+#if 0
U8 * LLImageRaw::getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const
{
LLMemType mt1(mMemType);
@@ -361,6 +387,7 @@ U8 * LLImageRaw::getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const
}
return data;
}
+#endif
BOOL LLImageRaw::setSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height,
const U8 *data, U32 stride, BOOL reverse_y)
@@ -830,6 +857,7 @@ void LLImageRaw::copyScaled( LLImageRaw* src )
}
}
+#if 0
//scale down image by not blending a pixel with its neighbors.
BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height)
{
@@ -853,7 +881,7 @@ BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height)
ratio_x -= 1.0f ;
ratio_y -= 1.0f ;
- U8* new_data = new U8[new_data_size] ;
+ U8* new_data = allocateMemory(new_data_size) ;
llassert_always(new_data != NULL) ;
U8* old_data = getData() ;
@@ -875,6 +903,7 @@ BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height)
return TRUE ;
}
+#endif
BOOL LLImageRaw::scale( S32 new_width, S32 new_height, BOOL scale_image_data )
{
@@ -1506,6 +1535,7 @@ void LLImageFormatted::setData(U8 *data, S32 size)
{
deleteData();
setDataAndSize(data, size); // Access private LLImageBase members
+
sGlobalFormattedMemory += getDataSize();
}
}
@@ -1524,7 +1554,7 @@ void LLImageFormatted::appendData(U8 *data, S32 size)
S32 newsize = cursize + size;
reallocateData(newsize);
memcpy(getData() + cursize, data, size);
- delete[] data;
+ FREE_MEM(LLImageBase::getPrivatePool(), data);
}
}
}
@@ -1536,8 +1566,7 @@ BOOL LLImageFormatted::load(const std::string &filename)
resetLastError();
S32 file_size = 0;
- LLAPRFile infile ;
- infile.open(filename, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(filename, LL_APR_RB, &file_size);
apr_file_t* apr_file = infile.getFileHandle();
if (!apr_file)
{
@@ -1572,8 +1601,7 @@ BOOL LLImageFormatted::save(const std::string &filename)
{
resetLastError();
- LLAPRFile outfile ;
- outfile.open(filename, LL_APR_WB);
+ LLAPRFile outfile(filename, LL_APR_WB);
if (!outfile.getFileHandle())
{
setLastError("Unable to open file for writing", filename);
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
index c464c3b2b6..4469c9e860 100644
--- a/indra/llimage/llimage.h
+++ b/indra/llimage/llimage.h
@@ -29,7 +29,6 @@
#include "lluuid.h"
#include "llstring.h"
-//#include "llmemory.h"
#include "llthread.h"
#include "llmemtype.h"
@@ -69,6 +68,7 @@ const S32 MAX_IMG_PACKET_SIZE = 1000;
class LLImageFormatted;
class LLImageRaw;
class LLColor4U;
+class LLPrivateMemoryPool;
typedef enum e_image_codec
{
@@ -140,7 +140,7 @@ public:
protected:
// special accessor to allow direct setting of mData and mDataSize by LLImageFormatted
- void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; }
+ void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; }
public:
static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels);
@@ -151,6 +151,10 @@ public:
static EImageCodec getCodecFromExtension(const std::string& exten);
+ static void createPrivatePool() ;
+ static void destroyPrivatePool() ;
+ static LLPrivateMemoryPool* getPrivatePool() {return sPrivatePoolp;}
+
private:
U8 *mData;
S32 mDataSize;
@@ -162,6 +166,8 @@ private:
bool mBadBufferAllocation ;
bool mAllowOverSize ;
+
+ static LLPrivateMemoryPool* sPrivatePoolp ;
public:
LLMemType::DeclareMemType& mMemType; // debug
};
@@ -185,7 +191,7 @@ public:
BOOL resize(U16 width, U16 height, S8 components);
- U8 * getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const;
+ //U8 * getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const;
BOOL setSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height,
const U8 *data, U32 stride = 0, BOOL reverse_y = FALSE);
@@ -197,7 +203,7 @@ public:
void contractToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE);
void biasedScaleToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE);
BOOL scale( S32 new_width, S32 new_height, BOOL scale_image = TRUE );
- BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ;
+ //BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ;
// Fill the buffer with a constant color
void fill( const LLColor4U& color );
diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp
index c6bfa50b40..926c749145 100644
--- a/indra/llimage/llimagedimensionsinfo.cpp
+++ b/indra/llimage/llimagedimensionsinfo.cpp
@@ -40,7 +40,7 @@ bool LLImageDimensionsInfo::load(const std::string& src_filename,U32 codec)
mSrcFilename = src_filename;
S32 file_size = 0;
- apr_status_t s = mInfile.open(src_filename, LL_APR_RB, NULL, &file_size);
+ apr_status_t s = mInfile.open(src_filename, LL_APR_RB, LLAPRFile::long_lived, &file_size);
if (s != APR_SUCCESS)
{
diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp
index 4bd3efddaa..2867f5e6f0 100644
--- a/indra/llimage/llimagedxt.cpp
+++ b/indra/llimage/llimagedxt.cpp
@@ -429,7 +429,7 @@ bool LLImageDXT::convertToDXR()
S32 nmips = calcNumMips(width,height);
S32 total_bytes = getDataSize();
U8* olddata = getData();
- U8* newdata = new U8[total_bytes];
+ U8* newdata = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_bytes);
if (!newdata)
{
llerrs << "Out of memory in LLImageDXT::convertToDXR()" << llendl;
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index 44e6b89dd3..8c5dc63e9d 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -370,8 +370,7 @@ BOOL LLImageJ2C::loadAndValidate(const std::string &filename)
resetLastError();
S32 file_size = 0;
- LLAPRFile infile ;
- infile.open(filename, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(filename, LL_APR_RB, &file_size);
apr_file_t* apr_file = infile.getFileHandle() ;
if (!apr_file)
{
@@ -385,14 +384,14 @@ BOOL LLImageJ2C::loadAndValidate(const std::string &filename)
}
else
{
- U8 *data = new U8[file_size];
+ U8 *data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), file_size);
apr_size_t bytes_read = file_size;
apr_status_t s = apr_file_read(apr_file, data, &bytes_read); // modifies bytes_read
infile.close() ;
if (s != APR_SUCCESS || (S32)bytes_read != file_size)
{
- delete[] data;
+ FREE_MEM(LLImageBase::getPrivatePool(), data);
setLastError("Unable to read entire file");
res = FALSE;
}
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 28dc3bd313..2c6d6f31ea 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -35,20 +35,18 @@
LLImageDecodeThread::LLImageDecodeThread(bool threaded)
: LLQueuedThread("imagedecode", threaded)
{
- mCreationMutex = new LLMutex(getAPRPool());
}
//virtual
LLImageDecodeThread::~LLImageDecodeThread()
{
- delete mCreationMutex ;
}
// MAIN THREAD
// virtual
S32 LLImageDecodeThread::update(U32 max_time_ms)
{
- LLMutexLock lock(mCreationMutex);
+ LLMutexLock lock(&mCreationMutex);
for (creation_list_t::iterator iter = mCreationList.begin();
iter != mCreationList.end(); ++iter)
{
@@ -71,7 +69,7 @@ S32 LLImageDecodeThread::update(U32 max_time_ms)
LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted* image,
U32 priority, S32 discard, BOOL needs_aux, Responder* responder)
{
- LLMutexLock lock(mCreationMutex);
+ LLMutexLock lock(&mCreationMutex);
handle_t handle = generateHandle();
mCreationList.push_back(creation_info(handle, image, priority, discard, needs_aux, responder));
return handle;
@@ -81,7 +79,7 @@ LLImageDecodeThread::handle_t LLImageDecodeThread::decodeImage(LLImageFormatted*
// Returns the size of the mutex guarded list as an indication of sanity
S32 LLImageDecodeThread::tut_size()
{
- LLMutexLock lock(mCreationMutex);
+ LLMutexLock lock(&mCreationMutex);
S32 res = mCreationList.size();
return res;
}
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index c684222fa5..6a24b7522a 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -98,7 +98,7 @@ private:
};
typedef std::list<creation_info> creation_list_t;
creation_list_t mCreationList;
- LLMutex* mCreationMutex;
+ LLMutex mCreationMutex;
};
#endif
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
index 35a764b111..e45c809e7e 100644
--- a/indra/llinventory/CMakeLists.txt
+++ b/indra/llinventory/CMakeLists.txt
@@ -62,14 +62,14 @@ add_library (llinventory ${llinventory_SOURCE_FILES})
#add unit tests
if (LL_TESTS)
- INCLUDE(LLAddBuildTest)
- SET(llinventory_TEST_SOURCE_FILES
- # no real unit tests yet!
- )
- LL_ADD_PROJECT_UNIT_TESTS(llinventory "${llinventory_TEST_SOURCE_FILES}")
+ INCLUDE(LLAddBuildTest)
+ SET(llinventory_TEST_SOURCE_FILES
+ # no real unit tests yet!
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llinventory "${llinventory_TEST_SOURCE_FILES}")
- #set(TEST_DEBUG on)
- set(test_libs llinventory ${LLMESSAGE_LIBRARIES} ${LLVFS_LIBRARIES} ${LLMATH_LIBRARIES} ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})
- LL_ADD_INTEGRATION_TEST(inventorymisc "" "${test_libs}")
- LL_ADD_INTEGRATION_TEST(llparcel "" "${test_libs}")
+ #set(TEST_DEBUG on)
+ set(test_libs llinventory ${LLMESSAGE_LIBRARIES} ${LLVFS_LIBRARIES} ${LLMATH_LIBRARIES} ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES})
+ LL_ADD_INTEGRATION_TEST(inventorymisc "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llparcel "" "${test_libs}")
endif (LL_TESTS)
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
index a3caf79519..76760aa414 100644
--- a/indra/llinventory/llinventory.cpp
+++ b/indra/llinventory/llinventory.cpp
@@ -1034,8 +1034,11 @@ void LLInventoryItem::asLLSD( LLSD& sd ) const
sd[INV_CREATION_DATE_LABEL] = (S32) mCreationDate;
}
+LLFastTimer::DeclareTimer FTM_INVENTORY_SD_DESERIALIZE("Inventory SD Deserialize");
+
bool LLInventoryItem::fromLLSD(const LLSD& sd)
{
+ LLFastTimer _(FTM_INVENTORY_SD_DESERIALIZE);
mInventoryType = LLInventoryType::IT_NONE;
mAssetUUID.setNull();
std::string w;
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index e8cd871157..c95f922301 100644
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -226,6 +226,11 @@ void LLParcel::init(const LLUUID &owner_id,
setPreviousOwnerID(LLUUID::null);
setPreviouslyGroupOwned(FALSE);
+
+ setSeeAVs(TRUE);
+ setAllowGroupAVSounds(TRUE);
+ setAllowAnyAVSounds(TRUE);
+ setHaveNewParcelLimitData(FALSE);
}
void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned)
@@ -702,7 +707,9 @@ void LLParcel::packMessage(LLSD& msg)
msg["user_location"] = ll_sd_from_vector3(mUserLocation);
msg["user_look_at"] = ll_sd_from_vector3(mUserLookAt);
msg["landing_type"] = (U8)mLandingType;
-
+ msg["see_avs"] = (LLSD::Boolean) getSeeAVs();
+ msg["group_av_sounds"] = (LLSD::Boolean) getAllowGroupAVSounds();
+ msg["any_av_sounds"] = (LLSD::Boolean) getAllowAnyAVSounds();
}
@@ -721,6 +728,24 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)
msg->getStringFast( _PREHASH_ParcelData,_PREHASH_MediaURL, buffer );
setMediaURL(buffer);
+ BOOL see_avs = TRUE; // All default to true for legacy server behavior
+ BOOL any_av_sounds = TRUE;
+ BOOL group_av_sounds = TRUE;
+ bool have_new_parcel_limit_data = (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_SeeAVs) > 0); // New version of server should send all 3 of these values
+ have_new_parcel_limit_data &= (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_AnyAVSounds) > 0);
+ have_new_parcel_limit_data &= (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_GroupAVSounds) > 0);
+ if (have_new_parcel_limit_data)
+ {
+ msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_SeeAVs, see_avs);
+ msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_AnyAVSounds, any_av_sounds);
+ msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_GroupAVSounds, group_av_sounds);
+ }
+ setSeeAVs((bool) see_avs);
+ setAllowAnyAVSounds((bool) any_av_sounds);
+ setAllowGroupAVSounds((bool) group_av_sounds);
+
+ setHaveNewParcelLimitData(have_new_parcel_limit_data);
+
// non-optimized version
msg->getU8 ( "ParcelData", "MediaAutoScale", mMediaAutoScale );
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
index 4893337967..ff35caab4c 100644
--- a/indra/llinventory/llparcel.h
+++ b/indra/llinventory/llparcel.h
@@ -75,7 +75,7 @@ const U8 PARCEL_AUCTION = 0x05;
// unused 0x06
// unused 0x07
// flag, unused 0x08
-// flag, unused 0x10
+const U8 PARCEL_HIDDENAVS = 0x10; // avatars not visible outside of parcel. Used for 'see avs' feature, but must be off for compatibility
const U8 PARCEL_SOUND_LOCAL = 0x20;
const U8 PARCEL_WEST_LINE = 0x40; // flag, property line on west edge
const U8 PARCEL_SOUTH_LINE = 0x80; // flag, property line on south edge
@@ -130,6 +130,12 @@ class LLSD;
class LLAccessEntry
{
public:
+ LLAccessEntry()
+ : mID(),
+ mTime(0),
+ mFlags(0)
+ {}
+
LLUUID mID; // Agent ID
S32 mTime; // Time (unix seconds) when entry expires
U32 mFlags; // Not used - currently should always be zero
@@ -265,6 +271,8 @@ public:
void setUserLocation(const LLVector3& pos) { mUserLocation = pos; }
void setUserLookAt(const LLVector3& rot) { mUserLookAt = rot; }
void setLandingType(const ELandingType type) { mLandingType = type; }
+ void setSeeAVs(BOOL see_avs) { mSeeAVs = see_avs; }
+ void setHaveNewParcelLimitData(bool have_new_parcel_data) { mHaveNewParcelLimitData = have_new_parcel_data; } // Remove this once hidden AV feature is fully available grid-wide
void setAuctionID(U32 auction_id) { mAuctionID = auction_id;}
@@ -291,6 +299,8 @@ public:
void setDenyAnonymous(BOOL b) { setParcelFlag(PF_DENY_ANONYMOUS, b); }
void setDenyAgeUnverified(BOOL b) { setParcelFlag(PF_DENY_AGEUNVERIFIED, b); }
void setRestrictPushObject(BOOL b) { setParcelFlag(PF_RESTRICT_PUSHOBJECT, b); }
+ void setAllowGroupAVSounds(BOOL b) { mAllowGroupAVSounds = b; }
+ void setAllowAnyAVSounds(BOOL b) { mAllowAnyAVSounds = b; }
void setDrawDistance(F32 dist) { mDrawDistance = dist; }
void setSalePrice(S32 price) { mSalePrice = price; }
@@ -367,6 +377,8 @@ public:
const LLVector3& getUserLocation() const { return mUserLocation; }
const LLVector3& getUserLookAt() const { return mUserLookAt; }
ELandingType getLandingType() const { return mLandingType; }
+ BOOL getSeeAVs() const { return mSeeAVs; }
+ BOOL getHaveNewParcelLimitData() const { return mHaveNewParcelLimitData; }
// User-specified snapshot
const LLUUID& getSnapshotID() const { return mSnapshotID; }
@@ -496,6 +508,9 @@ public:
BOOL getRegionDenyAgeUnverifiedOverride() const
{ return mRegionDenyAgeUnverifiedOverride; }
+ BOOL getAllowGroupAVSounds() const { return mAllowGroupAVSounds; }
+ BOOL getAllowAnyAVSounds() const { return mAllowAnyAVSounds; }
+
F32 getDrawDistance() const { return mDrawDistance; }
S32 getSalePrice() const { return mSalePrice; }
time_t getClaimDate() const { return mClaimDate; }
@@ -606,6 +621,8 @@ protected:
LLVector3 mUserLocation;
LLVector3 mUserLookAt;
ELandingType mLandingType;
+ BOOL mSeeAVs; // Avatars on this parcel are visible from outside it
+ BOOL mHaveNewParcelLimitData; // Remove once hidden AV feature is grid-wide
LLTimer mSaleTimerExpires;
LLTimer mMediaResetTimer;
@@ -661,6 +678,8 @@ protected:
BOOL mRegionPushOverride;
BOOL mRegionDenyAnonymousOverride;
BOOL mRegionDenyAgeUnverifiedOverride;
+ BOOL mAllowGroupAVSounds;
+ BOOL mAllowAnyAVSounds;
ParcelQuota mQuota;
diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h
index a61130132a..b1a917df73 100644
--- a/indra/llinventory/llparcelflags.h
+++ b/indra/llinventory/llparcelflags.h
@@ -126,5 +126,7 @@ const S32 PARCEL_DETAILS_DESC = 1;
const S32 PARCEL_DETAILS_OWNER = 2;
const S32 PARCEL_DETAILS_GROUP = 3;
const S32 PARCEL_DETAILS_AREA = 4;
+const S32 PARCEL_DETAILS_ID = 5;
+const S32 PARCEL_DETAILS_SEE_AVATARS = 6;
#endif
diff --git a/indra/llkdu/CMakeLists.txt b/indra/llkdu/CMakeLists.txt
index 046629b514..bdac2eded7 100644
--- a/indra/llkdu/CMakeLists.txt
+++ b/indra/llkdu/CMakeLists.txt
@@ -30,7 +30,7 @@ set(llkdu_SOURCE_FILES
set(llkdu_HEADER_FILES
CMakeLists.txt
-
+
llimagej2ckdu.h
llkdumem.h
)
diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
index 9dadad7dd3..cd100cdf9f 100644
--- a/indra/llmath/CMakeLists.txt
+++ b/indra/llmath/CMakeLists.txt
@@ -12,6 +12,8 @@ include_directories(
set(llmath_SOURCE_FILES
llbbox.cpp
llbboxlocal.cpp
+ llcalc.cpp
+ llcalcparser.cpp
llcamera.cpp
llcoordframe.cpp
llline.cpp
@@ -46,6 +48,8 @@ set(llmath_HEADER_FILES
coordframe.h
llbbox.h
llbboxlocal.h
+ llcalc.h
+ llcalcparser.h
llcamera.h
llcoord.h
llcoordframe.h
diff --git a/indra/llmath/llcalc.cpp b/indra/llmath/llcalc.cpp
new file mode 100644
index 0000000000..1b2d609b67
--- /dev/null
+++ b/indra/llmath/llcalc.cpp
@@ -0,0 +1,162 @@
+/*
+ * LLCalc.cpp
+ * Copyright 2008 Aimee Walton.
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2008, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ */
+
+#include "linden_common.h"
+
+#include "llcalc.h"
+
+#include "llcalcparser.h"
+#include "llmath.h"
+
+
+// Variable names for use in the build floater
+const char* LLCalc::X_POS = "PX";
+const char* LLCalc::Y_POS = "PY";
+const char* LLCalc::Z_POS = "PZ";
+const char* LLCalc::X_SCALE = "SX";
+const char* LLCalc::Y_SCALE = "SY";
+const char* LLCalc::Z_SCALE = "SZ";
+const char* LLCalc::X_ROT = "RX";
+const char* LLCalc::Y_ROT = "RY";
+const char* LLCalc::Z_ROT = "RZ";
+const char* LLCalc::HOLLOW = "HLW";
+const char* LLCalc::CUT_BEGIN = "CB";
+const char* LLCalc::CUT_END = "CE";
+const char* LLCalc::PATH_BEGIN = "PB";
+const char* LLCalc::PATH_END = "PE";
+const char* LLCalc::TWIST_BEGIN = "TB";
+const char* LLCalc::TWIST_END = "TE";
+const char* LLCalc::X_SHEAR = "SHX";
+const char* LLCalc::Y_SHEAR = "SHY";
+const char* LLCalc::X_TAPER = "TPX";
+const char* LLCalc::Y_TAPER = "TPY";
+const char* LLCalc::RADIUS_OFFSET = "ROF";
+const char* LLCalc::REVOLUTIONS = "REV";
+const char* LLCalc::SKEW = "SKW";
+const char* LLCalc::X_HOLE = "HLX";
+const char* LLCalc::Y_HOLE = "HLY";
+const char* LLCalc::TEX_U_SCALE = "TSU";
+const char* LLCalc::TEX_V_SCALE = "TSV";
+const char* LLCalc::TEX_U_OFFSET = "TOU";
+const char* LLCalc::TEX_V_OFFSET = "TOV";
+const char* LLCalc::TEX_ROTATION = "TROT";
+const char* LLCalc::TEX_TRANSPARENCY = "TRNS";
+const char* LLCalc::TEX_GLOW = "GLOW";
+
+
+LLCalc* LLCalc::sInstance = NULL;
+
+LLCalc::LLCalc() : mLastErrorPos(0)
+{
+ // Init table of constants
+ mConstants["PI"] = F_PI;
+ mConstants["TWO_PI"] = F_TWO_PI;
+ mConstants["PI_BY_TWO"] = F_PI_BY_TWO;
+ mConstants["SQRT_TWO_PI"] = F_SQRT_TWO_PI;
+ mConstants["SQRT2"] = F_SQRT2;
+ mConstants["SQRT3"] = F_SQRT3;
+ mConstants["DEG_TO_RAD"] = DEG_TO_RAD;
+ mConstants["RAD_TO_DEG"] = RAD_TO_DEG;
+ mConstants["GRAVITY"] = GRAVITY;
+}
+
+LLCalc::~LLCalc()
+{
+}
+
+//static
+void LLCalc::cleanUp()
+{
+ delete sInstance;
+ sInstance = NULL;
+}
+
+//static
+LLCalc* LLCalc::getInstance()
+{
+ if (!sInstance) sInstance = new LLCalc();
+ return sInstance;
+}
+
+void LLCalc::setVar(const std::string& name, const F32& value)
+{
+ mVariables[name] = value;
+}
+
+void LLCalc::clearVar(const std::string& name)
+{
+ mVariables.erase(name);
+}
+
+void LLCalc::clearAllVariables()
+{
+ mVariables.clear();
+}
+
+/*
+void LLCalc::updateVariables(LLSD& vars)
+{
+ LLSD::map_iterator cIt = vars.beginMap();
+ for(; cIt != vars.endMap(); cIt++)
+ {
+ setVar(cIt->first, (F32)(LLSD::Real)cIt->second);
+ }
+}
+*/
+
+bool LLCalc::evalString(const std::string& expression, F32& result)
+{
+ std::string expr_upper = expression;
+ LLStringUtil::toUpper(expr_upper);
+
+ LLCalcParser calc(result, &mConstants, &mVariables);
+
+ mLastErrorPos = 0;
+ std::string::iterator start = expr_upper.begin();
+ parse_info<std::string::iterator> info;
+
+ try
+ {
+ info = parse(start, expr_upper.end(), calc, space_p);
+ lldebugs << "Math expression: " << expression << " = " << result << llendl;
+ }
+ catch(parser_error<std::string, std::string::iterator> &e)
+ {
+ mLastErrorPos = e.where - expr_upper.begin();
+
+ llinfos << "Calc parser exception: " << e.descriptor << " at " << mLastErrorPos << " in expression: " << expression << llendl;
+ return false;
+ }
+
+ if (!info.full)
+ {
+ mLastErrorPos = info.stop - expr_upper.begin();
+ llinfos << "Unhandled syntax error at " << mLastErrorPos << " in expression: " << expression << llendl;
+ return false;
+ }
+
+ return true;
+}
diff --git a/indra/llmath/llcalc.h b/indra/llmath/llcalc.h
new file mode 100644
index 0000000000..ceb9dce585
--- /dev/null
+++ b/indra/llmath/llcalc.h
@@ -0,0 +1,100 @@
+/*
+ * LLCalc.h
+ * Copyright 2008 Aimee Walton.
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2008, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ */
+
+#ifndef LL_CALC_H
+#define LL_CALC_H
+
+#include <map>
+#include <string>
+
+class LLCalc
+{
+public:
+ LLCalc();
+ ~LLCalc();
+
+ // Variable name constants
+ static const char* X_POS;
+ static const char* Y_POS;
+ static const char* Z_POS;
+ static const char* X_SCALE;
+ static const char* Y_SCALE;
+ static const char* Z_SCALE;
+ static const char* X_ROT;
+ static const char* Y_ROT;
+ static const char* Z_ROT;
+ static const char* HOLLOW;
+ static const char* CUT_BEGIN;
+ static const char* CUT_END;
+ static const char* PATH_BEGIN;
+ static const char* PATH_END;
+ static const char* TWIST_BEGIN;
+ static const char* TWIST_END;
+ static const char* X_SHEAR;
+ static const char* Y_SHEAR;
+ static const char* X_TAPER;
+ static const char* Y_TAPER;
+ static const char* RADIUS_OFFSET;
+ static const char* REVOLUTIONS;
+ static const char* SKEW;
+ static const char* X_HOLE;
+ static const char* Y_HOLE;
+ static const char* TEX_U_SCALE;
+ static const char* TEX_V_SCALE;
+ static const char* TEX_U_OFFSET;
+ static const char* TEX_V_OFFSET;
+ static const char* TEX_ROTATION;
+ static const char* TEX_TRANSPARENCY;
+ static const char* TEX_GLOW;
+
+ void setVar(const std::string& name, const F32& value);
+ void clearVar(const std::string& name);
+ void clearAllVariables();
+// void updateVariables(LLSD& vars);
+
+ bool evalString(const std::string& expression, F32& result);
+ std::string::size_type getLastErrorPos() { return mLastErrorPos; }
+
+ static LLCalc* getInstance();
+ static void cleanUp();
+
+ typedef std::map<std::string, F32> calc_map_t;
+
+private:
+ std::string::size_type mLastErrorPos;
+
+ calc_map_t mConstants;
+ calc_map_t mVariables;
+
+ // *TODO: Add support for storing user defined variables, and stored functions.
+ // Will need UI work, and a means to save them between sessions.
+// calc_map_t mUserVariables;
+
+ // "There shall be only one"
+ static LLCalc* sInstance;
+};
+
+#endif // LL_CALC_H
diff --git a/indra/llmath/llcalcparser.cpp b/indra/llmath/llcalcparser.cpp
new file mode 100644
index 0000000000..b4ca320659
--- /dev/null
+++ b/indra/llmath/llcalcparser.cpp
@@ -0,0 +1,63 @@
+/*
+ * LLCalcParser.cpp
+ * Copyright 2008 Aimee Walton.
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2008, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ */
+
+#include "linden_common.h"
+
+#include "llcalcparser.h"
+using namespace boost::spirit::classic;
+
+F32 LLCalcParser::lookup(const std::string::iterator& start, const std::string::iterator& end) const
+{
+ LLCalc::calc_map_t::iterator iter;
+
+ std::string name(start, end);
+
+ if (mConstants)
+ {
+ iter = mConstants->find(name);
+ if (iter != mConstants->end())
+ {
+ return (*iter).second;
+ }
+ }
+ else
+ {
+ // This should never happen!
+ throw_(end, std::string("Missing constants table"));
+ }
+
+ if (mVariables)
+ {
+ iter = mVariables->find(name);
+ if (iter != mVariables->end())
+ {
+ return (*iter).second;
+ }
+ }
+
+ throw_(end, std::string("Unknown symbol " + name));
+ return 0.f;
+}
diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h
new file mode 100644
index 0000000000..bd9c8c2519
--- /dev/null
+++ b/indra/llmath/llcalcparser.h
@@ -0,0 +1,191 @@
+/*
+ * LLCalcParser.h
+ * Copyright 2008 Aimee Walton.
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2008, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ *
+ */
+
+#ifndef LL_CALCPARSER_H
+#define LL_CALCPARSER_H
+
+#include <boost/spirit/include/classic_attribute.hpp>
+#include <boost/spirit/include/classic_core.hpp>
+#include <boost/spirit/include/classic_error_handling.hpp>
+#include <boost/spirit/include/classic_position_iterator.hpp>
+#include <boost/spirit/include/phoenix1_binders.hpp>
+#include <boost/spirit/include/classic_symbols.hpp>
+using namespace boost::spirit::classic;
+
+#include "llcalc.h"
+#include "llmath.h"
+
+struct LLCalcParser : grammar<LLCalcParser>
+{
+ LLCalcParser(F32& result, LLCalc::calc_map_t* constants, LLCalc::calc_map_t* vars) :
+ mResult(result), mConstants(constants), mVariables(vars) {};
+
+ struct value_closure : closure<value_closure, F32>
+ {
+ member1 value;
+ };
+
+ template <typename ScannerT>
+ struct definition
+ {
+ // Rule declarations
+ rule<ScannerT> statement, identifier;
+ rule<ScannerT, value_closure::context_t> expression, term,
+ power,
+ unary_expr,
+ factor,
+ unary_func,
+ binary_func,
+ group;
+
+ // start() should return the starting symbol
+ rule<ScannerT> const& start() const { return statement; }
+
+ definition(LLCalcParser const& self)
+ {
+ using namespace phoenix;
+
+ assertion<std::string> assert_domain("Domain error");
+// assertion<std::string> assert_symbol("Unknown symbol");
+ assertion<std::string> assert_syntax("Syntax error");
+
+ identifier =
+ lexeme_d[(alpha_p | '_') >> *(alnum_p | '_')]
+ ;
+
+ group =
+ '(' >> expression[group.value = arg1] >> assert_syntax(ch_p(')'))
+ ;
+
+ unary_func =
+ ((str_p("SIN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_sin)(self,arg1)]) |
+ (str_p("COS") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_cos)(self,arg1)]) |
+ (str_p("TAN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_tan)(self,arg1)]) |
+ (str_p("ASIN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_asin)(self,arg1)]) |
+ (str_p("ACOS") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_acos)(self,arg1)]) |
+ (str_p("ATAN") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_atan)(self,arg1)]) |
+ (str_p("SQRT") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_sqrt)(self,arg1)]) |
+ (str_p("LOG") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_log)(self,arg1)]) |
+ (str_p("EXP") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_exp)(self,arg1)]) |
+ (str_p("ABS") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_fabs)(self,arg1)]) |
+ (str_p("FLR") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_floor)(self,arg1)]) |
+ (str_p("CEIL") >> '(' >> expression[unary_func.value = bind(&LLCalcParser::_ceil)(self,arg1)])
+ ) >> assert_syntax(ch_p(')'))
+ ;
+
+ binary_func =
+ ((str_p("ATAN2") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
+ expression[binary_func.value = bind(&LLCalcParser::_atan2)(self, binary_func.value, arg1)]) |
+ (str_p("MIN") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
+ expression[binary_func.value = bind(&LLCalcParser::_min)(self, binary_func.value, arg1)]) |
+ (str_p("MAX") >> '(' >> expression[binary_func.value = arg1] >> ',' >>
+ expression[binary_func.value = bind(&LLCalcParser::_max)(self, binary_func.value, arg1)])
+ ) >> assert_syntax(ch_p(')'))
+ ;
+
+ // *TODO: Localisation of the decimal point?
+ // Problem, LLLineEditor::postvalidateFloat accepts a comma when appropriate
+ // for the current locale. However to do that here could clash with using
+ // the comma as a separator when passing arguments to functions.
+ factor =
+ (ureal_p[factor.value = arg1] |
+ group[factor.value = arg1] |
+ unary_func[factor.value = arg1] |
+ binary_func[factor.value = arg1] |
+ // Lookup throws an Unknown Symbol error if it is unknown, while this works fine,
+ // would be "neater" to handle symbol lookup from here with an assertive parser.
+// constants_p[factor.value = arg1]|
+ identifier[factor.value = bind(&LLCalcParser::lookup)(self, arg1, arg2)]
+ ) >>
+ // Detect and throw math errors.
+ assert_domain(eps_p(bind(&LLCalcParser::checkNaN)(self, factor.value)))
+ ;
+
+ unary_expr =
+ !ch_p('+') >> factor[unary_expr.value = arg1] |
+ '-' >> factor[unary_expr.value = -arg1]
+ ;
+
+ power =
+ unary_expr[power.value = arg1] >>
+ *('^' >> assert_syntax(unary_expr[power.value = bind(&powf)(power.value, arg1)]))
+ ;
+
+ term =
+ power[term.value = arg1] >>
+ *(('*' >> assert_syntax(power[term.value *= arg1])) |
+ ('/' >> assert_syntax(power[term.value /= arg1])) |
+ ('%' >> assert_syntax(power[term.value = bind(&fmodf)(term.value, arg1)]))
+ )
+ ;
+
+ expression =
+ assert_syntax(term[expression.value = arg1]) >>
+ *(('+' >> assert_syntax(term[expression.value += arg1])) |
+ ('-' >> assert_syntax(term[expression.value -= arg1]))
+ )
+ ;
+
+ statement =
+ !ch_p('=') >> ( expression )[var(self.mResult) = arg1] >> (end_p)
+ ;
+ }
+ };
+
+private:
+ // Member functions for semantic actions
+ F32 lookup(const std::string::iterator&, const std::string::iterator&) const;
+ F32 _min(const F32& a, const F32& b) const { return llmin(a, b); }
+ F32 _max(const F32& a, const F32& b) const { return llmax(a, b); }
+
+ bool checkNaN(const F32& a) const { return !llisnan(a); }
+
+ //FIX* non ambigious function fix making SIN() work for calc -Cryogenic Blitz
+ F32 _sin(const F32& a) const { return sin(DEG_TO_RAD * a); }
+ F32 _cos(const F32& a) const { return cos(DEG_TO_RAD * a); }
+ F32 _tan(const F32& a) const { return tan(DEG_TO_RAD * a); }
+ F32 _asin(const F32& a) const { return asin(a * RAD_TO_DEG); }
+ F32 _acos(const F32& a) const { return acos(a * RAD_TO_DEG); }
+ F32 _atan(const F32& a) const { return atan(a * RAD_TO_DEG); }
+ F32 _sqrt(const F32& a) const { return sqrt(a); }
+ F32 _log(const F32& a) const { return log(a); }
+ F32 _exp(const F32& a) const { return exp(a); }
+ F32 _fabs(const F32& a) const { return fabs(a); }
+ F32 _floor(const F32& a) const { return llfloor(a); }
+ F32 _ceil(const F32& a) const { return llceil(a); }
+
+ F32 _atan2(const F32& a,const F32& b) const { return atan2(a,b); }
+
+
+
+ LLCalc::calc_map_t* mConstants;
+ LLCalc::calc_map_t* mVariables;
+// LLCalc::calc_map_t* mUserVariables;
+
+ F32& mResult;
+};
+
+#endif // LL_CALCPARSER_H
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 8c81f27784..2893e746e9 100644..100755
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -32,6 +32,7 @@
#if !LL_WINDOWS
#include <stdint.h>
#endif
+#include <cmath>
#include "llerror.h"
#include "llmemtype.h"
@@ -2379,11 +2380,16 @@ bool LLVolumeFace::VertexData::operator==(const LLVolumeFace::VertexData& rhs)co
bool LLVolumeFace::VertexData::compareNormal(const LLVolumeFace::VertexData& rhs, F32 angle_cutoff) const
{
bool retval = false;
- if (rhs.mData[POSITION].equals3(mData[POSITION]) && rhs.mTexCoord == mTexCoord)
+
+ const F32 epsilon = 0.00001f;
+
+ if (rhs.mData[POSITION].equals3(mData[POSITION], epsilon) &&
+ fabs(rhs.mTexCoord[0]-mTexCoord[0]) < epsilon &&
+ fabs(rhs.mTexCoord[1]-mTexCoord[1]) < epsilon)
{
if (angle_cutoff > 1.f)
{
- retval = (mData[NORMAL].equals3(rhs.mData[NORMAL]));
+ retval = (mData[NORMAL].equals3(rhs.mData[NORMAL], epsilon));
}
else
{
@@ -2499,38 +2505,52 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
}
{
- U16* n = (U16*) &(norm[0]);
- for (U32 j = 0; j < num_verts; ++j)
+ if (!norm.empty())
{
- norm_out->set((F32) n[0], (F32) n[1], (F32) n[2]);
- norm_out->div(65535.f);
- norm_out->mul(2.f);
- norm_out->sub(1.f);
- norm_out++;
- n += 3;
+ U16* n = (U16*) &(norm[0]);
+ for (U32 j = 0; j < num_verts; ++j)
+ {
+ norm_out->set((F32) n[0], (F32) n[1], (F32) n[2]);
+ norm_out->div(65535.f);
+ norm_out->mul(2.f);
+ norm_out->sub(1.f);
+ norm_out++;
+ n += 3;
+ }
+ }
+ else
+ {
+ memset(norm_out, 0, sizeof(LLVector4a)*num_verts);
}
}
{
- U16* t = (U16*) &(tc[0]);
- for (U32 j = 0; j < num_verts; j+=2)
+ if (!tc.empty())
{
- if (j < num_verts-1)
- {
- tc_out->set((F32) t[0], (F32) t[1], (F32) t[2], (F32) t[3]);
- }
- else
+ U16* t = (U16*) &(tc[0]);
+ for (U32 j = 0; j < num_verts; j+=2)
{
- tc_out->set((F32) t[0], (F32) t[1], 0.f, 0.f);
- }
+ if (j < num_verts-1)
+ {
+ tc_out->set((F32) t[0], (F32) t[1], (F32) t[2], (F32) t[3]);
+ }
+ else
+ {
+ tc_out->set((F32) t[0], (F32) t[1], 0.f, 0.f);
+ }
- t += 4;
+ t += 4;
- tc_out->div(65535.f);
- tc_out->mul(tc_range);
- tc_out->add(min_tc4);
+ tc_out->div(65535.f);
+ tc_out->mul(tc_range);
+ tc_out->add(min_tc4);
- tc_out++;
+ tc_out++;
+ }
+ }
+ else
+ {
+ memset(tc_out, 0, sizeof(LLVector2)*num_verts);
}
}
@@ -2656,6 +2676,25 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
min.setMin(min, face.mPositions[i]);
max.setMax(max, face.mPositions[i]);
}
+
+ if (face.mTexCoords)
+ {
+ LLVector2& min_tc = face.mTexCoordExtents[0];
+ LLVector2& max_tc = face.mTexCoordExtents[1];
+
+ min_tc = face.mTexCoords[0];
+ max_tc = face.mTexCoords[0];
+
+ for (U32 j = 1; j < face.mNumVertices; ++j)
+ {
+ update_min_max(min_tc, max_tc, face.mTexCoords[j]);
+ }
+ }
+ else
+ {
+ face.mTexCoordExtents[0].set(0,0);
+ face.mTexCoordExtents[1].set(1,1);
+ }
}
}
}
@@ -2735,11 +2774,13 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 3;
-
+ if(tc)
+ {
+ tc[0] = cv[0].mTexCoord;
+ tc[1] = cv[1].mTexCoord;
+ tc[2] = cv[2].mTexCoord;
+ tc += 3;
+ }
//side 2
cv[0].setPosition(p[3]);
@@ -2758,11 +2799,14 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 3;
-
+ if(tc)
+ {
+ tc[0] = cv[0].mTexCoord;
+ tc[1] = cv[1].mTexCoord;
+ tc[2] = cv[2].mTexCoord;
+ tc += 3;
+ }
+
//side 3
cv[0].setPosition(p[3]);
cv[1].setPosition(p[1]);
@@ -2780,10 +2824,13 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 3;
+ if(tc)
+ {
+ tc[0] = cv[0].mTexCoord;
+ tc[1] = cv[1].mTexCoord;
+ tc[2] = cv[2].mTexCoord;
+ tc += 3;
+ }
//side 4
cv[0].setPosition(p[2]);
@@ -2802,10 +2849,13 @@ void LLVolume::makeTetrahedron()
n[2] = cv[2].getNormal();
n += 3;
- tc[0] = cv[0].mTexCoord;
- tc[1] = cv[1].mTexCoord;
- tc[2] = cv[2].mTexCoord;
- tc += 3;
+ if(tc)
+ {
+ tc[0] = cv[0].mTexCoord;
+ tc[1] = cv[1].mTexCoord;
+ tc[2] = cv[2].mTexCoord;
+ tc += 3;
+ }
//set index buffer
for (U16 i = 0; i < 12; i++)
@@ -3253,7 +3303,7 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components,
{
F32 area = sculptGetSurfaceArea();
- const F32 SCULPT_MAX_AREA = 32.f;
+ const F32 SCULPT_MAX_AREA = 384.f;
if (area < SCULPT_MIN_AREA || area > SCULPT_MAX_AREA)
{
@@ -5574,7 +5624,16 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src)
LLVector4a::memcpyNonAliased16((F32*) mPositions, (F32*) src.mPositions, vert_size);
LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) src.mNormals, vert_size);
- LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, tc_size);
+
+ if(src.mTexCoords)
+ {
+ LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) src.mTexCoords, tc_size);
+ }
+ else
+ {
+ ll_aligned_free_16(mTexCoords) ;
+ mTexCoords = NULL ;
+ }
if (src.mBinormals)
@@ -5696,8 +5755,23 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)
void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv)
{
cv.setPosition(mPositions[index]);
- cv.setNormal(mNormals[index]);
- cv.mTexCoord = mTexCoords[index];
+ if (mNormals)
+ {
+ cv.setNormal(mNormals[index]);
+ }
+ else
+ {
+ cv.getNormal().clear();
+ }
+
+ if (mTexCoords)
+ {
+ cv.mTexCoord = mTexCoords[index];
+ }
+ else
+ {
+ cv.mTexCoord.clear();
+ }
}
bool LLVolumeFace::VertexMapData::operator==(const LLVolumeFace::VertexData& rhs) const
@@ -5727,7 +5801,10 @@ void LLVolumeFace::optimize(F32 angle_cutoff)
LLVolumeFace new_face;
//map of points to vector of vertices at that point
- VertexMapData::PointMap point_map;
+ std::map<U64, std::vector<VertexMapData> > point_map;
+
+ LLVector4a range;
+ range.setSub(mExtents[1],mExtents[0]);
//remove redundant vertices
for (U32 i = 0; i < mNumIndices; ++i)
@@ -5738,7 +5815,19 @@ void LLVolumeFace::optimize(F32 angle_cutoff)
getVertexData(index, cv);
BOOL found = FALSE;
- VertexMapData::PointMap::iterator point_iter = point_map.find(LLVector3(cv.getPosition().getF32ptr()));
+
+ LLVector4a pos;
+ pos.setSub(mPositions[index], mExtents[0]);
+ pos.div(range);
+
+ U64 pos64 = 0;
+
+ pos64 = (U16) (pos[0]*65535);
+ pos64 = pos64 | (((U64) (pos[1]*65535)) << 16);
+ pos64 = pos64 | (((U64) (pos[2]*65535)) << 32);
+
+ std::map<U64, std::vector<VertexMapData> >::iterator point_iter = point_map.find(pos64);
+
if (point_iter != point_map.end())
{ //duplicate point might exist
for (U32 j = 0; j < point_iter->second.size(); ++j)
@@ -5770,11 +5859,26 @@ void LLVolumeFace::optimize(F32 angle_cutoff)
}
else
{
- point_map[LLVector3(d.getPosition().getF32ptr())].push_back(d);
+ point_map[pos64].push_back(d);
}
}
}
+ llassert(new_face.mNumIndices == mNumIndices);
+ llassert(new_face.mNumVertices <= mNumVertices);
+
+ if (angle_cutoff > 1.f && !mNormals)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!mTexCoords)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
swapData(new_face);
}
diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp
index c60b750088..42180197fe 100644
--- a/indra/llmath/llvolumemgr.cpp
+++ b/indra/llmath/llvolumemgr.cpp
@@ -49,7 +49,7 @@ LLVolumeMgr::LLVolumeMgr()
{
// the LLMutex magic interferes with easy unit testing,
// so you now must manually call useMutex() to use it
- //mDataMutex = new LLMutex(gAPRPoolp);
+ //mDataMutex = new LLMutex;
}
LLVolumeMgr::~LLVolumeMgr()
@@ -216,7 +216,7 @@ void LLVolumeMgr::useMutex()
{
if (!mDataMutex)
{
- mDataMutex = new LLMutex(gAPRPoolp);
+ mDataMutex = new LLMutex;
}
}
diff --git a/indra/llmath/tests/v3math_test.cpp b/indra/llmath/tests/v3math_test.cpp
index df7a77002f..e4ae1c10ef 100644
--- a/indra/llmath/tests/v3math_test.cpp
+++ b/indra/llmath/tests/v3math_test.cpp
@@ -564,4 +564,22 @@ namespace tut
z1 = U8_to_F32(F32_to_U8(z, lowerz, upperz), lowerz, upperz);
ensure("2:quantize8: Fail ", is_approx_equal(x1, vec3a.mV[VX]) && is_approx_equal(y1, vec3a.mV[VY]) && is_approx_equal(z1, vec3a.mV[VZ]));
}
+
+ template<> template<>
+ void v3math_object::test<35>()
+ {
+ LLSD sd = LLSD::emptyArray();
+ sd[0] = 1.f;
+
+ LLVector3 parsed_1(sd);
+ ensure("1:LLSD parse: Fail ", is_approx_equal(parsed_1.mV[VX], 1.f) && is_approx_equal(parsed_1.mV[VY], 0.f) && is_approx_equal(parsed_1.mV[VZ], 0.f));
+
+ sd[1] = 2.f;
+ LLVector3 parsed_2(sd);
+ ensure("2:LLSD parse: Fail ", is_approx_equal(parsed_2.mV[VX], 1.f) && is_approx_equal(parsed_2.mV[VY], 2.f) && is_approx_equal(parsed_2.mV[VZ], 0.f));
+
+ sd[2] = 3.f;
+ LLVector3 parsed_3(sd);
+ ensure("3:LLSD parse: Fail ", is_approx_equal(parsed_3.mV[VX], 1.f) && is_approx_equal(parsed_3.mV[VY], 2.f) && is_approx_equal(parsed_3.mV[VZ], 3.f));
+ }
}
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index c5f82cf052..0f40a670fa 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -65,6 +65,7 @@ set(llmessage_SOURCE_FILES
llpacketbuffer.cpp
llpacketring.cpp
llpartdata.cpp
+ llproxy.cpp
llpumpio.cpp
llregionpresenceverifier.cpp
llsdappservices.cpp
@@ -161,6 +162,7 @@ set(llmessage_HEADER_FILES
llpacketring.h
llpartdata.h
llpumpio.h
+ llproxy.h
llqueryflags.h
llregionflags.h
llregionhandle.h
diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp
index 5a67035ed1..fab9858b69 100644
--- a/indra/llmessage/llares.cpp
+++ b/indra/llmessage/llares.cpp
@@ -28,6 +28,7 @@
#include "linden_common.h"
#include "llares.h"
+#include "llscopedvolatileaprpool.h"
#include <ares_dns.h>
#include <ares_version.h>
@@ -464,11 +465,6 @@ void LLAres::search(const std::string &query, LLResType type,
bool LLAres::process(U64 timeout)
{
- if (!gAPRPoolp)
- {
- ll_init_apr();
- }
-
ares_socket_t socks[ARES_GETSOCK_MAXNUM];
apr_pollfd_t aprFds[ARES_GETSOCK_MAXNUM];
apr_int32_t nsds = 0;
@@ -482,10 +478,7 @@ bool LLAres::process(U64 timeout)
return nsds > 0;
}
- apr_status_t status;
- LLAPRPool pool;
- status = pool.getStatus() ;
- ll_apr_assert_status(status);
+ LLScopedVolatileAPRPool scoped_pool;
for (int i = 0; i < ARES_GETSOCK_MAXNUM; i++)
{
@@ -502,7 +495,7 @@ bool LLAres::process(U64 timeout)
apr_socket_t *aprSock = NULL;
- status = apr_os_sock_put(&aprSock, (apr_os_sock_t *) &socks[i], pool.getAPRPool());
+ apr_status_t status = apr_os_sock_put(&aprSock, (apr_os_sock_t *) &socks[i], scoped_pool);
if (status != APR_SUCCESS)
{
ll_apr_warn_status(status);
@@ -511,7 +504,7 @@ bool LLAres::process(U64 timeout)
aprFds[nactive].desc.s = aprSock;
aprFds[nactive].desc_type = APR_POLL_SOCKET;
- aprFds[nactive].p = pool.getAPRPool();
+ aprFds[nactive].p = scoped_pool;
aprFds[nactive].rtnevents = 0;
aprFds[nactive].client_data = &socks[i];
@@ -520,7 +513,7 @@ bool LLAres::process(U64 timeout)
if (nactive > 0)
{
- status = apr_poll(aprFds, nactive, &nsds, timeout);
+ apr_status_t status = apr_poll(aprFds, nactive, &nsds, timeout);
if (status != APR_SUCCESS && status != APR_TIMEUP)
{
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
index 7c8b7e3584..a3de178d78 100644
--- a/indra/llmessage/llcurl.cpp
+++ b/indra/llmessage/llcurl.cpp
@@ -1,5 +1,5 @@
/**
- * @file llcurl.h
+ * @file llcurl.cpp
* @author Zero / Donovan
* @date 2006-10-15
* @brief Implementation of wrapper around libcurl.
@@ -46,8 +46,9 @@
#endif
#include "llbufferstream.h"
-#include "llstl.h"
+#include "llproxy.h"
#include "llsdserialize.h"
+#include "llstl.h"
#include "llthread.h"
#include "lltimer.h"
@@ -74,6 +75,7 @@ static const S32 MULTI_PERFORM_CALL_REPEAT = 5;
static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds
static const S32 MAX_ACTIVE_REQUEST_COUNT = 100;
+static
// DEBUG //
S32 gCurlEasyCount = 0;
S32 gCurlMultiCount = 0;
@@ -85,6 +87,9 @@ std::vector<LLMutex*> LLCurl::sSSLMutex;
std::string LLCurl::sCAPath;
std::string LLCurl::sCAFile;
+bool LLCurl::sMultiThreaded = false;
+static U32 sMainThreadID = 0;
+
void check_curl_code(CURLcode code)
{
if (code != CURLE_OK)
@@ -204,7 +209,7 @@ namespace boost
void intrusive_ptr_release(LLCurl::Responder* p)
{
- if(p && 0 == --p->mReferenceCount)
+ if (p && 0 == --p->mReferenceCount)
{
delete p;
}
@@ -214,73 +219,6 @@ namespace boost
//////////////////////////////////////////////////////////////////////////////
-
-class LLCurl::Easy
-{
- LOG_CLASS(Easy);
-
-private:
- Easy();
-
-public:
- static Easy* getEasy();
- ~Easy();
-
- CURL* getCurlHandle() const { return mCurlEasyHandle; }
-
- void setErrorBuffer();
- void setCA();
-
- void setopt(CURLoption option, S32 value);
- // These assume the setter does not free value!
- void setopt(CURLoption option, void* value);
- void setopt(CURLoption option, char* value);
- // Copies the string so that it is gauranteed to stick around
- void setoptString(CURLoption option, const std::string& value);
-
- void slist_append(const char* str);
- void setHeaders();
-
- U32 report(CURLcode);
- void getTransferInfo(LLCurl::TransferInfo* info);
-
- void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, bool post = false);
-
- const char* getErrorBuffer();
-
- std::stringstream& getInput() { return mInput; }
- std::stringstream& getHeaderOutput() { return mHeaderOutput; }
- LLIOPipe::buffer_ptr_t& getOutput() { return mOutput; }
- const LLChannelDescriptors& getChannels() { return mChannels; }
-
- void resetState();
-
- static CURL* allocEasyHandle();
- static void releaseEasyHandle(CURL* handle);
-
-private:
- friend class LLCurl;
-
- CURL* mCurlEasyHandle;
- struct curl_slist* mHeaders;
-
- std::stringstream mRequest;
- LLChannelDescriptors mChannels;
- LLIOPipe::buffer_ptr_t mOutput;
- std::stringstream mInput;
- std::stringstream mHeaderOutput;
- char mErrorBuffer[CURL_ERROR_SIZE];
-
- // Note: char*'s not strings since we pass pointers to curl
- std::vector<char*> mStrings;
-
- ResponderPtr mResponder;
-
- static std::set<CURL*> sFreeHandles;
- static std::set<CURL*> sActiveHandles;
- static LLMutex* sHandleMutex;
-};
-
std::set<CURL*> LLCurl::Easy::sFreeHandles;
std::set<CURL*> LLCurl::Easy::sActiveHandles;
LLMutex* LLCurl::Easy::sHandleMutex = NULL;
@@ -404,11 +342,11 @@ const char* LLCurl::Easy::getErrorBuffer()
void LLCurl::Easy::setCA()
{
- if(!sCAPath.empty())
+ if (!sCAPath.empty())
{
setoptString(CURLOPT_CAPATH, sCAPath);
}
- if(!sCAFile.empty())
+ if (!sCAFile.empty())
{
setoptString(CURLOPT_CAINFO, sCAFile);
}
@@ -525,15 +463,18 @@ size_t curlHeaderCallback(void* data, size_t size, size_t nmemb, void* user_data
void LLCurl::Easy::prepRequest(const std::string& url,
const std::vector<std::string>& headers,
- ResponderPtr responder, bool post)
+ ResponderPtr responder, S32 time_out, bool post)
{
resetState();
if (post) setoptString(CURLOPT_ENCODING, "");
- //setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
+ //setopt(CURLOPT_VERBOSE, 1); // useful for debugging
setopt(CURLOPT_NOSIGNAL, 1);
+ // Set the CURL options for either Socks or HTTP proxy
+ LLProxy::getInstance()->applyProxySettings(this);
+
mOutput.reset(new LLBufferArray);
setopt(CURLOPT_WRITEFUNCTION, (void*)&curlWriteCallback);
setopt(CURLOPT_WRITEDATA, (void*)this);
@@ -545,7 +486,7 @@ void LLCurl::Easy::prepRequest(const std::string& url,
setopt(CURLOPT_HEADERDATA, (void*)this);
// Allow up to five redirects
- if(responder && responder->followRedir())
+ if (responder && responder->followRedir())
{
setopt(CURLOPT_FOLLOWLOCATION, 1);
setopt(CURLOPT_MAXREDIRS, MAX_REDIRECTS);
@@ -579,44 +520,24 @@ void LLCurl::Easy::prepRequest(const std::string& url,
////////////////////////////////////////////////////////////////////////////
-class LLCurl::Multi
+LLCurl::Multi::Multi()
+ : LLThread("Curl Multi"),
+ mQueued(0),
+ mErrorCount(0),
+ mPerformState(PERFORM_STATE_READY)
{
- LOG_CLASS(Multi);
-public:
-
- Multi();
- ~Multi();
-
- Easy* allocEasy();
- bool addEasy(Easy* easy);
-
- void removeEasy(Easy* easy);
+ mQuitting = false;
- S32 process();
- S32 perform();
-
- CURLMsg* info_read(S32* msgs_in_queue);
-
- S32 mQueued;
- S32 mErrorCount;
-
-private:
- void easyFree(Easy*);
-
- CURLM* mCurlMultiHandle;
-
- typedef std::set<Easy*> easy_active_list_t;
- easy_active_list_t mEasyActiveList;
- typedef std::map<CURL*, Easy*> easy_active_map_t;
- easy_active_map_t mEasyActiveMap;
- typedef std::set<Easy*> easy_free_list_t;
- easy_free_list_t mEasyFreeList;
-};
+ mThreaded = LLCurl::sMultiThreaded && LLThread::currentID() == sMainThreadID;
+ if (mThreaded)
+ {
+ mSignal = new LLCondition();
+ }
+ else
+ {
+ mSignal = NULL;
+ }
-LLCurl::Multi::Multi()
- : mQueued(0),
- mErrorCount(0)
-{
mCurlMultiHandle = curl_multi_init();
if (!mCurlMultiHandle)
{
@@ -630,6 +551,11 @@ LLCurl::Multi::Multi()
LLCurl::Multi::~Multi()
{
+ llassert(isStopped());
+
+ delete mSignal;
+ mSignal = NULL;
+
// Clean up active
for(easy_active_list_t::iterator iter = mEasyActiveList.begin();
iter != mEasyActiveList.end(); ++iter)
@@ -655,13 +581,42 @@ CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue)
return curlmsg;
}
+void LLCurl::Multi::perform()
+{
+ if (mThreaded)
+ {
+ if (mPerformState == PERFORM_STATE_READY)
+ {
+ mSignal->signal();
+ }
+ }
+ else
+ {
+ doPerform();
+ }
+}
-S32 LLCurl::Multi::perform()
+void LLCurl::Multi::run()
+{
+ llassert(mThreaded);
+
+ while (!mQuitting)
+ {
+ mSignal->wait();
+ mPerformState = PERFORM_STATE_PERFORMING;
+ if (!mQuitting)
+ {
+ doPerform();
+ }
+ }
+}
+
+void LLCurl::Multi::doPerform()
{
S32 q = 0;
for (S32 call_count = 0;
- call_count < MULTI_PERFORM_CALL_REPEAT;
- call_count += 1)
+ call_count < MULTI_PERFORM_CALL_REPEAT;
+ call_count += 1)
{
CURLMcode code = curl_multi_perform(mCurlMultiHandle, &q);
if (CURLM_CALL_MULTI_PERFORM != code || q == 0)
@@ -672,13 +627,18 @@ S32 LLCurl::Multi::perform()
}
mQueued = q;
- return q;
+ mPerformState = PERFORM_STATE_COMPLETED;
}
S32 LLCurl::Multi::process()
{
perform();
-
+
+ if (mPerformState != PERFORM_STATE_COMPLETED)
+ {
+ return 0;
+ }
+
CURLMsg* msg;
int msgs_in_queue;
@@ -709,6 +669,8 @@ S32 LLCurl::Multi::process()
}
}
}
+
+ mPerformState = PERFORM_STATE_READY;
return processed;
}
@@ -787,6 +749,21 @@ LLCurlRequest::LLCurlRequest() :
LLCurlRequest::~LLCurlRequest()
{
llassert_always(mThreadID == LLThread::currentID());
+
+ //stop all Multi handle background threads
+ for (curlmulti_set_t::iterator iter = mMultiSet.begin(); iter != mMultiSet.end(); ++iter)
+ {
+ LLCurl::Multi* multi = *iter;
+ multi->mQuitting = true;
+ if (multi->mThreaded)
+ {
+ while (!multi->isStopped())
+ {
+ multi->mSignal->signal();
+ apr_sleep(1000);
+ }
+ }
+ }
for_each(mMultiSet.begin(), mMultiSet.end(), DeletePointer());
}
@@ -794,6 +771,10 @@ void LLCurlRequest::addMulti()
{
llassert_always(mThreadID == LLThread::currentID());
LLCurl::Multi* multi = new LLCurl::Multi();
+ if (multi->mThreaded)
+ {
+ multi->start();
+ }
mMultiSet.insert(multi);
mActiveMulti = multi;
mActiveRequestCount = 0;
@@ -855,14 +836,14 @@ bool LLCurlRequest::getByteRange(const std::string& url,
bool LLCurlRequest::post(const std::string& url,
const headers_t& headers,
const LLSD& data,
- LLCurl::ResponderPtr responder)
+ LLCurl::ResponderPtr responder, S32 time_out)
{
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
return false;
}
- easy->prepRequest(url, headers, responder);
+ easy->prepRequest(url, headers, responder, time_out);
LLSDSerialize::toXML(data, easy->getInput());
S32 bytes = easy->getInput().str().length();
@@ -882,14 +863,14 @@ bool LLCurlRequest::post(const std::string& url,
bool LLCurlRequest::post(const std::string& url,
const headers_t& headers,
const std::string& data,
- LLCurl::ResponderPtr responder)
+ LLCurl::ResponderPtr responder, S32 time_out)
{
LLCurl::Easy* easy = allocEasy();
if (!easy)
{
return false;
}
- easy->prepRequest(url, headers, responder);
+ easy->prepRequest(url, headers, responder, time_out);
easy->getInput().write(data.data(), data.size());
S32 bytes = easy->getInput().str().length();
@@ -923,6 +904,16 @@ S32 LLCurlRequest::process()
if (multi != mActiveMulti && tres == 0 && multi->mQueued == 0)
{
mMultiSet.erase(curiter);
+ multi->mQuitting = true;
+ if (multi->mThreaded)
+ {
+ while (!multi->isStopped())
+ {
+ multi->mSignal->signal();
+ apr_sleep(1000);
+ }
+ }
+
delete multi;
}
}
@@ -940,6 +931,10 @@ S32 LLCurlRequest::getQueued()
curlmulti_set_t::iterator curiter = iter++;
LLCurl::Multi* multi = *curiter;
queued += multi->mQueued;
+ if (multi->mPerformState != LLCurl::Multi::PERFORM_STATE_READY)
+ {
+ ++queued;
+ }
}
return queued;
}
@@ -953,16 +948,31 @@ LLCurlEasyRequest::LLCurlEasyRequest()
mResultReturned(false)
{
mMulti = new LLCurl::Multi();
+ if (mMulti->mThreaded)
+ {
+ mMulti->start();
+ }
mEasy = mMulti->allocEasy();
if (mEasy)
{
mEasy->setErrorBuffer();
mEasy->setCA();
+ // Set proxy settings if configured to do so.
+ LLProxy::getInstance()->applyProxySettings(mEasy);
}
}
LLCurlEasyRequest::~LLCurlEasyRequest()
{
+ mMulti->mQuitting = true;
+ if (mMulti->mThreaded)
+ {
+ while (!mMulti->isStopped())
+ {
+ mMulti->mSignal->signal();
+ apr_sleep(1000);
+ }
+ }
delete mMulti;
}
@@ -1059,14 +1069,20 @@ void LLCurlEasyRequest::requestComplete()
}
}
-S32 LLCurlEasyRequest::perform()
+void LLCurlEasyRequest::perform()
{
- return mMulti->perform();
+ mMulti->perform();
}
// Usage: Call getRestult until it returns false (no more messages)
bool LLCurlEasyRequest::getResult(CURLcode* result, LLCurl::TransferInfo* info)
{
+ if (mMulti->mPerformState != LLCurl::Multi::PERFORM_STATE_COMPLETED)
+ { //we're busy, try again later
+ return false;
+ }
+ mMulti->mPerformState = LLCurl::Multi::PERFORM_STATE_READY;
+
if (!mEasy)
{
// Special case - we failed to initialize a curl_easy (can happen if too many open files)
@@ -1151,8 +1167,10 @@ unsigned long LLCurl::ssl_thread_id(void)
}
#endif
-void LLCurl::initClass()
+void LLCurl::initClass(bool multi_threaded)
{
+ sMainThreadID = LLThread::currentID();
+ sMultiThreaded = multi_threaded;
// Do not change this "unless you are familiar with and mean to control
// internal operations of libcurl"
// - http://curl.haxx.se/libcurl/c/curl_global_init.html
@@ -1160,13 +1178,13 @@ void LLCurl::initClass()
check_curl_code(code);
- Easy::sHandleMutex = new LLMutex(NULL);
+ Easy::sHandleMutex = new LLMutex();
#if SAFE_SSL
S32 mutex_count = CRYPTO_num_locks();
for (S32 i=0; i<mutex_count; i++)
{
- sSSLMutex.push_back(new LLMutex(NULL));
+ sSSLMutex.push_back(new LLMutex);
}
CRYPTO_set_id_callback(&LLCurl::ssl_thread_id);
CRYPTO_set_locking_callback(&LLCurl::ssl_locking_callback);
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
index 4ce3fa1078..5ab4dc35b9 100644
--- a/indra/llmessage/llcurl.h
+++ b/indra/llmessage/llcurl.h
@@ -41,6 +41,7 @@
#include "llbuffer.h"
#include "lliopipe.h"
#include "llsd.h"
+#include "llthread.h"
class LLMutex;
@@ -55,6 +56,8 @@ public:
class Easy;
class Multi;
+ static bool sMultiThreaded;
+
struct TransferInfo
{
TransferInfo() : mSizeDownload(0.0), mTotalTime(0.0), mSpeedDownload(0.0) {}
@@ -159,7 +162,7 @@ public:
/**
* @ brief Initialize LLCurl class
*/
- static void initClass();
+ static void initClass(bool multi_threaded = false);
/**
* @ brief Cleanup LLCurl class
@@ -184,6 +187,122 @@ private:
static const unsigned int MAX_REDIRECTS;
};
+class LLCurl::Easy
+{
+ LOG_CLASS(Easy);
+
+private:
+ Easy();
+
+public:
+ static Easy* getEasy();
+ ~Easy();
+
+ CURL* getCurlHandle() const { return mCurlEasyHandle; }
+
+ void setErrorBuffer();
+ void setCA();
+
+ void setopt(CURLoption option, S32 value);
+ // These assume the setter does not free value!
+ void setopt(CURLoption option, void* value);
+ void setopt(CURLoption option, char* value);
+ // Copies the string so that it is guaranteed to stick around
+ void setoptString(CURLoption option, const std::string& value);
+
+ void slist_append(const char* str);
+ void setHeaders();
+
+ U32 report(CURLcode);
+ void getTransferInfo(LLCurl::TransferInfo* info);
+
+ void prepRequest(const std::string& url, const std::vector<std::string>& headers, ResponderPtr, S32 time_out = 0, bool post = false);
+
+ const char* getErrorBuffer();
+
+ std::stringstream& getInput() { return mInput; }
+ std::stringstream& getHeaderOutput() { return mHeaderOutput; }
+ LLIOPipe::buffer_ptr_t& getOutput() { return mOutput; }
+ const LLChannelDescriptors& getChannels() { return mChannels; }
+
+ void resetState();
+
+ static CURL* allocEasyHandle();
+ static void releaseEasyHandle(CURL* handle);
+
+private:
+ friend class LLCurl;
+
+ CURL* mCurlEasyHandle;
+ struct curl_slist* mHeaders;
+
+ std::stringstream mRequest;
+ LLChannelDescriptors mChannels;
+ LLIOPipe::buffer_ptr_t mOutput;
+ std::stringstream mInput;
+ std::stringstream mHeaderOutput;
+ char mErrorBuffer[CURL_ERROR_SIZE];
+
+ // Note: char*'s not strings since we pass pointers to curl
+ std::vector<char*> mStrings;
+
+ ResponderPtr mResponder;
+
+ static std::set<CURL*> sFreeHandles;
+ static std::set<CURL*> sActiveHandles;
+ static LLMutex* sHandleMutex;
+};
+
+class LLCurl::Multi : public LLThread
+{
+ LOG_CLASS(Multi);
+public:
+
+ typedef enum
+ {
+ PERFORM_STATE_READY=0,
+ PERFORM_STATE_PERFORMING=1,
+ PERFORM_STATE_COMPLETED=2
+ } ePerformState;
+
+ Multi();
+ ~Multi();
+
+ Easy* allocEasy();
+ bool addEasy(Easy* easy);
+
+ void removeEasy(Easy* easy);
+
+ S32 process();
+ void perform();
+ void doPerform();
+
+ virtual void run();
+
+ CURLMsg* info_read(S32* msgs_in_queue);
+
+ S32 mQueued;
+ S32 mErrorCount;
+
+ S32 mPerformState;
+
+ LLCondition* mSignal;
+ bool mQuitting;
+ bool mThreaded;
+
+private:
+ void easyFree(Easy*);
+
+ CURLM* mCurlMultiHandle;
+
+ typedef std::set<Easy*> easy_active_list_t;
+ easy_active_list_t mEasyActiveList;
+ typedef std::map<CURL*, Easy*> easy_active_map_t;
+ easy_active_map_t mEasyActiveMap;
+ typedef std::set<Easy*> easy_free_list_t;
+ easy_free_list_t mEasyFreeList;
+};
+
namespace boost
{
void intrusive_ptr_add_ref(LLCurl::Responder* p);
@@ -201,8 +320,8 @@ public:
void get(const std::string& url, LLCurl::ResponderPtr responder);
bool getByteRange(const std::string& url, const headers_t& headers, S32 offset, S32 length, LLCurl::ResponderPtr responder);
- bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder);
- bool post(const std::string& url, const headers_t& headers, const std::string& data, LLCurl::ResponderPtr responder);
+ bool post(const std::string& url, const headers_t& headers, const LLSD& data, LLCurl::ResponderPtr responder, S32 time_out = 0);
+ bool post(const std::string& url, const headers_t& headers, const std::string& data, LLCurl::ResponderPtr responder, S32 time_out = 0);
S32 process();
S32 getQueued();
@@ -236,10 +355,12 @@ public:
void slist_append(const char* str);
void sendRequest(const std::string& url);
void requestComplete();
- S32 perform();
+ void perform();
bool getResult(CURLcode* result, LLCurl::TransferInfo* info = NULL);
std::string getErrorString();
+ LLCurl::Easy* getEasy() const { return mEasy; }
+
private:
CURLMsg* info_read(S32* queue, LLCurl::TransferInfo* info);
@@ -250,4 +371,7 @@ private:
bool mResultReturned;
};
+void check_curl_code(CURLcode code);
+void check_curl_multi_code(CURLMcode code);
+
#endif // LL_LLCURL_H
diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp
index 812ef7c151..e0ca056a5f 100644
--- a/indra/llmessage/llfiltersd2xmlrpc.cpp
+++ b/indra/llmessage/llfiltersd2xmlrpc.cpp
@@ -308,6 +308,7 @@ LLFilterSD2XMLRPCResponse::~LLFilterSD2XMLRPCResponse()
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SD2XMLRPC_RESPONSE("SD2XMLRPC Response");
// virtual
LLIOPipe::EStatus LLFilterSD2XMLRPCResponse::process_impl(
const LLChannelDescriptors& channels,
@@ -316,6 +317,8 @@ LLIOPipe::EStatus LLFilterSD2XMLRPCResponse::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SD2XMLRPC_RESPONSE);
+
PUMP_DEBUG;
// This pipe does not work if it does not have everyting. This
// could be addressed by making a stream parser for llsd which
@@ -382,6 +385,8 @@ LLFilterSD2XMLRPCRequest::~LLFilterSD2XMLRPCRequest()
{
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SD2XMLRPC_REQUEST("S22XMLRPC Request");
+
// virtual
LLIOPipe::EStatus LLFilterSD2XMLRPCRequest::process_impl(
const LLChannelDescriptors& channels,
@@ -390,6 +395,7 @@ LLIOPipe::EStatus LLFilterSD2XMLRPCRequest::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SD2XMLRPC_REQUEST);
// This pipe does not work if it does not have everyting. This
// could be addressed by making a stream parser for llsd which
// handled partial information.
@@ -586,6 +592,8 @@ LLFilterXMLRPCResponse2LLSD::~LLFilterXMLRPCResponse2LLSD()
{
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_XMLRPC2LLSD_RESPONSE("XMLRPC2LLSD Response");
+
LLIOPipe::EStatus LLFilterXMLRPCResponse2LLSD::process_impl(
const LLChannelDescriptors& channels,
buffer_ptr_t& buffer,
@@ -593,6 +601,8 @@ LLIOPipe::EStatus LLFilterXMLRPCResponse2LLSD::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_XMLRPC2LLSD_RESPONSE);
+
PUMP_DEBUG;
if(!eos) return STATUS_BREAK;
if(!buffer) return STATUS_ERROR;
@@ -668,6 +678,7 @@ LLFilterXMLRPCRequest2LLSD::~LLFilterXMLRPCRequest2LLSD()
{
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_XMLRPC2LLSD_REQUEST("XMLRPC2LLSD Request");
LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(
const LLChannelDescriptors& channels,
buffer_ptr_t& buffer,
@@ -675,6 +686,7 @@ LLIOPipe::EStatus LLFilterXMLRPCRequest2LLSD::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_XMLRPC2LLSD_REQUEST);
PUMP_DEBUG;
if(!eos) return STATUS_BREAK;
if(!buffer) return STATUS_ERROR;
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index 5a38b7fd9f..2bca517e97 100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -33,6 +33,7 @@
#include "indra_constants.h"
#include "message.h"
+#include "llproxy.h"
#include "llvfile.h"
#include "llvfs.h"
@@ -232,6 +233,10 @@ void LLHTTPAssetRequest::setupCurlHandle()
{
// *NOTE: Similar code exists in mapserver/llcurlutil.cpp JC
mCurlHandle = curl_easy_init();
+
+ // Apply proxy settings if configured to do so
+ LLProxy::getInstance()->applyProxySettings(mCurlHandle);
+
curl_easy_setopt(mCurlHandle, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(mCurlHandle, CURLOPT_NOPROGRESS, 1);
curl_easy_setopt(mCurlHandle, CURLOPT_URL, mURLBuffer.c_str());
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 0e5206a520..dd4e3a6300 100644
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -428,6 +428,9 @@ static LLSD blocking_request(
std::string body_str;
// other request method checks root cert first, we skip?
+
+ // Apply configured proxy settings
+ LLProxy::getInstance()->applyProxySettings(curlp);
// * Set curl handle options
curl_easy_setopt(curlp, CURLOPT_NOSIGNAL, 1); // don't use SIGALRM for timeouts
@@ -436,7 +439,7 @@ static LLSD blocking_request(
curl_easy_setopt(curlp, CURLOPT_WRITEDATA, &http_buffer);
curl_easy_setopt(curlp, CURLOPT_URL, url.c_str());
curl_easy_setopt(curlp, CURLOPT_ERRORBUFFER, curl_error_buffer);
-
+
// * Setup headers (don't forget to free them after the call!)
curl_slist* headers_list = NULL;
if (headers.isMap())
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
index 3b18a9177c..920a57ab55 100644
--- a/indra/llmessage/lliohttpserver.cpp
+++ b/indra/llmessage/lliohttpserver.cpp
@@ -140,6 +140,7 @@ private:
LLSD mHeaders;
};
+static LLFastTimer::DeclareTimer FTM_PROCESS_HTTP_PIPE("HTTP Pipe");
LLIOPipe::EStatus LLHTTPPipe::process_impl(
const LLChannelDescriptors& channels,
buffer_ptr_t& buffer,
@@ -147,6 +148,7 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_HTTP_PIPE);
PUMP_DEBUG;
lldebugs << "LLSDHTTPServer::process_impl" << llendl;
@@ -428,6 +430,9 @@ protected:
/**
* LLHTTPResponseHeader
*/
+
+static LLFastTimer::DeclareTimer FTM_PROCESS_HTTP_HEADER("HTTP Header");
+
// virtual
LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(
const LLChannelDescriptors& channels,
@@ -436,6 +441,7 @@ LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_HTTP_HEADER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_HTTP_SERVER);
if(eos)
@@ -630,6 +636,8 @@ void LLHTTPResponder::markBad(
<< "</body>\n</html>\n";
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_HTTP_RESPONDER("HTTP Responder");
+
// virtual
LLIOPipe::EStatus LLHTTPResponder::process_impl(
const LLChannelDescriptors& channels,
@@ -638,6 +646,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_HTTP_RESPONDER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_HTTP_SERVER);
LLIOPipe::EStatus status = STATUS_OK;
@@ -954,13 +963,9 @@ private:
// static
-LLHTTPNode& LLIOHTTPServer::create(
- apr_pool_t* pool, LLPumpIO& pump, U16 port)
+LLHTTPNode& LLIOHTTPServer::create(LLPumpIO& pump, U16 port)
{
- LLSocket::ptr_t socket = LLSocket::create(
- pool,
- LLSocket::STREAM_TCP,
- port);
+ LLSocket::ptr_t socket = LLSocket::create(LLSocket::STREAM_TCP, port);
if(!socket)
{
llerrs << "Unable to initialize socket" << llendl;
@@ -969,7 +974,7 @@ LLHTTPNode& LLIOHTTPServer::create(
LLHTTPResponseFactory* factory = new LLHTTPResponseFactory;
boost::shared_ptr<LLChainIOFactory> factory_ptr(factory);
- LLIOServerSocket* server = new LLIOServerSocket(pool, socket, factory_ptr);
+ LLIOServerSocket* server = new LLIOServerSocket(socket, factory_ptr);
LLPumpIO::chain_t chain;
chain.push_back(LLIOPipe::ptr_t(server));
diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h
index 5c1b0531ff..2294e4b8ae 100644
--- a/indra/llmessage/lliohttpserver.h
+++ b/indra/llmessage/lliohttpserver.h
@@ -50,7 +50,7 @@ class LLIOHTTPServer
public:
typedef void (*timing_callback_t)(const char* hashed_name, F32 time, void* data);
- static LLHTTPNode& create(apr_pool_t* pool, LLPumpIO& pump, U16 port);
+ static LLHTTPNode& create(LLPumpIO& pump, U16 port);
/**< Creates an HTTP wire server on the pump for the given TCP port.
*
* Returns the root node of the new server. Add LLHTTPNode instances
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
index ca84fa8bb8..a885ba8ee1 100644
--- a/indra/llmessage/lliosocket.cpp
+++ b/indra/llmessage/lliosocket.cpp
@@ -35,6 +35,7 @@
#include "llhost.h"
#include "llmemtype.h"
#include "llpumpio.h"
+#include "llthread.h"
//
// constants
@@ -98,51 +99,31 @@ void ll_debug_socket(const char* msg, apr_socket_t* apr_sock)
///
// static
-LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
+LLSocket::ptr_t LLSocket::create(EType type, U16 port)
{
LLMemType m1(LLMemType::MTYPE_IO_TCP);
- LLSocket::ptr_t rv;
- apr_socket_t* socket = NULL;
- apr_pool_t* new_pool = NULL;
apr_status_t status = APR_EGENERAL;
-
- // create a pool for the socket
- status = apr_pool_create(&new_pool, pool);
- if(ll_apr_warn_status(status))
- {
- if(new_pool) apr_pool_destroy(new_pool);
- return rv;
- }
+ LLSocket::ptr_t rv(new LLSocket);
if(STREAM_TCP == type)
{
- status = apr_socket_create(
- &socket,
- APR_INET,
- SOCK_STREAM,
- APR_PROTO_TCP,
- new_pool);
+ status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_STREAM, APR_PROTO_TCP, rv->mPool());
}
else if(DATAGRAM_UDP == type)
{
- status = apr_socket_create(
- &socket,
- APR_INET,
- SOCK_DGRAM,
- APR_PROTO_UDP,
- new_pool);
+ status = apr_socket_create(&rv->mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, rv->mPool());
}
else
{
- if(new_pool) apr_pool_destroy(new_pool);
+ rv.reset();
return rv;
}
if(ll_apr_warn_status(status))
{
- if(new_pool) apr_pool_destroy(new_pool);
+ rv->mSocket = NULL;
+ rv.reset();
return rv;
}
- rv = ptr_t(new LLSocket(socket, new_pool));
if(port > 0)
{
apr_sockaddr_t* sa = NULL;
@@ -152,7 +133,7 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
APR_UNSPEC,
port,
0,
- new_pool);
+ rv->mPool());
if(ll_apr_warn_status(status))
{
rv.reset();
@@ -160,8 +141,8 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
}
// This allows us to reuse the address on quick down/up. This
// is unlikely to create problems.
- ll_apr_warn_status(apr_socket_opt_set(socket, APR_SO_REUSEADDR, 1));
- status = apr_socket_bind(socket, sa);
+ ll_apr_warn_status(apr_socket_opt_set(rv->mSocket, APR_SO_REUSEADDR, 1));
+ status = apr_socket_bind(rv->mSocket, sa);
if(ll_apr_warn_status(status))
{
rv.reset();
@@ -175,7 +156,7 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
// to keep a queue of incoming connections for ACCEPT.
lldebugs << "Setting listen state for socket." << llendl;
status = apr_socket_listen(
- socket,
+ rv->mSocket,
LL_DEFAULT_LISTEN_BACKLOG);
if(ll_apr_warn_status(status))
{
@@ -191,26 +172,33 @@ LLSocket::ptr_t LLSocket::create(apr_pool_t* pool, EType type, U16 port)
port = PORT_EPHEMERAL;
}
rv->mPort = port;
- rv->setOptions();
+ rv->setNonBlocking();
return rv;
}
// static
-LLSocket::ptr_t LLSocket::create(apr_socket_t* socket, apr_pool_t* pool)
+LLSocket::ptr_t LLSocket::create(apr_status_t& status, LLSocket::ptr_t& listen_socket)
{
LLMemType m1(LLMemType::MTYPE_IO_TCP);
- LLSocket::ptr_t rv;
- if(!socket)
+ if (!listen_socket->getSocket())
{
+ status = APR_ENOSOCKET;
+ return LLSocket::ptr_t();
+ }
+ LLSocket::ptr_t rv(new LLSocket);
+ lldebugs << "accepting socket" << llendl;
+ status = apr_socket_accept(&rv->mSocket, listen_socket->getSocket(), rv->mPool());
+ if (status != APR_SUCCESS)
+ {
+ rv->mSocket = NULL;
+ rv.reset();
return rv;
}
- rv = ptr_t(new LLSocket(socket, pool));
rv->mPort = PORT_EPHEMERAL;
- rv->setOptions();
+ rv->setNonBlocking();
return rv;
}
-
bool LLSocket::blockingConnect(const LLHost& host)
{
if(!mSocket) return false;
@@ -223,24 +211,22 @@ bool LLSocket::blockingConnect(const LLHost& host)
APR_UNSPEC,
host.getPort(),
0,
- mPool)))
+ mPool())))
{
return false;
}
- apr_socket_timeout_set(mSocket, 1000);
+ setBlocking(1000);
ll_debug_socket("Blocking connect", mSocket);
if(ll_apr_warn_status(apr_socket_connect(mSocket, sa))) return false;
- setOptions();
+ setNonBlocking();
return true;
}
-LLSocket::LLSocket(apr_socket_t* socket, apr_pool_t* pool) :
- mSocket(socket),
- mPool(pool),
+LLSocket::LLSocket() :
+ mSocket(NULL),
+ mPool(LLThread::tldata().mRootPool),
mPort(PORT_INVALID)
{
- ll_debug_socket("Constructing wholely formed socket", mSocket);
- LLMemType m1(LLMemType::MTYPE_IO_TCP);
}
LLSocket::~LLSocket()
@@ -251,18 +237,31 @@ LLSocket::~LLSocket()
{
ll_debug_socket("Destroying socket", mSocket);
apr_socket_close(mSocket);
- }
- if(mPool)
- {
- apr_pool_destroy(mPool);
+ mSocket = NULL;
}
}
-void LLSocket::setOptions()
+// See http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial-13.html#ss13.4
+// for an explanation of how to get non-blocking sockets and timeouts with
+// consistent behavior across platforms.
+
+void LLSocket::setBlocking(S32 timeout)
+{
+ LLMemType m1(LLMemType::MTYPE_IO_TCP);
+ // set up the socket options
+ ll_apr_warn_status(apr_socket_timeout_set(mSocket, timeout));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_NONBLOCK, 0));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_SNDBUF, LL_SEND_BUFFER_SIZE));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_RCVBUF, LL_RECV_BUFFER_SIZE));
+
+}
+
+void LLSocket::setNonBlocking()
{
LLMemType m1(LLMemType::MTYPE_IO_TCP);
// set up the socket options
ll_apr_warn_status(apr_socket_timeout_set(mSocket, 0));
+ ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_NONBLOCK, 1));
ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_SNDBUF, LL_SEND_BUFFER_SIZE));
ll_apr_warn_status(apr_socket_opt_set(mSocket, APR_SO_RCVBUF, LL_RECV_BUFFER_SIZE));
@@ -285,6 +284,8 @@ LLIOSocketReader::~LLIOSocketReader()
//lldebugs << "Destroying LLIOSocketReader" << llendl;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SOCKET_READER("Socket Reader");
+
// virtual
LLIOPipe::EStatus LLIOSocketReader::process_impl(
const LLChannelDescriptors& channels,
@@ -293,6 +294,7 @@ LLIOPipe::EStatus LLIOSocketReader::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SOCKET_READER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_TCP);
if(!mSource) return STATUS_PRECONDITION_NOT_MET;
@@ -385,6 +387,7 @@ LLIOSocketWriter::~LLIOSocketWriter()
//lldebugs << "Destroying LLIOSocketWriter" << llendl;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SOCKET_WRITER("Socket Writer");
// virtual
LLIOPipe::EStatus LLIOSocketWriter::process_impl(
const LLChannelDescriptors& channels,
@@ -393,6 +396,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SOCKET_WRITER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_TCP);
if(!mDestination) return STATUS_PRECONDITION_NOT_MET;
@@ -516,10 +520,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
///
LLIOServerSocket::LLIOServerSocket(
- apr_pool_t* pool,
LLIOServerSocket::socket_t listener,
factory_t factory) :
- mPool(pool),
mListenSocket(listener),
mReactor(factory),
mInitialized(false),
@@ -539,6 +541,7 @@ void LLIOServerSocket::setResponseTimeout(F32 timeout_secs)
mResponseTimeout = timeout_secs;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SERVER_SOCKET("Server Socket");
// virtual
LLIOPipe::EStatus LLIOServerSocket::process_impl(
const LLChannelDescriptors& channels,
@@ -547,6 +550,7 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SERVER_SOCKET);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_TCP);
if(!pump)
@@ -579,21 +583,15 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
lldebugs << "accepting socket" << llendl;
PUMP_DEBUG;
- apr_pool_t* new_pool = NULL;
- apr_status_t status = apr_pool_create(&new_pool, mPool);
- apr_socket_t* socket = NULL;
- status = apr_socket_accept(
- &socket,
- mListenSocket->getSocket(),
- new_pool);
- LLSocket::ptr_t llsocket(LLSocket::create(socket, new_pool));
+ apr_status_t status;
+ LLSocket::ptr_t llsocket(LLSocket::create(status, mListenSocket));
//EStatus rv = STATUS_ERROR;
- if(llsocket)
+ if(llsocket && status == APR_SUCCESS)
{
PUMP_DEBUG;
apr_sockaddr_t* remote_addr;
- apr_socket_addr_get(&remote_addr, APR_REMOTE, socket);
+ apr_socket_addr_get(&remote_addr, APR_REMOTE, llsocket->getSocket());
char* remote_host_string;
apr_sockaddr_ip_get(&remote_host_string, remote_addr);
@@ -608,7 +606,6 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
{
chain.push_back(LLIOPipe::ptr_t(new LLIOSocketWriter(llsocket)));
pump->addChain(chain, mResponseTimeout);
- status = STATUS_OK;
}
else
{
@@ -617,7 +614,8 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
}
else
{
- llwarns << "Unable to create linden socket." << llendl;
+ char buf[256];
+ llwarns << "Unable to accept linden socket: " << apr_strerror(status, buf, sizeof(buf)) << llendl;
}
PUMP_DEBUG;
@@ -630,11 +628,10 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(
#if 0
LLIODataSocket::LLIODataSocket(
U16 suggested_port,
- U16 start_discovery_port,
- apr_pool_t* pool) :
+ U16 start_discovery_port) :
mSocket(NULL)
{
- if(!pool || (PORT_INVALID == suggested_port)) return;
+ if(PORT_INVALID == suggested_port) return;
if(ll_apr_warn_status(apr_socket_create(&mSocket, APR_INET, SOCK_DGRAM, APR_PROTO_UDP, pool))) return;
apr_sockaddr_t* sa = NULL;
if(ll_apr_warn_status(apr_sockaddr_info_get(&sa, APR_ANYADDR, APR_UNSPEC, suggested_port, 0, pool))) return;
diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h
index 6806e5084a..f0a6f25657 100644
--- a/indra/llmessage/lliosocket.h
+++ b/indra/llmessage/lliosocket.h
@@ -38,7 +38,6 @@
*/
#include "lliopipe.h"
-#include "apr_pools.h"
#include "apr_network_io.h"
#include "llchainio.h"
@@ -88,34 +87,22 @@ public:
* socket. If you intend the socket to be known to external
* clients without prior port notification, do not use
* PORT_EPHEMERAL.
- * @param pool The apr pool to use. A child pool will be created
- * and associated with the socket.
* @param type The type of socket to create
* @param port The port for the socket
* @return A valid socket shared pointer if the call worked.
*/
static ptr_t create(
- apr_pool_t* pool,
EType type,
U16 port = PORT_EPHEMERAL);
/**
- * @brief Create a LLSocket when you already have an apr socket.
+ * @brief Create a LLSocket by accepting a connection from a listen socket.
*
- * This method assumes an ephemeral port. This is typically used
- * by calls which spawn a socket such as a call to
- * <code>accept()</code> as in the server socket. This call should
- * not fail if you have a valid apr socket.
- * Because of the nature of how accept() works, you are expected
- * to create a new pool for the socket, use that pool for the
- * accept, and pass it in here where it will be bound with the
- * socket and destroyed at the same time.
- * @param socket The apr socket to use
- * @param pool The pool used to create the socket. *NOTE: The pool
- * passed in will be DESTROYED.
+ * @param status Output. Status of the accept if a valid listen socket was passed.
+ * @param listen_socket The listen socket to use.
* @return A valid socket shared pointer if the call worked.
*/
- static ptr_t create(apr_socket_t* socket, apr_pool_t* pool);
+ static ptr_t create(apr_status_t& status, ptr_t& listen_socket);
/**
* @brief Perform a blocking connect to a host. Do not use in production.
@@ -145,17 +132,30 @@ public:
*/
apr_socket_t* getSocket() const { return mSocket; }
-protected:
/**
* @brief Protected constructor since should only make sockets
* with one of the two <code>create()</code> calls.
*/
- LLSocket(apr_socket_t* socket, apr_pool_t* pool);
+ LLSocket(void);
/**
- * @brief Set default socket options.
+ * @brief Set default socket options, with SO_NONBLOCK = 0 and a timeout in us.
+ * @param timeout Number of microseconds to wait on this socket. Any
+ * negative number means block-forever. TIMEOUT OF 0 IS NON-PORTABLE.
+ */
+ void setBlocking(S32 timeout);
+
+ /**
+ * @brief Set default socket options, with SO_NONBLOCK = 1 and timeout = 0.
+ */
+ void setNonBlocking();
+
+protected:
+ /**
+ * @brief Protected constructor since should only make sockets
+ * with one of the two <code>create()</code> calls.
*/
- void setOptions();
+ LLSocket(apr_socket_t* socket, apr_pool_t* pool);
public:
/**
@@ -167,8 +167,8 @@ protected:
// The apr socket.
apr_socket_t* mSocket;
- // our memory pool
- apr_pool_t* mPool;
+ // Our memory pool.
+ LLAPRPool mPool;
// The port if we know it.
U16 mPort;
@@ -293,7 +293,7 @@ class LLIOServerSocket : public LLIOPipe
public:
typedef LLSocket::ptr_t socket_t;
typedef boost::shared_ptr<LLChainIOFactory> factory_t;
- LLIOServerSocket(apr_pool_t* pool, socket_t listener, factory_t reactor);
+ LLIOServerSocket(socket_t listener, factory_t reactor);
virtual ~LLIOServerSocket();
/**
@@ -325,7 +325,6 @@ protected:
//@}
protected:
- apr_pool_t* mPool;
socket_t mListenSocket;
factory_t mReactor;
bool mInitialized;
@@ -359,8 +358,7 @@ public:
*/
LLIODataSocket(
U16 suggested_port,
- U16 start_discovery_port,
- apr_pool_t* pool);
+ U16 start_discovery_port);
virtual ~LLIODataSocket();
protected:
diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp
index 2e6ee59ff2..8c50fd5069 100644
--- a/indra/llmessage/llioutil.cpp
+++ b/indra/llmessage/llioutil.cpp
@@ -43,6 +43,8 @@ LLIOPipe::EStatus LLIOFlush::process_impl(
return STATUS_OK;
}
+
+static LLFastTimer::DeclareTimer FTM_PROCESS_SLEEP("IO Sleep");
/**
* @class LLIOSleep
*/
@@ -53,6 +55,7 @@ LLIOPipe::EStatus LLIOSleep::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SLEEP);
if(mSeconds > 0.0)
{
if(pump) pump->sleepChain(mSeconds);
@@ -62,6 +65,7 @@ LLIOPipe::EStatus LLIOSleep::process_impl(
return STATUS_DONE;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_ADD_CHAIN("Add Chain");
/**
* @class LLIOAddChain
*/
@@ -72,6 +76,7 @@ LLIOPipe::EStatus LLIOAddChain::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_ADD_CHAIN);
pump->addChain(mChain, mTimeout);
return STATUS_DONE;
}
diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp
index 08b31e9c7a..8a898ab1b0 100644
--- a/indra/llmessage/llmail.cpp
+++ b/indra/llmessage/llmail.cpp
@@ -50,6 +50,7 @@
#include "llstring.h"
#include "lluuid.h"
#include "net.h"
+#include "llaprpool.h"
//
// constants
@@ -57,7 +58,7 @@
const size_t LL_MAX_KNOWN_GOOD_MAIL_SIZE = 4096;
static bool gMailEnabled = true;
-static apr_pool_t* gMailPool;
+static LLAPRPool gMailPool;
static apr_sockaddr_t* gSockAddr;
static apr_socket_t* gMailSocket;
@@ -82,7 +83,7 @@ bool connect_smtp()
gSockAddr->sa.sin.sin_family,
SOCK_STREAM,
APR_PROTO_TCP,
- gMailPool);
+ gMailPool());
if(ll_apr_warn_status(status)) return false;
status = apr_socket_connect(gMailSocket, gSockAddr);
if(ll_apr_warn_status(status))
@@ -139,19 +140,19 @@ BOOL LLMail::send(
}
// static
-void LLMail::init(const std::string& hostname, apr_pool_t* pool)
+void LLMail::init(const std::string& hostname)
{
gMailSocket = NULL;
- if(hostname.empty() || !pool)
+ if (hostname.empty())
{
- gMailPool = NULL;
gSockAddr = NULL;
+ gMailPool.destroy();
}
else
{
- gMailPool = pool;
+ gMailPool.create();
- // collect all the information into a socaddr sturcture. the
+ // Collect all the information into a sockaddr structure. the
// documentation is a bit unclear, but I either have to
// specify APR_UNSPEC or not specify any flags. I am not sure
// which option is better.
@@ -161,7 +162,7 @@ void LLMail::init(const std::string& hostname, apr_pool_t* pool)
APR_UNSPEC,
25,
APR_IPV4_ADDR_OK,
- gMailPool);
+ gMailPool());
ll_apr_warn_status(status);
}
}
diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h
index 3791714363..0a5c532088 100644
--- a/indra/llmessage/llmail.h
+++ b/indra/llmessage/llmail.h
@@ -27,15 +27,13 @@
#ifndef LL_LLMAIL_H
#define LL_LLMAIL_H
-typedef struct apr_pool_t apr_pool_t;
-
#include "llsd.h"
class LLMail
{
public:
// if hostname is NULL, then the host is resolved as 'mail'
- static void init(const std::string& hostname, apr_pool_t* pool);
+ static void init(const std::string& hostname);
// Allow all email transmission to be disabled/enabled.
static void enable(bool mail_enabled);
diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp
index 8999dec64a..7628984de4 100644
--- a/indra/llmessage/llpacketring.cpp
+++ b/indra/llmessage/llpacketring.cpp
@@ -28,11 +28,20 @@
#include "llpacketring.h"
+#if LL_WINDOWS
+ #include <winsock2.h>
+#else
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+#endif
+
// linden library includes
#include "llerror.h"
#include "lltimer.h"
-#include "timing.h"
+#include "llproxy.h"
#include "llrand.h"
+#include "message.h"
+#include "timing.h"
#include "u64.h"
///////////////////////////////////////////////////////////
@@ -216,8 +225,32 @@ S32 LLPacketRing::receivePacket (S32 socket, char *datap)
else
{
// no delay, pull straight from net
- packet_size = receive_packet(socket, datap);
- mLastSender = ::get_sender();
+ if (LLProxy::isSOCKSProxyEnabled())
+ {
+ U8 buffer[NET_BUFFER_SIZE + SOCKS_HEADER_SIZE];
+ packet_size = receive_packet(socket, reinterpret_cast<char *>(buffer));
+
+ if (packet_size > SOCKS_HEADER_SIZE)
+ {
+ // *FIX We are assuming ATYP is 0x01 (IPv4), not 0x03 (hostname) or 0x04 (IPv6)
+ memcpy(datap, buffer + SOCKS_HEADER_SIZE, packet_size - SOCKS_HEADER_SIZE);
+ proxywrap_t * header = reinterpret_cast<proxywrap_t *>(buffer);
+ mLastSender.setAddress(header->addr);
+ mLastSender.setPort(ntohs(header->port));
+
+ packet_size -= SOCKS_HEADER_SIZE; // The unwrapped packet size
+ }
+ else
+ {
+ packet_size = 0;
+ }
+ }
+ else
+ {
+ packet_size = receive_packet(socket, datap);
+ mLastSender = ::get_sender();
+ }
+
mLastReceivingIF = ::get_receiving_interface();
if (packet_size) // did we actually get a packet?
@@ -243,7 +276,7 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
BOOL status = TRUE;
if (!mUseOutThrottle)
{
- return send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort() );
+ return sendPacketImpl(h_socket, send_buffer, buf_size, host );
}
else
{
@@ -264,7 +297,7 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
mOutBufferLength -= packetp->getSize();
packet_size = packetp->getSize();
- status = send_packet(h_socket, packetp->getData(), packet_size, packetp->getHost().getAddress(), packetp->getHost().getPort());
+ status = sendPacketImpl(h_socket, packetp->getData(), packet_size, packetp->getHost());
delete packetp;
// Update the throttle
@@ -273,7 +306,7 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
else
{
// If the queue's empty, we can just send this packet right away.
- status = send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort() );
+ status = sendPacketImpl(h_socket, send_buffer, buf_size, host );
packet_size = buf_size;
// Update the throttle
@@ -311,3 +344,23 @@ BOOL LLPacketRing::sendPacket(int h_socket, char * send_buffer, S32 buf_size, LL
return status;
}
+
+BOOL LLPacketRing::sendPacketImpl(int h_socket, const char * send_buffer, S32 buf_size, LLHost host)
+{
+
+ if (!LLProxy::isSOCKSProxyEnabled())
+ {
+ return send_packet(h_socket, send_buffer, buf_size, host.getAddress(), host.getPort());
+ }
+
+ proxywrap_t *socks_header = reinterpret_cast<proxywrap_t *>(&mProxyWrappedSendBuffer);
+ socks_header->rsv = 0;
+ socks_header->addr = host.getAddress();
+ socks_header->port = htons(host.getPort());
+ socks_header->atype = ADDRESS_IPV4;
+ socks_header->frag = 0;
+
+ memcpy(mProxyWrappedSendBuffer + SOCKS_HEADER_SIZE, send_buffer, buf_size);
+
+ return send_packet(h_socket, (const char*) mProxyWrappedSendBuffer, buf_size + 10, LLProxy::getInstance()->getUDPProxy().getAddress(), LLProxy::getInstance()->getUDPProxy().getPort());
+}
diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h
index e6409d2048..7edcc834db 100644
--- a/indra/llmessage/llpacketring.h
+++ b/indra/llmessage/llpacketring.h
@@ -30,11 +30,11 @@
#include <queue>
-#include "llpacketbuffer.h"
#include "llhost.h"
-#include "net.h"
+#include "llpacketbuffer.h"
+#include "llproxy.h"
#include "llthrottle.h"
-
+#include "net.h"
class LLPacketRing
{
@@ -82,6 +82,12 @@ protected:
LLHost mLastSender;
LLHost mLastReceivingIF;
+
+
+ U8 mProxyWrappedSendBuffer[NET_BUFFER_SIZE + SOCKS_HEADER_SIZE];
+
+private:
+ BOOL sendPacketImpl(int h_socket, const char * send_buffer, S32 buf_size, LLHost host);
};
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
new file mode 100644
index 0000000000..19f1fc6545
--- /dev/null
+++ b/indra/llmessage/llproxy.cpp
@@ -0,0 +1,550 @@
+/**
+ * @file llproxy.cpp
+ * @brief UDP and HTTP proxy communications
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llproxy.h"
+
+#include <string>
+#include <curl/curl.h>
+
+#include "llapr.h"
+#include "llcurl.h"
+#include "llhost.h"
+
+// Static class variable instances
+
+// We want this to be static to avoid excessive indirection on every
+// incoming packet just to do a simple bool test. The getter for this
+// member is also static
+bool LLProxy::sUDPProxyEnabled = false;
+
+// Some helpful TCP static functions.
+static S32 tcp_handshake(LLSocket::ptr_t handle, char * dataout, apr_size_t outlen, char * datain, apr_size_t maxinlen); // Do a TCP data handshake
+static LLSocket::ptr_t tcp_open_channel(LLHost host); // Open a TCP channel to a given host
+static void tcp_close_channel(LLSocket::ptr_t* handle_ptr); // Close an open TCP channel
+
+LLProxy::LLProxy():
+ mHTTPProxyEnabled(false),
+ mProxyMutex(),
+ mUDPProxy(),
+ mTCPProxy(),
+ mHTTPProxy(),
+ mProxyType(LLPROXY_SOCKS),
+ mAuthMethodSelected(METHOD_NOAUTH),
+ mSocksUsername(),
+ mSocksPassword()
+{
+}
+
+LLProxy::~LLProxy()
+{
+ stopSOCKSProxy();
+ sUDPProxyEnabled = false;
+ mHTTPProxyEnabled = false;
+}
+
+/**
+ * @brief Open the SOCKS 5 TCP control channel.
+ *
+ * Perform a SOCKS 5 authentication and UDP association to the proxy server.
+ *
+ * @param proxy The SOCKS 5 server to connect to.
+ * @return SOCKS_OK if successful, otherwise a socks error code from llproxy.h.
+ */
+S32 LLProxy::proxyHandshake(LLHost proxy)
+{
+ S32 result;
+
+ /* SOCKS 5 Auth request */
+ socks_auth_request_t socks_auth_request;
+ socks_auth_response_t socks_auth_response;
+
+ socks_auth_request.version = SOCKS_VERSION; // SOCKS version 5
+ socks_auth_request.num_methods = 1; // Sending 1 method.
+ socks_auth_request.methods = getSelectedAuthMethod(); // Send only the selected method.
+
+ result = tcp_handshake(mProxyControlChannel, (char*)&socks_auth_request, sizeof(socks_auth_request), (char*)&socks_auth_response, sizeof(socks_auth_response));
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication request failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (socks_auth_response.method == AUTH_NOT_ACCEPTABLE)
+ {
+ LL_WARNS("Proxy") << "SOCKS 5 server refused all our authentication methods" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_NOT_ACCEPTABLE;
+ }
+
+ // SOCKS 5 USERNAME/PASSWORD authentication
+ if (socks_auth_response.method == METHOD_PASSWORD)
+ {
+ // The server has requested a username/password combination
+ std::string socks_username(getSocksUser());
+ std::string socks_password(getSocksPwd());
+ U32 request_size = socks_username.size() + socks_password.size() + 3;
+ char * password_auth = new char[request_size];
+ password_auth[0] = 0x01;
+ password_auth[1] = socks_username.size();
+ memcpy(&password_auth[2], socks_username.c_str(), socks_username.size());
+ password_auth[socks_username.size() + 2] = socks_password.size();
+ memcpy(&password_auth[socks_username.size()+3], socks_password.c_str(), socks_password.size());
+
+ authmethod_password_reply_t password_reply;
+
+ result = tcp_handshake(mProxyControlChannel, password_auth, request_size, (char*)&password_reply, sizeof(password_reply));
+ delete[] password_auth;
+
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (password_reply.status != AUTH_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS authentication failed" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_AUTH_FAIL;
+ }
+ }
+
+ /* SOCKS5 connect request */
+
+ socks_command_request_t connect_request;
+ socks_command_response_t connect_reply;
+
+ connect_request.version = SOCKS_VERSION; // SOCKS V5
+ connect_request.command = COMMAND_UDP_ASSOCIATE; // Associate UDP
+ connect_request.reserved = FIELD_RESERVED;
+ connect_request.atype = ADDRESS_IPV4;
+ connect_request.address = htonl(0); // 0.0.0.0
+ connect_request.port = htons(0); // 0
+ // "If the client is not in possession of the information at the time of the UDP ASSOCIATE,
+ // the client MUST use a port number and address of all zeros. RFC 1928"
+
+ result = tcp_handshake(mProxyControlChannel, (char*)&connect_request, sizeof(connect_request), (char*)&connect_reply, sizeof(connect_reply));
+ if (result != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "SOCKS connect request failed, error on TCP control channel : " << result << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_CONNECT_ERROR;
+ }
+
+ if (connect_reply.reply != REPLY_REQUEST_GRANTED)
+ {
+ LL_WARNS("Proxy") << "Connection to SOCKS 5 server failed, UDP forward request not granted" << LL_ENDL;
+ stopSOCKSProxy();
+ return SOCKS_UDP_FWD_NOT_GRANTED;
+ }
+
+ mUDPProxy.setPort(ntohs(connect_reply.port)); // reply port is in network byte order
+ mUDPProxy.setAddress(proxy.getAddress());
+ // The connection was successful. We now have the UDP port to send requests that need forwarding to.
+ LL_INFOS("Proxy") << "SOCKS 5 UDP proxy connected on " << mUDPProxy << LL_ENDL;
+ return SOCKS_OK;
+}
+
+/**
+ * @brief Initiates a SOCKS 5 proxy session.
+ *
+ * Performs basic checks on host to verify that it is a valid address. Opens the control channel
+ * and then negotiates the proxy connection with the server.
+ *
+ *
+ * @param host Socks server to connect to.
+ * @return SOCKS_OK if successful, otherwise a SOCKS error code defined in llproxy.h.
+ */
+S32 LLProxy::startSOCKSProxy(LLHost host)
+{
+ S32 status = SOCKS_OK;
+
+ if (host.isOk())
+ {
+ mTCPProxy = host;
+ }
+ else
+ {
+ status = SOCKS_INVALID_HOST;
+ }
+
+ if (mProxyControlChannel && status == SOCKS_OK)
+ {
+ tcp_close_channel(&mProxyControlChannel);
+ }
+
+ if (status == SOCKS_OK)
+ {
+ mProxyControlChannel = tcp_open_channel(mTCPProxy);
+ if (!mProxyControlChannel)
+ {
+ status = SOCKS_HOST_CONNECT_FAILED;
+ }
+ }
+
+ if (status == SOCKS_OK)
+ {
+ status = proxyHandshake(mTCPProxy);
+ }
+ if (status == SOCKS_OK)
+ {
+ sUDPProxyEnabled = true;
+ }
+ else
+ {
+ stopSOCKSProxy();
+ }
+ return status;
+}
+
+/**
+ * @brief Stop using the SOCKS 5 proxy.
+ *
+ * This will stop sending UDP packets through the SOCKS 5 proxy
+ * and will also stop the HTTP proxy if it is configured to use SOCKS.
+ * The proxy control channel will also be disconnected.
+ */
+void LLProxy::stopSOCKSProxy()
+{
+ sUDPProxyEnabled = false;
+
+ // If the SOCKS proxy is requested to stop and we are using that for HTTP as well
+ // then we must shut down any HTTP proxy operations. But it is allowable if web
+ // proxy is being used to continue proxying HTTP.
+
+ if (LLPROXY_SOCKS == getHTTPProxyType())
+ {
+ void disableHTTPProxy();
+ }
+
+ if (mProxyControlChannel)
+ {
+ tcp_close_channel(&mProxyControlChannel);
+ }
+}
+
+/**
+ * @brief Set the proxy's SOCKS authentication method to none.
+ */
+void LLProxy::setAuthNone()
+{
+ LLMutexLock lock(&mProxyMutex);
+
+ mAuthMethodSelected = METHOD_NOAUTH;
+}
+
+/**
+ * @brief Set the proxy's SOCKS authentication method to password.
+ *
+ * Check whether the lengths of the supplied username
+ * and password conform to the lengths allowed by the
+ * SOCKS protocol.
+ *
+ * @param username The SOCKS username to send.
+ * @param password The SOCKS password to send.
+ * @return Return true if applying the settings was successful. No changes are made if false.
+ *
+ */
+bool LLProxy::setAuthPassword(const std::string &username, const std::string &password)
+{
+ if (username.length() > SOCKSMAXUSERNAMELEN || password.length() > SOCKSMAXPASSWORDLEN ||
+ username.length() < SOCKSMINUSERNAMELEN || password.length() < SOCKSMINPASSWORDLEN)
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 password or username length." << LL_ENDL;
+ return false;
+ }
+
+ LLMutexLock lock(&mProxyMutex);
+
+ mAuthMethodSelected = METHOD_PASSWORD;
+ mSocksUsername = username;
+ mSocksPassword = password;
+
+ return true;
+}
+
+/**
+ * @brief Enable the HTTP proxy for either SOCKS or HTTP.
+ *
+ * Check the supplied host to see if it is a valid IP and port.
+ *
+ * @param httpHost Proxy server to connect to.
+ * @param type Is the host a SOCKS or HTTP proxy.
+ * @return Return true if applying the setting was successful. No changes are made if false.
+ */
+bool LLProxy::enableHTTPProxy(LLHost httpHost, LLHttpProxyType type)
+{
+ if (!httpHost.isOk())
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 Server" << LL_ENDL;
+ return false;
+ }
+
+ LLMutexLock lock(&mProxyMutex);
+
+ mHTTPProxy = httpHost;
+ mProxyType = type;
+
+ mHTTPProxyEnabled = true;
+
+ return true;
+}
+
+/**
+ * @brief Enable the HTTP proxy without changing the proxy settings.
+ *
+ * This should not be called unless the proxy has already been set up.
+ *
+ * @return Return true only if the current settings are valid and the proxy was enabled.
+ */
+bool LLProxy::enableHTTPProxy()
+{
+ bool ok;
+
+ LLMutexLock lock(&mProxyMutex);
+
+ ok = (mHTTPProxy.isOk());
+ if (ok)
+ {
+ mHTTPProxyEnabled = true;
+ }
+
+ return ok;
+}
+
+/**
+ * @brief Disable the HTTP proxy.
+ */
+void LLProxy::disableHTTPProxy()
+{
+ LLMutexLock lock(&mProxyMutex);
+
+ mHTTPProxyEnabled = false;
+}
+
+/**
+ * @brief Get the HTTP proxy address and port
+ */
+//
+LLHost LLProxy::getHTTPProxy() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mHTTPProxy;
+}
+
+/**
+ * @brief Get the currently selected HTTP proxy type
+ */
+LLHttpProxyType LLProxy::getHTTPProxyType() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mProxyType;
+}
+
+/**
+ * @brief Get the SOCKS 5 password.
+ */
+std::string LLProxy::getSocksPwd() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mSocksPassword;
+}
+
+/**
+ * @brief Get the SOCKS 5 username.
+ */
+std::string LLProxy::getSocksUser() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mSocksUsername;
+}
+
+/**
+ * @brief Get the currently selected SOCKS 5 authentication method.
+ *
+ * @return Returns either none or password.
+ */
+LLSocks5AuthType LLProxy::getSelectedAuthMethod() const
+{
+ LLMutexLock lock(&mProxyMutex);
+ return mAuthMethodSelected;
+}
+
+/**
+ * @brief Stop the LLProxy and make certain that any APR pools and classes are deleted before terminating APR.
+ *
+ * Deletes the LLProxy singleton, destroying the APR pool used by the control channel as well as .
+ */
+//static
+void LLProxy::cleanupClass()
+{
+ getInstance()->stopSOCKSProxy();
+ deleteSingleton();
+}
+
+void LLProxy::applyProxySettings(LLCurlEasyRequest* handle)
+{
+ applyProxySettings(handle->getEasy());
+}
+
+void LLProxy::applyProxySettings(LLCurl::Easy* handle)
+{
+ applyProxySettings(handle->getCurlHandle());
+}
+
+/**
+ * @brief Apply proxy settings to a CuRL request if an HTTP proxy is enabled.
+ *
+ * This method has been designed to be safe to call from
+ * any thread in the viewer. This allows requests in the
+ * texture fetch thread to be aware of the proxy settings.
+ * When the HTTP proxy is enabled, the proxy mutex will
+ * be locked every time this method is called.
+ *
+ * @param handle A pointer to a valid CURL request, before it has been performed.
+ */
+void LLProxy::applyProxySettings(CURL* handle)
+{
+ // Do a faster unlocked check to see if we are supposed to proxy.
+ if (mHTTPProxyEnabled)
+ {
+ // We think we should proxy, lock the proxy mutex.
+ LLMutexLock lock(&mProxyMutex);
+ // Now test again to verify that the proxy wasn't disabled between the first check and the lock.
+ if (mHTTPProxyEnabled)
+ {
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXY, mHTTPProxy.getIPString().c_str()));
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYPORT, mHTTPProxy.getPort()));
+
+ if (mProxyType == LLPROXY_SOCKS)
+ {
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5));
+ if (mAuthMethodSelected == METHOD_PASSWORD)
+ {
+ std::string auth_string = mSocksUsername + ":" + mSocksPassword;
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, auth_string.c_str()));
+ }
+ }
+ else
+ {
+ check_curl_code(curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP));
+ }
+ }
+ }
+}
+
+/**
+ * @brief Send one TCP packet and receive one in return.
+ *
+ * This operation is done synchronously with a 1000ms timeout. Therefore, it should not be used when a blocking
+ * operation would impact the operation of the viewer.
+ *
+ * @param handle_ptr Pointer to a connected LLSocket of type STREAM_TCP.
+ * @param dataout Data to send.
+ * @param outlen Length of dataout.
+ * @param datain Buffer for received data. Undefined if return value is not APR_SUCCESS.
+ * @param maxinlen Maximum possible length of received data. Short reads are allowed.
+ * @return Indicates APR status code of exchange. APR_SUCCESS if exchange was successful, -1 if invalid data length was received.
+ */
+static S32 tcp_handshake(LLSocket::ptr_t handle, char * dataout, apr_size_t outlen, char * datain, apr_size_t maxinlen)
+{
+ apr_socket_t* apr_socket = handle->getSocket();
+ apr_status_t rv = APR_SUCCESS;
+
+ apr_size_t expected_len = outlen;
+
+ handle->setBlocking(1000);
+
+ rv = apr_socket_send(apr_socket, dataout, &outlen);
+ if (APR_SUCCESS != rv)
+ {
+ LL_WARNS("Proxy") << "Error sending data to proxy control channel, status: " << rv << LL_ENDL;
+ ll_apr_warn_status(rv);
+ }
+ else if (expected_len != outlen)
+ {
+ LL_WARNS("Proxy") << "Incorrect data length sent. Expected: " << expected_len <<
+ " Sent: " << outlen << LL_ENDL;
+ rv = -1;
+ }
+
+ if (APR_SUCCESS == rv)
+ {
+ expected_len = maxinlen;
+ rv = apr_socket_recv(apr_socket, datain, &maxinlen);
+ if (rv != APR_SUCCESS)
+ {
+ LL_WARNS("Proxy") << "Error receiving data from proxy control channel, status: " << rv << LL_ENDL;
+ ll_apr_warn_status(rv);
+ }
+ else if (expected_len < maxinlen)
+ {
+ LL_WARNS("Proxy") << "Incorrect data length received. Expected: " << expected_len <<
+ " Received: " << maxinlen << LL_ENDL;
+ rv = -1;
+ }
+ }
+
+ handle->setNonBlocking();
+
+ return rv;
+}
+
+/**
+ * @brief Open a LLSocket and do a blocking connect to the chosen host.
+ *
+ * Checks for a successful connection, and makes sure the connection is closed if it fails.
+ *
+ * @param pool APR pool to pass into the LLSocket.
+ * @param host The host to open the connection to.
+ * @return The created socket. Will evaluate as NULL if the connection is unsuccessful.
+ */
+static LLSocket::ptr_t tcp_open_channel(LLHost host)
+{
+ LLSocket::ptr_t socket = LLSocket::create(LLSocket::STREAM_TCP);
+ bool connected = socket->blockingConnect(host);
+ if (!connected)
+ {
+ tcp_close_channel(&socket);
+ }
+
+ return socket;
+}
+
+/**
+ * @brief Close the socket.
+ *
+ * @param handle_ptr A pointer-to-pointer to avoid increasing the use count.
+ */
+static void tcp_close_channel(LLSocket::ptr_t* handle_ptr)
+{
+ LL_DEBUGS("Proxy") << "Resetting proxy LLSocket handle, use_count == " << handle_ptr->use_count() << LL_ENDL;
+ handle_ptr->reset();
+}
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
new file mode 100644
index 0000000000..621debb61d
--- /dev/null
+++ b/indra/llmessage/llproxy.h
@@ -0,0 +1,339 @@
+/**
+ * @file llproxy.h
+ * @brief UDP and HTTP proxy communications
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_PROXY_H
+#define LL_PROXY_H
+
+#include "llcurl.h"
+#include "llhost.h"
+#include "lliosocket.h"
+#include "llmemory.h"
+#include "llsingleton.h"
+#include "llthread.h"
+#include <string>
+
+// SOCKS error codes returned from the StartProxy method
+
+#define SOCKS_OK 0
+#define SOCKS_CONNECT_ERROR (-1)
+#define SOCKS_NOT_PERMITTED (-2)
+#define SOCKS_NOT_ACCEPTABLE (-3)
+#define SOCKS_AUTH_FAIL (-4)
+#define SOCKS_UDP_FWD_NOT_GRANTED (-5)
+#define SOCKS_HOST_CONNECT_FAILED (-6)
+#define SOCKS_INVALID_HOST (-7)
+
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN (255 + 1) /* socks5: 255, +1 for len. */
+#endif
+
+#define SOCKSMAXUSERNAMELEN 255
+#define SOCKSMAXPASSWORDLEN 255
+
+#define SOCKSMINUSERNAMELEN 1
+#define SOCKSMINPASSWORDLEN 1
+
+#define SOCKS_VERSION 0x05 // we are using SOCKS 5
+
+#define SOCKS_HEADER_SIZE 10
+
+// SOCKS 5 address/hostname types
+#define ADDRESS_IPV4 0x01
+#define ADDRESS_HOSTNAME 0x03
+#define ADDRESS_IPV6 0x04
+
+// Lets just use our own ipv4 struct rather than dragging in system
+// specific headers
+union ipv4_address_t {
+ U8 octets[4];
+ U32 addr32;
+};
+
+// SOCKS 5 control channel commands
+#define COMMAND_TCP_STREAM 0x01
+#define COMMAND_TCP_BIND 0x02
+#define COMMAND_UDP_ASSOCIATE 0x03
+
+// SOCKS 5 command replies
+#define REPLY_REQUEST_GRANTED 0x00
+#define REPLY_GENERAL_FAIL 0x01
+#define REPLY_RULESET_FAIL 0x02
+#define REPLY_NETWORK_UNREACHABLE 0x03
+#define REPLY_HOST_UNREACHABLE 0x04
+#define REPLY_CONNECTION_REFUSED 0x05
+#define REPLY_TTL_EXPIRED 0x06
+#define REPLY_PROTOCOL_ERROR 0x07
+#define REPLY_TYPE_NOT_SUPPORTED 0x08
+
+#define FIELD_RESERVED 0x00
+
+// The standard SOCKS 5 request packet
+// Push current alignment to stack and set alignment to 1 byte boundary
+// This enabled us to use structs directly to set up and receive network packets
+// into the correct fields, without fear of boundary alignment causing issues
+#pragma pack(push,1)
+
+// SOCKS 5 command packet
+struct socks_command_request_t {
+ U8 version;
+ U8 command;
+ U8 reserved;
+ U8 atype;
+ U32 address;
+ U16 port;
+};
+
+// Standard SOCKS 5 reply packet
+struct socks_command_response_t {
+ U8 version;
+ U8 reply;
+ U8 reserved;
+ U8 atype;
+ U8 add_bytes[4];
+ U16 port;
+};
+
+#define AUTH_NOT_ACCEPTABLE 0xFF // reply if preferred methods are not available
+#define AUTH_SUCCESS 0x00 // reply if authentication successful
+
+// SOCKS 5 authentication request, stating which methods the client supports
+struct socks_auth_request_t {
+ U8 version;
+ U8 num_methods;
+ U8 methods; // We are only using a single method currently
+};
+
+// SOCKS 5 authentication response packet, stating server preferred method
+struct socks_auth_response_t {
+ U8 version;
+ U8 method;
+};
+
+// SOCKS 5 password reply packet
+struct authmethod_password_reply_t {
+ U8 version;
+ U8 status;
+};
+
+// SOCKS 5 UDP packet header
+struct proxywrap_t {
+ U16 rsv;
+ U8 frag;
+ U8 atype;
+ U32 addr;
+ U16 port;
+};
+
+#pragma pack(pop) /* restore original alignment from stack */
+
+
+// Currently selected HTTP proxy type
+enum LLHttpProxyType
+{
+ LLPROXY_SOCKS = 0,
+ LLPROXY_HTTP = 1
+};
+
+// Auth types
+enum LLSocks5AuthType
+{
+ METHOD_NOAUTH = 0x00, // Client supports no auth
+ METHOD_GSSAPI = 0x01, // Client supports GSSAPI (Not currently supported)
+ METHOD_PASSWORD = 0x02 // Client supports username/password
+};
+
+/**
+ * @brief Manage SOCKS 5 UDP proxy and HTTP proxy.
+ *
+ * This class is responsible for managing two interconnected tasks,
+ * connecting to a SOCKS 5 proxy for use by LLPacketRing to send UDP
+ * packets and managing proxy settings for HTTP requests.
+ *
+ * <h1>Threading:</h1>
+ * Because HTTP requests can be generated in threads outside the
+ * main thread, it is necessary for some of the information stored
+ * by this class to be available to other threads. The members that
+ * need to be read across threads are in a labeled section below.
+ * To protect those members, a mutex, mProxyMutex should be locked
+ * before reading or writing those members. Methods that can lock
+ * mProxyMutex are in a labeled section below. Those methods should
+ * not be called while the mutex is already locked.
+ *
+ * There is also a LLAtomic type flag (mHTTPProxyEnabled) that is used
+ * to track whether the HTTP proxy is currently enabled. This allows
+ * for faster unlocked checks to see if the proxy is enabled. This
+ * allows us to cut down on the performance hit when the proxy is
+ * disabled compared to before this class was introduced.
+ *
+ * <h1>UDP Proxying:</h1>
+ * UDP datagrams are proxied via a SOCKS 5 proxy with the UDP associate
+ * command. To initiate the proxy, a TCP socket connection is opened
+ * to the SOCKS 5 host, and after a handshake exchange, the server
+ * returns a port and address to send the UDP traffic that is to be
+ * proxied to. The LLProxy class tracks this address and port after the
+ * exchange and provides it to LLPacketRing when required to. All UDP
+ * proxy management occurs in the main thread.
+ *
+ * <h1>HTTP Proxying:</h1>
+ * This class allows all viewer HTTP packets to be sent through a proxy.
+ * The user can select whether to send HTTP packets through a standard
+ * "web" HTTP proxy, through a SOCKS 5 proxy, or to not proxy HTTP
+ * communication. This class does not manage the integrated web browser
+ * proxy, which is handled in llviewermedia.cpp.
+ *
+ * The implementation of HTTP proxying is handled by libcurl. LLProxy
+ * is responsible for managing the HTTP proxy options and provides a
+ * thread-safe method to apply those options to a curl request
+ * (LLProxy::applyProxySettings()). This method is overloaded
+ * to accommodate the various abstraction libcurl layers that exist
+ * throughout the viewer (LLCurlEasyRequest, LLCurl::Easy, and CURL).
+ *
+ * If you are working with LLCurl or LLCurlEasyRequest objects,
+ * the configured proxy settings will be applied in the constructors
+ * of those request handles. If you are working with CURL objects
+ * directly, you will need to pass the handle of the request to
+ * applyProxySettings() before issuing the request.
+ *
+ * To ensure thread safety, all LLProxy members that relate to the HTTP
+ * proxy require the LLProxyMutex to be locked before accessing.
+ */
+class LLProxy: public LLSingleton<LLProxy>
+{
+ LOG_CLASS(LLProxy);
+public:
+ // METHODS THAT DO NOT LOCK mProxyMutex!
+
+ LLProxy();
+
+ // static check for enabled status for UDP packets
+ static bool isSOCKSProxyEnabled() { return sUDPProxyEnabled; }
+
+ // check for enabled status for HTTP packets
+ // mHTTPProxyEnabled is atomic, so no locking is required for thread safety.
+ bool isHTTPProxyEnabled() const { return mHTTPProxyEnabled; }
+
+ // Get the UDP proxy address and port
+ LLHost getUDPProxy() const { return mUDPProxy; }
+
+ // Get the SOCKS 5 TCP control channel address and port
+ LLHost getTCPProxy() const { return mTCPProxy; }
+
+ // END OF NON-LOCKING METHODS
+
+ // METHODS THAT DO LOCK mProxyMutex! DO NOT CALL WHILE mProxyMutex IS LOCKED!
+
+ ~LLProxy();
+
+ // Start a connection to the SOCKS 5 proxy
+ S32 startSOCKSProxy(LLHost host);
+
+ // Disconnect and clean up any connection to the SOCKS 5 proxy
+ void stopSOCKSProxy();
+
+ // Delete LLProxy singleton, destroying the APR pool used by the control channel.
+ static void cleanupClass();
+
+ // Set up to use Password auth when connecting to the SOCKS proxy
+ bool setAuthPassword(const std::string &username, const std::string &password);
+
+ // Set up to use No Auth when connecting to the SOCKS proxy
+ void setAuthNone();
+
+ // Get the currently selected auth method.
+ LLSocks5AuthType getSelectedAuthMethod() const;
+
+ // Proxy HTTP packets via httpHost, which can be a SOCKS 5 or a HTTP proxy
+ // as specified in type
+ bool enableHTTPProxy(LLHost httpHost, LLHttpProxyType type);
+ bool enableHTTPProxy();
+
+ // Stop proxying HTTP packets
+ void disableHTTPProxy();
+
+ // Apply the current proxy settings to a curl request. Doesn't do anything if mHTTPProxyEnabled is false.
+ void applyProxySettings(CURL* handle);
+ void applyProxySettings(LLCurl::Easy* handle);
+ void applyProxySettings(LLCurlEasyRequest* handle);
+
+ // Get the HTTP proxy address and port
+ LLHost getHTTPProxy() const;
+
+ // Get the currently selected HTTP proxy type
+ LLHttpProxyType getHTTPProxyType() const;
+
+ std::string getSocksPwd() const;
+ std::string getSocksUser() const;
+
+ // END OF LOCKING METHODS
+private:
+ // Open a communication channel to the SOCKS 5 proxy proxy, at port messagePort
+ S32 proxyHandshake(LLHost proxy);
+
+private:
+ // Is the HTTP proxy enabled?
+ // Safe to read in any thread, do not write directly,
+ // use enableHTTPProxy() and disableHTTPProxy() instead.
+ mutable LLAtomic32<bool> mHTTPProxyEnabled;
+
+ // Mutex to protect shared members in non-main thread calls to applyProxySettings()
+ mutable LLMutex mProxyMutex;
+
+ // MEMBERS READ AND WRITTEN ONLY IN THE MAIN THREAD. DO NOT SHARE!
+
+ // Is the UDP proxy enabled?
+ static bool sUDPProxyEnabled;
+
+ // UDP proxy address and port
+ LLHost mUDPProxy;
+ // TCP proxy control channel address and port
+ LLHost mTCPProxy;
+
+ // socket handle to proxy TCP control channel
+ LLSocket::ptr_t mProxyControlChannel;
+
+ // END OF UNSHARED MEMBERS
+
+ // MEMBERS WRITTEN IN MAIN THREAD AND READ IN ANY THREAD. ONLY READ OR WRITE AFTER LOCKING mProxyMutex!
+
+ // HTTP proxy address and port
+ LLHost mHTTPProxy;
+
+ // Currently selected HTTP proxy type. Can be web or socks.
+ LLHttpProxyType mProxyType;
+
+ // SOCKS 5 auth method selected
+ LLSocks5AuthType mAuthMethodSelected;
+
+ // SOCKS 5 username
+ std::string mSocksUsername;
+ // SOCKS 5 password
+ std::string mSocksPassword;
+
+ // END OF SHARED MEMBERS
+};
+
+#endif
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index a8d2a0a224..89cfd66e1b 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -37,6 +37,7 @@
#include "llmemtype.h"
#include "llstl.h"
#include "llstat.h"
+#include "llthread.h"
// These should not be enabled in production, but they can be
// intensely useful during development for finding certain kinds of
@@ -162,14 +163,12 @@ struct ll_delete_apr_pollset_fd_client_data
/**
* LLPumpIO
*/
-LLPumpIO::LLPumpIO(apr_pool_t* pool) :
+LLPumpIO::LLPumpIO(void) :
mState(LLPumpIO::NORMAL),
mRebuildPollset(false),
mPollset(NULL),
mPollsetClientID(0),
mNextLock(0),
- mPool(NULL),
- mCurrentPool(NULL),
mCurrentPoolReallocCount(0),
mChainsMutex(NULL),
mCallbackMutex(NULL),
@@ -178,21 +177,24 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) :
mCurrentChain = mRunningChains.end();
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- initialize(pool);
+ initialize();
}
LLPumpIO::~LLPumpIO()
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- cleanup();
-}
-
-bool LLPumpIO::prime(apr_pool_t* pool)
-{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- cleanup();
- initialize(pool);
- return ((pool == NULL) ? false : true);
+#if LL_THREADS_APR
+ if (mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
+ if (mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
+#endif
+ mChainsMutex = NULL;
+ mCallbackMutex = NULL;
+ if(mPollset)
+ {
+// lldebugs << "cleaning up pollset" << llendl;
+ apr_pollset_destroy(mPollset);
+ mPollset = NULL;
+ }
}
bool LLPumpIO::addChain(const chain_t& chain, F32 timeout)
@@ -352,8 +354,7 @@ bool LLPumpIO::setConditional(LLIOPipe* pipe, const apr_pollfd_t* poll)
{
// each fd needs a pool to work with, so if one was
// not specified, use this pool.
- // *FIX: Should it always be this pool?
- value.second.p = mPool;
+ value.second.p = (*mCurrentChain).mDescriptorsPool->operator()();
}
value.second.client_data = new S32(++mPollsetClientID);
(*mCurrentChain).mDescriptors.push_back(value);
@@ -825,39 +826,15 @@ void LLPumpIO::control(LLPumpIO::EControl op)
}
}
-void LLPumpIO::initialize(apr_pool_t* pool)
+void LLPumpIO::initialize(void)
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
- if(!pool) return;
+ mPool.create();
#if LL_THREADS_APR
// SJB: Windows defaults to NESTED and OSX defaults to UNNESTED, so use UNNESTED explicitly.
- apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, pool);
- apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, pool);
-#endif
- mPool = pool;
-}
-
-void LLPumpIO::cleanup()
-{
- LLMemType m1(LLMemType::MTYPE_IO_PUMP);
-#if LL_THREADS_APR
- if(mChainsMutex) apr_thread_mutex_destroy(mChainsMutex);
- if(mCallbackMutex) apr_thread_mutex_destroy(mCallbackMutex);
+ apr_thread_mutex_create(&mChainsMutex, APR_THREAD_MUTEX_UNNESTED, mPool());
+ apr_thread_mutex_create(&mCallbackMutex, APR_THREAD_MUTEX_UNNESTED, mPool());
#endif
- mChainsMutex = NULL;
- mCallbackMutex = NULL;
- if(mPollset)
- {
-// lldebugs << "cleaning up pollset" << llendl;
- apr_pollset_destroy(mPollset);
- mPollset = NULL;
- }
- if(mCurrentPool)
- {
- apr_pool_destroy(mCurrentPool);
- mCurrentPool = NULL;
- }
- mPool = NULL;
}
void LLPumpIO::rebuildPollset()
@@ -885,21 +862,19 @@ void LLPumpIO::rebuildPollset()
if(mCurrentPool
&& (0 == (++mCurrentPoolReallocCount % POLLSET_POOL_RECYCLE_COUNT)))
{
- apr_pool_destroy(mCurrentPool);
- mCurrentPool = NULL;
+ mCurrentPool.destroy();
mCurrentPoolReallocCount = 0;
}
if(!mCurrentPool)
{
- apr_status_t status = apr_pool_create(&mCurrentPool, mPool);
- (void)ll_apr_warn_status(status);
+ mCurrentPool.create(mPool);
}
// add all of the file descriptors
run_it = mRunningChains.begin();
LLChainInfo::conditionals_t::iterator fd_it;
LLChainInfo::conditionals_t::iterator fd_end;
- apr_pollset_create(&mPollset, size, mCurrentPool, 0);
+ apr_pollset_create(&mPollset, size, mCurrentPool(), 0);
for(; run_it != run_end; ++run_it)
{
fd_it = (*run_it).mDescriptors.begin();
@@ -1157,7 +1132,8 @@ bool LLPumpIO::handleChainError(
LLPumpIO::LLChainInfo::LLChainInfo() :
mInit(false),
mLock(0),
- mEOS(false)
+ mEOS(false),
+ mDescriptorsPool(new LLAPRPool(LLThread::tldata().mRootPool))
{
LLMemType m1(LLMemType::MTYPE_IO_PUMP);
mTimer.setTimerExpirySec(DEFAULT_CHAIN_EXPIRY_SECS);
diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h
index 9303c9d7fc..75c35ae7ab 100644
--- a/indra/llmessage/llpumpio.h
+++ b/indra/llmessage/llpumpio.h
@@ -30,11 +30,12 @@
#define LL_LLPUMPIO_H
#include <set>
+#include <boost/shared_ptr.hpp>
#if LL_LINUX // needed for PATH_MAX in APR.
#include <sys/param.h>
#endif
-#include "apr_pools.h"
+#include "llaprpool.h"
#include "llbuffer.h"
#include "llframetimer.h"
#include "lliopipe.h"
@@ -58,9 +59,8 @@ extern const F32 NEVER_CHAIN_EXPIRY_SECS;
* <code>pump()</code> on a thread used for IO and call
* <code>respond()</code> on a thread that is expected to do higher
* level processing. You can call almost any other method from any
- * thread - see notes for each method for details. In order for the
- * threading abstraction to work, you need to call <code>prime()</code>
- * with a valid apr pool.
+ * thread - see notes for each method for details.
+ *
* A pump instance manages much of the state for the pipe, including
* the list of pipes in the chain, the channel for each element in the
* chain, the buffer, and if any pipe has marked the stream or process
@@ -79,7 +79,7 @@ public:
/**
* @brief Constructor.
*/
- LLPumpIO(apr_pool_t* pool);
+ LLPumpIO(void);
/**
* @brief Destructor.
@@ -87,17 +87,6 @@ public:
~LLPumpIO();
/**
- * @brief Prepare this pump for usage.
- *
- * If you fail to call this method prior to use, the pump will
- * try to work, but will not come with any thread locking
- * mechanisms.
- * @param pool The apr pool to use.
- * @return Returns true if the pump is primed.
- */
- bool prime(apr_pool_t* pool);
-
- /**
* @brief Typedef for having a chain of pipes.
*/
typedef std::vector<LLIOPipe::ptr_t> chain_t;
@@ -368,6 +357,7 @@ protected:
typedef std::pair<LLIOPipe::ptr_t, apr_pollfd_t> pipe_conditional_t;
typedef std::vector<pipe_conditional_t> conditionals_t;
conditionals_t mDescriptors;
+ boost::shared_ptr<LLAPRPool> mDescriptorsPool;
};
// All the running chains & info
@@ -386,9 +376,9 @@ protected:
callbacks_t mPendingCallbacks;
callbacks_t mCallbacks;
- // memory allocator for pollsets & mutexes.
- apr_pool_t* mPool;
- apr_pool_t* mCurrentPool;
+ // Memory pool for pollsets & mutexes.
+ LLAPRPool mPool;
+ LLAPRPool mCurrentPool;
S32 mCurrentPoolReallocCount;
#if LL_THREADS_APR
@@ -400,8 +390,7 @@ protected:
#endif
protected:
- void initialize(apr_pool_t* pool);
- void cleanup();
+ void initialize();
/**
* @brief Given the internal state of the chains, rebuild the pollset
diff --git a/indra/llmessage/llsdrpcclient.cpp b/indra/llmessage/llsdrpcclient.cpp
index 86fe5c7912..91fd070f07 100644
--- a/indra/llmessage/llsdrpcclient.cpp
+++ b/indra/llmessage/llsdrpcclient.cpp
@@ -82,6 +82,8 @@ bool LLSDRPCResponse::extractResponse(const LLSD& sd)
return rv;
}
+static LLFastTimer::DeclareTimer FTM_SDRPC_RESPONSE("SDRPC Response");
+
// virtual
LLIOPipe::EStatus LLSDRPCResponse::process_impl(
const LLChannelDescriptors& channels,
@@ -90,6 +92,7 @@ LLIOPipe::EStatus LLSDRPCResponse::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_SDRPC_RESPONSE);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_SD_CLIENT);
if(mIsError)
@@ -178,6 +181,8 @@ bool LLSDRPCClient::call(
return true;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SDRPC_CLIENT("SDRPC Client");
+
// virtual
LLIOPipe::EStatus LLSDRPCClient::process_impl(
const LLChannelDescriptors& channels,
@@ -186,6 +191,7 @@ LLIOPipe::EStatus LLSDRPCClient::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SDRPC_CLIENT);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_SD_CLIENT);
if((STATE_NONE == mState) || (!pump))
diff --git a/indra/llmessage/llsdrpcserver.cpp b/indra/llmessage/llsdrpcserver.cpp
index f87c418fb1..9f776aca72 100644
--- a/indra/llmessage/llsdrpcserver.cpp
+++ b/indra/llmessage/llsdrpcserver.cpp
@@ -97,6 +97,8 @@ void LLSDRPCServer::clearLock()
}
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_SDRPC_SERVER("SDRPC Server");
+
// virtual
LLIOPipe::EStatus LLSDRPCServer::process_impl(
const LLChannelDescriptors& channels,
@@ -105,6 +107,7 @@ LLIOPipe::EStatus LLSDRPCServer::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_SDRPC_SERVER);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_SD_SERVER);
// lldebugs << "LLSDRPCServer::process_impl" << llendl;
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
index f470e1b2a5..ab91f74abe 100644
--- a/indra/llmessage/lltemplatemessagereader.cpp
+++ b/indra/llmessage/lltemplatemessagereader.cpp
@@ -795,7 +795,7 @@ const char* LLTemplateMessageReader::getMessageName() const
{
if (!mCurrentRMessageTemplate)
{
- llwarns << "no mCurrentRMessageTemplate" << llendl;
+ // no message currently being read
return "";
}
return mCurrentRMessageTemplate->mName;
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index 28bd09fc4c..91a5a8ce2c 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -35,11 +35,13 @@
#include "llcurl.h"
#include "llioutil.h"
#include "llmemtype.h"
+#include "llproxy.h"
#include "llpumpio.h"
#include "llsd.h"
#include "llstring.h"
#include "apr_env.h"
#include "llapr.h"
+#include "llscopedvolatileaprpool.h"
static const U32 HTTP_STATUS_PIPE_ERROR = 499;
/**
@@ -210,27 +212,31 @@ void LLURLRequest::setCallback(LLURLRequestComplete* callback)
// is called with use_proxy = FALSE
void LLURLRequest::useProxy(bool use_proxy)
{
- static char *env_proxy;
+ static std::string env_proxy;
- if (use_proxy && (env_proxy == NULL))
+ if (use_proxy && env_proxy.empty())
{
- apr_status_t status;
- LLAPRPool pool;
- status = apr_env_get(&env_proxy, "ALL_PROXY", pool.getAPRPool());
+ char* env_proxy_str;
+ LLScopedVolatileAPRPool scoped_pool;
+ apr_status_t status = apr_env_get(&env_proxy_str, "ALL_PROXY", scoped_pool);
if (status != APR_SUCCESS)
{
- status = apr_env_get(&env_proxy, "http_proxy", pool.getAPRPool());
+ status = apr_env_get(&env_proxy_str, "http_proxy", scoped_pool);
}
if (status != APR_SUCCESS)
{
- use_proxy = FALSE;
+ use_proxy = false;
}
+ else
+ {
+ // env_proxy_str is stored in the scoped_pool, so we have to make a copy.
+ env_proxy = env_proxy_str;
+ }
}
+ LL_DEBUGS("Proxy") << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = " << (!env_proxy.empty() ? env_proxy : "(null)") << LL_ENDL;
- lldebugs << "use_proxy = " << (use_proxy?'Y':'N') << ", env_proxy = " << (env_proxy ? env_proxy : "(null)") << llendl;
-
- if (env_proxy && use_proxy)
+ if (use_proxy && !env_proxy.empty())
{
mDetail->mCurlRequest->setoptString(CURLOPT_PROXY, env_proxy);
}
@@ -270,6 +276,8 @@ LLIOPipe::EStatus LLURLRequest::handleError(
return status;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST("URL Request");
+
// virtual
LLIOPipe::EStatus LLURLRequest::process_impl(
const LLChannelDescriptors& channels,
@@ -278,6 +286,7 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_URL_REQUEST);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
//llinfos << "LLURLRequest::process_impl()" << llendl;
@@ -288,6 +297,8 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
const S32 MIN_ACCUMULATION = 100000;
if(pump && (mDetail->mByteAccumulator > MIN_ACCUMULATION))
{
+ static LLFastTimer::DeclareTimer FTM_URL_ADJUST_TIMEOUT("Adjust Timeout");
+ LLFastTimer t(FTM_URL_ADJUST_TIMEOUT);
// This is a pretty sloppy calculation, but this
// tries to make the gross assumption that if data
// is coming in at 56kb/s, then this transfer will
@@ -335,16 +346,30 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
{
PUMP_DEBUG;
LLIOPipe::EStatus status = STATUS_BREAK;
- mDetail->mCurlRequest->perform();
+ static LLFastTimer::DeclareTimer FTM_URL_PERFORM("Perform");
+ {
+ LLFastTimer t(FTM_URL_PERFORM);
+ mDetail->mCurlRequest->perform();
+ }
+
while(1)
{
CURLcode result;
- bool newmsg = mDetail->mCurlRequest->getResult(&result);
+
+ static LLFastTimer::DeclareTimer FTM_PROCESS_URL_REQUEST_GET_RESULT("Get Result");
+
+ bool newmsg = false;
+ {
+ LLFastTimer t(FTM_PROCESS_URL_REQUEST_GET_RESULT);
+ newmsg = mDetail->mCurlRequest->getResult(&result);
+ }
+
if(!newmsg)
{
// keep processing
break;
}
+
mState = STATE_HAVE_RESPONSE;
context[CONTEXT_REQUEST][CONTEXT_TRANSFERED_BYTES] = mRequestTransferedBytes;
@@ -370,7 +395,11 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
link.mChannels = LLBufferArray::makeChannelConsumer(
channels);
chain.push_back(link);
- pump->respond(chain, buffer, context);
+ static LLFastTimer::DeclareTimer FTM_PROCESS_URL_PUMP_RESPOND("Pump Respond");
+ {
+ LLFastTimer t(FTM_PROCESS_URL_PUMP_RESPOND);
+ pump->respond(chain, buffer, context);
+ }
mCompletionCallback = NULL;
}
break;
@@ -422,8 +451,11 @@ void LLURLRequest::initialize()
mResponseTransferedBytes = 0;
}
+static LLFastTimer::DeclareTimer FTM_URL_REQUEST_CONFIGURE("URL Configure");
bool LLURLRequest::configure()
{
+ LLFastTimer t(FTM_URL_REQUEST_CONFIGURE);
+
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
bool rv = false;
S32 bytes = mDetail->mResponseBuffer->countAfter(
@@ -624,6 +656,7 @@ static size_t headerCallback(void* data, size_t size, size_t nmemb, void* user)
return header_len;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_URL_EXTRACTOR("URL Extractor");
/**
* LLContextURLExtractor
*/
@@ -635,6 +668,7 @@ LLIOPipe::EStatus LLContextURLExtractor::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_URL_EXTRACTOR);
PUMP_DEBUG;
LLMemType m1(LLMemType::MTYPE_IO_URL_REQUEST);
// The destination host is in the context.
@@ -713,6 +747,7 @@ void LLURLRequestComplete::responseStatus(LLIOPipe::EStatus status)
mRequestStatus = status;
}
+static LLFastTimer::DeclareTimer FTM_PROCESS_URL_COMPLETE("URL Complete");
// virtual
LLIOPipe::EStatus LLURLRequestComplete::process_impl(
const LLChannelDescriptors& channels,
@@ -721,6 +756,7 @@ LLIOPipe::EStatus LLURLRequestComplete::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_PROCESS_URL_COMPLETE);
PUMP_DEBUG;
complete(channels, buffer);
return STATUS_OK;
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index d0b0e178b8..7d21e35f96 100644
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
@@ -97,8 +97,10 @@ std::string get_shared_secret();
class LLMessagePollInfo
{
public:
+ LLMessagePollInfo(void) : mPool(LLThread::tldata().mRootPool) { }
apr_socket_t *mAPRSocketp;
apr_pollfd_t mPollFD;
+ LLAPRPool mPool;
};
namespace
@@ -287,20 +289,13 @@ LLMessageSystem::LLMessageSystem(const std::string& filename, U32 port,
}
// LL_DEBUGS("Messaging") << << "*** port: " << mPort << llendl;
- //
- // Create the data structure that we can poll on
- //
- if (!gAPRPoolp)
- {
- LL_ERRS("Messaging") << "No APR pool before message system initialization!" << llendl;
- ll_init_apr();
- }
+ mPollInfop = new LLMessagePollInfo;
+
apr_socket_t *aprSocketp = NULL;
- apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp);
+ apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, mPollInfop->mPool());
- mPollInfop = new LLMessagePollInfo;
mPollInfop->mAPRSocketp = aprSocketp;
- mPollInfop->mPollFD.p = gAPRPoolp;
+ mPollInfop->mPollFD.p = mPollInfop->mPool();
mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET;
mPollInfop->mPollFD.reqevents = APR_POLLIN;
mPollInfop->mPollFD.rtnevents = 0;
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 6133f50637..e71fb96540 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -1376,3 +1376,6 @@ char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getStri
char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");
char const* const _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData");
char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU");
+char const* const _PREHASH_SeeAVs = LLMessageStringTable::getInstance()->getString("SeeAVs");
+char const* const _PREHASH_AnyAVSounds = LLMessageStringTable::getInstance()->getString("AnyAVSounds");
+char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->getString("GroupAVSounds");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index f94ee1ed22..dd2c2dbd64 100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -1376,4 +1376,7 @@ extern char const* const _PREHASH_VCoord;
extern char const* const _PREHASH_FaceIndex;
extern char const* const _PREHASH_StatusData;
extern char const* const _PREHASH_ProductSKU;
+extern char const* const _PREHASH_SeeAVs;
+extern char const* const _PREHASH_AnyAVSounds;
+extern char const* const _PREHASH_GroupAVSounds;
#endif
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
index 97611c3b51..85aef5da00 100644
--- a/indra/llmessage/net.cpp
+++ b/indra/llmessage/net.cpp
@@ -50,7 +50,6 @@
#include "lltimer.h"
#include "indra_constants.h"
-
// Globals
#if LL_WINDOWS
@@ -174,7 +173,7 @@ U32 ip_string_to_u32(const char* ip_string)
// use wildcard addresses. -Ambroff
U32 ip = inet_addr(ip_string);
if (ip == INADDR_NONE
- && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0)
+ && strncmp(ip_string, BROADCAST_ADDRESS_STRING, MAXADDRSTR) != 0)
{
llwarns << "ip_string_to_u32() failed, Error: Invalid IP string '" << ip_string << "'" << llendl;
return INVALID_HOST_IP_ADDRESS;
@@ -188,11 +187,11 @@ U32 ip_string_to_u32(const char* ip_string)
//////////////////////////////////////////////////////////////////////////////////////////
#if LL_WINDOWS
-
+
S32 start_net(S32& socket_out, int& nPort)
{
// Create socket, make non-blocking
- // Init WinSock
+ // Init WinSock
int nRet;
int hSocket;
@@ -201,7 +200,7 @@ S32 start_net(S32& socket_out, int& nPort)
int buff_size = 4;
// Initialize windows specific stuff
- if(WSAStartup(0x0202, &stWSAData))
+ if (WSAStartup(0x0202, &stWSAData))
{
S32 err = WSAGetLastError();
WSACleanup();
@@ -210,8 +209,8 @@ S32 start_net(S32& socket_out, int& nPort)
}
// Get a datagram socket
- hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0);
- if (hSocket == INVALID_SOCKET)
+ hSocket = (int)socket(AF_INET, SOCK_DGRAM, 0);
+ if (hSocket == INVALID_SOCKET)
{
S32 err = WSAGetLastError();
WSACleanup();
@@ -304,7 +303,7 @@ S32 start_net(S32& socket_out, int& nPort)
// Setup a destination address
stDstAddr.sin_family = AF_INET;
stDstAddr.sin_addr.s_addr = INVALID_HOST_IP_ADDRESS;
- stDstAddr.sin_port = htons(nPort);
+ stDstAddr.sin_port = htons(nPort);
socket_out = hSocket;
return 0;
@@ -393,10 +392,10 @@ S32 start_net(S32& socket_out, int& nPort)
int rec_size = RECEIVE_BUFFER_SIZE;
socklen_t buff_size = 4;
-
+
// Create socket
- hSocket = socket(AF_INET, SOCK_DGRAM, 0);
- if (hSocket < 0)
+ hSocket = socket(AF_INET, SOCK_DGRAM, 0);
+ if (hSocket < 0)
{
llwarns << "socket() failed" << llendl;
return 1;
@@ -429,7 +428,7 @@ S32 start_net(S32& socket_out, int& nPort)
}
else
{
- // Name the socket (assign the local port number to receive on)
+ // Name the socket (assign the local port number to receive on)
stLclAddr.sin_family = AF_INET;
stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY);
stLclAddr.sin_port = htons(nPort);
@@ -474,7 +473,7 @@ S32 start_net(S32& socket_out, int& nPort)
nPort = attempt_port;
}
// Set socket to be non-blocking
- fcntl(hSocket, F_SETFL, O_NONBLOCK);
+ fcntl(hSocket, F_SETFL, O_NONBLOCK);
// set a large receive buffer
nRet = setsockopt(hSocket, SOL_SOCKET, SO_RCVBUF, (char *)&rec_size, buff_size);
if (nRet)
@@ -510,8 +509,8 @@ S32 start_net(S32& socket_out, int& nPort)
// Setup a destination address
char achMCAddr[MAXADDRSTR] = "127.0.0.1"; /* Flawfinder: ignore */
stDstAddr.sin_family = AF_INET;
- stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr);
- stDstAddr.sin_port = htons(nPort);
+ stDstAddr.sin_addr.s_addr = ip_string_to_u32(achMCAddr);
+ stDstAddr.sin_port = htons(nPort);
socket_out = hSocket;
return 0;
@@ -537,7 +536,7 @@ static int recvfrom_destip( int socket, void *buf, int len, struct sockaddr *fro
iov[0].iov_base = buf;
iov[0].iov_len = len;
- memset( &msg, 0, sizeof msg );
+ memset(&msg, 0, sizeof msg);
msg.msg_name = from;
msg.msg_namelen = *fromlen;
msg.msg_iov = iov;
@@ -545,14 +544,14 @@ static int recvfrom_destip( int socket, void *buf, int len, struct sockaddr *fro
msg.msg_control = &cmsg;
msg.msg_controllen = sizeof(cmsg);
- size = recvmsg( socket, &msg, 0 );
+ size = recvmsg(socket, &msg, 0);
- if( size == -1 )
+ if (size == -1)
{
return -1;
}
- for( cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR( &msg, cmsgptr ) )
+ for (cmsgptr = CMSG_FIRSTHDR(&msg); cmsgptr != NULL; cmsgptr = CMSG_NXTHDR( &msg, cmsgptr))
{
if( cmsgptr->cmsg_level == SOL_IP && cmsgptr->cmsg_type == IP_PKTINFO )
{
@@ -650,7 +649,7 @@ BOOL send_packet(int hSocket, const char * sendBuffer, int size, U32 recipient,
}
}
}
- while ( resend && send_attempts < 3);
+ while (resend && send_attempts < 3);
if (send_attempts >= 3)
{
diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h
index 9f4f5c5821..0f2437479d 100644
--- a/indra/llmessage/net.h
+++ b/indra/llmessage/net.h
@@ -46,10 +46,10 @@ S32 receive_packet(int hSocket, char * receiveBuffer);
BOOL send_packet(int hSocket, const char *sendBuffer, int size, U32 recipient, int nPort); // Returns TRUE on success.
//void get_sender(char * tmp);
-LLHost get_sender();
+LLHost get_sender();
U32 get_sender_port();
U32 get_sender_ip(void);
-LLHost get_receiving_interface();
+LLHost get_receiving_interface();
U32 get_receiving_interface_ip(void);
const char* u32_to_ip_string(U32 ip); // Returns pointer to internal string buffer, "(bad IP addr)" on failure, cannot nest calls
diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h
index 2aff90ca1e..23e1c791f4 100644
--- a/indra/llmessage/tests/networkio.h
+++ b/indra/llmessage/tests/networkio.h
@@ -30,7 +30,6 @@
#define LL_NETWORKIO_H
#include "llmemory.h" // LLSingleton
-#include "llapr.h"
#include "llares.h"
#include "llpumpio.h"
#include "llhttpclient.h"
@@ -48,14 +47,8 @@ public:
mServicePump(NULL),
mDone(false)
{
- ll_init_apr();
- if (! gAPRPoolp)
- {
- throw std::runtime_error("Can't initialize APR");
- }
-
// Create IO Pump to use for HTTP Requests.
- mServicePump = new LLPumpIO(gAPRPoolp);
+ mServicePump = new LLPumpIO;
LLHTTPClient::setPump(*mServicePump);
if (ll_init_ares() == NULL || !gAres->isInitialized())
{
diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py
index 9886d49ccc..22edd9dad8 100644
--- a/indra/llmessage/tests/test_llsdmessage_peer.py
+++ b/indra/llmessage/tests/test_llsdmessage_peer.py
@@ -124,14 +124,19 @@ class TestHTTPRequestHandler(BaseHTTPRequestHandler):
# Suppress error output as well
pass
+class Server(HTTPServer):
+ # This pernicious flag is on by default in HTTPServer. But proper
+ # operation of freeport() absolutely depends on it being off.
+ allow_reuse_address = False
+
if __name__ == "__main__":
- # Instantiate an HTTPServer(TestHTTPRequestHandler) on the first free port
+ # Instantiate a Server(TestHTTPRequestHandler) on the first free port
# in the specified port range. Doing this inline is better than in a
# daemon thread: if it blows up here, we'll get a traceback. If it blew up
# in some other thread, the traceback would get eaten and we'd run the
# subject test program anyway.
httpd, port = freeport(xrange(8000, 8020),
- lambda port: HTTPServer(('127.0.0.1', port), TestHTTPRequestHandler))
+ lambda port: Server(('127.0.0.1', port), TestHTTPRequestHandler))
# Pass the selected port number to the subject test program via the
# environment. We don't want to impose requirements on the test program's
# command-line parsing -- and anyway, for C++ integration tests, that's
diff --git a/indra/llmessage/tests/testrunner.py b/indra/llmessage/tests/testrunner.py
index f329ec2a0e..f2c841532a 100644
--- a/indra/llmessage/tests/testrunner.py
+++ b/indra/llmessage/tests/testrunner.py
@@ -27,6 +27,8 @@ Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
$/LicenseInfo$
"""
+from __future__ import with_statement
+
import os
import sys
import re
@@ -79,9 +81,14 @@ def freeport(portlist, expr):
Example:
+ class Server(HTTPServer):
+ # If you use BaseHTTPServer.HTTPServer, turning off this flag is
+ # essential for proper operation of freeport()!
+ allow_reuse_address = False
+ # ...
server, port = freeport(xrange(8000, 8010),
- lambda port: HTTPServer(("localhost", port),
- MyRequestHandler))
+ lambda port: Server(("localhost", port),
+ MyRequestHandler))
# pass 'port' to client code
# call server.serve_forever()
"""
@@ -164,3 +171,92 @@ def run(*args, **kwds):
rc = os.spawnv(os.P_WAIT, args[0], args)
debug("%s returned %s", args[0], rc)
return rc
+
+# ****************************************************************************
+# test code -- manual at this point, see SWAT-564
+# ****************************************************************************
+def test_freeport():
+ # ------------------------------- Helpers --------------------------------
+ from contextlib import contextmanager
+ # helper Context Manager for expecting an exception
+ # with exc(SomeError):
+ # raise SomeError()
+ # raises AssertionError otherwise.
+ @contextmanager
+ def exc(exception_class, *args):
+ try:
+ yield
+ except exception_class, err:
+ for i, expected_arg in enumerate(args):
+ assert expected_arg == err.args[i], \
+ "Raised %s, but args[%s] is %r instead of %r" % \
+ (err.__class__.__name__, i, err.args[i], expected_arg)
+ print "Caught expected exception %s(%s)" % \
+ (err.__class__.__name__, ', '.join(repr(arg) for arg in err.args))
+ else:
+ assert False, "Failed to raise " + exception_class.__class__.__name__
+
+ # helper to raise specified exception
+ def raiser(exception):
+ raise exception
+
+ # the usual
+ def assert_equals(a, b):
+ assert a == b, "%r != %r" % (a, b)
+
+ # ------------------------ Sanity check the above ------------------------
+ class SomeError(Exception): pass
+ # Without extra args, accept any err.args value
+ with exc(SomeError):
+ raiser(SomeError("abc"))
+ # With extra args, accept only the specified value
+ with exc(SomeError, "abc"):
+ raiser(SomeError("abc"))
+ with exc(AssertionError):
+ with exc(SomeError, "abc"):
+ raiser(SomeError("def"))
+ with exc(AssertionError):
+ with exc(socket.error, errno.EADDRINUSE):
+ raiser(socket.error(errno.ECONNREFUSED, 'Connection refused'))
+
+ # ----------- freeport() without engaging socket functionality -----------
+ # If portlist is empty, freeport() raises StopIteration.
+ with exc(StopIteration):
+ freeport([], None)
+
+ assert_equals(freeport([17], str), ("17", 17))
+
+ # This is the magic exception that should prompt us to retry
+ inuse = socket.error(errno.EADDRINUSE, 'Address already in use')
+ # Get the iterator to our ports list so we can check later if we've used all
+ ports = iter(xrange(5))
+ with exc(socket.error, errno.EADDRINUSE):
+ freeport(ports, lambda port: raiser(inuse))
+ # did we entirely exhaust 'ports'?
+ with exc(StopIteration):
+ ports.next()
+
+ ports = iter(xrange(2))
+ # Any exception but EADDRINUSE should quit immediately
+ with exc(SomeError):
+ freeport(ports, lambda port: raiser(SomeError()))
+ assert_equals(ports.next(), 1)
+
+ # ----------- freeport() with platform-dependent socket stuff ------------
+ # This is what we should've had unit tests to begin with (see CHOP-661).
+ def newbind(port):
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.bind(('127.0.0.1', port))
+ return sock
+
+ bound0, port0 = freeport(xrange(7777, 7780), newbind)
+ assert_equals(port0, 7777)
+ bound1, port1 = freeport(xrange(7777, 7780), newbind)
+ assert_equals(port1, 7778)
+ bound2, port2 = freeport(xrange(7777, 7780), newbind)
+ assert_equals(port2, 7779)
+ with exc(socket.error, errno.EADDRINUSE):
+ bound3, port3 = freeport(xrange(7777, 7780), newbind)
+
+if __name__ == "__main__":
+ test_freeport()
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 2f28673c07..1353b7a458 100644
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -68,18 +68,18 @@ add_subdirectory(slplugin)
# Add tests
if (LL_TESTS)
- include(LLAddBuildTest)
- # UNIT TESTS
- SET(llplugin_TEST_SOURCE_FILES
- llplugincookiestore.cpp
- )
+ include(LLAddBuildTest)
+ # UNIT TESTS
+ SET(llplugin_TEST_SOURCE_FILES
+ llplugincookiestore.cpp
+ )
- # llplugincookiestore has a dependency on curl, so we need to link the curl library into the test.
- set_source_files_properties(
- llplugincookiestore.cpp
- PROPERTIES
- LL_TEST_ADDITIONAL_LIBRARIES "${CURL_LIBRARIES}"
- )
+ # llplugincookiestore has a dependency on curl, so we need to link the curl library into the test.
+ set_source_files_properties(
+ llplugincookiestore.cpp
+ PROPERTIES
+ LL_TEST_ADDITIONAL_LIBRARIES "${CURL_LIBRARIES}"
+ )
- LL_ADD_PROJECT_UNIT_TESTS(llplugin "${llplugin_TEST_SOURCE_FILES}")
+ LL_ADD_PROJECT_UNIT_TESTS(llplugin "${llplugin_TEST_SOURCE_FILES}")
endif (LL_TESTS)
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 9f666369d4..9cd3216ab2 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -1,1436 +1,1445 @@
-/**
- * @file llpluginclassmedia.cpp
- * @brief LLPluginClassMedia handles a plugin which knows about the "media" message class.
- *
- * @cond
- * $LicenseInfo:firstyear=2008&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- * @endcond
- */
-
-#include "linden_common.h"
-#include "indra_constants.h"
-
-#include "llpluginclassmedia.h"
-#include "llpluginmessageclasses.h"
-
-#include "llqtwebkit.h"
-
-static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256;
-
-static int nextPowerOf2( int value )
-{
- int next_power_of_2 = 1;
- while ( next_power_of_2 < value )
- {
- next_power_of_2 <<= 1;
- }
-
- return next_power_of_2;
-}
-
-LLPluginClassMedia::LLPluginClassMedia(LLPluginClassMediaOwner *owner)
-{
- mOwner = owner;
- mPlugin = NULL;
- reset();
-
- //debug use
- mDeleteOK = true ;
-}
-
-
-LLPluginClassMedia::~LLPluginClassMedia()
-{
- llassert_always(mDeleteOK) ;
- reset();
-}
-
-bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug)
-{
- LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL;
- LL_DEBUGS("Plugin") << "dir: " << plugin_dir << LL_ENDL;
- LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL;
-
- mPlugin = new LLPluginProcessParent(this);
- mPlugin->setSleepTime(mSleepTime);
-
- // Queue up the media init message -- it will be sent after all the currently queued messages.
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
- message.setValue("target", mTarget);
- sendMessage(message);
-
- mPlugin->init(launcher_filename, plugin_dir, plugin_filename, debug);
-
- return true;
-}
-
-
-void LLPluginClassMedia::reset()
-{
- if(mPlugin != NULL)
- {
- delete mPlugin;
- mPlugin = NULL;
- }
-
- mTextureParamsReceived = false;
- mRequestedTextureDepth = 0;
- mRequestedTextureInternalFormat = 0;
- mRequestedTextureFormat = 0;
- mRequestedTextureType = 0;
- mRequestedTextureSwapBytes = false;
- mRequestedTextureCoordsOpenGL = false;
- mTextureSharedMemorySize = 0;
- mTextureSharedMemoryName.clear();
- mDefaultMediaWidth = 0;
- mDefaultMediaHeight = 0;
- mNaturalMediaWidth = 0;
- mNaturalMediaHeight = 0;
- mSetMediaWidth = -1;
- mSetMediaHeight = -1;
- mRequestedMediaWidth = 0;
- mRequestedMediaHeight = 0;
- mRequestedTextureWidth = 0;
- mRequestedTextureHeight = 0;
- mFullMediaWidth = 0;
- mFullMediaHeight = 0;
- mTextureWidth = 0;
- mTextureHeight = 0;
- mMediaWidth = 0;
- mMediaHeight = 0;
- mDirtyRect = LLRect::null;
- mAutoScaleMedia = false;
- mRequestedVolume = 1.0f;
- mPriority = PRIORITY_NORMAL;
- mLowPrioritySizeLimit = LOW_PRIORITY_TEXTURE_SIZE_DEFAULT;
- mAllowDownsample = false;
- mPadding = 0;
- mLastMouseX = 0;
- mLastMouseY = 0;
- mStatus = LLPluginClassMediaOwner::MEDIA_NONE;
- mSleepTime = 1.0f / 100.0f;
- mCanCut = false;
- mCanCopy = false;
- mCanPaste = false;
- mMediaName.clear();
- mMediaDescription.clear();
- mBackgroundColor = LLColor4(1.0f, 1.0f, 1.0f, 1.0f);
-
- // media_browser class
- mNavigateURI.clear();
- mNavigateResultCode = -1;
- mNavigateResultString.clear();
- mHistoryBackAvailable = false;
- mHistoryForwardAvailable = false;
- mStatusText.clear();
- mProgressPercent = 0;
- mClickURL.clear();
- mClickNavType.clear();
- mClickTarget.clear();
- mClickUUID.clear();
- mStatusCode = 0;
-
- // media_time class
- mCurrentTime = 0.0f;
- mDuration = 0.0f;
- mCurrentRate = 0.0f;
- mLoadedDuration = 0.0f;
-}
-
-void LLPluginClassMedia::idle(void)
-{
- if(mPlugin)
- {
- mPlugin->idle();
- }
-
- if((mMediaWidth == -1) || (!mTextureParamsReceived) || (mPlugin == NULL) || (mPlugin->isBlocked()) || (mOwner == NULL))
- {
- // Can't process a size change at this time
- }
- else if((mRequestedMediaWidth != mMediaWidth) || (mRequestedMediaHeight != mMediaHeight))
- {
- // Calculate the correct size for the media texture
- mRequestedTextureHeight = mRequestedMediaHeight;
- if(mPadding < 0)
- {
- // negative values indicate the plugin wants a power of 2
- mRequestedTextureWidth = nextPowerOf2(mRequestedMediaWidth);
- }
- else
- {
- mRequestedTextureWidth = mRequestedMediaWidth;
-
- if(mPadding > 1)
- {
- // Pad up to a multiple of the specified number of bytes per row
- int rowbytes = mRequestedTextureWidth * mRequestedTextureDepth;
- int pad = rowbytes % mPadding;
- if(pad != 0)
- {
- rowbytes += mPadding - pad;
- }
-
- if(rowbytes % mRequestedTextureDepth == 0)
- {
- mRequestedTextureWidth = rowbytes / mRequestedTextureDepth;
- }
- else
- {
- LL_WARNS("Plugin") << "Unable to pad texture width, padding size " << mPadding << "is not a multiple of pixel size " << mRequestedTextureDepth << LL_ENDL;
- }
- }
- }
-
-
- // Size change has been requested but not initiated yet.
- size_t newsize = mRequestedTextureWidth * mRequestedTextureHeight * mRequestedTextureDepth;
-
- // Add an extra line for padding, just in case.
- newsize += mRequestedTextureWidth * mRequestedTextureDepth;
-
- if(newsize != mTextureSharedMemorySize)
- {
- if(!mTextureSharedMemoryName.empty())
- {
- // Tell the plugin to remove the old memory segment
- mPlugin->removeSharedMemory(mTextureSharedMemoryName);
- mTextureSharedMemoryName.clear();
- }
-
- mTextureSharedMemorySize = newsize;
- mTextureSharedMemoryName = mPlugin->addSharedMemory(mTextureSharedMemorySize);
- if(!mTextureSharedMemoryName.empty())
- {
- void *addr = mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName);
-
- // clear texture memory to avoid random screen visual fuzz from uninitialized texture data
- memset( addr, 0x00, newsize );
-
- // We could do this to force an update, but textureValid() will still be returning false until the first roundtrip to the plugin,
- // so it may not be worthwhile.
- // mDirtyRect.setOriginAndSize(0, 0, mRequestedMediaWidth, mRequestedMediaHeight);
- }
- }
-
- // This is our local indicator that a change is in progress.
- mTextureWidth = -1;
- mTextureHeight = -1;
- mMediaWidth = -1;
- mMediaHeight = -1;
-
- // This invalidates any existing dirty rect.
- resetDirty();
-
- // Send a size change message to the plugin
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change");
- message.setValue("name", mTextureSharedMemoryName);
- message.setValueS32("width", mRequestedMediaWidth);
- message.setValueS32("height", mRequestedMediaHeight);
- message.setValueS32("texture_width", mRequestedTextureWidth);
- message.setValueS32("texture_height", mRequestedTextureHeight);
- message.setValueReal("background_r", mBackgroundColor.mV[VX]);
- message.setValueReal("background_g", mBackgroundColor.mV[VY]);
- message.setValueReal("background_b", mBackgroundColor.mV[VZ]);
- message.setValueReal("background_a", mBackgroundColor.mV[VW]);
- mPlugin->sendMessage(message); // DO NOT just use sendMessage() here -- we want this to jump ahead of the queue.
-
- LL_DEBUGS("Plugin") << "Sending size_change" << LL_ENDL;
- }
- }
-
- if(mPlugin && mPlugin->isRunning())
- {
- // Send queued messages
- while(!mSendQueue.empty())
- {
- LLPluginMessage message = mSendQueue.front();
- mSendQueue.pop();
- mPlugin->sendMessage(message);
- }
- }
-}
-
-int LLPluginClassMedia::getTextureWidth() const
-{
- return nextPowerOf2(mTextureWidth);
-}
-
-int LLPluginClassMedia::getTextureHeight() const
-{
- return nextPowerOf2(mTextureHeight);
-}
-
-unsigned char* LLPluginClassMedia::getBitsData()
-{
- unsigned char *result = NULL;
- if((mPlugin != NULL) && !mTextureSharedMemoryName.empty())
- {
- result = (unsigned char*)mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName);
- }
- return result;
-}
-
-void LLPluginClassMedia::setSize(int width, int height)
-{
- if((width > 0) && (height > 0))
- {
- mSetMediaWidth = width;
- mSetMediaHeight = height;
- }
- else
- {
- mSetMediaWidth = -1;
- mSetMediaHeight = -1;
- }
-
- setSizeInternal();
-}
-
-void LLPluginClassMedia::setSizeInternal(void)
-{
- if((mSetMediaWidth > 0) && (mSetMediaHeight > 0))
- {
- mRequestedMediaWidth = mSetMediaWidth;
- mRequestedMediaHeight = mSetMediaHeight;
- }
- else if((mNaturalMediaWidth > 0) && (mNaturalMediaHeight > 0))
- {
- mRequestedMediaWidth = mNaturalMediaWidth;
- mRequestedMediaHeight = mNaturalMediaHeight;
- }
- else
- {
- mRequestedMediaWidth = mDefaultMediaWidth;
- mRequestedMediaHeight = mDefaultMediaHeight;
- }
-
- // Save these for size/interest calculations
- mFullMediaWidth = mRequestedMediaWidth;
- mFullMediaHeight = mRequestedMediaHeight;
-
- if(mAllowDownsample)
- {
- switch(mPriority)
- {
- case PRIORITY_SLIDESHOW:
- case PRIORITY_LOW:
- // Reduce maximum texture dimension to (or below) mLowPrioritySizeLimit
- while((mRequestedMediaWidth > mLowPrioritySizeLimit) || (mRequestedMediaHeight > mLowPrioritySizeLimit))
- {
- mRequestedMediaWidth /= 2;
- mRequestedMediaHeight /= 2;
- }
- break;
-
- default:
- // Don't adjust texture size
- break;
- }
- }
-
- if(mAutoScaleMedia)
- {
- mRequestedMediaWidth = nextPowerOf2(mRequestedMediaWidth);
- mRequestedMediaHeight = nextPowerOf2(mRequestedMediaHeight);
- }
-
- if(mRequestedMediaWidth > 2048)
- mRequestedMediaWidth = 2048;
-
- if(mRequestedMediaHeight > 2048)
- mRequestedMediaHeight = 2048;
-}
-
-void LLPluginClassMedia::setAutoScale(bool auto_scale)
-{
- if(auto_scale != mAutoScaleMedia)
- {
- mAutoScaleMedia = auto_scale;
- setSizeInternal();
- }
-}
-
-bool LLPluginClassMedia::textureValid(void)
-{
- if(
- !mTextureParamsReceived ||
- mTextureWidth <= 0 ||
- mTextureHeight <= 0 ||
- mMediaWidth <= 0 ||
- mMediaHeight <= 0 ||
- mRequestedMediaWidth != mMediaWidth ||
- mRequestedMediaHeight != mMediaHeight ||
- getBitsData() == NULL
- )
- return false;
-
- return true;
-}
-
-bool LLPluginClassMedia::getDirty(LLRect *dirty_rect)
-{
- bool result = !mDirtyRect.isEmpty();
-
- if(dirty_rect != NULL)
- {
- *dirty_rect = mDirtyRect;
- }
-
- return result;
-}
-
-void LLPluginClassMedia::resetDirty(void)
-{
- mDirtyRect = LLRect::null;
-}
-
-std::string LLPluginClassMedia::translateModifiers(MASK modifiers)
-{
- std::string result;
-
-
- if(modifiers & MASK_CONTROL)
- {
- result += "control|";
- }
-
- if(modifiers & MASK_ALT)
- {
- result += "alt|";
- }
-
- if(modifiers & MASK_SHIFT)
- {
- result += "shift|";
- }
-
- // TODO: should I deal with platform differences here or in callers?
- // TODO: how do we deal with the Mac "command" key?
-/*
- if(modifiers & MASK_SOMETHING)
- {
- result += "meta|";
- }
-*/
- return result;
-}
-
-void LLPluginClassMedia::jsExposeObjectEvent( bool expose )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_expose_object");
- message.setValueBoolean( "expose", expose );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsValuesValidEvent( bool valid )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_values_valid");
- message.setValueBoolean( "valid", valid );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsAgentLocationEvent( double x, double y, double z )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_location");
- message.setValueReal( "x", x );
- message.setValueReal( "y", y );
- message.setValueReal( "z", z );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsAgentGlobalLocationEvent( double x, double y, double z )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_global_location");
- message.setValueReal( "x", x );
- message.setValueReal( "y", y );
- message.setValueReal( "z", z );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsAgentOrientationEvent( double angle )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_orientation");
- message.setValueReal( "angle", angle );
-
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsAgentLanguageEvent( const std::string& language )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_language");
- message.setValue( "language", language );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsAgentRegionEvent( const std::string& region )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_region");
- message.setValue( "region", region );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::jsAgentMaturityEvent( const std::string& maturity )
-{
- if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
- {
- return;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_maturity");
- message.setValue( "maturity", maturity );
- sendMessage( message );
-}
-
-void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int y, MASK modifiers)
-{
- if(type == MOUSE_EVENT_MOVE)
- {
- if(!mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked())
- {
- // Don't queue up mouse move events that can't be delivered.
- return;
- }
-
- if((x == mLastMouseX) && (y == mLastMouseY))
- {
- // Don't spam unnecessary mouse move events.
- return;
- }
-
- mLastMouseX = x;
- mLastMouseY = y;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "mouse_event");
- std::string temp;
- switch(type)
- {
- case MOUSE_EVENT_DOWN: temp = "down"; break;
- case MOUSE_EVENT_UP: temp = "up"; break;
- case MOUSE_EVENT_MOVE: temp = "move"; break;
- case MOUSE_EVENT_DOUBLE_CLICK: temp = "double_click"; break;
- }
- message.setValue("event", temp);
-
- message.setValueS32("button", button);
-
- message.setValueS32("x", x);
-
- // Incoming coordinates are OpenGL-style ((0,0) = lower left), so flip them here if the plugin has requested it.
- if(!mRequestedTextureCoordsOpenGL)
- {
- // TODO: Should I use mMediaHeight or mRequestedMediaHeight here?
- y = mMediaHeight - y;
- }
- message.setValueS32("y", y);
-
- message.setValue("modifiers", translateModifiers(modifiers));
-
- sendMessage(message);
-}
-
-bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data)
-{
- bool result = true;
-
- // FIXME:
- // HACK: we don't have an easy way to tell if the plugin is going to handle a particular keycode.
- // For now, return false for the ones the webkit plugin won't handle properly.
-
- switch(key_code)
- {
- case KEY_BACKSPACE:
- case KEY_TAB:
- case KEY_RETURN:
- case KEY_PAD_RETURN:
- case KEY_SHIFT:
- case KEY_CONTROL:
- case KEY_ALT:
- case KEY_CAPSLOCK:
- case KEY_ESCAPE:
- case KEY_PAGE_UP:
- case KEY_PAGE_DOWN:
- case KEY_END:
- case KEY_HOME:
- case KEY_LEFT:
- case KEY_UP:
- case KEY_RIGHT:
- case KEY_DOWN:
- case KEY_INSERT:
- case KEY_DELETE:
- // These will be handled
- break;
-
- default:
- // regular ASCII characters will also be handled
- if(key_code >= KEY_SPECIAL)
- {
- // Other "special" codes will not work properly.
- result = false;
- }
- break;
- }
-
-#if LL_DARWIN
- if(modifiers & MASK_ALT)
- {
- // Option-key modified characters should be handled by the unicode input path instead of this one.
- result = false;
- }
-#endif
-
- if(result)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "key_event");
- std::string temp;
- switch(type)
- {
- case KEY_EVENT_DOWN: temp = "down"; break;
- case KEY_EVENT_UP: temp = "up"; break;
- case KEY_EVENT_REPEAT: temp = "repeat"; break;
- }
- message.setValue("event", temp);
-
- message.setValueS32("key", key_code);
-
- message.setValue("modifiers", translateModifiers(modifiers));
- message.setValueLLSD("native_key_data", native_key_data);
-
- sendMessage(message);
- }
-
- return result;
-}
-
-void LLPluginClassMedia::scrollEvent(int x, int y, MASK modifiers)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "scroll_event");
-
- message.setValueS32("x", x);
- message.setValueS32("y", y);
- message.setValue("modifiers", translateModifiers(modifiers));
-
- sendMessage(message);
-}
-
-bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD native_key_data)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "text_event");
-
- message.setValue("text", text);
- message.setValue("modifiers", translateModifiers(modifiers));
- message.setValueLLSD("native_key_data", native_key_data);
-
- sendMessage(message);
-
- return true;
-}
-
-void LLPluginClassMedia::loadURI(const std::string &uri)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "load_uri");
-
- message.setValue("uri", uri);
-
- sendMessage(message);
-}
-
-const char* LLPluginClassMedia::priorityToString(EPriority priority)
-{
- const char* result = "UNKNOWN";
- switch(priority)
- {
- case PRIORITY_UNLOADED: result = "unloaded"; break;
- case PRIORITY_STOPPED: result = "stopped"; break;
- case PRIORITY_HIDDEN: result = "hidden"; break;
- case PRIORITY_SLIDESHOW: result = "slideshow"; break;
- case PRIORITY_LOW: result = "low"; break;
- case PRIORITY_NORMAL: result = "normal"; break;
- case PRIORITY_HIGH: result = "high"; break;
- }
-
- return result;
-}
-
-void LLPluginClassMedia::setPriority(EPriority priority)
-{
- if(mPriority != priority)
- {
- mPriority = priority;
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_priority");
-
- std::string priority_string = priorityToString(priority);
- switch(priority)
- {
- case PRIORITY_UNLOADED:
- mSleepTime = 1.0f;
- break;
- case PRIORITY_STOPPED:
- mSleepTime = 1.0f;
- break;
- case PRIORITY_HIDDEN:
- mSleepTime = 1.0f;
- break;
- case PRIORITY_SLIDESHOW:
- mSleepTime = 1.0f;
- break;
- case PRIORITY_LOW:
- mSleepTime = 1.0f / 25.0f;
- break;
- case PRIORITY_NORMAL:
- mSleepTime = 1.0f / 50.0f;
- break;
- case PRIORITY_HIGH:
- mSleepTime = 1.0f / 100.0f;
- break;
- }
-
- message.setValue("priority", priority_string);
-
- sendMessage(message);
-
- if(mPlugin)
- {
- mPlugin->setSleepTime(mSleepTime);
- }
-
- LL_DEBUGS("PluginPriority") << this << ": setting priority to " << priority_string << LL_ENDL;
-
- // This may affect the calculated size, so recalculate it here.
- setSizeInternal();
- }
-}
-
-void LLPluginClassMedia::setLowPrioritySizeLimit(int size)
-{
- int power = nextPowerOf2(size);
- if(mLowPrioritySizeLimit != power)
- {
- mLowPrioritySizeLimit = power;
-
- // This may affect the calculated size, so recalculate it here.
- setSizeInternal();
- }
-}
-
-F64 LLPluginClassMedia::getCPUUsage()
-{
- F64 result = 0.0f;
-
- if(mPlugin)
- {
- result = mPlugin->getCPUUsage();
- }
-
- return result;
-}
-
-void LLPluginClassMedia::sendPickFileResponse(const std::string &file)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file_response");
- message.setValue("file", file);
- if(mPlugin && mPlugin->isBlocked())
- {
- // If the plugin sent a blocking pick-file request, the response should unblock it.
- message.setValueBoolean("blocking_response", true);
- }
- sendMessage(message);
-}
-
-void LLPluginClassMedia::sendAuthResponse(bool ok, const std::string &username, const std::string &password)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_response");
- message.setValueBoolean("ok", ok);
- message.setValue("username", username);
- message.setValue("password", password);
- if(mPlugin && mPlugin->isBlocked())
- {
- // If the plugin sent a blocking pick-file request, the response should unblock it.
- message.setValueBoolean("blocking_response", true);
- }
- sendMessage(message);
-}
-
-void LLPluginClassMedia::cut()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_cut");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::copy()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_copy");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::paste()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_paste");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path");
- message.setValue("path", user_data_path);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setLanguageCode(const std::string &language_code)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_language_code");
- message.setValue("language", language_code);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setPluginsEnabled(const bool enabled)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled");
- message.setValueBoolean("enable", enabled);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setJavascriptEnabled(const bool enabled)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled");
- message.setValueBoolean("enable", enabled);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setTarget(const std::string &target)
-{
- mTarget = target;
-}
-
-/* virtual */
-void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
-{
- std::string message_class = message.getClass();
-
- if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
- {
- std::string message_name = message.getName();
- if(message_name == "texture_params")
- {
- mRequestedTextureDepth = message.getValueS32("depth");
- mRequestedTextureInternalFormat = message.getValueU32("internalformat");
- mRequestedTextureFormat = message.getValueU32("format");
- mRequestedTextureType = message.getValueU32("type");
- mRequestedTextureSwapBytes = message.getValueBoolean("swap_bytes");
- mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl");
-
- // These two are optional, and will default to 0 if they're not specified.
- mDefaultMediaWidth = message.getValueS32("default_width");
- mDefaultMediaHeight = message.getValueS32("default_height");
-
- mAllowDownsample = message.getValueBoolean("allow_downsample");
- mPadding = message.getValueS32("padding");
-
- setSizeInternal();
-
- mTextureParamsReceived = true;
- }
- else if(message_name == "updated")
- {
- if(message.hasValue("left"))
- {
- LLRect newDirtyRect;
- newDirtyRect.mLeft = message.getValueS32("left");
- newDirtyRect.mTop = message.getValueS32("top");
- newDirtyRect.mRight = message.getValueS32("right");
- newDirtyRect.mBottom = message.getValueS32("bottom");
-
- // The plugin is likely to have top and bottom switched, due to vertical flip and OpenGL coordinate confusion.
- // If they're backwards, swap them.
- if(newDirtyRect.mTop < newDirtyRect.mBottom)
- {
- S32 temp = newDirtyRect.mTop;
- newDirtyRect.mTop = newDirtyRect.mBottom;
- newDirtyRect.mBottom = temp;
- }
-
- if(mDirtyRect.isEmpty())
- {
- mDirtyRect = newDirtyRect;
- }
- else
- {
- mDirtyRect.unionWith(newDirtyRect);
- }
-
- LL_DEBUGS("Plugin") << "adjusted incoming rect is: ("
- << newDirtyRect.mLeft << ", "
- << newDirtyRect.mTop << ", "
- << newDirtyRect.mRight << ", "
- << newDirtyRect.mBottom << "), new dirty rect is: ("
- << mDirtyRect.mLeft << ", "
- << mDirtyRect.mTop << ", "
- << mDirtyRect.mRight << ", "
- << mDirtyRect.mBottom << ")"
- << LL_ENDL;
-
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CONTENT_UPDATED);
- }
-
-
- bool time_duration_updated = false;
- int previous_percent = mProgressPercent;
-
- if(message.hasValue("current_time"))
- {
- mCurrentTime = message.getValueReal("current_time");
- time_duration_updated = true;
- }
- if(message.hasValue("duration"))
- {
- mDuration = message.getValueReal("duration");
- time_duration_updated = true;
- }
-
- if(message.hasValue("current_rate"))
- {
- mCurrentRate = message.getValueReal("current_rate");
- }
-
- if(message.hasValue("loaded_duration"))
- {
- mLoadedDuration = message.getValueReal("loaded_duration");
- time_duration_updated = true;
- }
- else
- {
- // If the message doesn't contain a loaded_duration param, assume it's equal to duration
- mLoadedDuration = mDuration;
- }
-
- // Calculate a percentage based on the loaded duration and total duration.
- if(mDuration != 0.0f) // Don't divide by zero.
- {
- mProgressPercent = (int)((mLoadedDuration * 100.0f)/mDuration);
- }
-
- if(time_duration_updated)
- {
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_TIME_DURATION_UPDATED);
- }
-
- if(previous_percent != mProgressPercent)
- {
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED);
- }
- }
- else if(message_name == "media_status")
- {
- std::string status = message.getValue("status");
-
- LL_DEBUGS("Plugin") << "Status changed to: " << status << LL_ENDL;
-
- if(status == "loading")
- {
- mStatus = LLPluginClassMediaOwner::MEDIA_LOADING;
- }
- else if(status == "loaded")
- {
- mStatus = LLPluginClassMediaOwner::MEDIA_LOADED;
- }
- else if(status == "error")
- {
- mStatus = LLPluginClassMediaOwner::MEDIA_ERROR;
- }
- else if(status == "playing")
- {
- mStatus = LLPluginClassMediaOwner::MEDIA_PLAYING;
- }
- else if(status == "paused")
- {
- mStatus = LLPluginClassMediaOwner::MEDIA_PAUSED;
- }
- else if(status == "done")
- {
- mStatus = LLPluginClassMediaOwner::MEDIA_DONE;
- }
- else
- {
- // empty string or any unknown string
- mStatus = LLPluginClassMediaOwner::MEDIA_NONE;
- }
- }
- else if(message_name == "size_change_request")
- {
- S32 width = message.getValueS32("width");
- S32 height = message.getValueS32("height");
- std::string name = message.getValue("name");
-
- // TODO: check that name matches?
- mNaturalMediaWidth = width;
- mNaturalMediaHeight = height;
-
- setSizeInternal();
- }
- else if(message_name == "size_change_response")
- {
- std::string name = message.getValue("name");
-
- // TODO: check that name matches?
-
- mTextureWidth = message.getValueS32("texture_width");
- mTextureHeight = message.getValueS32("texture_height");
- mMediaWidth = message.getValueS32("width");
- mMediaHeight = message.getValueS32("height");
-
- // This invalidates any existing dirty rect.
- resetDirty();
-
- // TODO: should we verify that the plugin sent back the right values?
- // Two size changes in a row may cause them to not match, due to queueing, etc.
-
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_SIZE_CHANGED);
- }
- else if(message_name == "cursor_changed")
- {
- mCursorName = message.getValue("name");
-
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CURSOR_CHANGED);
- }
- else if(message_name == "edit_state")
- {
- if(message.hasValue("cut"))
- {
- mCanCut = message.getValueBoolean("cut");
- }
- if(message.hasValue("copy"))
- {
- mCanCopy = message.getValueBoolean("copy");
- }
- if(message.hasValue("paste"))
- {
- mCanPaste = message.getValueBoolean("paste");
- }
- }
- else if(message_name == "name_text")
- {
- mMediaName = message.getValue("name");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED);
- }
- else if(message_name == "pick_file")
- {
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST);
- }
- else if(message_name == "auth_request")
- {
- mAuthURL = message.getValue("url");
- mAuthRealm = message.getValue("realm");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST);
- }
- else
- {
- LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
- }
- }
- else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)
- {
- std::string message_name = message.getName();
- if(message_name == "navigate_begin")
- {
- mNavigateURI = message.getValue("uri");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_BEGIN);
- }
- else if(message_name == "navigate_complete")
- {
- mNavigateURI = message.getValue("uri");
- mNavigateResultCode = message.getValueS32("result_code");
- mNavigateResultString = message.getValue("result_string");
- mHistoryBackAvailable = message.getValueBoolean("history_back_available");
- mHistoryForwardAvailable = message.getValueBoolean("history_forward_available");
-
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE);
- }
- else if(message_name == "progress")
- {
- mProgressPercent = message.getValueS32("percent");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED);
- }
- else if(message_name == "status_text")
- {
- mStatusText = message.getValue("status");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_STATUS_TEXT_CHANGED);
- }
- else if(message_name == "location_changed")
- {
- mLocation = message.getValue("uri");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LOCATION_CHANGED);
- }
- else if(message_name == "click_href")
- {
- mClickURL = message.getValue("uri");
- mClickTarget = message.getValue("target");
- mClickUUID = message.getValue("uuid");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF);
- }
- else if(message_name == "click_nofollow")
- {
- mClickURL = message.getValue("uri");
- mClickNavType = message.getValue("nav_type");
- mClickTarget.clear();
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
- }
- else if(message_name == "navigate_error_page")
- {
- mStatusCode = message.getValueS32("status_code");
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE);
- }
- else if(message_name == "cookie_set")
- {
- if(mOwner)
- {
- mOwner->handleCookieSet(this, message.getValue("cookie"));
- }
- }
- else if(message_name == "close_request")
- {
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST);
- }
- else if(message_name == "geometry_change")
- {
- mClickUUID = message.getValue("uuid");
- mGeometryX = message.getValueS32("x");
- mGeometryY = message.getValueS32("y");
- mGeometryWidth = message.getValueS32("width");
- mGeometryHeight = message.getValueS32("height");
-
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE);
- }
- else if(message_name == "link_hovered")
- {
- // text is not currently used -- the tooltip hover text is taken from the "title".
- mHoverLink = message.getValue("link");
- mHoverText = message.getValue("title");
- // message.getValue("text");
-
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LINK_HOVERED);
- }
- else
- {
- LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
- }
- }
- else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
- {
- std::string message_name = message.getName();
-
- // This class hasn't defined any incoming messages yet.
-// if(message_name == "message_name")
-// {
-// }
-// else
- {
- LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
- }
- }
-
-}
-
-/* virtual */
-void LLPluginClassMedia::pluginLaunchFailed()
-{
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH);
-}
-
-/* virtual */
-void LLPluginClassMedia::pluginDied()
-{
- mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED);
-}
-
-void LLPluginClassMedia::mediaEvent(LLPluginClassMediaOwner::EMediaEvent event)
-{
- if(mOwner)
- {
- mOwner->handleMediaEvent(this, event);
- }
-}
-
-void LLPluginClassMedia::sendMessage(const LLPluginMessage &message)
-{
- if(mPlugin && mPlugin->isRunning())
- {
- mPlugin->sendMessage(message);
- }
- else
- {
- // The plugin isn't set up yet -- queue this message to be sent after initialization.
- mSendQueue.push(message);
- }
-}
-
-////////////////////////////////////////////////////////////
-// MARK: media_browser class functions
-bool LLPluginClassMedia::pluginSupportsMediaBrowser(void)
-{
- std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER);
- return !version.empty();
-}
-
-void LLPluginClassMedia::focus(bool focused)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "focus");
-
- message.setValueBoolean("focused", focused);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::clear_cache()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cache");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::clear_cookies()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cookies");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::set_cookies(const std::string &cookies)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies");
- message.setValue("cookies", cookies);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::enable_cookies(bool enable)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "enable_cookies");
- message.setValueBoolean("enable", enable);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::proxy_setup(bool enable, const std::string &host, int port)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_setup");
-
- message.setValueBoolean("enable", enable);
- message.setValue("host", host);
- message.setValueS32("port", port);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::browse_stop()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_stop");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::browse_reload(bool ignore_cache)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_reload");
-
- message.setValueBoolean("ignore_cache", ignore_cache);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::browse_forward()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_forward");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::browse_back()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_back");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_user_agent");
-
- message.setValue("user_agent", user_agent);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_opened");
-
- message.setValue("target", target);
- message.setValue("uuid", uuid);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::proxyWindowClosed(const std::string &uuid)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_closed");
-
- message.setValue("uuid", uuid);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::ignore_ssl_cert_errors(bool ignore)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "ignore_ssl_cert_errors");
- message.setValueBoolean("ignore", ignore);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::addCertificateFilePath(const std::string& path)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "add_certificate_file_path");
- message.setValue("path", path);
- sendMessage(message);
-}
-
-void LLPluginClassMedia::crashPlugin()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "crash");
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::hangPlugin()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "hang");
-
- sendMessage(message);
-}
-
-
-////////////////////////////////////////////////////////////
-// MARK: media_time class functions
-bool LLPluginClassMedia::pluginSupportsMediaTime(void)
-{
- std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME);
- return !version.empty();
-}
-
-void LLPluginClassMedia::stop()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "stop");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::start(float rate)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "start");
-
- message.setValueReal("rate", rate);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::pause()
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "pause");
- sendMessage(message);
-}
-
-void LLPluginClassMedia::seek(float time)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "seek");
-
- message.setValueReal("time", time);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setLoop(bool loop)
-{
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_loop");
-
- message.setValueBoolean("loop", loop);
-
- sendMessage(message);
-}
-
-void LLPluginClassMedia::setVolume(float volume)
-{
- if(volume != mRequestedVolume)
- {
- mRequestedVolume = volume;
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_volume");
-
- message.setValueReal("volume", volume);
-
- sendMessage(message);
- }
-}
-
-float LLPluginClassMedia::getVolume()
-{
- return mRequestedVolume;
-}
-
-void LLPluginClassMedia::initializeUrlHistory(const LLSD& url_history)
-{
- // Send URL history to plugin
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "init_history");
- message.setValueLLSD("history", url_history);
- sendMessage(message);
-
- LL_DEBUGS("Plugin") << "Sending history" << LL_ENDL;
-}
-
+/**
+ * @file llpluginclassmedia.cpp
+ * @brief LLPluginClassMedia handles a plugin which knows about the "media" message class.
+ *
+ * @cond
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ * @endcond
+ */
+
+#include "linden_common.h"
+#include "indra_constants.h"
+
+#include "llpluginclassmedia.h"
+#include "llpluginmessageclasses.h"
+
+#include "llqtwebkit.h"
+
+static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256;
+
+static int nextPowerOf2( int value )
+{
+ int next_power_of_2 = 1;
+ while ( next_power_of_2 < value )
+ {
+ next_power_of_2 <<= 1;
+ }
+
+ return next_power_of_2;
+}
+
+LLPluginClassMedia::LLPluginClassMedia(LLPluginClassMediaOwner *owner)
+{
+ mOwner = owner;
+ mPlugin = NULL;
+ reset();
+
+ //debug use
+ mDeleteOK = true ;
+}
+
+
+LLPluginClassMedia::~LLPluginClassMedia()
+{
+ llassert_always(mDeleteOK) ;
+ reset();
+}
+
+bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug)
+{
+ LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL;
+ LL_DEBUGS("Plugin") << "dir: " << plugin_dir << LL_ENDL;
+ LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL;
+
+ mPlugin = new LLPluginProcessParent(this);
+ mPlugin->setSleepTime(mSleepTime);
+
+ // Queue up the media init message -- it will be sent after all the currently queued messages.
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
+ message.setValue("target", mTarget);
+ sendMessage(message);
+
+ mPlugin->init(launcher_filename, plugin_dir, plugin_filename, debug);
+
+ return true;
+}
+
+
+void LLPluginClassMedia::reset()
+{
+ if(mPlugin != NULL)
+ {
+ delete mPlugin;
+ mPlugin = NULL;
+ }
+
+ mTextureParamsReceived = false;
+ mRequestedTextureDepth = 0;
+ mRequestedTextureInternalFormat = 0;
+ mRequestedTextureFormat = 0;
+ mRequestedTextureType = 0;
+ mRequestedTextureSwapBytes = false;
+ mRequestedTextureCoordsOpenGL = false;
+ mTextureSharedMemorySize = 0;
+ mTextureSharedMemoryName.clear();
+ mDefaultMediaWidth = 0;
+ mDefaultMediaHeight = 0;
+ mNaturalMediaWidth = 0;
+ mNaturalMediaHeight = 0;
+ mSetMediaWidth = -1;
+ mSetMediaHeight = -1;
+ mRequestedMediaWidth = 0;
+ mRequestedMediaHeight = 0;
+ mRequestedTextureWidth = 0;
+ mRequestedTextureHeight = 0;
+ mFullMediaWidth = 0;
+ mFullMediaHeight = 0;
+ mTextureWidth = 0;
+ mTextureHeight = 0;
+ mMediaWidth = 0;
+ mMediaHeight = 0;
+ mDirtyRect = LLRect::null;
+ mAutoScaleMedia = false;
+ mRequestedVolume = 1.0f;
+ mPriority = PRIORITY_NORMAL;
+ mLowPrioritySizeLimit = LOW_PRIORITY_TEXTURE_SIZE_DEFAULT;
+ mAllowDownsample = false;
+ mPadding = 0;
+ mLastMouseX = 0;
+ mLastMouseY = 0;
+ mStatus = LLPluginClassMediaOwner::MEDIA_NONE;
+ mSleepTime = 1.0f / 100.0f;
+ mCanCut = false;
+ mCanCopy = false;
+ mCanPaste = false;
+ mMediaName.clear();
+ mMediaDescription.clear();
+ mBackgroundColor = LLColor4(1.0f, 1.0f, 1.0f, 1.0f);
+
+ // media_browser class
+ mNavigateURI.clear();
+ mNavigateResultCode = -1;
+ mNavigateResultString.clear();
+ mHistoryBackAvailable = false;
+ mHistoryForwardAvailable = false;
+ mStatusText.clear();
+ mProgressPercent = 0;
+ mClickURL.clear();
+ mClickNavType.clear();
+ mClickTarget.clear();
+ mClickUUID.clear();
+ mStatusCode = 0;
+
+ // media_time class
+ mCurrentTime = 0.0f;
+ mDuration = 0.0f;
+ mCurrentRate = 0.0f;
+ mLoadedDuration = 0.0f;
+}
+
+void LLPluginClassMedia::idle(void)
+{
+ if(mPlugin)
+ {
+ mPlugin->idle();
+ }
+
+ if((mMediaWidth == -1) || (!mTextureParamsReceived) || (mPlugin == NULL) || (mPlugin->isBlocked()) || (mOwner == NULL))
+ {
+ // Can't process a size change at this time
+ }
+ else if((mRequestedMediaWidth != mMediaWidth) || (mRequestedMediaHeight != mMediaHeight))
+ {
+ // Calculate the correct size for the media texture
+ mRequestedTextureHeight = mRequestedMediaHeight;
+ if(mPadding < 0)
+ {
+ // negative values indicate the plugin wants a power of 2
+ mRequestedTextureWidth = nextPowerOf2(mRequestedMediaWidth);
+ }
+ else
+ {
+ mRequestedTextureWidth = mRequestedMediaWidth;
+
+ if(mPadding > 1)
+ {
+ // Pad up to a multiple of the specified number of bytes per row
+ int rowbytes = mRequestedTextureWidth * mRequestedTextureDepth;
+ int pad = rowbytes % mPadding;
+ if(pad != 0)
+ {
+ rowbytes += mPadding - pad;
+ }
+
+ if(rowbytes % mRequestedTextureDepth == 0)
+ {
+ mRequestedTextureWidth = rowbytes / mRequestedTextureDepth;
+ }
+ else
+ {
+ LL_WARNS("Plugin") << "Unable to pad texture width, padding size " << mPadding << "is not a multiple of pixel size " << mRequestedTextureDepth << LL_ENDL;
+ }
+ }
+ }
+
+
+ // Size change has been requested but not initiated yet.
+ size_t newsize = mRequestedTextureWidth * mRequestedTextureHeight * mRequestedTextureDepth;
+
+ // Add an extra line for padding, just in case.
+ newsize += mRequestedTextureWidth * mRequestedTextureDepth;
+
+ if(newsize != mTextureSharedMemorySize)
+ {
+ if(!mTextureSharedMemoryName.empty())
+ {
+ // Tell the plugin to remove the old memory segment
+ mPlugin->removeSharedMemory(mTextureSharedMemoryName);
+ mTextureSharedMemoryName.clear();
+ }
+
+ mTextureSharedMemorySize = newsize;
+ mTextureSharedMemoryName = mPlugin->addSharedMemory(mTextureSharedMemorySize);
+ if(!mTextureSharedMemoryName.empty())
+ {
+ void *addr = mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName);
+
+ // clear texture memory to avoid random screen visual fuzz from uninitialized texture data
+ memset( addr, 0x00, newsize );
+
+ // We could do this to force an update, but textureValid() will still be returning false until the first roundtrip to the plugin,
+ // so it may not be worthwhile.
+ // mDirtyRect.setOriginAndSize(0, 0, mRequestedMediaWidth, mRequestedMediaHeight);
+ }
+ }
+
+ // This is our local indicator that a change is in progress.
+ mTextureWidth = -1;
+ mTextureHeight = -1;
+ mMediaWidth = -1;
+ mMediaHeight = -1;
+
+ // This invalidates any existing dirty rect.
+ resetDirty();
+
+ // Send a size change message to the plugin
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change");
+ message.setValue("name", mTextureSharedMemoryName);
+ message.setValueS32("width", mRequestedMediaWidth);
+ message.setValueS32("height", mRequestedMediaHeight);
+ message.setValueS32("texture_width", mRequestedTextureWidth);
+ message.setValueS32("texture_height", mRequestedTextureHeight);
+ message.setValueReal("background_r", mBackgroundColor.mV[VX]);
+ message.setValueReal("background_g", mBackgroundColor.mV[VY]);
+ message.setValueReal("background_b", mBackgroundColor.mV[VZ]);
+ message.setValueReal("background_a", mBackgroundColor.mV[VW]);
+ mPlugin->sendMessage(message); // DO NOT just use sendMessage() here -- we want this to jump ahead of the queue.
+
+ LL_DEBUGS("Plugin") << "Sending size_change" << LL_ENDL;
+ }
+ }
+
+ if(mPlugin && mPlugin->isRunning())
+ {
+ // Send queued messages
+ while(!mSendQueue.empty())
+ {
+ LLPluginMessage message = mSendQueue.front();
+ mSendQueue.pop();
+ mPlugin->sendMessage(message);
+ }
+ }
+}
+
+int LLPluginClassMedia::getTextureWidth() const
+{
+ return nextPowerOf2(mTextureWidth);
+}
+
+int LLPluginClassMedia::getTextureHeight() const
+{
+ return nextPowerOf2(mTextureHeight);
+}
+
+unsigned char* LLPluginClassMedia::getBitsData()
+{
+ unsigned char *result = NULL;
+ if((mPlugin != NULL) && !mTextureSharedMemoryName.empty())
+ {
+ result = (unsigned char*)mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName);
+ }
+ return result;
+}
+
+void LLPluginClassMedia::setSize(int width, int height)
+{
+ if((width > 0) && (height > 0))
+ {
+ mSetMediaWidth = width;
+ mSetMediaHeight = height;
+ }
+ else
+ {
+ mSetMediaWidth = -1;
+ mSetMediaHeight = -1;
+ }
+
+ setSizeInternal();
+}
+
+void LLPluginClassMedia::setSizeInternal(void)
+{
+ if((mSetMediaWidth > 0) && (mSetMediaHeight > 0))
+ {
+ mRequestedMediaWidth = mSetMediaWidth;
+ mRequestedMediaHeight = mSetMediaHeight;
+ }
+ else if((mNaturalMediaWidth > 0) && (mNaturalMediaHeight > 0))
+ {
+ mRequestedMediaWidth = mNaturalMediaWidth;
+ mRequestedMediaHeight = mNaturalMediaHeight;
+ }
+ else
+ {
+ mRequestedMediaWidth = mDefaultMediaWidth;
+ mRequestedMediaHeight = mDefaultMediaHeight;
+ }
+
+ // Save these for size/interest calculations
+ mFullMediaWidth = mRequestedMediaWidth;
+ mFullMediaHeight = mRequestedMediaHeight;
+
+ if(mAllowDownsample)
+ {
+ switch(mPriority)
+ {
+ case PRIORITY_SLIDESHOW:
+ case PRIORITY_LOW:
+ // Reduce maximum texture dimension to (or below) mLowPrioritySizeLimit
+ while((mRequestedMediaWidth > mLowPrioritySizeLimit) || (mRequestedMediaHeight > mLowPrioritySizeLimit))
+ {
+ mRequestedMediaWidth /= 2;
+ mRequestedMediaHeight /= 2;
+ }
+ break;
+
+ default:
+ // Don't adjust texture size
+ break;
+ }
+ }
+
+ if(mAutoScaleMedia)
+ {
+ mRequestedMediaWidth = nextPowerOf2(mRequestedMediaWidth);
+ mRequestedMediaHeight = nextPowerOf2(mRequestedMediaHeight);
+ }
+
+ if(mRequestedMediaWidth > 2048)
+ mRequestedMediaWidth = 2048;
+
+ if(mRequestedMediaHeight > 2048)
+ mRequestedMediaHeight = 2048;
+}
+
+void LLPluginClassMedia::setAutoScale(bool auto_scale)
+{
+ if(auto_scale != mAutoScaleMedia)
+ {
+ mAutoScaleMedia = auto_scale;
+ setSizeInternal();
+ }
+}
+
+bool LLPluginClassMedia::textureValid(void)
+{
+ if(
+ !mTextureParamsReceived ||
+ mTextureWidth <= 0 ||
+ mTextureHeight <= 0 ||
+ mMediaWidth <= 0 ||
+ mMediaHeight <= 0 ||
+ mRequestedMediaWidth != mMediaWidth ||
+ mRequestedMediaHeight != mMediaHeight ||
+ getBitsData() == NULL
+ )
+ return false;
+
+ return true;
+}
+
+bool LLPluginClassMedia::getDirty(LLRect *dirty_rect)
+{
+ bool result = !mDirtyRect.isEmpty();
+
+ if(dirty_rect != NULL)
+ {
+ *dirty_rect = mDirtyRect;
+ }
+
+ return result;
+}
+
+void LLPluginClassMedia::resetDirty(void)
+{
+ mDirtyRect = LLRect::null;
+}
+
+std::string LLPluginClassMedia::translateModifiers(MASK modifiers)
+{
+ std::string result;
+
+
+ if(modifiers & MASK_CONTROL)
+ {
+ result += "control|";
+ }
+
+ if(modifiers & MASK_ALT)
+ {
+ result += "alt|";
+ }
+
+ if(modifiers & MASK_SHIFT)
+ {
+ result += "shift|";
+ }
+
+ // TODO: should I deal with platform differences here or in callers?
+ // TODO: how do we deal with the Mac "command" key?
+/*
+ if(modifiers & MASK_SOMETHING)
+ {
+ result += "meta|";
+ }
+*/
+ return result;
+}
+
+void LLPluginClassMedia::jsEnableObject( bool enable )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_enable_object");
+ message.setValueBoolean( "enable", enable );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::jsAgentLocationEvent( double x, double y, double z )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_location");
+ message.setValueReal( "x", x );
+ message.setValueReal( "y", y );
+ message.setValueReal( "z", z );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::jsAgentGlobalLocationEvent( double x, double y, double z )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_global_location");
+ message.setValueReal( "x", x );
+ message.setValueReal( "y", y );
+ message.setValueReal( "z", z );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::jsAgentOrientationEvent( double angle )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_orientation");
+ message.setValueReal( "angle", angle );
+
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::jsAgentLanguageEvent( const std::string& language )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_language");
+ message.setValue( "language", language );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::jsAgentRegionEvent( const std::string& region )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_region");
+ message.setValue( "region", region );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::jsAgentMaturityEvent( const std::string& maturity )
+{
+ if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() )
+ {
+ return;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_maturity");
+ message.setValue( "maturity", maturity );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int y, MASK modifiers)
+{
+ if(type == MOUSE_EVENT_MOVE)
+ {
+ if(!mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked())
+ {
+ // Don't queue up mouse move events that can't be delivered.
+ return;
+ }
+
+ if((x == mLastMouseX) && (y == mLastMouseY))
+ {
+ // Don't spam unnecessary mouse move events.
+ return;
+ }
+
+ mLastMouseX = x;
+ mLastMouseY = y;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "mouse_event");
+ std::string temp;
+ switch(type)
+ {
+ case MOUSE_EVENT_DOWN: temp = "down"; break;
+ case MOUSE_EVENT_UP: temp = "up"; break;
+ case MOUSE_EVENT_MOVE: temp = "move"; break;
+ case MOUSE_EVENT_DOUBLE_CLICK: temp = "double_click"; break;
+ }
+ message.setValue("event", temp);
+
+ message.setValueS32("button", button);
+
+ message.setValueS32("x", x);
+
+ // Incoming coordinates are OpenGL-style ((0,0) = lower left), so flip them here if the plugin has requested it.
+ if(!mRequestedTextureCoordsOpenGL)
+ {
+ // TODO: Should I use mMediaHeight or mRequestedMediaHeight here?
+ y = mMediaHeight - y;
+ }
+ message.setValueS32("y", y);
+
+ message.setValue("modifiers", translateModifiers(modifiers));
+
+ sendMessage(message);
+}
+
+bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data)
+{
+ bool result = true;
+
+ // FIXME:
+ // HACK: we don't have an easy way to tell if the plugin is going to handle a particular keycode.
+ // For now, return false for the ones the webkit plugin won't handle properly.
+
+ switch(key_code)
+ {
+ case KEY_BACKSPACE:
+ case KEY_TAB:
+ case KEY_RETURN:
+ case KEY_PAD_RETURN:
+ case KEY_SHIFT:
+ case KEY_CONTROL:
+ case KEY_ALT:
+ case KEY_CAPSLOCK:
+ case KEY_ESCAPE:
+ case KEY_PAGE_UP:
+ case KEY_PAGE_DOWN:
+ case KEY_END:
+ case KEY_HOME:
+ case KEY_LEFT:
+ case KEY_UP:
+ case KEY_RIGHT:
+ case KEY_DOWN:
+ case KEY_INSERT:
+ case KEY_DELETE:
+ // These will be handled
+ break;
+
+ default:
+ // regular ASCII characters will also be handled
+ if(key_code >= KEY_SPECIAL)
+ {
+ // Other "special" codes will not work properly.
+ result = false;
+ }
+ break;
+ }
+
+#if LL_DARWIN
+ if(modifiers & MASK_ALT)
+ {
+ // Option-key modified characters should be handled by the unicode input path instead of this one.
+ result = false;
+ }
+#endif
+
+ if(result)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "key_event");
+ std::string temp;
+ switch(type)
+ {
+ case KEY_EVENT_DOWN: temp = "down"; break;
+ case KEY_EVENT_UP: temp = "up"; break;
+ case KEY_EVENT_REPEAT: temp = "repeat"; break;
+ }
+ message.setValue("event", temp);
+
+ message.setValueS32("key", key_code);
+
+ message.setValue("modifiers", translateModifiers(modifiers));
+ message.setValueLLSD("native_key_data", native_key_data);
+
+ sendMessage(message);
+ }
+
+ return result;
+}
+
+void LLPluginClassMedia::scrollEvent(int x, int y, MASK modifiers)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "scroll_event");
+
+ message.setValueS32("x", x);
+ message.setValueS32("y", y);
+ message.setValue("modifiers", translateModifiers(modifiers));
+
+ sendMessage(message);
+}
+
+bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD native_key_data)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "text_event");
+
+ message.setValue("text", text);
+ message.setValue("modifiers", translateModifiers(modifiers));
+ message.setValueLLSD("native_key_data", native_key_data);
+
+ sendMessage(message);
+
+ return true;
+}
+
+void LLPluginClassMedia::loadURI(const std::string &uri)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "load_uri");
+
+ message.setValue("uri", uri);
+
+ sendMessage(message);
+}
+
+const char* LLPluginClassMedia::priorityToString(EPriority priority)
+{
+ const char* result = "UNKNOWN";
+ switch(priority)
+ {
+ case PRIORITY_UNLOADED: result = "unloaded"; break;
+ case PRIORITY_STOPPED: result = "stopped"; break;
+ case PRIORITY_HIDDEN: result = "hidden"; break;
+ case PRIORITY_SLIDESHOW: result = "slideshow"; break;
+ case PRIORITY_LOW: result = "low"; break;
+ case PRIORITY_NORMAL: result = "normal"; break;
+ case PRIORITY_HIGH: result = "high"; break;
+ }
+
+ return result;
+}
+
+void LLPluginClassMedia::setPriority(EPriority priority)
+{
+ if(mPriority != priority)
+ {
+ mPriority = priority;
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_priority");
+
+ std::string priority_string = priorityToString(priority);
+ switch(priority)
+ {
+ case PRIORITY_UNLOADED:
+ mSleepTime = 1.0f;
+ break;
+ case PRIORITY_STOPPED:
+ mSleepTime = 1.0f;
+ break;
+ case PRIORITY_HIDDEN:
+ mSleepTime = 1.0f;
+ break;
+ case PRIORITY_SLIDESHOW:
+ mSleepTime = 1.0f;
+ break;
+ case PRIORITY_LOW:
+ mSleepTime = 1.0f / 25.0f;
+ break;
+ case PRIORITY_NORMAL:
+ mSleepTime = 1.0f / 50.0f;
+ break;
+ case PRIORITY_HIGH:
+ mSleepTime = 1.0f / 100.0f;
+ break;
+ }
+
+ message.setValue("priority", priority_string);
+
+ sendMessage(message);
+
+ if(mPlugin)
+ {
+ mPlugin->setSleepTime(mSleepTime);
+ }
+
+ LL_DEBUGS("PluginPriority") << this << ": setting priority to " << priority_string << LL_ENDL;
+
+ // This may affect the calculated size, so recalculate it here.
+ setSizeInternal();
+ }
+}
+
+void LLPluginClassMedia::setLowPrioritySizeLimit(int size)
+{
+ int power = nextPowerOf2(size);
+ if(mLowPrioritySizeLimit != power)
+ {
+ mLowPrioritySizeLimit = power;
+
+ // This may affect the calculated size, so recalculate it here.
+ setSizeInternal();
+ }
+}
+
+F64 LLPluginClassMedia::getCPUUsage()
+{
+ F64 result = 0.0f;
+
+ if(mPlugin)
+ {
+ result = mPlugin->getCPUUsage();
+ }
+
+ return result;
+}
+
+void LLPluginClassMedia::sendPickFileResponse(const std::string &file)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file_response");
+ message.setValue("file", file);
+ if(mPlugin && mPlugin->isBlocked())
+ {
+ // If the plugin sent a blocking pick-file request, the response should unblock it.
+ message.setValueBoolean("blocking_response", true);
+ }
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::sendAuthResponse(bool ok, const std::string &username, const std::string &password)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_response");
+ message.setValueBoolean("ok", ok);
+ message.setValue("username", username);
+ message.setValue("password", password);
+ if(mPlugin && mPlugin->isBlocked())
+ {
+ // If the plugin sent a blocking pick-file request, the response should unblock it.
+ message.setValueBoolean("blocking_response", true);
+ }
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::cut()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_cut");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::copy()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_copy");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::paste()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_paste");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path");
+ message.setValue("path", user_data_path);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setLanguageCode(const std::string &language_code)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_language_code");
+ message.setValue("language", language_code);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setPluginsEnabled(const bool enabled)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled");
+ message.setValueBoolean("enable", enabled);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setJavascriptEnabled(const bool enabled)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled");
+ message.setValueBoolean("enable", enabled);
+ sendMessage(message);
+}
+
+
+void LLPluginClassMedia::enableMediaPluginDebugging( bool enable )
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "enable_media_plugin_debugging");
+ message.setValueBoolean( "enable", enable );
+ sendMessage( message );
+}
+
+void LLPluginClassMedia::setTarget(const std::string &target)
+{
+ mTarget = target;
+}
+
+/* virtual */
+void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
+{
+ std::string message_class = message.getClass();
+
+ if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
+ {
+ std::string message_name = message.getName();
+ if(message_name == "texture_params")
+ {
+ mRequestedTextureDepth = message.getValueS32("depth");
+ mRequestedTextureInternalFormat = message.getValueU32("internalformat");
+ mRequestedTextureFormat = message.getValueU32("format");
+ mRequestedTextureType = message.getValueU32("type");
+ mRequestedTextureSwapBytes = message.getValueBoolean("swap_bytes");
+ mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl");
+
+ // These two are optional, and will default to 0 if they're not specified.
+ mDefaultMediaWidth = message.getValueS32("default_width");
+ mDefaultMediaHeight = message.getValueS32("default_height");
+
+ mAllowDownsample = message.getValueBoolean("allow_downsample");
+ mPadding = message.getValueS32("padding");
+
+ setSizeInternal();
+
+ mTextureParamsReceived = true;
+ }
+ else if(message_name == "updated")
+ {
+ if(message.hasValue("left"))
+ {
+ LLRect newDirtyRect;
+ newDirtyRect.mLeft = message.getValueS32("left");
+ newDirtyRect.mTop = message.getValueS32("top");
+ newDirtyRect.mRight = message.getValueS32("right");
+ newDirtyRect.mBottom = message.getValueS32("bottom");
+
+ // The plugin is likely to have top and bottom switched, due to vertical flip and OpenGL coordinate confusion.
+ // If they're backwards, swap them.
+ if(newDirtyRect.mTop < newDirtyRect.mBottom)
+ {
+ S32 temp = newDirtyRect.mTop;
+ newDirtyRect.mTop = newDirtyRect.mBottom;
+ newDirtyRect.mBottom = temp;
+ }
+
+ if(mDirtyRect.isEmpty())
+ {
+ mDirtyRect = newDirtyRect;
+ }
+ else
+ {
+ mDirtyRect.unionWith(newDirtyRect);
+ }
+
+ LL_DEBUGS("Plugin") << "adjusted incoming rect is: ("
+ << newDirtyRect.mLeft << ", "
+ << newDirtyRect.mTop << ", "
+ << newDirtyRect.mRight << ", "
+ << newDirtyRect.mBottom << "), new dirty rect is: ("
+ << mDirtyRect.mLeft << ", "
+ << mDirtyRect.mTop << ", "
+ << mDirtyRect.mRight << ", "
+ << mDirtyRect.mBottom << ")"
+ << LL_ENDL;
+
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CONTENT_UPDATED);
+ }
+
+
+ bool time_duration_updated = false;
+ int previous_percent = mProgressPercent;
+
+ if(message.hasValue("current_time"))
+ {
+ mCurrentTime = message.getValueReal("current_time");
+ time_duration_updated = true;
+ }
+ if(message.hasValue("duration"))
+ {
+ mDuration = message.getValueReal("duration");
+ time_duration_updated = true;
+ }
+
+ if(message.hasValue("current_rate"))
+ {
+ mCurrentRate = message.getValueReal("current_rate");
+ }
+
+ if(message.hasValue("loaded_duration"))
+ {
+ mLoadedDuration = message.getValueReal("loaded_duration");
+ time_duration_updated = true;
+ }
+ else
+ {
+ // If the message doesn't contain a loaded_duration param, assume it's equal to duration
+ mLoadedDuration = mDuration;
+ }
+
+ // Calculate a percentage based on the loaded duration and total duration.
+ if(mDuration != 0.0f) // Don't divide by zero.
+ {
+ mProgressPercent = (int)((mLoadedDuration * 100.0f)/mDuration);
+ }
+
+ if(time_duration_updated)
+ {
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_TIME_DURATION_UPDATED);
+ }
+
+ if(previous_percent != mProgressPercent)
+ {
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED);
+ }
+ }
+ else if(message_name == "media_status")
+ {
+ std::string status = message.getValue("status");
+
+ LL_DEBUGS("Plugin") << "Status changed to: " << status << LL_ENDL;
+
+ if(status == "loading")
+ {
+ mStatus = LLPluginClassMediaOwner::MEDIA_LOADING;
+ }
+ else if(status == "loaded")
+ {
+ mStatus = LLPluginClassMediaOwner::MEDIA_LOADED;
+ }
+ else if(status == "error")
+ {
+ mStatus = LLPluginClassMediaOwner::MEDIA_ERROR;
+ }
+ else if(status == "playing")
+ {
+ mStatus = LLPluginClassMediaOwner::MEDIA_PLAYING;
+ }
+ else if(status == "paused")
+ {
+ mStatus = LLPluginClassMediaOwner::MEDIA_PAUSED;
+ }
+ else if(status == "done")
+ {
+ mStatus = LLPluginClassMediaOwner::MEDIA_DONE;
+ }
+ else
+ {
+ // empty string or any unknown string
+ mStatus = LLPluginClassMediaOwner::MEDIA_NONE;
+ }
+ }
+ else if(message_name == "size_change_request")
+ {
+ S32 width = message.getValueS32("width");
+ S32 height = message.getValueS32("height");
+ std::string name = message.getValue("name");
+
+ // TODO: check that name matches?
+ mNaturalMediaWidth = width;
+ mNaturalMediaHeight = height;
+
+ setSizeInternal();
+ }
+ else if(message_name == "size_change_response")
+ {
+ std::string name = message.getValue("name");
+
+ // TODO: check that name matches?
+
+ mTextureWidth = message.getValueS32("texture_width");
+ mTextureHeight = message.getValueS32("texture_height");
+ mMediaWidth = message.getValueS32("width");
+ mMediaHeight = message.getValueS32("height");
+
+ // This invalidates any existing dirty rect.
+ resetDirty();
+
+ // TODO: should we verify that the plugin sent back the right values?
+ // Two size changes in a row may cause them to not match, due to queueing, etc.
+
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_SIZE_CHANGED);
+ }
+ else if(message_name == "cursor_changed")
+ {
+ mCursorName = message.getValue("name");
+
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CURSOR_CHANGED);
+ }
+ else if(message_name == "edit_state")
+ {
+ if(message.hasValue("cut"))
+ {
+ mCanCut = message.getValueBoolean("cut");
+ }
+ if(message.hasValue("copy"))
+ {
+ mCanCopy = message.getValueBoolean("copy");
+ }
+ if(message.hasValue("paste"))
+ {
+ mCanPaste = message.getValueBoolean("paste");
+ }
+ }
+ else if(message_name == "name_text")
+ {
+ mMediaName = message.getValue("name");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED);
+ }
+ else if(message_name == "pick_file")
+ {
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST);
+ }
+ else if(message_name == "auth_request")
+ {
+ mAuthURL = message.getValue("url");
+ mAuthRealm = message.getValue("realm");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST);
+ }
+ else if(message_name == "debug_message")
+ {
+ mDebugMessageText = message.getValue("message_text");
+ mDebugMessageLevel = message.getValue("message_level");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_DEBUG_MESSAGE);
+ }
+ else
+ {
+ LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
+ }
+ }
+ else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)
+ {
+ std::string message_name = message.getName();
+ if(message_name == "navigate_begin")
+ {
+ mNavigateURI = message.getValue("uri");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_BEGIN);
+ }
+ else if(message_name == "navigate_complete")
+ {
+ mNavigateURI = message.getValue("uri");
+ mNavigateResultCode = message.getValueS32("result_code");
+ mNavigateResultString = message.getValue("result_string");
+ mHistoryBackAvailable = message.getValueBoolean("history_back_available");
+ mHistoryForwardAvailable = message.getValueBoolean("history_forward_available");
+
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE);
+ }
+ else if(message_name == "progress")
+ {
+ mProgressPercent = message.getValueS32("percent");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED);
+ }
+ else if(message_name == "status_text")
+ {
+ mStatusText = message.getValue("status");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_STATUS_TEXT_CHANGED);
+ }
+ else if(message_name == "location_changed")
+ {
+ mLocation = message.getValue("uri");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LOCATION_CHANGED);
+ }
+ else if(message_name == "click_href")
+ {
+ mClickURL = message.getValue("uri");
+ mClickTarget = message.getValue("target");
+ mClickUUID = message.getValue("uuid");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF);
+ }
+ else if(message_name == "click_nofollow")
+ {
+ mClickURL = message.getValue("uri");
+ mClickNavType = message.getValue("nav_type");
+ mClickTarget.clear();
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
+ }
+ else if(message_name == "navigate_error_page")
+ {
+ mStatusCode = message.getValueS32("status_code");
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE);
+ }
+ else if(message_name == "cookie_set")
+ {
+ if(mOwner)
+ {
+ mOwner->handleCookieSet(this, message.getValue("cookie"));
+ }
+ }
+ else if(message_name == "close_request")
+ {
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST);
+ }
+ else if(message_name == "geometry_change")
+ {
+ mClickUUID = message.getValue("uuid");
+ mGeometryX = message.getValueS32("x");
+ mGeometryY = message.getValueS32("y");
+ mGeometryWidth = message.getValueS32("width");
+ mGeometryHeight = message.getValueS32("height");
+
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE);
+ }
+ else if(message_name == "link_hovered")
+ {
+ // text is not currently used -- the tooltip hover text is taken from the "title".
+ mHoverLink = message.getValue("link");
+ mHoverText = message.getValue("title");
+ // message.getValue("text");
+
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LINK_HOVERED);
+ }
+ else
+ {
+ LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
+ }
+ }
+ else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
+ {
+ std::string message_name = message.getName();
+
+ // This class hasn't defined any incoming messages yet.
+// if(message_name == "message_name")
+// {
+// }
+// else
+ {
+ LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL;
+ }
+ }
+
+}
+
+/* virtual */
+void LLPluginClassMedia::pluginLaunchFailed()
+{
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH);
+}
+
+/* virtual */
+void LLPluginClassMedia::pluginDied()
+{
+ mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED);
+}
+
+void LLPluginClassMedia::mediaEvent(LLPluginClassMediaOwner::EMediaEvent event)
+{
+ if(mOwner)
+ {
+ mOwner->handleMediaEvent(this, event);
+ }
+}
+
+void LLPluginClassMedia::sendMessage(const LLPluginMessage &message)
+{
+ if(mPlugin && mPlugin->isRunning())
+ {
+ mPlugin->sendMessage(message);
+ }
+ else
+ {
+ // The plugin isn't set up yet -- queue this message to be sent after initialization.
+ mSendQueue.push(message);
+ }
+}
+
+////////////////////////////////////////////////////////////
+// MARK: media_browser class functions
+bool LLPluginClassMedia::pluginSupportsMediaBrowser(void)
+{
+ std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER);
+ return !version.empty();
+}
+
+void LLPluginClassMedia::focus(bool focused)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "focus");
+
+ message.setValueBoolean("focused", focused);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::clear_cache()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cache");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::clear_cookies()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cookies");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::set_cookies(const std::string &cookies)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies");
+ message.setValue("cookies", cookies);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::enable_cookies(bool enable)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "enable_cookies");
+ message.setValueBoolean("enable", enable);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::proxy_setup(bool enable, const std::string &host, int port)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_setup");
+
+ message.setValueBoolean("enable", enable);
+ message.setValue("host", host);
+ message.setValueS32("port", port);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::browse_stop()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_stop");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::browse_reload(bool ignore_cache)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_reload");
+
+ message.setValueBoolean("ignore_cache", ignore_cache);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::browse_forward()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_forward");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::browse_back()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_back");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_user_agent");
+
+ message.setValue("user_agent", user_agent);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::showWebInspector( bool show )
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "show_web_inspector");
+ message.setValueBoolean("show", true); // only open for now - closed manually by user
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_opened");
+
+ message.setValue("target", target);
+ message.setValue("uuid", uuid);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::proxyWindowClosed(const std::string &uuid)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_closed");
+
+ message.setValue("uuid", uuid);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::ignore_ssl_cert_errors(bool ignore)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "ignore_ssl_cert_errors");
+ message.setValueBoolean("ignore", ignore);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::addCertificateFilePath(const std::string& path)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "add_certificate_file_path");
+ message.setValue("path", path);
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::crashPlugin()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "crash");
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::hangPlugin()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "hang");
+
+ sendMessage(message);
+}
+
+
+////////////////////////////////////////////////////////////
+// MARK: media_time class functions
+bool LLPluginClassMedia::pluginSupportsMediaTime(void)
+{
+ std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME);
+ return !version.empty();
+}
+
+void LLPluginClassMedia::stop()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "stop");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::start(float rate)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "start");
+
+ message.setValueReal("rate", rate);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::pause()
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "pause");
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::seek(float time)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "seek");
+
+ message.setValueReal("time", time);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setLoop(bool loop)
+{
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_loop");
+
+ message.setValueBoolean("loop", loop);
+
+ sendMessage(message);
+}
+
+void LLPluginClassMedia::setVolume(float volume)
+{
+ if(volume != mRequestedVolume)
+ {
+ mRequestedVolume = volume;
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_volume");
+
+ message.setValueReal("volume", volume);
+
+ sendMessage(message);
+ }
+}
+
+float LLPluginClassMedia::getVolume()
+{
+ return mRequestedVolume;
+}
+
+void LLPluginClassMedia::initializeUrlHistory(const LLSD& url_history)
+{
+ // Send URL history to plugin
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "init_history");
+ message.setValueLLSD("history", url_history);
+ sendMessage(message);
+
+ LL_DEBUGS("Plugin") << "Sending history" << LL_ENDL;
+}
+
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index fea836aa68..1f548f8cc0 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -41,16 +41,16 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
LOG_CLASS(LLPluginClassMedia);
public:
LLPluginClassMedia(LLPluginClassMediaOwner *owner);
- virtual ~LLPluginClassMedia();
+ ~LLPluginClassMedia();
// local initialization, called by the media manager when creating a source
- virtual bool init(const std::string &launcher_filename,
+ bool init(const std::string &launcher_filename,
const std::string &plugin_dir,
const std::string &plugin_filename,
bool debug);
// undoes everything init() didm called by the media manager when destroying a source
- virtual void reset();
+ void reset();
void idle(void);
@@ -118,9 +118,11 @@ public:
void scrollEvent(int x, int y, MASK modifiers);
+ // enable/disable media plugin debugging messages and info spam
+ void enableMediaPluginDebugging( bool enable );
+
// Javascript <-> viewer events
- void jsExposeObjectEvent( bool expose );
- void jsValuesValidEvent( bool valid );
+ void jsEnableObject( bool enable );
void jsAgentLocationEvent( double x, double y, double z );
void jsAgentGlobalLocationEvent( double x, double y, double z );
void jsAgentOrientationEvent( double angle );
@@ -210,6 +212,7 @@ public:
void browse_forward();
void browse_back();
void setBrowserUserAgent(const std::string& user_agent);
+ void showWebInspector( bool show );
void proxyWindowOpened(const std::string &target, const std::string &uuid);
void proxyWindowClosed(const std::string &uuid);
void ignore_ssl_cert_errors(bool ignore);
@@ -245,6 +248,10 @@ public:
// This is valid during MEDIA_EVENT_CLICK_LINK_HREF and MEDIA_EVENT_GEOMETRY_CHANGE
std::string getClickUUID() const { return mClickUUID; };
+ // These are valid during MEDIA_EVENT_DEBUG_MESSAGE
+ std::string getDebugMessageText() const { return mDebugMessageText; };
+ std::string getDebugMessageLevel() const { return mDebugMessageLevel; };
+
// This is valid after MEDIA_EVENT_NAVIGATE_ERROR_PAGE
S32 getStatusCode() const { return mStatusCode; };
@@ -396,6 +403,8 @@ protected:
std::string mClickNavType;
std::string mClickTarget;
std::string mClickUUID;
+ std::string mDebugMessageText;
+ std::string mDebugMessageLevel;
S32 mGeometryX;
S32 mGeometryY;
S32 mGeometryWidth;
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 5a4fb1ce90..2f3edba7f3 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -64,6 +64,8 @@ public:
MEDIA_EVENT_AUTH_REQUEST, // The plugin wants to display an auth dialog
+ MEDIA_EVENT_DEBUG_MESSAGE, // plugin sending back debug information for host to process
+
MEDIA_EVENT_LINK_HOVERED // Got a "link hovered" event from the plugin
} EMediaEvent;
diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp
index 7cde82a20e..e8efb233ff 100644
--- a/indra/llplugin/llplugininstance.cpp
+++ b/indra/llplugin/llplugininstance.cpp
@@ -29,8 +29,7 @@
#include "linden_common.h"
#include "llplugininstance.h"
-
-#include "llapr.h"
+#include "llthread.h" // Needed for LLThread::tldata().mRootPool
#if LL_WINDOWS
#include "direct.h" // needed for _chdir()
@@ -52,6 +51,7 @@ const char *LLPluginInstance::PLUGIN_INIT_FUNCTION_NAME = "LLPluginInitEntryPoin
* @param[in] owner Plugin instance. TODO:DOC is this a good description of what "owner" is?
*/
LLPluginInstance::LLPluginInstance(LLPluginInstanceMessageListener *owner) :
+ mDSOHandlePool(LLThread::tldata().mRootPool),
mDSOHandle(NULL),
mPluginUserData(NULL),
mPluginSendMessageFunction(NULL)
@@ -97,7 +97,7 @@ int LLPluginInstance::load(const std::string& plugin_dir, std::string &plugin_fi
int result = apr_dso_load(&mDSOHandle,
plugin_file.c_str(),
- gAPRPoolp);
+ mDSOHandlePool());
if(result != APR_SUCCESS)
{
char buf[1024];
diff --git a/indra/llplugin/llplugininstance.h b/indra/llplugin/llplugininstance.h
index e6926c3e37..ee28f68e83 100644
--- a/indra/llplugin/llplugininstance.h
+++ b/indra/llplugin/llplugininstance.h
@@ -30,6 +30,7 @@
#include "llstring.h"
#include "llapr.h"
+#include "llaprpool.h"
#include "apr_dso.h"
@@ -39,7 +40,7 @@
class LLPluginInstanceMessageListener
{
public:
- virtual ~LLPluginInstanceMessageListener();
+ ~LLPluginInstanceMessageListener();
/** Plugin receives message from plugin loader shell. */
virtual void receivePluginMessage(const std::string &message) = 0;
};
@@ -88,6 +89,7 @@ private:
static void staticReceiveMessage(const char *message_string, void **user_data);
void receiveMessage(const char *message_string);
+ LLAPRPool mDSOHandlePool;
apr_dso_handle_t *mDSOHandle;
void *mPluginUserData;
diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp
index 8d13e38ad5..dd47300b9c 100644
--- a/indra/llplugin/llpluginmessagepipe.cpp
+++ b/indra/llplugin/llpluginmessagepipe.cpp
@@ -92,8 +92,6 @@ void LLPluginMessagePipeOwner::killMessagePipe(void)
}
LLPluginMessagePipe::LLPluginMessagePipe(LLPluginMessagePipeOwner *owner, LLSocket::ptr_t socket):
- mInputMutex(gAPRPoolp),
- mOutputMutex(gAPRPoolp),
mOwner(owner),
mSocket(socket)
{
diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h
index 627577beb1..beb942c0fe 100644
--- a/indra/llplugin/llpluginmessagepipe.h
+++ b/indra/llplugin/llpluginmessagepipe.h
@@ -40,7 +40,8 @@ class LLPluginMessagePipeOwner
LOG_CLASS(LLPluginMessagePipeOwner);
public:
LLPluginMessagePipeOwner();
- virtual ~LLPluginMessagePipeOwner();
+ ~LLPluginMessagePipeOwner();
+
// called with incoming messages
virtual void receiveMessageRaw(const std::string &message) = 0;
// called when the socket has an error
diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
index 0beb46d0e5..fd63fdde81 100644
--- a/indra/llplugin/llpluginprocesschild.cpp
+++ b/indra/llplugin/llpluginprocesschild.cpp
@@ -40,7 +40,7 @@ LLPluginProcessChild::LLPluginProcessChild()
{
mState = STATE_UNINITIALIZED;
mInstance = NULL;
- mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
+ mSocket = LLSocket::create(LLSocket::STREAM_TCP);
mSleepTime = PLUGIN_IDLE_SECONDS; // default: send idle messages at 100Hz
mCPUElapsed = 0.0f;
mBlockingRequest = false;
@@ -410,7 +410,7 @@ void LLPluginProcessChild::receiveMessageRaw(const std::string &message)
}
else if(message_name == "sleep_time")
{
- mSleepTime = parsed.getValueReal("time");
+ mSleepTime = llmax(parsed.getValueReal("time"), 1.0 / 100.0); // clamp to maximum of 100Hz
}
else if(message_name == "crash")
{
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index 315096d4fd..7aec72731e 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -33,6 +33,7 @@
#include "llpluginmessageclasses.h"
#include "llapr.h"
+#include "llscopedvolatileaprpool.h"
//virtual
LLPluginProcessParentOwner::~LLPluginProcessParentOwner()
@@ -42,6 +43,7 @@ LLPluginProcessParentOwner::~LLPluginProcessParentOwner()
bool LLPluginProcessParent::sUseReadThread = false;
apr_pollset_t *LLPluginProcessParent::sPollSet = NULL;
+LLAPRPool LLPluginProcessParent::sPollSetPool;
bool LLPluginProcessParent::sPollsetNeedsRebuild = false;
LLMutex *LLPluginProcessParent::sInstancesMutex;
std::list<LLPluginProcessParent*> LLPluginProcessParent::sInstances;
@@ -52,7 +54,7 @@ class LLPluginProcessParentPollThread: public LLThread
{
public:
LLPluginProcessParentPollThread() :
- LLThread("LLPluginProcessParentPollThread", gAPRPoolp)
+ LLThread("LLPluginProcessParentPollThread")
{
}
protected:
@@ -77,12 +79,11 @@ protected:
};
-LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner):
- mIncomingQueueMutex(gAPRPoolp)
+LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner* owner)
{
if(!sInstancesMutex)
{
- sInstancesMutex = new LLMutex(gAPRPoolp);
+ sInstancesMutex = new LLMutex;
}
mOwner = owner;
@@ -95,6 +96,7 @@ LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner):
mBlocked = false;
mPolledInput = false;
mPollFD.client_data = NULL;
+ mPollFDPool.create();
mPluginLaunchTimeout = 60.0f;
mPluginLockupTimeout = 15.0f;
@@ -171,44 +173,28 @@ void LLPluginProcessParent::init(const std::string &launcher_filename, const std
bool LLPluginProcessParent::accept()
{
bool result = false;
-
apr_status_t status = APR_EGENERAL;
- apr_socket_t *new_socket = NULL;
-
- status = apr_socket_accept(
- &new_socket,
- mListenSocket->getSocket(),
- gAPRPoolp);
+ mSocket = LLSocket::create(status, mListenSocket);
if(status == APR_SUCCESS)
{
// llinfos << "SUCCESS" << llendl;
// Success. Create a message pipe on the new socket
-
- // we MUST create a new pool for the LLSocket, since it will take ownership of it and delete it in its destructor!
- apr_pool_t* new_pool = NULL;
- status = apr_pool_create(&new_pool, gAPRPoolp);
-
- mSocket = LLSocket::create(new_socket, new_pool);
new LLPluginMessagePipe(this, mSocket);
result = true;
}
- else if(APR_STATUS_IS_EAGAIN(status))
- {
-// llinfos << "EAGAIN" << llendl;
-
- // No incoming connections. This is not an error.
- status = APR_SUCCESS;
- }
else
{
-// llinfos << "Error:" << llendl;
- ll_apr_warn_status(status);
-
- // Some other error.
- errorState();
+ mSocket.reset();
+ // EAGAIN means "No incoming connections". This is not an error.
+ if (!APR_STATUS_IS_EAGAIN(status))
+ {
+ // Some other error.
+ ll_apr_warn_status(status);
+ errorState();
+ }
}
return result;
@@ -274,10 +260,10 @@ void LLPluginProcessParent::idle(void)
case STATE_INITIALIZED:
{
-
apr_status_t status = APR_SUCCESS;
+ LLScopedVolatileAPRPool addr_pool;
apr_sockaddr_t* addr = NULL;
- mListenSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
+ mListenSocket = LLSocket::create(LLSocket::STREAM_TCP);
mBoundPort = 0;
// This code is based on parts of LLSocket::create() in lliosocket.cpp.
@@ -288,7 +274,7 @@ void LLPluginProcessParent::idle(void)
APR_INET,
0, // port 0 = ephemeral ("find me a port")
0,
- gAPRPoolp);
+ addr_pool);
if(ll_apr_warn_status(status))
{
@@ -601,7 +587,7 @@ void LLPluginProcessParent::setMessagePipe(LLPluginMessagePipe *message_pipe)
if(message_pipe != NULL)
{
// Set up the apr_pollfd_t
- mPollFD.p = gAPRPoolp;
+ mPollFD.p = mPollFDPool();
mPollFD.desc_type = APR_POLL_SOCKET;
mPollFD.reqevents = APR_POLLIN|APR_POLLERR|APR_POLLHUP;
mPollFD.rtnevents = 0;
@@ -648,6 +634,7 @@ void LLPluginProcessParent::updatePollset()
// delete the existing pollset.
apr_pollset_destroy(sPollSet);
sPollSet = NULL;
+ sPollSetPool.destroy();
}
std::list<LLPluginProcessParent*>::iterator iter;
@@ -670,12 +657,14 @@ void LLPluginProcessParent::updatePollset()
{
#ifdef APR_POLLSET_NOCOPY
// The pollset doesn't exist yet. Create it now.
- apr_status_t status = apr_pollset_create(&sPollSet, count, gAPRPoolp, APR_POLLSET_NOCOPY);
+ sPollSetPool.create();
+ apr_status_t status = apr_pollset_create(&sPollSet, count, sPollSetPool(), APR_POLLSET_NOCOPY);
if(status != APR_SUCCESS)
{
#endif // APR_POLLSET_NOCOPY
LL_WARNS("PluginPoll") << "Couldn't create pollset. Falling back to non-pollset mode." << LL_ENDL;
sPollSet = NULL;
+ sPollSetPool.destroy();
#ifdef APR_POLLSET_NOCOPY
}
else
@@ -927,6 +916,7 @@ void LLPluginProcessParent::receiveMessage(const LLPluginMessage &message)
}
// Send initial sleep time
+ llassert_always(mSleepTime != 0.f);
setSleepTime(mSleepTime, true);
setState(STATE_RUNNING);
diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h
index c66723f175..74b7e9f50c 100644
--- a/indra/llplugin/llpluginprocessparent.h
+++ b/indra/llplugin/llpluginprocessparent.h
@@ -41,7 +41,7 @@
class LLPluginProcessParentOwner
{
public:
- virtual ~LLPluginProcessParentOwner();
+ ~LLPluginProcessParentOwner();
virtual void receivePluginMessage(const LLPluginMessage &message) = 0;
virtual bool receivePluginMessageEarly(const LLPluginMessage &message) {return false;};
// This will only be called when the plugin has died unexpectedly
@@ -178,7 +178,9 @@ private:
static bool sUseReadThread;
apr_pollfd_t mPollFD;
+ LLAPRPool mPollFDPool;
static apr_pollset_t *sPollSet;
+ static LLAPRPool sPollSetPool;
static bool sPollsetNeedsRebuild;
static LLMutex *sInstancesMutex;
static std::list<LLPluginProcessParent*> sInstances;
diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp
index 63ff5085c6..e2ff645a9c 100644
--- a/indra/llplugin/llpluginsharedmemory.cpp
+++ b/indra/llplugin/llpluginsharedmemory.cpp
@@ -187,7 +187,8 @@ bool LLPluginSharedMemory::create(size_t size)
mName += createName();
mSize = size;
- apr_status_t status = apr_shm_create( &(mImpl->mAprSharedMemory), mSize, mName.c_str(), gAPRPoolp );
+ mPool.create();
+ apr_status_t status = apr_shm_create( &(mImpl->mAprSharedMemory), mSize, mName.c_str(), mPool());
if(ll_apr_warn_status(status))
{
@@ -210,7 +211,7 @@ bool LLPluginSharedMemory::destroy(void)
}
mImpl->mAprSharedMemory = NULL;
}
-
+ mPool.destroy();
return true;
}
@@ -219,7 +220,8 @@ bool LLPluginSharedMemory::attach(const std::string &name, size_t size)
mName = name;
mSize = size;
- apr_status_t status = apr_shm_attach( &(mImpl->mAprSharedMemory), mName.c_str(), gAPRPoolp );
+ mPool.create();
+ apr_status_t status = apr_shm_attach( &(mImpl->mAprSharedMemory), mName.c_str(), mPool() );
if(ll_apr_warn_status(status))
{
@@ -241,6 +243,7 @@ bool LLPluginSharedMemory::detach(void)
}
mImpl->mAprSharedMemory = NULL;
}
+ mPool.destroy();
return true;
}
diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h
index c6cd49cabb..84b7a58c32 100644
--- a/indra/llplugin/llpluginsharedmemory.h
+++ b/indra/llplugin/llpluginsharedmemory.h
@@ -28,6 +28,8 @@
#ifndef LL_LLPLUGINSHAREDMEMORY_H
#define LL_LLPLUGINSHAREDMEMORY_H
+#include "llaprpool.h"
+
class LLPluginSharedMemoryPlatformImpl;
/**
@@ -108,6 +110,7 @@ private:
bool close(void);
bool unlink(void);
+ LLAPRPool mPool;
std::string mName;
size_t mSize;
void *mMappedAddress;
diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp
index 516a58db88..ff86e4e135 100644
--- a/indra/llplugin/slplugin/slplugin.cpp
+++ b/indra/llplugin/slplugin/slplugin.cpp
@@ -176,8 +176,6 @@ int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL
int main(int argc, char **argv)
#endif
{
- ll_init_apr();
-
// Set up llerror logging
{
LLError::initForApplication(".");
@@ -393,8 +391,6 @@ int main(int argc, char **argv)
delete plugin;
- ll_cleanup_apr();
-
return 0;
}
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
index 97e1ebde47..7d0e313ff3 100644
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -59,9 +59,9 @@ add_library (llprimitive ${llprimitive_SOURCE_FILES})
#add unit tests
if (LL_TESTS)
- INCLUDE(LLAddBuildTest)
- SET(llprimitive_TEST_SOURCE_FILES
- llmediaentry.cpp
- )
- LL_ADD_PROJECT_UNIT_TESTS(llprimitive "${llprimitive_TEST_SOURCE_FILES}")
+ INCLUDE(LLAddBuildTest)
+ SET(llprimitive_TEST_SOURCE_FILES
+ llmediaentry.cpp
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llprimitive "${llprimitive_TEST_SOURCE_FILES}")
endif (LL_TESTS)
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index 0463d5364b..434fb7650b 100644
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -27,6 +27,7 @@
#include "linden_common.h"
#include "llmodel.h"
+#include "llmemory.h"
#include "llconvexdecomposition.h"
#include "llsdserialize.h"
#include "llvector4a.h"
@@ -71,88 +72,10 @@ LLModel::~LLModel()
}
}
-void load_face_from_dom_inputs(LLVolumeFace& face, const domInputLocalOffset_Array& inputs, U32 min_idx, U32 max_idx)
-{
- for (U32 j = 0; j < inputs.getCount(); ++j)
- {
- if (strcmp(COMMON_PROFILE_INPUT_VERTEX, inputs[j]->getSemantic()) == 0)
- { //found vertex array
- const domURIFragmentType& uri = inputs[j]->getSource();
- daeElementRef elem = uri.getElement();
- domVertices* vertices = (domVertices*) elem.cast();
-
- domInputLocal_Array& v_inp = vertices->getInput_array();
- if (inputs[j]->getOffset() != 0)
- {
- llerrs << "Vertex array offset MUST be zero." << llendl;
- }
-
- for (U32 k = 0; k < v_inp.getCount(); ++k)
- {
- if (strcmp(COMMON_PROFILE_INPUT_POSITION, v_inp[k]->getSemantic()) == 0)
- {
- const domURIFragmentType& uri = v_inp[k]->getSource();
-
- daeElementRef elem = uri.getElement();
- domSource* src = (domSource*) elem.cast();
-
- if (src->getTechnique_common()->getAccessor()->getStride() != 3)
- {
- llerrs << "Vertex array stride MUST be three." << llendl;
- }
-
- domListOfFloats& v = src->getFloat_array()->getValue();
-
- LLVector4a min;
- min.set(v[min_idx], v[min_idx+1], v[min_idx+2]);
- LLVector4a max = min;
-
- for (U32 j = min_idx; j <= max_idx; ++j)
- { //copy vertex array
- face.mPositions[j-min_idx].set(v[j*3+0], v[j*3+1], v[j*3+2]);
- update_min_max(min, max, face.mPositions[j-min_idx]);
- }
-
- face.mExtents[0] = min;
- face.mExtents[1] = max;
- }
- }
- }
-
- if (strcmp(COMMON_PROFILE_INPUT_NORMAL, inputs[j]->getSemantic()) == 0)
- {
- //found normal array for this triangle list
- const domURIFragmentType& uri = inputs[j]->getSource();
- daeElementRef elem = uri.getElement();
- domSource* src = (domSource*) elem.cast();
- domListOfFloats& n = src->getFloat_array()->getValue();
-
- for (U32 j = min_idx; j <= max_idx; ++j)
- {
- LLVector4a* norm = (LLVector4a*) face.mNormals + (j-min_idx);
- norm->set(n[j*3+0], n[j*3+1], n[j*3+2]);
- norm->normalize3();
- }
- }
- else if (strcmp(COMMON_PROFILE_INPUT_TEXCOORD, inputs[j]->getSemantic()) == 0)
- { //found texCoords
- const domURIFragmentType& uri = inputs[j]->getSource();
- daeElementRef elem = uri.getElement();
- domSource* src = (domSource*) elem.cast();
- domListOfFloats& u = src->getFloat_array()->getValue();
-
- for (U32 j = min_idx; j <= max_idx; ++j)
- {
- face.mTexCoords[j-min_idx].setVec(u[j*2+0], u[j*2+1]);
- }
- }
- }
-}
bool get_dom_sources(const domInputLocalOffset_Array& inputs, S32& pos_offset, S32& tc_offset, S32& norm_offset, S32 &idx_stride,
domSource* &pos_source, domSource* &tc_source, domSource* &norm_source)
{
-
idx_stride = 0;
for (U32 j = 0; j < inputs.getCount(); ++j)
@@ -271,14 +194,13 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
cv.mTexCoord.setVec(tc[idx[i+tc_offset]*2+0],
tc[idx[i+tc_offset]*2+1]);
}
-
+
if (norm_source)
{
cv.setNormal(LLVector4a(n[idx[i+norm_offset]*3+0],
n[idx[i+norm_offset]*3+1],
n[idx[i+norm_offset]*3+2]));
}
-
BOOL found = FALSE;
@@ -329,10 +251,22 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
{
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
face = LLVolumeFace();
point_map.clear();
}
-
}
if (!verts.empty())
@@ -348,6 +282,18 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
}
return LLModel::NO_ERRORS ;
@@ -433,14 +379,14 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
cv.mTexCoord.setVec(tc[idx[cur_idx+tc_offset]*2+0],
tc[idx[cur_idx+tc_offset]*2+1]);
}
-
+
if (norm_source)
{
cv.getNormal().set(n[idx[cur_idx+norm_offset]*3+0],
n[idx[cur_idx+norm_offset]*3+1],
n[idx[cur_idx+norm_offset]*3+2]);
}
-
+
cur_idx += idx_stride;
BOOL found = FALSE;
@@ -524,6 +470,19 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
{
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
face = LLVolumeFace();
verts.clear();
indices.clear();
@@ -540,10 +499,23 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac
{
material = std::string(poly->getMaterial());
}
-
+
materials.push_back(material);
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(verts, indices);
+
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!norm_source)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!tc_source)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
}
return LLModel::NO_ERRORS ;
@@ -557,7 +529,6 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac
const domInputLocalOffset_Array& inputs = poly->getInput_array();
-
S32 v_offset = -1;
S32 n_offset = -1;
S32 t_offset = -1;
@@ -662,15 +633,14 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac
n->get(n_idx+1),
n->get(n_idx+2));
}
-
+
if (t)
{
U32 t_idx = idx[j*stride+t_offset]*2;
vert.mTexCoord.setVec(t->get(t_idx),
t->get(t_idx+1));
}
-
-
+
verts.push_back(vert);
}
}
@@ -733,6 +703,19 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac
materials.push_back(material);
face_list.push_back(face);
face_list.rbegin()->fillFromLegacyData(new_verts, indices);
+
+ LLVolumeFace& new_face = *face_list.rbegin();
+ if (!n)
+ {
+ ll_aligned_free_16(new_face.mNormals);
+ new_face.mNormals = NULL;
+ }
+
+ if (!t)
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
}
return LLModel::NO_ERRORS ;
@@ -817,9 +800,9 @@ BOOL LLModel::createVolumeFacesFromDomMesh(domMesh* mesh)
if (getNumVolumeFaces() > 0)
{
- optimizeVolumeFaces();
normalizeVolumeFaces();
-
+ optimizeVolumeFaces();
+
if (getNumVolumeFaces() > 0)
{
return TRUE;
@@ -853,81 +836,10 @@ void LLModel::offsetMesh( const LLVector3& pivotPoint )
void LLModel::optimizeVolumeFaces()
{
-#if 0 //VECTORIZE ?
- for (std::vector<LLVolumeFace>::iterator iter = mVolumeFaces.begin(); iter != mVolumeFaces.end(); )
- {
- std::vector<LLVolumeFace>::iterator cur_iter = iter++;
- LLVolumeFace& face = *cur_iter;
-
- for (S32 i = 0; i < (S32) face.mNumIndices; i += 3)
- { //remove zero area triangles
- U16 i0 = face.mIndices[i+0];
- U16 i1 = face.mIndices[i+1];
- U16 i2 = face.mIndices[i+2];
-
- if (i0 == i1 ||
- i1 == i2 ||
- i0 == i2)
- { //duplicate index in triangle, remove triangle
- face.mIndices.erase(face.mIndices.begin()+i, face.mIndices.begin()+i+3);
- i -= 3;
- }
- else
- {
- LLVolumeFace::VertexData& v0 = face.mVertices[i0];
- LLVolumeFace::VertexData& v1 = face.mVertices[i1];
- LLVolumeFace::VertexData& v2 = face.mVertices[i2];
-
- if (v0.mPosition == v1.mPosition ||
- v1.mPosition == v2.mPosition ||
- v2.mPosition == v0.mPosition)
- { //zero area triangle, delete
- face.mIndices.erase(face.mIndices.begin()+i, face.mIndices.begin()+i+3);
- i-=3;
- }
- }
- }
-
- //remove unreference vertices
- std::vector<bool> ref;
- ref.resize(face.mNumVertices);
-
- for (U32 i = 0; i < ref.size(); ++i)
- {
- ref[i] = false;
- }
-
- for (U32 i = 0; i < face.mNumIndices; ++i)
- {
- ref[face.mIndices[i]] = true;
- }
-
- U32 unref_count = 0;
- for (U32 i = 0; i < ref.size(); ++i)
- {
- if (!ref[i])
- {
- //vertex is unreferenced
- face.mVertices.erase(face.mVertices.begin()+(i-unref_count));
- U16 idx = (U16) (i-unref_count);
-
- for (U32 j = 0; j < face.mNumIndices; ++j)
- { //decrement every index array value greater than idx
- if (face.mIndices[j] > idx)
- {
- --face.mIndices[j];
- }
- }
- ++unref_count;
- }
- }
-
- if (face.mVertices.empty() || face.mIndices.empty())
- { //face is empty, remove it
- iter = mVolumeFaces.erase(cur_iter);
- }
+ for (U32 i = 0; i < getNumVolumeFaces(); ++i)
+ {
+ mVolumeFaces[i].optimize();
}
-#endif
}
// Shrink the model to fit
@@ -962,6 +874,25 @@ void LLModel::normalizeVolumeFaces()
update_min_max(min, max, face.mExtents[0]);
update_min_max(min, max, face.mExtents[1]);
+
+ if (face.mTexCoords)
+ {
+ LLVector2& min_tc = face.mTexCoordExtents[0];
+ LLVector2& max_tc = face.mTexCoordExtents[1];
+
+ min_tc = face.mTexCoords[0];
+ max_tc = face.mTexCoords[0];
+
+ for (U32 j = 1; j < face.mNumVertices; ++j)
+ {
+ update_min_max(min_tc, max_tc, face.mTexCoords[j]);
+ }
+ }
+ else
+ {
+ face.mTexCoordExtents[0].set(0,0);
+ face.mTexCoordExtents[1].set(1,1);
+ }
}
// Now that we have the extents of the model
@@ -1029,8 +960,11 @@ void LLModel::normalizeVolumeFaces()
{
pos[j].add(trans);
pos[j].mul(scale);
- norm[j].mul(inv_scale);
- norm[j].normalize3();
+ if (norm && !norm[j].equals3(LLVector4a::getZero()))
+ {
+ norm[j].mul(inv_scale);
+ norm[j].normalize3();
+ }
}
}
@@ -1073,8 +1007,26 @@ void LLModel::setVolumeFaceData(
face.resizeIndices(num_indices);
LLVector4a::memcpyNonAliased16((F32*) face.mPositions, (F32*) pos.get(), num_verts*4*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) face.mNormals, (F32*) norm.get(), num_verts*4*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), num_verts*2*sizeof(F32));
+ if (norm.get())
+ {
+ LLVector4a::memcpyNonAliased16((F32*) face.mNormals, (F32*) norm.get(), num_verts*4*sizeof(F32));
+ }
+ else
+ {
+ ll_aligned_free_16(face.mNormals);
+ face.mNormals = NULL;
+ }
+
+ if (tc.get())
+ {
+ LLVector4a::memcpyNonAliased16((F32*) face.mTexCoords, (F32*) tc.get(), num_verts*2*sizeof(F32));
+ }
+ else
+ {
+ ll_aligned_free_16(face.mTexCoords);
+ face.mTexCoords = NULL;
+ }
+
U32 size = (num_indices*2+0xF)&~0xF;
LLVector4a::memcpyNonAliased16((F32*) face.mIndices, (F32*) ind.get(), size);
}
@@ -1257,10 +1209,23 @@ void LLModel::generateNormals(F32 angle_cutoff)
LLVolumeFace::VertexData v;
new_face.mPositions[i] = vol_face.mPositions[idx];
new_face.mNormals[i].clear();
- new_face.mTexCoords[i] = vol_face.mTexCoords[idx];
new_face.mIndices[i] = i;
}
+ if (vol_face.mTexCoords)
+ {
+ for (U32 i = 0; i < vol_face.mNumIndices; i++)
+ {
+ U32 idx = vol_face.mIndices[i];
+ new_face.mTexCoords[i] = vol_face.mTexCoords[idx];
+ }
+ }
+ else
+ {
+ ll_aligned_free_16(new_face.mTexCoords);
+ new_face.mTexCoords = NULL;
+ }
+
//generate normals for new face
for (U32 i = 0; i < new_face.mNumIndices; i += 3)
{ //for each triangle
@@ -1395,7 +1360,8 @@ LLSD LLModel::writeModel(
const LLModel::Decomposition& decomp,
BOOL upload_skin,
BOOL upload_joints,
- BOOL nowrite)
+ BOOL nowrite,
+ BOOL as_slm)
{
LLSD mdl;
@@ -1419,12 +1385,20 @@ LLSD LLModel::writeModel(
!decomp.mHull.empty())
{
mdl["physics_convex"] = decomp.asLLSD();
- if (!decomp.mHull.empty())
- { //convex decomposition exists, physics mesh will not be used
+ if (!decomp.mHull.empty() && !as_slm)
+ { //convex decomposition exists, physics mesh will not be used (unless this is an slm file)
model[LLModel::LOD_PHYSICS] = NULL;
}
}
+ if (as_slm)
+ { //save material list names
+ for (U32 i = 0; i < high->mMaterialList.size(); ++i)
+ {
+ mdl["material_list"][i] = high->mMaterialList[i];
+ }
+ }
+
for (U32 idx = 0; idx < MODEL_NAMES_LENGTH; ++idx)
{
if (model[idx] && model[idx]->getNumVolumeFaces() > 0)
@@ -1462,13 +1436,19 @@ LLSD LLModel::writeModel(
U32 tc_idx = 0;
LLVector2* ftc = (LLVector2*) face.mTexCoords;
- LLVector2 min_tc = ftc[0];
- LLVector2 max_tc = min_tc;
-
- //get texture coordinate domain
- for (U32 j = 0; j < face.mNumVertices; ++j)
+ LLVector2 min_tc;
+ LLVector2 max_tc;
+
+ if (ftc)
{
- update_min_max(min_tc, max_tc, ftc[j]);
+ min_tc = ftc[0];
+ max_tc = min_tc;
+
+ //get texture coordinate domain
+ for (U32 j = 0; j < face.mNumVertices; ++j)
+ {
+ update_min_max(min_tc, max_tc, ftc[j]);
+ }
}
LLVector2 tc_range = max_tc - min_tc;
@@ -1477,9 +1457,8 @@ LLSD LLModel::writeModel(
{ //for each vert
F32* pos = face.mPositions[j].getF32ptr();
- F32* norm = face.mNormals[j].getF32ptr();
-
- //position + normal
+
+ //position
for (U32 k = 0; k < 3; ++k)
{ //for each component
//convert to 16-bit normalized across domain
@@ -1489,29 +1468,40 @@ LLSD LLModel::writeModel(
//write to binary buffer
verts[vert_idx++] = buff[0];
verts[vert_idx++] = buff[1];
-
- //convert to 16-bit normalized
- val = (U16) ((norm[k]+1.f)*0.5f*65535);
-
- //write to binary buffer
- normals[norm_idx++] = buff[0];
- normals[norm_idx++] = buff[1];
}
- F32* src_tc = (F32*) face.mTexCoords[j].mV;
+ if (face.mNormals)
+ { //normals
+ F32* norm = face.mNormals[j].getF32ptr();
- //texcoord
- for (U32 k = 0; k < 2; ++k)
- { //for each component
- //convert to 16-bit normalized
- U16 val = (U16) ((src_tc[k]-min_tc.mV[k])/tc_range.mV[k]*65535);
+ for (U32 k = 0; k < 3; ++k)
+ { //for each component
+ //convert to 16-bit normalized
+ U16 val = (U16) ((norm[k]+1.f)*0.5f*65535);
+ U8* buff = (U8*) &val;
- U8* buff = (U8*) &val;
- //write to binary buffer
- tc[tc_idx++] = buff[0];
- tc[tc_idx++] = buff[1];
+ //write to binary buffer
+ normals[norm_idx++] = buff[0];
+ normals[norm_idx++] = buff[1];
+ }
}
+ F32* src_tc = (F32*) face.mTexCoords[j].mV;
+
+ //texcoord
+ if (face.mTexCoords)
+ {
+ for (U32 k = 0; k < 2; ++k)
+ { //for each component
+ //convert to 16-bit normalized
+ U16 val = (U16) ((src_tc[k]-min_tc.mV[k])/tc_range.mV[k]*65535);
+
+ U8* buff = (U8*) &val;
+ //write to binary buffer
+ tc[tc_idx++] = buff[0];
+ tc[tc_idx++] = buff[1];
+ }
+ }
}
U32 idx_idx = 0;
@@ -1525,12 +1515,20 @@ LLSD LLModel::writeModel(
//write out face data
mdl[model_names[idx]][i]["PositionDomain"]["Min"] = min_pos.getValue();
mdl[model_names[idx]][i]["PositionDomain"]["Max"] = max_pos.getValue();
- mdl[model_names[idx]][i]["TexCoord0Domain"]["Min"] = min_tc.getValue();
- mdl[model_names[idx]][i]["TexCoord0Domain"]["Max"] = max_tc.getValue();
-
mdl[model_names[idx]][i]["Position"] = verts;
- mdl[model_names[idx]][i]["Normal"] = normals;
- mdl[model_names[idx]][i]["TexCoord0"] = tc;
+
+ if (face.mNormals)
+ {
+ mdl[model_names[idx]][i]["Normal"] = normals;
+ }
+
+ if (face.mTexCoords)
+ {
+ mdl[model_names[idx]][i]["TexCoord0Domain"]["Min"] = min_tc.getValue();
+ mdl[model_names[idx]][i]["TexCoord0Domain"]["Max"] = max_tc.getValue();
+ mdl[model_names[idx]][i]["TexCoord0"] = tc;
+ }
+
mdl[model_names[idx]][i]["TriangleList"] = indices;
if (skinning)
@@ -1588,10 +1586,10 @@ LLSD LLModel::writeModel(
}
}
- return writeModelToStream(ostr, mdl, nowrite);
+ return writeModelToStream(ostr, mdl, nowrite, as_slm);
}
-LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite)
+LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BOOL as_slm)
{
U32 bytes = 0;
@@ -1599,6 +1597,11 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite)
LLSD header;
+ if (as_slm && mdl.has("material_list"))
+ { //save material binding names to header
+ header["material_list"] = mdl["material_list"];
+ }
+
std::string skin;
if (mdl.has("skin"))
@@ -1792,6 +1795,15 @@ bool LLModel::loadModel(std::istream& is)
}
}
+ if (header.has("material_list"))
+ { //load material list names
+ mMaterialList.clear();
+ for (U32 i = 0; i < header["material_list"].size(); ++i)
+ {
+ mMaterialList.push_back(header["material_list"][i].asString());
+ }
+ }
+
std::string nm[] =
{
"lowest_lod",
@@ -1808,6 +1820,7 @@ bool LLModel::loadModel(std::istream& is)
if (header[nm[lod]]["offset"].asInteger() == -1 ||
header[nm[lod]]["size"].asInteger() == 0 )
{ //cannot load requested LOD
+ llwarns << "LoD data is invalid!" << llendl;
return false;
}
@@ -1821,7 +1834,7 @@ bool LLModel::loadModel(std::istream& is)
is.seekg(cur_pos);
}
- if (lod == LLModel::LOD_PHYSICS)
+ if (lod == LLModel::LOD_HIGH || lod == LLModel::LOD_PHYSICS)
{
std::ios::pos_type cur_pos = is.tellg();
loadDecomposition(header, is);
@@ -1868,11 +1881,66 @@ bool LLModel::loadModel(std::istream& is)
}
return true;
}
+ else
+ {
+ llwarns << "unpackVolumeFaces failed!" << llendl;
+ }
return false;
}
+void LLModel::matchMaterialOrder(LLModel* ref)
+{
+ llassert(ref->mMaterialList.size() == mMaterialList.size());
+
+ std::map<std::string, U32> index_map;
+
+ //build a map of material slot names to face indexes
+ bool reorder = false;
+ std::set<std::string> base_mat;
+ std::set<std::string> cur_mat;
+
+ for (U32 i = 0; i < mMaterialList.size(); i++)
+ {
+ index_map[ref->mMaterialList[i]] = i;
+ if (!reorder)
+ { //if any material name does not match reference, we need to reorder
+ reorder = ref->mMaterialList[i] != mMaterialList[i];
+ }
+ base_mat.insert(ref->mMaterialList[i]);
+ cur_mat.insert(mMaterialList[i]);
+ }
+
+
+ if (reorder &&
+ base_mat == cur_mat) //don't reorder if material name sets don't match
+ {
+ std::vector<LLVolumeFace> new_face_list;
+ new_face_list.resize(mVolumeFaces.size());
+
+ std::vector<std::string> new_material_list;
+ new_material_list.resize(mVolumeFaces.size());
+
+ //rebuild face list so materials have the same order
+ //as the reference model
+ for (U32 i = 0; i < mMaterialList.size(); ++i)
+ {
+ U32 ref_idx = index_map[mMaterialList[i]];
+ new_face_list[ref_idx] = mVolumeFaces[i];
+
+ new_material_list[ref_idx] = mMaterialList[i];
+ }
+
+ llassert(new_material_list == ref->mMaterialList);
+
+ mVolumeFaces = new_face_list;
+ }
+
+ //override material list with reference model ordering
+ mMaterialList = ref->mMaterialList;
+}
+
bool LLModel::loadSkinInfo(LLSD& header, std::istream &is)
{
@@ -2034,7 +2102,7 @@ LLModel::Decomposition::Decomposition(LLSD& data)
void LLModel::Decomposition::fromLLSD(LLSD& decomp)
{
- if (decomp.has("HullList"))
+ if (decomp.has("HullList") && decomp.has("Positions"))
{
// updated for const-correctness. gcc is picky about this type of thing - Nyx
const LLSD::Binary& hulls = decomp["HullList"].asBinary();
@@ -2190,6 +2258,8 @@ LLSD LLModel::Decomposition::asLLSD() const
ret["Min"] = min.getValue();
ret["Max"] = max.getValue();
+ LLVector3 range = max-min;
+
if (!hulls.empty())
{
ret["HullList"] = hulls;
@@ -2199,10 +2269,6 @@ LLSD LLModel::Decomposition::asLLSD() const
{
LLSD::Binary p(total*3*2);
- LLVector3 min(-0.5f, -0.5f, -0.5f);
- LLVector3 max(0.5f, 0.5f, 0.5f);
- LLVector3 range = max-min;
-
U32 vert_idx = 0;
for (U32 i = 0; i < mHull.size(); ++i)
@@ -2214,12 +2280,10 @@ LLSD LLModel::Decomposition::asLLSD() const
for (U32 j = 0; j < mHull[i].size(); ++j)
{
U64 test = 0;
+ const F32* src = mHull[i][j].mV;
+
for (U32 k = 0; k < 3; k++)
{
- F32* src = (F32*) (mHull[i][j].mV);
-
- llassert(src[k] <= 0.501f && src[k] >= -0.501f);
-
//convert to 16-bit normalized across domain
U16 val = (U16) (((src[k]-min.mV[k])/range.mV[k])*65535);
@@ -2258,19 +2322,17 @@ LLSD LLModel::Decomposition::asLLSD() const
{
LLSD::Binary p(mBaseHull.size()*3*2);
- LLVector3 min(-0.5f, -0.5f, -0.5f);
- LLVector3 max(0.5f, 0.5f, 0.5f);
- LLVector3 range = max-min;
-
U32 vert_idx = 0;
for (U32 j = 0; j < mBaseHull.size(); ++j)
{
+ const F32* v = mBaseHull[j].mV;
+
for (U32 k = 0; k < 3; k++)
{
- llassert(mBaseHull[j].mV[k] <= 0.51f && mBaseHull[j].mV[k] >= -0.51f);
+ llassert(v[k] <= 0.51f && v[k] >= -0.51f);
//convert to 16-bit normalized across domain
- U16 val = (U16) (((mBaseHull[j].mV[k]-min.mV[k])/range.mV[k])*65535);
+ U16 val = (U16) (((v[k]-min.mV[k])/range.mV[k])*65535);
U8* buff = (U8*) &val;
//write to binary buffer
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
index cd9f76fcb7..3f58eba07d 100644
--- a/indra/llprimitive/llmodel.h
+++ b/indra/llprimitive/llmodel.h
@@ -137,12 +137,13 @@ public:
const LLModel::Decomposition& decomp,
BOOL upload_skin,
BOOL upload_joints,
- BOOL nowrite = FALSE);
+ BOOL nowrite = FALSE,
+ BOOL as_slm = FALSE);
static LLSD writeModelToStream(
std::ostream& ostr,
LLSD& mdl,
- BOOL nowrite = FALSE);
+ BOOL nowrite = FALSE, BOOL as_slm = FALSE);
static LLModel* loadModelFromDomMesh(domMesh* mesh);
static std::string getElementLabel(daeElement* element);
@@ -171,6 +172,11 @@ public:
void optimizeVolumeFaces();
void offsetMesh( const LLVector3& pivotPoint );
void getNormalizedScaleTranslation(LLVector3& scale_out, LLVector3& translation_out);
+
+ //reorder face list based on mMaterialList in this and reference so
+ //order matches that of reference (material ordering touchup)
+ void matchMaterialOrder(LLModel* reference);
+
std::vector<std::string> mMaterialList;
//data used for skin weights
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index 76faa1b8c5..998016f8f6 100644..100755
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -103,6 +103,8 @@ public:
PARAMS_LIGHT = 0x20,
PARAMS_SCULPT = 0x30,
PARAMS_LIGHT_IMAGE = 0x40,
+ PARAMS_RESERVED = 0x50, // Used on server-side
+ PARAMS_MESH = 0x60,
};
public:
diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp
index fb22d7f1f5..1b10354c22 100644
--- a/indra/llrender/llcubemap.cpp
+++ b/indra/llrender/llcubemap.cpp
@@ -259,7 +259,7 @@ void LLCubeMap::setMatrix(S32 stage)
if (mMatrixStage < 0) return;
- if (stage > 0)
+ //if (stage > 0)
{
gGL.getTexUnit(stage)->activate();
}
@@ -278,17 +278,17 @@ void LLCubeMap::setMatrix(S32 stage)
glLoadMatrixf((F32 *)trans.mMatrix);
glMatrixMode(GL_MODELVIEW);
- if (stage > 0)
+ /*if (stage > 0)
{
gGL.getTexUnit(0)->activate();
- }
+ }*/
}
void LLCubeMap::restoreMatrix()
{
if (mMatrixStage < 0) return;
- if (mMatrixStage > 0)
+ //if (mMatrixStage > 0)
{
gGL.getTexUnit(mMatrixStage)->activate();
}
@@ -296,10 +296,10 @@ void LLCubeMap::restoreMatrix()
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
- if (mMatrixStage > 0)
+ /*if (mMatrixStage > 0)
{
gGL.getTexUnit(0)->activate();
- }
+ }*/
}
void LLCubeMap::setReflection (void)
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 180ae4dfa6..607473d416 100644
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -189,6 +189,9 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
origin.mV[VX] -= llround((F32)sCurOrigin.mX) - (sCurOrigin.mX);
origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY);
+ // Depth translation, so that floating text appears 'inworld'
+ // and is correclty occluded.
+ gGL.translatef(0.f,0.f,sCurOrigin.mZ);
S32 chars_drawn = 0;
S32 i;
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index a3aed4dd8a..4e3cfb9c8a 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -48,6 +48,7 @@
#include "llstacktrace.h"
#include "llglheaders.h"
+#include "llglslshader.h"
#ifdef _DEBUG
//#define GL_STATE_VERIFY
@@ -128,9 +129,21 @@ PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL;
PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB = NULL;
// GL_ARB_map_buffer_range
-PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
-PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
-
+PFNGLMAPBUFFERRANGEPROC glMapBufferRange = NULL;
+PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange = NULL;
+
+// GL_ARB_sync
+PFNGLFENCESYNCPROC glFenceSync = NULL;
+PFNGLISSYNCPROC glIsSync = NULL;
+PFNGLDELETESYNCPROC glDeleteSync = NULL;
+PFNGLCLIENTWAITSYNCPROC glClientWaitSync = NULL;
+PFNGLWAITSYNCPROC glWaitSync = NULL;
+PFNGLGETINTEGER64VPROC glGetInteger64v = NULL;
+PFNGLGETSYNCIVPROC glGetSynciv = NULL;
+
+// GL_APPLE_flush_buffer_range
+PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE = NULL;
+PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE = NULL;
// vertex object prototypes
PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI = NULL;
@@ -334,9 +347,10 @@ LLGLManager::LLGLManager() :
mHasFramebufferObject(FALSE),
mMaxSamples(0),
mHasBlendFuncSeparate(FALSE),
-
+ mHasSync(FALSE),
mHasVertexBufferObject(FALSE),
mHasMapBufferRange(FALSE),
+ mHasFlushBufferRange(FALSE),
mHasPBuffer(FALSE),
mHasShaderObjects(FALSE),
mHasVertexShader(FALSE),
@@ -568,6 +582,13 @@ bool LLGLManager::initGL()
glGetIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &mMaxSampleMaskWords);
}
+#if LL_WINDOWS
+ if (mIsATI)
+ { //using multisample textures on ATI results in black screen for some reason
+ mHasTextureMultisample = FALSE;
+ }
+#endif
+
if (mHasFramebufferObject)
{
glGetIntegerv(GL_MAX_SAMPLES, &mMaxSamples);
@@ -767,7 +788,9 @@ void LLGLManager::initExtensions()
mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts);
mHasOcclusionQuery2 = ExtensionExists("GL_ARB_occlusion_query2", gGLHExts.mSysExts);
mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);
+ mHasSync = ExtensionExists("GL_ARB_sync", gGLHExts.mSysExts);
mHasMapBufferRange = ExtensionExists("GL_ARB_map_buffer_range", gGLHExts.mSysExts);
+ mHasFlushBufferRange = ExtensionExists("GL_APPLE_flush_buffer_range", gGLHExts.mSysExts);
mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts);
// mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad
#ifdef GL_ARB_framebuffer_object
@@ -962,6 +985,16 @@ void LLGLManager::initExtensions()
mHasVertexBufferObject = FALSE;
}
}
+ if (mHasSync)
+ {
+ glFenceSync = (PFNGLFENCESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glFenceSync");
+ glIsSync = (PFNGLISSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glIsSync");
+ glDeleteSync = (PFNGLDELETESYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteSync");
+ glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glClientWaitSync");
+ glWaitSync = (PFNGLWAITSYNCPROC) GLH_EXT_GET_PROC_ADDRESS("glWaitSync");
+ glGetInteger64v = (PFNGLGETINTEGER64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetInteger64v");
+ glGetSynciv = (PFNGLGETSYNCIVPROC) GLH_EXT_GET_PROC_ADDRESS("glGetSynciv");
+ }
if (mHasMapBufferRange)
{
glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC) GLH_EXT_GET_PROC_ADDRESS("glMapBufferRange");
@@ -1347,6 +1380,8 @@ void LLGLState::checkStates(const std::string& msg)
glGetIntegerv(GL_BLEND_SRC, &src);
glGetIntegerv(GL_BLEND_DST, &dst);
+ stop_glerror();
+
BOOL error = FALSE;
if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA)
@@ -1367,7 +1402,9 @@ void LLGLState::checkStates(const std::string& msg)
{
LLGLenum state = iter->first;
LLGLboolean cur_state = iter->second;
+ stop_glerror();
LLGLboolean gl_state = glIsEnabled(state);
+ stop_glerror();
if(cur_state != gl_state)
{
dumpStates();
@@ -1392,11 +1429,11 @@ void LLGLState::checkStates(const std::string& msg)
void LLGLState::checkTextureChannels(const std::string& msg)
{
+#if 0
if (!gDebugGL)
{
return;
}
-
stop_glerror();
GLint activeTexture;
@@ -1562,6 +1599,7 @@ void LLGLState::checkTextureChannels(const std::string& msg)
LL_GL_ERRS << "GL texture state corruption detected. " << msg << LL_ENDL;
}
}
+#endif
}
void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
@@ -1678,7 +1716,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
}
}
- if (glIsEnabled(GL_TEXTURE_2D))
+ /*if (glIsEnabled(GL_TEXTURE_2D))
{
if (!(data_mask & 0x0008))
{
@@ -1701,7 +1739,7 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
gFailLog << "GL does not have GL_TEXTURE_2D enabled on channel 1." << std::endl;
}
}
- }
+ }*/
glClientActiveTextureARB(GL_TEXTURE0_ARB);
gGL.getTexUnit(0)->activate();
@@ -1744,6 +1782,16 @@ void LLGLState::checkClientArrays(const std::string& msg, U32 data_mask)
LLGLState::LLGLState(LLGLenum state, S32 enabled) :
mState(state), mWasEnabled(FALSE), mIsEnabled(FALSE)
{
+ if (LLGLSLShader::sNoFixedFunction)
+ { //always disable state that's deprecated post GL 3.0
+ switch (state)
+ {
+ case GL_ALPHA_TEST:
+ enabled = 0;
+ break;
+ }
+ }
+
stop_glerror();
if (state)
{
@@ -2103,8 +2151,7 @@ void LLGLNamePool::release(GLuint name)
void LLGLNamePool::upkeepPools()
{
LLMemType mt(LLMemType::MTYPE_UPKEEP_POOLS);
- tracker_t::LLInstanceTrackerScopedGuard guard;
- for (tracker_t::instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); ++iter)
+ for (tracker_t::instance_iter iter = beginInstances(); iter != endInstances(); ++iter)
{
LLGLNamePool & pool = *iter;
pool.upkeep();
@@ -2114,8 +2161,7 @@ void LLGLNamePool::upkeepPools()
//static
void LLGLNamePool::cleanupPools()
{
- tracker_t::LLInstanceTrackerScopedGuard guard;
- for (tracker_t::instance_iter iter = guard.beginInstances(); iter != guard.endInstances(); ++iter)
+ for (tracker_t::instance_iter iter = beginInstances(); iter != endInstances(); ++iter)
{
LLGLNamePool & pool = *iter;
pool.cleanup();
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index d1bee00161..d736133f3f 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -88,7 +88,9 @@ public:
// ARB Extensions
BOOL mHasVertexBufferObject;
+ BOOL mHasSync;
BOOL mHasMapBufferRange;
+ BOOL mHasFlushBufferRange;
BOOL mHasPBuffer;
BOOL mHasShaderObjects;
BOOL mHasVertexShader;
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index f35f329f00..851a75629e 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -68,6 +68,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
+// GL_ARB_sync
+extern PFNGLFENCESYNCPROC glFenceSync;
+extern PFNGLISSYNCPROC glIsSync;
+extern PFNGLDELETESYNCPROC glDeleteSync;
+extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
+extern PFNGLWAITSYNCPROC glWaitSync;
+extern PFNGLGETINTEGER64VPROC glGetInteger64v;
+extern PFNGLGETSYNCIVPROC glGetSynciv;
+
+// GL_APPLE_flush_buffer_range
+extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE;
+extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE;
+
// GL_ARB_map_buffer_range
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
@@ -310,6 +323,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
+// GL_ARB_sync
+extern PFNGLFENCESYNCPROC glFenceSync;
+extern PFNGLISSYNCPROC glIsSync;
+extern PFNGLDELETESYNCPROC glDeleteSync;
+extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
+extern PFNGLWAITSYNCPROC glWaitSync;
+extern PFNGLGETINTEGER64VPROC glGetInteger64v;
+extern PFNGLGETSYNCIVPROC glGetSynciv;
+
+// GL_APPLE_flush_buffer_range
+extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE;
+extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE;
+
// GL_ARB_map_buffer_range
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
@@ -519,6 +545,19 @@ extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
+// GL_ARB_sync
+extern PFNGLFENCESYNCPROC glFenceSync;
+extern PFNGLISSYNCPROC glIsSync;
+extern PFNGLDELETESYNCPROC glDeleteSync;
+extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
+extern PFNGLWAITSYNCPROC glWaitSync;
+extern PFNGLGETINTEGER64VPROC glGetInteger64v;
+extern PFNGLGETSYNCIVPROC glGetSynciv;
+
+// GL_APPLE_flush_buffer_range
+extern PFNGLBUFFERPARAMETERIAPPLEPROC glBufferParameteriAPPLE;
+extern PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC glFlushMappedBufferRangeAPPLE;
+
// GL_ARB_map_buffer_range
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 8e99f62de6..f51d83abe4 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -49,6 +49,12 @@ using std::make_pair;
using std::string;
GLhandleARB LLGLSLShader::sCurBoundShader = 0;
+LLGLSLShader* LLGLSLShader::sCurBoundShaderPtr = NULL;
+bool LLGLSLShader::sNoFixedFunction = false;
+
+//UI shader -- declared here so llui_libtest will link properly
+LLGLSLShader gUIProgram;
+LLGLSLShader gSolidColorProgram;
BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
{
@@ -58,7 +64,8 @@ BOOL shouldChange(const LLVector4& v1, const LLVector4& v2)
LLShaderFeatures::LLShaderFeatures()
: calculatesLighting(false), isShiny(false), isFullbright(false), hasWaterFog(false),
hasTransport(false), hasSkinning(false), hasObjectSkinning(false), hasAtmospherics(false), isSpecular(false),
-hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false)
+hasGamma(false), hasLighting(false), calculatesAtmospherics(false), mIndexedTextureChannels(0), disableTextureIndex(false),
+hasAlphaMask(false)
{
}
@@ -109,6 +116,11 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
// Create program
mProgramObject = glCreateProgramObjectARB();
+ if (gGLManager.mGLVersion < 3.1f)
+ { //force indexed texture channels to 1 if GL version is old (performance improvement for drivers with poor branching shader model support)
+ mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1);
+ }
+
//compile new source
vector< pair<string,GLenum> >::iterator fileIter = mShaderFiles.begin();
for ( ; fileIter != mShaderFiles.end(); fileIter++ )
@@ -131,6 +143,11 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
return FALSE;
}
+ if (gGLManager.mGLVersion < 3.1f)
+ { //attachShaderFeatures may have set the number of indexed texture channels, so set to 1 again
+ mFeatures.mIndexedTextureChannels = llmin(mFeatures.mIndexedTextureChannels, 1);
+ }
+
// Map attributes and uniforms
if (success)
{
@@ -366,10 +383,12 @@ BOOL LLGLSLShader::link(BOOL suppress_errors)
void LLGLSLShader::bind()
{
+ gGL.flush();
if (gGLManager.mHasShaderObjects)
{
glUseProgramObjectARB(mProgramObject);
sCurBoundShader = mProgramObject;
+ sCurBoundShaderPtr = this;
if (mUniformsDirty)
{
LLShaderMgr::instance()->updateShaderUniforms(this);
@@ -380,6 +399,7 @@ void LLGLSLShader::bind()
void LLGLSLShader::unbind()
{
+ gGL.flush();
if (gGLManager.mHasShaderObjects)
{
stop_glerror();
@@ -393,6 +413,7 @@ void LLGLSLShader::unbind()
}
glUseProgramObjectARB(0);
sCurBoundShader = 0;
+ sCurBoundShaderPtr = NULL;
stop_glerror();
}
}
@@ -401,6 +422,7 @@ void LLGLSLShader::bindNoShader(void)
{
glUseProgramObjectARB(0);
sCurBoundShader = 0;
+ sCurBoundShaderPtr = NULL;
}
S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode)
@@ -962,3 +984,9 @@ void LLGLSLShader::vertexAttrib4fv(U32 index, GLfloat* v)
glVertexAttrib4fvARB(mAttribute[index], v);
}
}
+
+void LLGLSLShader::setAlphaRange(F32 minimum, F32 maximum)
+{
+ uniform1f("minimum_alpha", minimum);
+ uniform1f("maximum_alpha", maximum);
+}
diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h
index 4922eb6d67..558ea66b50 100644
--- a/indra/llrender/llglslshader.h
+++ b/indra/llrender/llglslshader.h
@@ -47,6 +47,7 @@ public:
bool hasGamma;
S32 mIndexedTextureChannels;
bool disableTextureIndex;
+ bool hasAlphaMask;
// char numLights;
@@ -67,6 +68,9 @@ public:
LLGLSLShader();
static GLhandleARB sCurBoundShader;
+ static LLGLSLShader* sCurBoundShaderPtr;
+
+ static bool sNoFixedFunction;
void unload();
BOOL createShader(std::vector<std::string> * attributes,
@@ -104,6 +108,8 @@ public:
void uniformMatrix3fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v);
void uniformMatrix4fv(const std::string& uniform, U32 count, GLboolean transpose, const GLfloat *v);
+ void setAlphaRange(F32 minimum, F32 maximum);
+
void vertexAttrib4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
void vertexAttrib4fv(U32 index, GLfloat* v);
@@ -141,4 +147,10 @@ public:
std::string mName;
};
+//UI shader (declared here so llui_libtest will link properly)
+extern LLGLSLShader gUIProgram;
+//output vec4(color.rgb,color.a*tex0[tc0].a)
+extern LLGLSLShader gSolidColorProgram;
+
+
#endif
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 60a5962234..7188b0fa44 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -1414,6 +1414,8 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
void LLImageGL::deleteDeadTextures()
{
+ bool reset = false;
+
while (!sDeadTextureList.empty())
{
GLuint tex = sDeadTextureList.front();
@@ -1422,16 +1424,26 @@ void LLImageGL::deleteDeadTextures()
{
LLTexUnit* tex_unit = gGL.getTexUnit(i);
- if (tex_unit->getCurrTexture() == tex)
+ if (tex_unit && tex_unit->getCurrTexture() == tex)
{
tex_unit->unbind(tex_unit->getCurrType());
stop_glerror();
+
+ if (i > 0)
+ {
+ reset = true;
+ }
}
}
glDeleteTextures(1, &tex);
stop_glerror();
}
+
+ if (reset)
+ {
+ gGL.getTexUnit(0)->activate();
+ }
}
void LLImageGL::destroyGLTexture()
@@ -1875,6 +1887,7 @@ BOOL LLImageGL::getMask(const LLVector2 &tc)
void LLImageGL::setCategory(S32 category)
{
+#if 0 //turn this off temporarily because it is not in use now.
if(!gAuditTexture)
{
return ;
@@ -1895,6 +1908,7 @@ void LLImageGL::setCategory(S32 category)
mCategory = -1 ;
}
}
+#endif
}
//for debug use
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 6a3f186531..edcc47aa14 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -46,6 +46,7 @@ S32 gGLViewport[4];
U32 LLRender::sUICalls = 0;
U32 LLRender::sUIVerts = 0;
+U32 LLTexUnit::sWhiteTexture = 0;
static const U32 LL_NUM_TEXTURE_LAYERS = 32;
static const U32 LL_NUM_LIGHT_UNITS = 8;
@@ -126,7 +127,8 @@ void LLTexUnit::refreshState(void)
// Per apple spec, don't call glEnable/glDisable when index exceeds max texture units
// http://www.mailinglistarchive.com/html/mac-opengl@lists.apple.com/2008-07/msg00653.html
//
- bool enableDisable = (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE;
+ bool enableDisable = !LLGLSLShader::sNoFixedFunction &&
+ (mIndex < gGLManager.mNumTextureUnits) && mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE;
if (mCurrTexType != TT_NONE)
{
@@ -184,7 +186,8 @@ void LLTexUnit::enable(eTextureType type)
mCurrTexType = type;
gGL.flush();
- if (type != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
+ if (!LLGLSLShader::sNoFixedFunction &&
+ type != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
mIndex < gGLManager.mNumTextureUnits)
{
glEnable(sGLTextureType[type]);
@@ -201,7 +204,8 @@ void LLTexUnit::disable(void)
activate();
unbind(mCurrTexType);
gGL.flush();
- if (mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
+ if (!LLGLSLShader::sNoFixedFunction &&
+ mCurrTexType != LLTexUnit::TT_MULTISAMPLE_TEXTURE &&
mIndex < gGLManager.mNumTextureUnits)
{
glDisable(sGLTextureType[mCurrTexType]);
@@ -294,7 +298,7 @@ bool LLTexUnit::bind(LLImageGL* texture, bool for_rendering, bool forceBind)
glBindTexture(sGLTextureType[texture->getTarget()], mCurrTexture);
texture->updateBindStats(texture->mTextureMemory);
mHasMipMaps = texture->mHasMipMaps;
- if (mIndex == 0 && texture->mTexOptionsDirty)
+ if (texture->mTexOptionsDirty)
{
texture->mTexOptionsDirty = false;
setTextureAddressMode(texture->mAddressMode);
@@ -403,7 +407,14 @@ void LLTexUnit::unbind(eTextureType type)
activate();
mCurrTexture = 0;
- glBindTexture(sGLTextureType[type], 0);
+ if (LLGLSLShader::sNoFixedFunction && type == LLTexUnit::TT_TEXTURE)
+ {
+ glBindTexture(sGLTextureType[type], sWhiteTexture);
+ }
+ else
+ {
+ glBindTexture(sGLTextureType[type], 0);
+ }
stop_glerror();
}
}
@@ -474,6 +485,11 @@ void LLTexUnit::setTextureFilteringOption(LLTexUnit::eTextureFilterOptions optio
void LLTexUnit::setTextureBlendType(eTextureBlendType type)
{
+ if (LLGLSLShader::sNoFixedFunction)
+ { //texture blend type means nothing when using shaders
+ return;
+ }
+
if (mIndex < 0) return;
// Do nothing if it's already correctly set.
@@ -594,6 +610,11 @@ GLint LLTexUnit::getTextureSourceType(eTextureBlendSrc src, bool isAlpha)
void LLTexUnit::setTextureCombiner(eTextureBlendOp op, eTextureBlendSrc src1, eTextureBlendSrc src2, bool isAlpha)
{
+ if (LLGLSLShader::sNoFixedFunction)
+ { //register combiners do nothing when not using fixed function
+ return;
+ }
+
if (mIndex < 0) return;
activate();
@@ -906,13 +927,7 @@ LLRender::LLRender()
mMode(LLRender::TRIANGLES),
mCurrTextureUnitIndex(0),
mMaxAnisotropy(0.f)
-{
- mBuffer = new LLVertexBuffer(immediate_mask, 0);
- mBuffer->allocateBuffer(4096, 0, TRUE);
- mBuffer->getVertexStrider(mVerticesp);
- mBuffer->getTexCoord0Strider(mTexcoordsp);
- mBuffer->getColorStrider(mColorsp);
-
+{
mTexUnits.reserve(LL_NUM_TEXTURE_LAYERS);
for (U32 i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
{
@@ -943,6 +958,17 @@ LLRender::~LLRender()
shutdown();
}
+void LLRender::init()
+{
+ llassert_always(mBuffer.isNull()) ;
+
+ mBuffer = new LLVertexBuffer(immediate_mask, 0);
+ mBuffer->allocateBuffer(4096, 0, TRUE);
+ mBuffer->getVertexStrider(mVerticesp);
+ mBuffer->getTexCoord0Strider(mTexcoordsp);
+ mBuffer->getColorStrider(mColorsp);
+}
+
void LLRender::shutdown()
{
for (U32 i = 0; i < mTexUnits.size(); i++)
@@ -958,6 +984,7 @@ void LLRender::shutdown()
delete mLightState[i];
}
mLightState.clear();
+ mBuffer = NULL ;
}
void LLRender::refreshState(void)
@@ -1147,6 +1174,11 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
{
flush();
+ if (LLGLSLShader::sNoFixedFunction)
+ { //glAlphaFunc is deprecated in OpenGL 3.3
+ return;
+ }
+
if (mCurrAlphaFunc != func ||
mCurrAlphaFuncVal != value)
{
@@ -1161,6 +1193,30 @@ void LLRender::setAlphaRejectSettings(eCompareFunc func, F32 value)
glAlphaFunc(sGLCompareFunc[func], value);
}
}
+
+ if (gDebugGL)
+ { //make sure cached state is correct
+ GLint cur_func = 0;
+ glGetIntegerv(GL_ALPHA_TEST_FUNC, &cur_func);
+
+ if (func == CF_DEFAULT)
+ {
+ func = CF_GREATER;
+ }
+
+ if (cur_func != sGLCompareFunc[func])
+ {
+ llerrs << "Alpha test function corrupted!" << llendl;
+ }
+
+ F32 ref = 0.f;
+ glGetFloatv(GL_ALPHA_TEST_REF, &ref);
+
+ if (ref != value)
+ {
+ llerrs << "Alpha test value corrupted!" << llendl;
+ }
+ }
}
void LLRender::blendFunc(eBlendFactor sfactor, eBlendFactor dfactor)
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 41e7b35341..8f7ee30d87 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -52,6 +52,8 @@ class LLTexUnit
{
friend class LLRender;
public:
+ static U32 sWhiteTexture;
+
typedef enum
{
TT_TEXTURE = 0, // Standard 2D Texture
@@ -308,6 +310,7 @@ public:
LLRender();
~LLRender();
+ void init() ;
void shutdown();
// Refreshes renderer state to the cached values
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index b6463309e1..8c0d3592df 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -72,11 +72,11 @@ LLRenderTarget::~LLRenderTarget()
release();
}
-void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)
+bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)
{
stop_glerror();
-
release();
+ stop_glerror();
mResX = resx;
mResY = resy;
@@ -103,9 +103,11 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo
{
if (depth)
{
- stop_glerror();
- allocateDepth();
- stop_glerror();
+ if (!allocateDepth())
+ {
+ llwarns << "Failed to allocate depth buffer for render target." << llendl;
+ return false;
+ }
}
glGenFramebuffers(1, (GLuint *) &mFBO);
@@ -131,14 +133,14 @@ void LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo
stop_glerror();
}
- addColorAttachment(color_fmt);
+ return addColorAttachment(color_fmt);
}
-void LLRenderTarget::addColorAttachment(U32 color_fmt)
+bool LLRenderTarget::addColorAttachment(U32 color_fmt)
{
if (color_fmt == 0)
{
- return;
+ return true;
}
U32 offset = mTex.size();
@@ -158,14 +160,26 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt)
#ifdef GL_ARB_texture_multisample
if (mSamples > 1)
{
+ clear_glerror();
glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, color_fmt, mResX, mResY, GL_TRUE);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ llwarns << "Could not allocate multisample color buffer for render target." << llendl;
+ return false;
+ }
}
else
#else
llassert_always(mSamples <= 1);
#endif
{
+ clear_glerror();
LLImageGL::setManualImage(LLTexUnit::getInternalType(mUsage), 0, color_fmt, mResX, mResY, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ if (glGetError() != GL_NO_ERROR)
+ {
+ llwarns << "Could not allocate color buffer for render target." << llendl;
+ return false;
+ }
}
stop_glerror();
@@ -217,15 +231,18 @@ void LLRenderTarget::addColorAttachment(U32 color_fmt)
flush();
}
+ return true;
}
-void LLRenderTarget::allocateDepth()
+bool LLRenderTarget::allocateDepth()
{
if (mStencil)
{
//use render buffers where stencil buffers are in play
glGenRenderbuffers(1, (GLuint *) &mDepth);
glBindRenderbuffer(GL_RENDERBUFFER, mDepth);
+ stop_glerror();
+ clear_glerror();
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, mResX, mResY);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
}
@@ -237,17 +254,29 @@ void LLRenderTarget::allocateDepth()
{
U32 internal_type = LLTexUnit::getInternalType(mUsage);
gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
+ stop_glerror();
+ clear_glerror();
LLImageGL::setManualImage(internal_type, 0, GL_DEPTH_COMPONENT32, mResX, mResY, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
}
#ifdef GL_ARB_texture_multisample
else
{
+ stop_glerror();
+ clear_glerror();
glTexImage2DMultisample(LLTexUnit::getInternalType(mUsage), mSamples, GL_DEPTH_COMPONENT32, mResX, mResY, GL_TRUE);
}
#else
llassert_always(mSamples <= 1);
#endif
}
+
+ if (glGetError() != GL_NO_ERROR)
+ {
+ llwarns << "Unable to allocate depth buffer for render target." << llendl;
+ return false;
+ }
+
+ return true;
}
void LLRenderTarget::shareDepthBuffer(LLRenderTarget& target)
diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h
index 094b58b562..dea1de12d8 100644
--- a/indra/llrender/llrendertarget.h
+++ b/indra/llrender/llrendertarget.h
@@ -66,30 +66,30 @@ public:
static bool sUseFBO;
LLRenderTarget();
- virtual ~LLRenderTarget();
+ ~LLRenderTarget();
//allocate resources for rendering
//must be called before use
//multiple calls will release previously allocated resources
- void allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = false, S32 samples = 0);
+ bool allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage = LLTexUnit::TT_TEXTURE, bool use_fbo = false, S32 samples = 0);
//add color buffer attachment
//limit of 4 color attachments per render target
- virtual void addColorAttachment(U32 color_fmt);
+ bool addColorAttachment(U32 color_fmt);
//allocate a depth texture
- virtual void allocateDepth();
+ bool allocateDepth();
//share depth buffer with provided render target
- virtual void shareDepthBuffer(LLRenderTarget& target);
+ void shareDepthBuffer(LLRenderTarget& target);
//free any allocated resources
//safe to call redundantly
- virtual void release();
+ void release();
//bind target for rendering
//applies appropriate viewport
- virtual void bindTarget();
+ void bindTarget();
//unbind target for rendering
static void unbindTarget();
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index bdc103b917..986c1f2774 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -206,21 +206,40 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
if (features->hasLighting)
{
-
if (features->hasWaterFog)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightWaterNonIndexedF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightWaterAlphaMaskNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightWaterNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
}
}
else
{
- if (!shader->attachObject("lighting/lightWaterF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightWaterAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightWaterF.glsl"))
+ {
+ return FALSE;
+ }
}
shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1;
}
@@ -230,16 +249,36 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightNonIndexedF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightAlphaMaskNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
}
}
else
{
- if (!shader->attachObject("lighting/lightF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightF.glsl"))
+ {
+ return FALSE;
+ }
}
shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1;
}
@@ -272,14 +311,28 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedF.glsl"))
+ if (features->hasAlphaMask)
+ {
+ if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else if (!shader->attachObject("lighting/lightFullbrightWaterNonIndexedF.glsl"))
{
return FALSE;
}
}
else
{
- if (!shader->attachObject("lighting/lightFullbrightWaterF.glsl"))
+ if (features->hasAlphaMask)
+ {
+ if (!shader->attachObject("lighting/lightFullbrightWaterAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else if (!shader->attachObject("lighting/lightFullbrightWaterF.glsl"))
{
return FALSE;
}
@@ -310,16 +363,37 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)
{
if (features->disableTextureIndex)
{
- if (!shader->attachObject("lighting/lightFullbrightNonIndexedF.glsl"))
+
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightFullbrightNonIndexedAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightFullbrightNonIndexedF.glsl"))
+ {
+ return FALSE;
+ }
}
}
else
{
- if (!shader->attachObject("lighting/lightFullbrightF.glsl"))
+ if (features->hasAlphaMask)
{
- return FALSE;
+ if (!shader->attachObject("lighting/lightFullbrightAlphaMaskF.glsl"))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!shader->attachObject("lighting/lightFullbrightF.glsl"))
+ {
+ return FALSE;
+ }
}
shader->mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits-1;
}
@@ -406,7 +480,7 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
LL_DEBUGS("ShaderLoading") << log << LL_ENDL;
}
}
-}
+ }
GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels)
{
@@ -462,7 +536,11 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
GLcharARB* text[1024];
GLuint count = 0;
- if (gGLManager.mGLVersion < 3.f)
+ if (gGLManager.mGLVersion < 2.1f)
+ {
+ text[count++] = strdup("#version 110\n");
+ }
+ else if (gGLManager.mGLVersion < 3.f)
{
//set version to 1.20
text[count++] = strdup("#version 120\n");
@@ -524,7 +602,12 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
text[count++] = strdup("{\n");
- if (gGLManager.mGLVersion >= 3.f)
+ if (texture_index_channels == 1)
+ { //don't use flow control, that's silly
+ text[count++] = strdup("return texture2D(tex0, texcoord);\n");
+ text[count++] = strdup("}\n");
+ }
+ else if (gGLManager.mGLVersion >= 3.f)
{
text[count++] = strdup("\tswitch (int(vary_texture_index+0.25))\n");
text[count++] = strdup("\t{\n");
@@ -537,6 +620,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
text[count++] = strdup("\t}\n");
+ text[count++] = strdup("\treturn vec4(0,0,0,0);\n");
+ text[count++] = strdup("}\n");
}
else
{
@@ -557,10 +642,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
std::string if_str = llformat("if (ti == %d) return texture2D(tex%d, texcoord);\n", i, i);
text[count++] = strdup(if_str.c_str());
}
- }
- text[count++] = strdup("\treturn vec4(0,0,0,0);\n");
- text[count++] = strdup("}\n");
+ text[count++] = strdup("\treturn vec4(0,0,0,0);\n");
+ text[count++] = strdup("}\n");
+ }
}
//copy file into memory
@@ -605,11 +690,6 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
}
- //free memory
- for (GLuint i = 0; i < count; i++)
- {
- free(text[i]);
- }
if (error == GL_NO_ERROR)
{
//check for errors
@@ -623,6 +703,16 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
//an error occured, print log
LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
dumpObjectLog(ret);
+
+ std::stringstream ostr;
+ //dump shader source for debugging
+ for (GLuint i = 0; i < count; i++)
+ {
+ ostr << i << ": " << text[i];
+ }
+
+ LL_WARNS("ShaderLoading") << "\n" << ostr.str() << llendl;
+
ret = 0;
}
}
@@ -633,6 +723,12 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
}
stop_glerror();
+ //free memory
+ for (GLuint i = 0; i < count; i++)
+ {
+ free(text[i]);
+ }
+
//successfully loaded, save results
if (ret)
{
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
index 4a0b964e61..8fd1193780 100644
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -25,7 +25,6 @@
*/
#include "linden_common.h"
-#include "llmemory.h"
#include <boost/static_assert.hpp>
#include "llsys.h"
@@ -35,6 +34,9 @@
#include "llmemtype.h"
#include "llrender.h"
#include "llvector4a.h"
+#include "llglslshader.h"
+#include "llmemory.h"
+
//============================================================================
@@ -44,6 +46,7 @@ LLVBOPool LLVertexBuffer::sDynamicVBOPool;
LLVBOPool LLVertexBuffer::sStreamIBOPool;
LLVBOPool LLVertexBuffer::sDynamicIBOPool;
+LLPrivateMemoryPool* LLVertexBuffer::sPrivatePoolp = NULL ;
U32 LLVertexBuffer::sBindCount = 0;
U32 LLVertexBuffer::sSetCount = 0;
S32 LLVertexBuffer::sCount = 0;
@@ -65,6 +68,60 @@ S32 LLVertexBuffer::sWeight4Loc = -1;
std::vector<U32> LLVertexBuffer::sDeleteList;
+const U32 FENCE_WAIT_TIME_NANOSECONDS = 10000; //1 ms
+
+class LLGLSyncFence : public LLGLFence
+{
+public:
+#ifdef GL_ARB_sync
+ GLsync mSync;
+#endif
+
+ LLGLSyncFence()
+ {
+#ifdef GL_ARB_sync
+ mSync = 0;
+#endif
+ }
+
+ ~LLGLSyncFence()
+ {
+#ifdef GL_ARB_sync
+ if (mSync)
+ {
+ glDeleteSync(mSync);
+ }
+#endif
+ }
+
+ void placeFence()
+ {
+#ifdef GL_ARB_sync
+ if (mSync)
+ {
+ glDeleteSync(mSync);
+ }
+ mSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
+#endif
+ }
+
+ void wait()
+ {
+#ifdef GL_ARB_sync
+ if (mSync)
+ {
+ while (glClientWaitSync(mSync, 0, FENCE_WAIT_TIME_NANOSECONDS) == GL_TIMEOUT_EXPIRED)
+ { //track the number of times we've waited here
+ static S32 waits = 0;
+ waits++;
+ }
+ }
+#endif
+ }
+
+
+};
+
S32 LLVertexBuffer::sTypeSize[LLVertexBuffer::TYPE_MAX] =
{
sizeof(LLVector4), // TYPE_VERTEX,
@@ -240,7 +297,8 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)
void LLVertexBuffer::drawArrays(U32 mode, const std::vector<LLVector3>& pos, const std::vector<LLVector3>& norm)
{
U32 count = pos.size();
- llassert(norm.size() >= pos.size());
+ llassert_always(norm.size() >= pos.size());
+ llassert_always(count > 0) ;
unbind();
@@ -309,6 +367,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi
glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT,
idx);
stop_glerror();
+ placeFence();
}
void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
@@ -340,6 +399,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
glDrawElements(sGLMode[mode], count, GL_UNSIGNED_SHORT,
((U16*) getIndicesPointer()) + indices_offset);
stop_glerror();
+ placeFence();
}
void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
@@ -365,6 +425,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
stop_glerror();
glDrawArrays(sGLMode[mode], first, count);
stop_glerror();
+ placeFence();
}
//static
@@ -383,6 +444,11 @@ void LLVertexBuffer::initClass(bool use_vbo, bool no_vbo_mapping)
}
sDisableVBOMapping = sEnableVBOs && no_vbo_mapping ;
+
+ if(!sPrivatePoolp)
+ {
+ sPrivatePoolp = LLPrivateMemoryPoolManager::getInstance()->newPool(LLPrivateMemoryPool::STATIC) ;
+ }
}
//static
@@ -412,7 +478,11 @@ void LLVertexBuffer::cleanupClass()
unbind();
clientCopy(); // deletes GL buffers
- //llassert_always(!sCount) ;
+ if(sPrivatePoolp)
+ {
+ LLPrivateMemoryPoolManager::getInstance()->deletePool(sPrivatePoolp) ;
+ sPrivatePoolp = NULL ;
+ }
}
void LLVertexBuffer::clientCopy(F64 max_time)
@@ -444,9 +514,11 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :
mFilthy(FALSE),
mEmpty(TRUE),
mResized(FALSE),
- mDynamicSize(FALSE)
+ mDynamicSize(FALSE),
+ mFence(NULL)
{
LLMemType mt2(LLMemType::MTYPE_VERTEX_CONSTRUCTOR);
+ mFence = NULL;
if (!sEnableVBOs)
{
mUsage = 0 ;
@@ -527,9 +599,40 @@ LLVertexBuffer::~LLVertexBuffer()
destroyGLIndices();
sCount--;
+ if (mFence)
+ {
+ delete mFence;
+ }
+
+ mFence = NULL;
+
llassert_always(!mMappedData && !mMappedIndexData) ;
};
+void LLVertexBuffer::placeFence() const
+{
+ /*if (!mFence && useVBOs())
+ {
+ if (gGLManager.mHasSync)
+ {
+ mFence = new LLGLSyncFence();
+ }
+ }
+
+ if (mFence)
+ {
+ mFence->placeFence();
+ }*/
+}
+
+void LLVertexBuffer::waitFence() const
+{
+ /*if (mFence)
+ {
+ mFence->wait();
+ }*/
+}
+
//----------------------------------------------------------------------------
void LLVertexBuffer::genBuffer()
@@ -629,7 +732,7 @@ void LLVertexBuffer::createGLBuffer()
{
static int gl_buffer_idx = 0;
mGLBuffer = ++gl_buffer_idx;
- mMappedData = (U8*) ll_aligned_malloc_16(size);
+ mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size);
}
}
@@ -663,7 +766,7 @@ void LLVertexBuffer::createGLIndices()
}
else
{
- mMappedIndexData = (U8*) ll_aligned_malloc_16(size);
+ mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size);
static int gl_buffer_idx = 0;
mGLIndices = ++gl_buffer_idx;
}
@@ -686,7 +789,7 @@ void LLVertexBuffer::destroyGLBuffer()
}
else
{
- ll_aligned_free_16(mMappedData);
+ FREE_MEM(sPrivatePoolp, mMappedData) ;
mMappedData = NULL;
mEmpty = TRUE;
}
@@ -715,7 +818,7 @@ void LLVertexBuffer::destroyGLIndices()
}
else
{
- ll_aligned_free_16(mMappedIndexData);
+ FREE_MEM(sPrivatePoolp, mMappedIndexData) ;
mMappedIndexData = NULL;
mEmpty = TRUE;
}
@@ -848,8 +951,8 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)
{
if (!useVBOs())
{
- ll_aligned_free_16(mMappedData);
- mMappedData = (U8*) ll_aligned_malloc_16(newsize);
+ FREE_MEM(sPrivatePoolp, mMappedData);
+ mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, newsize);
}
mResized = TRUE;
}
@@ -869,8 +972,8 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)
{
if (!useVBOs())
{
- ll_aligned_free_16(mMappedIndexData);
- mMappedIndexData = (U8*) ll_aligned_malloc_16(new_index_size);
+ FREE_MEM(sPrivatePoolp, mMappedIndexData) ;
+ mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, new_index_size);
}
mResized = TRUE;
}
@@ -892,17 +995,11 @@ BOOL LLVertexBuffer::useVBOs() const
{
//it's generally ineffective to use VBO for things that are streaming on apple
-#if LL_DARWIN
- if (!mUsage || mUsage == GL_STREAM_DRAW_ARB)
- {
- return FALSE;
- }
-#else
if (!mUsage)
{
return FALSE;
}
-#endif
+
return TRUE;
}
@@ -911,8 +1008,8 @@ void LLVertexBuffer::freeClientBuffer()
{
if(useVBOs() && sDisableVBOMapping && (mMappedData || mMappedIndexData))
{
- ll_aligned_free_16(mMappedData) ;
- ll_aligned_free_16(mMappedIndexData) ;
+ FREE_MEM(sPrivatePoolp, mMappedData) ;
+ FREE_MEM(sPrivatePoolp, mMappedIndexData) ;
mMappedData = NULL ;
mMappedIndexData = NULL ;
}
@@ -922,7 +1019,7 @@ void LLVertexBuffer::allocateClientVertexBuffer()
{
if(!mMappedData)
{
- mMappedData = (U8*)ll_aligned_malloc_16(getSize());
+ mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, getSize());
}
}
@@ -930,7 +1027,7 @@ void LLVertexBuffer::allocateClientIndexBuffer()
{
if(!mMappedIndexData)
{
- mMappedIndexData = (U8*)ll_aligned_malloc_16(getIndicesSize());
+ mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, getIndicesSize());
}
}
@@ -967,8 +1064,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
if (useVBOs())
{
-
- if (sDisableVBOMapping || gGLManager.mHasMapBufferRange)
+ if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (count == -1)
{
@@ -1008,6 +1104,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES);
setBuffer(0, type);
mVertexLocked = TRUE;
+ sMappedCount++;
stop_glerror();
if(sDisableVBOMapping)
@@ -1018,29 +1115,50 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
else
{
U8* src = NULL;
-#ifdef GL_ARB_map_buffer_range
+ waitFence();
if (gGLManager.mHasMapBufferRange)
{
if (map_range)
{
+#ifdef GL_ARB_map_buffer_range
S32 offset = mOffsets[type] + sTypeSize[type]*index;
S32 length = (sTypeSize[type]*count+0xF) & ~0xF;
- src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
+ src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, offset, length,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT |
+ GL_MAP_INVALIDATE_RANGE_BIT);
+#endif
}
else
{
- src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT);
+#ifdef GL_ARB_map_buffer_range
+ src = (U8*) glMapBufferRange(GL_ARRAY_BUFFER_ARB, 0, mSize,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT);
+#endif
+ }
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+ if (map_range)
+ {
+ glBufferParameteriAPPLE(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_FALSE);
+ glBufferParameteriAPPLE(GL_ARRAY_BUFFER_ARB, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE);
+ src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
+ }
+ else
+ {
+ src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
}
else
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
{
map_range = false;
src = (U8*) glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
+ llassert(src != NULL);
+
mMappedData = LL_NEXT_ALIGNED_ADDRESS<U8>(src);
mAlignedOffset = mMappedData - src;
@@ -1051,12 +1169,9 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
{
log_glerror();
- //check the availability of memory
- U32 avail_phy_mem, avail_vir_mem;
- LLMemoryInfo::getAvailableMemoryKB(avail_phy_mem, avail_vir_mem) ;
- llinfos << "Available physical mwmory(KB): " << avail_phy_mem << llendl ;
- llinfos << "Available virtual memory(KB): " << avail_vir_mem << llendl;
-
+ //check the availability of memory
+ LLMemory::logMemoryInfo(TRUE) ;
+
if(!sDisableVBOMapping)
{
//--------------------
@@ -1082,7 +1197,6 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
llerrs << "memory allocation for vertex data failed." << llendl ;
}
}
- sMappedCount++;
}
}
else
@@ -1090,7 +1204,7 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran
map_range = false;
}
- if (map_range && !sDisableVBOMapping)
+ if (map_range && gGLManager.mHasMapBufferRange && !sDisableVBOMapping)
{
return mMappedData;
}
@@ -1114,7 +1228,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
if (useVBOs())
{
- if (sDisableVBOMapping || gGLManager.mHasMapBufferRange)
+ if (sDisableVBOMapping || gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (count == -1)
{
@@ -1152,6 +1266,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
setBuffer(0, TYPE_INDEX);
mIndexLocked = TRUE;
+ sMappedCount++;
stop_glerror();
if(sDisableVBOMapping)
@@ -1162,29 +1277,51 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
else
{
U8* src = NULL;
-#ifdef GL_ARB_map_buffer_range
+ waitFence();
if (gGLManager.mHasMapBufferRange)
{
if (map_range)
{
+#ifdef GL_ARB_map_buffer_range
S32 offset = sizeof(U16)*index;
S32 length = sizeof(U16)*count;
- src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
+ src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT |
+ GL_MAP_INVALIDATE_RANGE_BIT);
+#endif
+ }
+ else
+ {
+#ifdef GL_ARB_map_buffer_range
+ src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices,
+ GL_MAP_WRITE_BIT |
+ GL_MAP_FLUSH_EXPLICIT_BIT);
+#endif
+ }
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+ if (map_range)
+ {
+ glBufferParameteriAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_FALSE);
+ glBufferParameteriAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE);
+ src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
else
{
- src = (U8*) glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, sizeof(U16)*mNumIndices, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT);
+ src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
}
else
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
{
map_range = false;
src = (U8*) glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
}
+ llassert(src != NULL);
+
+
mMappedIndexData = src; //LL_NEXT_ALIGNED_ADDRESS<U8>(src);
mAlignedIndexOffset = mMappedIndexData - src;
stop_glerror();
@@ -1194,6 +1331,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
if (!mMappedIndexData)
{
log_glerror();
+ LLMemory::logMemoryInfo(TRUE) ;
if(!sDisableVBOMapping)
{
@@ -1211,15 +1349,13 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)
llerrs << "memory allocation for Index data failed. " << llendl ;
}
}
-
- sMappedCount++;
}
else
{
map_range = false;
}
- if (map_range && !sDisableVBOMapping)
+ if (map_range && gGLManager.mHasMapBufferRange && !sDisableVBOMapping)
{
return mMappedIndexData;
}
@@ -1268,8 +1404,7 @@ void LLVertexBuffer::unmapBuffer(S32 type)
}
else
{
-#ifdef GL_ARB_map_buffer_range
- if (gGLManager.mHasMapBufferRange)
+ if (gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (!mMappedVertexRegions.empty())
{
@@ -1279,16 +1414,22 @@ void LLVertexBuffer::unmapBuffer(S32 type)
const MappedRegion& region = mMappedVertexRegions[i];
S32 offset = region.mIndex >= 0 ? mOffsets[region.mType]+sTypeSize[region.mType]*region.mIndex : 0;
S32 length = sTypeSize[region.mType]*region.mCount;
- glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length);
+ if (gGLManager.mHasMapBufferRange)
+ {
+#ifdef GL_ARB_map_buffer_range
+ glFlushMappedBufferRange(GL_ARRAY_BUFFER_ARB, offset, length);
+#endif
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+ glFlushMappedBufferRangeAPPLE(GL_ARRAY_BUFFER_ARB, offset, length);
+ }
stop_glerror();
}
mMappedVertexRegions.clear();
}
}
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
stop_glerror();
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
stop_glerror();
@@ -1326,8 +1467,7 @@ void LLVertexBuffer::unmapBuffer(S32 type)
}
else
{
-#ifdef GL_ARB_map_buffer_range
- if (gGLManager.mHasMapBufferRange)
+ if (gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange)
{
if (!mMappedIndexRegions.empty())
{
@@ -1336,16 +1476,24 @@ void LLVertexBuffer::unmapBuffer(S32 type)
const MappedRegion& region = mMappedIndexRegions[i];
S32 offset = region.mIndex >= 0 ? sizeof(U16)*region.mIndex : 0;
S32 length = sizeof(U16)*region.mCount;
- glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);
+ if (gGLManager.mHasMapBufferRange)
+ {
+#ifdef GL_ARB_map_buffer_range
+ glFlushMappedBufferRange(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);
+#endif
+ }
+ else if (gGLManager.mHasFlushBufferRange)
+ {
+#ifdef GL_APPLE_flush_buffer_range
+ glFlushMappedBufferRangeAPPLE(GL_ELEMENT_ARRAY_BUFFER_ARB, offset, length);
+#endif
+ }
stop_glerror();
}
mMappedIndexRegions.clear();
}
}
-#else
- llassert_always(!gGLManager.mHasMapBufferRange);
-#endif
stop_glerror();
glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
stop_glerror();
diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h
index aa5df305a6..578cec3885 100644
--- a/indra/llrender/llvertexbuffer.h
+++ b/indra/llrender/llvertexbuffer.h
@@ -70,10 +70,16 @@ protected:
}
};
+class LLGLFence
+{
+public:
+ virtual void placeFence() = 0;
+ virtual void wait() = 0;
+};
//============================================================================
// base class
-
+class LLPrivateMemoryPool ;
class LLVertexBuffer : public LLRefCount
{
public:
@@ -270,6 +276,15 @@ protected:
std::vector<MappedRegion> mMappedVertexRegions;
std::vector<MappedRegion> mMappedIndexRegions;
+ mutable LLGLFence* mFence;
+
+ void placeFence() const;
+ void waitFence() const;
+
+
+private:
+ static LLPrivateMemoryPool* sPrivatePoolp ;
+
public:
static S32 sCount;
static S32 sGLCount;
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 684e393cba..b3b2f4ae56 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -28,6 +28,9 @@ include_directories(
set(llui_SOURCE_FILES
llaccordionctrl.cpp
llaccordionctrltab.cpp
+ llbadge.cpp
+ llbadgeholder.cpp
+ llbadgeowner.cpp
llbutton.cpp
llcheckboxctrl.cpp
llclipboard.cpp
@@ -93,6 +96,7 @@ set(llui_SOURCE_FILES
lltextparser.cpp
lltextutil.cpp
lltextvalidate.cpp
+ lltimectrl.cpp
lltransutil.cpp
lltoggleablemenu.cpp
lltooltip.cpp
@@ -119,6 +123,9 @@ set(llui_HEADER_FILES
llaccordionctrl.h
llaccordionctrltab.h
+ llbadge.h
+ llbadgeholder.h
+ llbadgeowner.h
llbutton.h
llcallbackmap.h
llcheckboxctrl.h
@@ -160,7 +167,7 @@ set(llui_HEADER_FILES
llnotificationslistener.h
llnotificationsutil.h
llnotificationtemplate.h
- llnotificationvisibilityrule.h
+ llnotificationvisibilityrule.h
llpanel.h
llprogressbar.h
llradiogroup.h
@@ -191,6 +198,7 @@ set(llui_HEADER_FILES
lltextparser.h
lltextutil.h
lltextvalidate.h
+ lltimectrl.h
lltoggleablemenu.h
lltooltip.h
lltransutil.h
@@ -245,11 +253,11 @@ target_link_libraries(llui
)
# Add tests
-if (LL_TESTS)
- include(LLAddBuildTest)
- SET(llui_TEST_SOURCE_FILES
- llurlmatch.cpp
- llurlentry.cpp
- )
- LL_ADD_PROJECT_UNIT_TESTS(llui "${llui_TEST_SOURCE_FILES}")
-endif (LL_TESTS) \ No newline at end of file
+if(LL_TESTS)
+ include(LLAddBuildTest)
+ SET(llui_TEST_SOURCE_FILES
+ llurlmatch.cpp
+ llurlentry.cpp
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llui "${llui_TEST_SOURCE_FILES}")
+endif(LL_TESTS)
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
index 9e4849c58b..6afe276379 100644
--- a/indra/llui/llaccordionctrltab.cpp
+++ b/indra/llui/llaccordionctrltab.cpp
@@ -1022,7 +1022,7 @@ void LLAccordionCtrlTab::updateLayout ( const LLRect& child_rect )
S32 panel_width = child_rect.getWidth();
static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
- if(mScrollbar->getVisible() != false)
+ if(mScrollbar && mScrollbar->getVisible() != false)
{
panel_top+=mScrollbar->getDocPos();
panel_width-=scrollbar_size;
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
new file mode 100644
index 0000000000..fde3c53a65
--- /dev/null
+++ b/indra/llui/llbadge.cpp
@@ -0,0 +1,294 @@
+/**
+ * @file llbadge.cpp
+ * @brief Implementation for badges
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#define LLBADGE_CPP
+#include "llbadge.h"
+
+#include "lluictrlfactory.h"
+
+
+static LLDefaultChildRegistry::Register<LLBadge> r("badge");
+
+// Compiler optimization, generate extern template
+template class LLBadge* LLView::getChild<class LLBadge>(const std::string& name, BOOL recurse) const;
+
+
+LLBadge::Params::Params()
+ : image("image")
+ , border_image("border_image")
+ , border_color("border_color")
+ , image_color("image_color")
+ , label("label")
+ , label_color("label_color")
+ , label_offset_horiz("label_offset_horiz")
+ , label_offset_vert("label_offset_vert")
+ , location("location", LLRelPos::TOP_LEFT)
+ , location_percent_hcenter("location_percent_hcenter")
+ , location_percent_vcenter("location_percent_vcenter")
+ , padding_horiz("padding_horiz")
+ , padding_vert("padding_vert")
+{
+ // We set a name here so the name isn't necessary in any xml files that use badges
+ name = "badge";
+}
+
+bool LLBadge::Params::equals(const Params& a) const
+{
+ bool comp = true;
+
+ // skip owner in comparison on purpose
+
+ comp &= (border_image() == a.border_image());
+ comp &= (border_color() == a.border_color());
+ comp &= (image() == a.image());
+ comp &= (image_color() == a.image_color());
+ comp &= (label() == a.label());
+ comp &= (label_color() == a.label_color());
+ comp &= (label_offset_horiz() == a.label_offset_horiz());
+ comp &= (label_offset_vert() == a.label_offset_vert());
+ comp &= (location() == a.location());
+ comp &= (location_percent_hcenter() == a.location_percent_hcenter());
+ comp &= (location_percent_vcenter() == a.location_percent_vcenter());
+ comp &= (padding_horiz() == a.padding_horiz());
+ comp &= (padding_vert() == a.padding_vert());
+
+ return comp;
+}
+
+LLBadge::LLBadge(const LLBadge::Params& p)
+ : LLUICtrl(p)
+ , mOwner(p.owner)
+ , mBorderImage(p.border_image)
+ , mBorderColor(p.border_color)
+ , mGLFont(p.font)
+ , mImage(p.image)
+ , mImageColor(p.image_color)
+ , mLabel(p.label)
+ , mLabelColor(p.label_color)
+ , mLabelOffsetHoriz(p.label_offset_horiz)
+ , mLabelOffsetVert(p.label_offset_vert)
+ , mLocation(p.location)
+ , mLocationPercentHCenter(0.5f)
+ , mLocationPercentVCenter(0.5f)
+ , mPaddingHoriz(p.padding_horiz)
+ , mPaddingVert(p.padding_vert)
+{
+ if (mImage.isNull())
+ {
+ llwarns << "Badge: " << getName() << " with no image!" << llendl;
+ }
+
+ //
+ // The following logic is to set the mLocationPercentHCenter and mLocationPercentVCenter
+ // based on the Location enum and our horizontal and vertical location percentages. The
+ // draw code then uses this on the owner rectangle to compute the screen location for
+ // the badge.
+ //
+
+ if (!LLRelPos::IsCenter(mLocation))
+ {
+ F32 h_center = p.location_percent_hcenter * 0.01f;
+ F32 v_center = p.location_percent_vcenter * 0.01f;
+
+ if (LLRelPos::IsRight(mLocation))
+ {
+ mLocationPercentHCenter = 0.5f * (1.0f + h_center);
+ }
+ else if (LLRelPos::IsLeft(mLocation))
+ {
+ mLocationPercentHCenter = 0.5f * (1.0f - h_center);
+ }
+
+ if (LLRelPos::IsTop(mLocation))
+ {
+ mLocationPercentVCenter = 0.5f * (1.0f + v_center);
+ }
+ else if (LLRelPos::IsBottom(mLocation))
+ {
+ mLocationPercentVCenter = 0.5f * (1.0f - v_center);
+ }
+ }
+}
+
+LLBadge::~LLBadge()
+{
+}
+
+bool LLBadge::addToView(LLView * view)
+{
+ bool child_added = view->addChild(this);
+
+ if (child_added)
+ {
+ setShape(view->getLocalRect());
+ }
+
+ return child_added;
+}
+
+void LLBadge::setLabel(const LLStringExplicit& label)
+{
+ mLabel = label;
+}
+
+//
+// This is a fallback function to render a rectangle for badges without a valid image
+//
+void renderBadgeBackground(F32 centerX, F32 centerY, F32 width, F32 height, const LLColor4U &color)
+{
+ gGL.pushUIMatrix();
+ gGL.loadUIIdentity();
+ gGL.setSceneBlendType(LLRender::BT_REPLACE);
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+
+ gGL.color4ubv(color.mV);
+ gGL.texCoord2i(0, 0);
+
+ F32 x = LLFontGL::sCurOrigin.mX + centerX - width * 0.5f;
+ F32 y = LLFontGL::sCurOrigin.mY + centerY - height * 0.5f;
+
+ LLRectf screen_rect(llround(x),
+ llround(y),
+ llround(x) + width,
+ llround(y) + height);
+
+ LLVector3 vertices[4];
+ vertices[0] = LLVector3(screen_rect.mRight, screen_rect.mTop, 1.0f);
+ vertices[1] = LLVector3(screen_rect.mLeft, screen_rect.mTop, 1.0f);
+ vertices[2] = LLVector3(screen_rect.mLeft, screen_rect.mBottom, 1.0f);
+ vertices[3] = LLVector3(screen_rect.mRight, screen_rect.mBottom, 1.0f);
+
+ gGL.begin(LLRender::QUADS);
+ {
+ gGL.vertexBatchPreTransformed(vertices, 4);
+ }
+ gGL.end();
+
+ gGL.popUIMatrix();
+}
+
+
+// virtual
+void LLBadge::draw()
+{
+ if (!mLabel.empty())
+ {
+ LLView* owner_view = mOwner.get();
+
+ if (owner_view)
+ {
+ //
+ // Calculate badge position based on owner
+ //
+
+ LLRect owner_rect;
+ owner_view->localRectToOtherView(owner_view->getLocalRect(), & owner_rect, this);
+
+ F32 badge_center_x = owner_rect.mLeft + owner_rect.getWidth() * mLocationPercentHCenter;
+ F32 badge_center_y = owner_rect.mBottom + owner_rect.getHeight() * mLocationPercentVCenter;
+
+ //
+ // Calculate badge size based on label text
+ //
+
+ LLWString badge_label_wstring = mLabel;
+
+ S32 badge_label_begin_offset = 0;
+ S32 badge_char_length = S32_MAX;
+ S32 badge_pixel_length = S32_MAX;
+ F32 *right_position_out = NULL;
+ BOOL do_not_use_ellipses = false;
+
+ F32 badge_width = (2.0f * mPaddingHoriz) +
+ mGLFont->getWidthF32(badge_label_wstring.c_str(), badge_label_begin_offset, badge_char_length);
+
+ F32 badge_height = (2.0f * mPaddingVert) + mGLFont->getLineHeight();
+
+ //
+ // Draw button image, if available.
+ // Otherwise draw basic rectangular button.
+ //
+
+ F32 alpha = getDrawContext().mAlpha;
+
+ if (!mImage.isNull())
+ {
+ F32 badge_x = badge_center_x - badge_width * 0.5f;
+ F32 badge_y = badge_center_y - badge_height * 0.5f;
+
+ mImage->drawSolid((S32) badge_x, (S32) badge_y, (S32) badge_width, (S32) badge_height, mImageColor % alpha);
+
+ if (!mBorderImage.isNull())
+ {
+ mBorderImage->drawSolid((S32) badge_x, (S32) badge_y, (S32) badge_width, (S32) badge_height, mBorderColor % alpha);
+ }
+ }
+ else
+ {
+ lldebugs << "No image for badge " << getName() << " on owner " << owner_view->getName() << llendl;
+
+ renderBadgeBackground(badge_center_x, badge_center_y,
+ badge_width, badge_height,
+ mImageColor % alpha);
+ }
+
+ //
+ // Draw the label
+ //
+
+ mGLFont->render(badge_label_wstring,
+ badge_label_begin_offset,
+ badge_center_x + mLabelOffsetHoriz,
+ badge_center_y + mLabelOffsetVert,
+ mLabelColor % alpha,
+ LLFontGL::HCENTER, LLFontGL::VCENTER, // centered around the position
+ LLFontGL::NORMAL, // normal text (not bold, italics, etc.)
+ LLFontGL::DROP_SHADOW_SOFT,
+ badge_char_length, badge_pixel_length,
+ right_position_out, do_not_use_ellipses);
+ }
+ }
+}
+
+
+namespace LLInitParam
+{
+ void TypeValues<LLRelPos::Location>::declareValues()
+ {
+ declare("bottom", LLRelPos::BOTTOM);
+ declare("bottom_left", LLRelPos::BOTTOM_LEFT);
+ declare("bottom_right", LLRelPos::BOTTOM_RIGHT);
+ declare("center", LLRelPos::CENTER);
+ declare("left", LLRelPos::LEFT);
+ declare("right", LLRelPos::RIGHT);
+ declare("top", LLRelPos::TOP);
+ declare("top_left", LLRelPos::TOP_LEFT);
+ declare("top_right", LLRelPos::TOP_RIGHT);
+ }
+}
+
+
+// eof
diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h
new file mode 100644
index 0000000000..f81ccdf0cd
--- /dev/null
+++ b/indra/llui/llbadge.h
@@ -0,0 +1,167 @@
+/**
+ * @file llbadge.h
+ * @brief Header for badges
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBADGE_H
+#define LL_LLBADGE_H
+
+#include <string>
+
+#include "lluicolor.h"
+#include "lluictrl.h"
+#include "llstring.h"
+#include "lluiimage.h"
+#include "llview.h"
+
+//
+// Declarations
+//
+
+class LLUICtrlFactory;
+class LLFontGL;
+
+//
+// Relative Position Alignment
+//
+
+namespace LLRelPos
+{
+ enum Location
+ {
+ CENTER = 0,
+
+ LEFT = (1 << 0),
+ RIGHT = (1 << 1),
+
+ TOP = (1 << 2),
+ BOTTOM = (1 << 3),
+
+ BOTTOM_LEFT = (BOTTOM | LEFT),
+ BOTTOM_RIGHT = (BOTTOM | RIGHT),
+
+ TOP_LEFT = (TOP | LEFT),
+ TOP_RIGHT = (TOP | RIGHT),
+ };
+
+ inline bool IsBottom(Location relPos) { return (relPos & BOTTOM) == BOTTOM; }
+ inline bool IsCenter(Location relPos) { return (relPos == CENTER); }
+ inline bool IsLeft(Location relPos) { return (relPos & LEFT) == LEFT; }
+ inline bool IsRight(Location relPos) { return (relPos & RIGHT) == RIGHT; }
+ inline bool IsTop(Location relPos) { return (relPos & TOP) == TOP; }
+}
+
+// NOTE: This needs to occur before Optional<LLRelPos::Location> declaration for proper compilation.
+namespace LLInitParam
+{
+ template<>
+ struct TypeValues<LLRelPos::Location> : public TypeValuesHelper<LLRelPos::Location>
+ {
+ static void declareValues();
+ };
+}
+
+//
+// Classes
+//
+
+class LLBadge
+: public LLUICtrl
+{
+public:
+ struct Params
+ : public LLInitParam::Block<Params, LLUICtrl::Params>
+ {
+ Optional< LLHandle<LLView> > owner; // Mandatory in code but not in xml
+
+ Optional< LLUIImage* > border_image;
+ Optional< LLUIColor > border_color;
+
+ Optional< LLUIImage* > image;
+ Optional< LLUIColor > image_color;
+
+ Optional< std::string > label;
+ Optional< LLUIColor > label_color;
+
+ Optional< S32 > label_offset_horiz;
+ Optional< S32 > label_offset_vert;
+
+ Optional< LLRelPos::Location > location;
+ Optional< U32 > location_percent_hcenter;
+ Optional< U32 > location_percent_vcenter;
+
+ Optional< F32 > padding_horiz;
+ Optional< F32 > padding_vert;
+
+ Params();
+
+ bool equals(const Params&) const;
+ };
+
+protected:
+ friend class LLUICtrlFactory;
+ LLBadge(const Params& p);
+
+public:
+
+ ~LLBadge();
+
+ bool addToView(LLView * view);
+
+ virtual void draw();
+
+ const std::string getLabel() const { return wstring_to_utf8str(mLabel); }
+ void setLabel( const LLStringExplicit& label);
+
+private:
+ LLPointer< LLUIImage > mBorderImage;
+ LLUIColor mBorderColor;
+
+ const LLFontGL* mGLFont;
+
+ LLPointer< LLUIImage > mImage;
+ LLUIColor mImageColor;
+
+ LLUIString mLabel;
+ LLUIColor mLabelColor;
+
+ S32 mLabelOffsetHoriz;
+ S32 mLabelOffsetVert;
+
+ LLRelPos::Location mLocation;
+ F32 mLocationPercentHCenter;
+ F32 mLocationPercentVCenter;
+
+ LLHandle< LLView > mOwner;
+
+ F32 mPaddingHoriz;
+ F32 mPaddingVert;
+};
+
+// Build time optimization, generate once in .cpp file
+#ifndef LLBADGE_CPP
+extern template class LLBadge* LLView::getChild<class LLBadge>(const std::string& name, BOOL recurse) const;
+#endif
+
+#endif // LL_LLBADGE_H
diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp
new file mode 100644
index 0000000000..1f786f36ae
--- /dev/null
+++ b/indra/llui/llbadgeholder.cpp
@@ -0,0 +1,45 @@
+/**
+ * @file llbadgeholder.cpp
+ * @brief Source for badge holders
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llbadgeholder.h"
+
+#include "llbadge.h"
+#include "llview.h"
+
+
+bool LLBadgeHolder::addBadge(LLBadge * badge)
+{
+ bool badge_added = false;
+
+ LLView * this_view = dynamic_cast<LLView *>(this);
+
+ if (this_view && mAcceptsBadge)
+ {
+ badge_added = badge->addToView(this_view);
+ }
+
+ return badge_added;
+}
diff --git a/indra/newview/lldrawpoolclouds.h b/indra/llui/llbadgeholder.h
index 019f11a795..2538eaae91 100644
--- a/indra/newview/lldrawpoolclouds.h
+++ b/indra/llui/llbadgeholder.h
@@ -1,8 +1,8 @@
/**
- * @file lldrawpoolclouds.h
- * @brief LLDrawPoolClouds class definition
+ * @file llbadgeholder.h
+ * @brief Header for badge holders
*
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
@@ -24,31 +24,33 @@
* $/LicenseInfo$
*/
-#ifndef LL_LLDRAWPOOLCLOUDS_H
-#define LL_LLDRAWPOOLCLOUDS_H
+#ifndef LL_LLBADGEHOLDER_H
+#define LL_LLBADGEHOLDER_H
-#include "lldrawpool.h"
+//
+// Classes
+//
-class LLDrawPoolClouds : public LLDrawPool
+class LLBadge;
+
+class LLBadgeHolder
{
public:
- enum
+
+ LLBadgeHolder(bool acceptsBadge)
+ : mAcceptsBadge(acceptsBadge)
{
- VERTEX_DATA_MASK = LLVertexBuffer::MAP_VERTEX |
- LLVertexBuffer::MAP_NORMAL |
- LLVertexBuffer::MAP_TEXCOORD0
- };
+ }
+
+ void setAcceptsBadge(bool acceptsBadge) { mAcceptsBadge = acceptsBadge; }
+ bool acceptsBadge() const { return mAcceptsBadge; }
+
+ virtual bool addBadge(LLBadge * badge);
- BOOL addFace(LLFace* face);
- virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+private:
- LLDrawPoolClouds();
+ bool mAcceptsBadge;
- /*virtual*/ void prerender();
- /*virtual*/ LLDrawPool *instancePool();
- /*virtual*/ void enqueue(LLFace *face);
- /*virtual*/ void beginRenderPass(S32 pass);
- /*virtual*/ void render(S32 pass = 0);
};
-#endif // LL_LLDRAWPOOLSKY_H
+#endif // LL_LLBADGEHOLDER_H
diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp
new file mode 100644
index 0000000000..1860a05edd
--- /dev/null
+++ b/indra/llui/llbadgeowner.cpp
@@ -0,0 +1,131 @@
+/**
+ * @file llbadgeowner.cpp
+ * @brief Class to manage badges attached to a UI control
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llbadgeholder.h"
+#include "llbadgeowner.h"
+#include "llpanel.h"
+
+//
+// Classes
+//
+
+LLBadgeOwner::LLBadgeOwner(LLHandle< LLView > viewHandle)
+ : mBadge(NULL)
+ , mBadgeOwnerView(viewHandle)
+{
+}
+
+void LLBadgeOwner::initBadgeParams(const LLBadge::Params& p)
+{
+ if (!p.equals(LLUICtrlFactory::getDefaultParams<LLBadge>()))
+ {
+ mBadge = createBadge(p);
+ }
+}
+
+void LLBadgeOwner::setBadgeLabel(const LLStringExplicit& label)
+{
+ if (mBadge == NULL)
+ {
+ mBadge = createBadge(LLUICtrlFactory::getDefaultParams<LLBadge>());
+
+ addBadgeToParentPanel();
+ }
+
+ if (mBadge)
+ {
+ mBadge->setLabel(label);
+
+ //
+ // Push the badge to the front so it renders on top
+ //
+
+ LLView * parent = mBadge->getParent();
+
+ if (parent)
+ {
+ parent->sendChildToFront(mBadge);
+ }
+ }
+}
+
+void LLBadgeOwner::setBadgeVisibility(bool visible)
+{
+ if (mBadge)
+ {
+ mBadge->setVisible(visible);
+ }
+}
+
+bool LLBadgeOwner::addBadgeToParentPanel()
+{
+ bool badge_added = false;
+
+ LLView * owner_view = mBadgeOwnerView.get();
+
+ if (mBadge && owner_view)
+ {
+ LLBadgeHolder * badge_holder = NULL;
+
+ // Find the appropriate holder for the badge
+ LLView * parent = owner_view->getParent();
+
+ while (parent)
+ {
+ LLBadgeHolder * badge_holder_panel = dynamic_cast<LLBadgeHolder *>(parent);
+
+ if (badge_holder_panel && badge_holder_panel->acceptsBadge())
+ {
+ badge_holder = badge_holder_panel;
+ break;
+ }
+
+ parent = parent->getParent();
+ }
+
+ if (badge_holder)
+ {
+ badge_added = badge_holder->addBadge(mBadge);
+ }
+ else
+ {
+ // Badge parent is fallback badge owner if no valid holder exists in the hierarchy
+ badge_added = mBadge->addToView(owner_view);
+ }
+ }
+
+ return badge_added;
+}
+
+LLBadge* LLBadgeOwner::createBadge(const LLBadge::Params& p)
+{
+ LLBadge::Params badge_params(p);
+ badge_params.owner = mBadgeOwnerView;
+
+ return LLUICtrlFactory::create<LLBadge>(badge_params);
+}
diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h
new file mode 100644
index 0000000000..8d03e30645
--- /dev/null
+++ b/indra/llui/llbadgeowner.h
@@ -0,0 +1,61 @@
+/**
+ * @file llbadgeowner.h
+ * @brief Header for badge owners
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBADGEOWNER_H
+#define LL_LLBADGEOWNER_H
+
+#include "llbadge.h"
+#include "llview.h"
+
+//
+// Classes
+//
+
+class LLBadgeOwner
+{
+public:
+
+ LLBadgeOwner(LLHandle< LLView > viewHandle);
+
+ void initBadgeParams(const LLBadge::Params& p);
+ bool addBadgeToParentPanel();
+
+ bool badgeHasParent() const { return (mBadge && mBadge->getParent()); }
+
+ void setBadgeLabel(const LLStringExplicit& label);
+ void setBadgeVisibility(bool visible);
+
+private:
+
+ LLBadge* createBadge(const LLBadge::Params& p);
+
+private:
+
+ LLBadge* mBadge;
+ LLHandle< LLView > mBadgeOwnerView;
+};
+
+#endif // LL_LLBADGEOWNER_H
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index 45ceaff696..7b015bd576 100644
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -99,7 +99,9 @@ LLButton::Params::Params()
scale_image("scale_image", true),
hover_glow_amount("hover_glow_amount"),
commit_on_return("commit_on_return", true),
- use_draw_context_alpha("use_draw_context_alpha", true)
+ use_draw_context_alpha("use_draw_context_alpha", true),
+ badge("badge"),
+ handle_right_mouse("handle_right_mouse")
{
addSynonym(is_toggle, "toggle");
held_down_delay.seconds = 0.5f;
@@ -109,6 +111,7 @@ LLButton::Params::Params()
LLButton::LLButton(const LLButton::Params& p)
: LLUICtrl(p),
+ LLBadgeOwner(LLView::getHandle()),
mMouseDownFrame(0),
mMouseHeldDownCount(0),
mBorderEnabled( FALSE ),
@@ -160,8 +163,8 @@ LLButton::LLButton(const LLButton::Params& p)
mMouseDownSignal(NULL),
mMouseUpSignal(NULL),
mHeldDownSignal(NULL),
- mUseDrawContextAlpha(p.use_draw_context_alpha)
-
+ mUseDrawContextAlpha(p.use_draw_context_alpha),
+ mHandleRightMouse(p.handle_right_mouse)
{
static LLUICachedControl<S32> llbutton_orig_h_pad ("UIButtonOrigHPad", 0);
static Params default_params(LLUICtrlFactory::getDefaultParams<LLButton>());
@@ -244,6 +247,11 @@ LLButton::LLButton(const LLButton::Params& p)
{
setHeldDownCallback(initCommitCallback(p.mouse_held_callback));
}
+
+ if (p.badge.isProvided())
+ {
+ LLBadgeOwner::initBadgeParams(p.badge());
+ }
}
LLButton::~LLButton()
@@ -327,8 +335,12 @@ boost::signals2::connection LLButton::setHeldDownCallback( button_callback_t cb,
BOOL LLButton::postBuild()
{
autoResize();
- return TRUE;
+
+ addBadgeToParentPanel();
+
+ return LLUICtrl::postBuild();
}
+
BOOL LLButton::handleUnicodeCharHere(llwchar uni_char)
{
BOOL handled = FALSE;
@@ -447,7 +459,7 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL LLButton::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
- if (!childrenHandleRightMouseDown(x, y, mask))
+ if (mHandleRightMouse && !childrenHandleRightMouseDown(x, y, mask))
{
// Route future Mouse messages here preemptively. (Release on mouse up.)
gFocusMgr.setMouseCapture( this );
@@ -460,37 +472,42 @@ BOOL LLButton::handleRightMouseDown(S32 x, S32 y, MASK mask)
// if (pointInView(x, y))
// {
// }
+ // send the mouse down signal
+ LLUICtrl::handleRightMouseDown(x,y,mask);
+ // *TODO: Return result of LLUICtrl call above? Should defer to base class
+ // but this might change the mouse handling of existing buttons in a bad way
+ // if they are not mouse opaque.
}
- // send the mouse down signal
- LLUICtrl::handleRightMouseDown(x,y,mask);
- // *TODO: Return result of LLUICtrl call above? Should defer to base class
- // but this might change the mouse handling of existing buttons in a bad way
- // if they are not mouse opaque.
+
return TRUE;
}
BOOL LLButton::handleRightMouseUp(S32 x, S32 y, MASK mask)
{
- // We only handle the click if the click both started and ended within us
- if( hasMouseCapture() )
+ if (mHandleRightMouse)
{
- // Always release the mouse
- gFocusMgr.setMouseCapture( NULL );
+ // We only handle the click if the click both started and ended within us
+ if( hasMouseCapture() )
+ {
+ // Always release the mouse
+ gFocusMgr.setMouseCapture( NULL );
-// if (pointInView(x, y))
-// {
-// mRightMouseUpSignal(this, x,y,mask);
-// }
- }
- else
- {
- childrenHandleRightMouseUp(x, y, mask);
+ // if (pointInView(x, y))
+ // {
+ // mRightMouseUpSignal(this, x,y,mask);
+ // }
+ }
+ else
+ {
+ childrenHandleRightMouseUp(x, y, mask);
+ }
+
+ // send the mouse up signal
+ LLUICtrl::handleRightMouseUp(x,y,mask);
+ // *TODO: Return result of LLUICtrl call above? Should defer to base class
+ // but this might change the mouse handling of existing buttons in a bad way.
+ // if they are not mouse opaque.
}
- // send the mouse up signal
- LLUICtrl::handleRightMouseUp(x,y,mask);
- // *TODO: Return result of LLUICtrl call above? Should defer to base class
- // but this might change the mouse handling of existing buttons in a bad way.
- // if they are not mouse opaque.
return TRUE;
}
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
index 0cfc393e05..5968916006 100644
--- a/indra/llui/llbutton.h
+++ b/indra/llui/llbutton.h
@@ -27,6 +27,8 @@
#ifndef LL_LLBUTTON_H
#define LL_LLBUTTON_H
+#include "lluuid.h"
+#include "llbadgeowner.h"
#include "llcontrol.h"
#include "lluictrl.h"
#include "v4color.h"
@@ -52,15 +54,13 @@ S32 round_up(S32 grid, S32 value);
class LLUICtrlFactory;
-class LLUIImage;
-class LLUUID;
//
// Classes
//
class LLButton
-: public LLUICtrl
+: public LLUICtrl, public LLBadgeOwner
{
public:
struct Params
@@ -125,7 +125,11 @@ public:
Optional<F32> hover_glow_amount;
Optional<TimeIntervalParam> held_down_delay;
- Optional<bool> use_draw_context_alpha;
+ Optional<bool> use_draw_context_alpha;
+
+ Optional<LLBadge::Params> badge;
+
+ Optional<bool> handle_right_mouse;
Params();
};
@@ -249,7 +253,7 @@ public:
void setImageDisabledSelected(LLPointer<LLUIImage> image);
void setImageFlash(LLPointer<LLUIImage> image);
void setImagePressed(LLPointer<LLUIImage> image);
-
+
void setCommitOnReturn(BOOL commit) { mCommitOnReturn = commit; }
BOOL getCommitOnReturn() const { return mCommitOnReturn; }
@@ -357,6 +361,8 @@ private:
bool mForcePressedState;
LLFrameTimer mFlashingTimer;
+
+ bool mHandleRightMouse;
};
// Build time optimization, generate once in .cpp file
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index a4d1854bc8..89d8842393 100644
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -525,15 +525,12 @@ void LLComboBox::createLineEditor(const LLComboBox::Params& p)
else
{
mButton->setRect(rect);
- mButton->setTabStop(TRUE);
- mButton->setHAlign(LLFontGL::LEFT);
mButton->setLabel(mLabel.getString());
if (mTextEntry)
{
mTextEntry->setVisible(FALSE);
}
- mButton->setFollowsAll();
}
}
@@ -791,8 +788,10 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
return FALSE;
}
// if selection has changed, pop open list
- else if (mList->getLastSelectedItem() != last_selected_item ||
- (key == KEY_DOWN || key == KEY_UP) && !mList->isEmpty())
+ else if (mList->getLastSelectedItem() != last_selected_item
+ || ((key == KEY_DOWN || key == KEY_UP)
+ && mList->getCanSelect()
+ && !mList->isEmpty()))
{
showList();
}
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index 06bad1f371..161496b1f5 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -132,6 +132,9 @@ void LLConsole::setFontSize(S32 size_index)
void LLConsole::draw()
{
+ // Units in pixels
+ static const F32 padding_horizontal = 10;
+ static const F32 padding_vertical = 3;
LLGLSUIDefault gls_ui;
// skip lines added more than mLinePersistTime ago
@@ -176,11 +179,9 @@ void LLConsole::draw()
// draw remaining lines
F32 y_pos = 0.f;
- LLUIImagePtr imagep = LLUI::getUIImage("Rounded_Square");
+ LLUIImagePtr imagep = LLUI::getUIImage("transparent");
-// F32 console_opacity = llclamp(gSavedSettings.getF32("ConsoleBackgroundOpacity"), 0.f, 1.f);
F32 console_opacity = llclamp(LLUI::sSettingGroups["config"]->getF32("ConsoleBackgroundOpacity"), 0.f, 1.f);
-// LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground");
LLColor4 color = LLUIColorTable::instance().getColor("ConsoleBackground");
color.mV[VALPHA] *= console_opacity;
@@ -188,8 +189,8 @@ void LLConsole::draw()
for(paragraph_it = mParagraphs.rbegin(); paragraph_it != mParagraphs.rend(); paragraph_it++)
{
- S32 target_height = llfloor( (*paragraph_it).mLines.size() * line_height + 8);
- S32 target_width = llfloor( (*paragraph_it).mMaxWidth +15);
+ S32 target_height = llfloor( (*paragraph_it).mLines.size() * line_height + padding_vertical);
+ S32 target_width = llfloor( (*paragraph_it).mMaxWidth + padding_horizontal);
y_pos += ((*paragraph_it).mLines.size()) * line_height;
imagep->drawSolid(-14, (S32)(y_pos + line_height - target_height), target_width, target_height, color);
@@ -234,7 +235,7 @@ void LLConsole::draw()
y_off += line_height;
}
}
- y_pos += 8;
+ y_pos += padding_vertical;
}
}
@@ -371,9 +372,7 @@ LLConsole::Paragraph::Paragraph (LLWString str, const LLColor4 &color, F32 add_t
// static
void LLConsole::updateClass()
{
- LLInstanceTrackerScopedGuard guard;
-
- for (instance_iter it = guard.beginInstances(); it != guard.endInstances(); ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
it->update();
}
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index d19e33ea55..8917d5490c 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -766,7 +766,6 @@ void LLFloater::closeFloater(bool app_quitting)
void LLFloater::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLPanel::reshape(width, height, called_from_parent);
- storeRectControl();
}
void LLFloater::releaseFocus()
@@ -968,6 +967,11 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user)
const LLRect old_rect = getRect();
LLView::handleReshape(new_rect, by_user);
+ if (by_user)
+ {
+ storeRectControl();
+ }
+
// if not minimized, adjust all snapped dependents to new shape
if (!isMinimized())
{
@@ -2048,7 +2052,6 @@ static LLDefaultChildRegistry::Register<LLFloaterView> r("floater_view");
LLFloaterView::LLFloaterView (const Params& p)
: LLUICtrl (p),
-
mFocusCycleMode(FALSE),
mMinimizePositionVOffset(0),
mSnapOffsetBottom(0),
@@ -2059,12 +2062,6 @@ LLFloaterView::LLFloaterView (const Params& p)
// By default, adjust vertical.
void LLFloaterView::reshape(S32 width, S32 height, BOOL called_from_parent)
{
- reshapeFloater(width, height, called_from_parent, ADJUST_VERTICAL_YES);
-}
-
-// When reshaping this view, make the floaters follow their closest edge.
-void LLFloaterView::reshapeFloater(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical)
-{
S32 old_width = getRect().getWidth();
S32 old_height = getRect().getHeight();
@@ -2109,11 +2106,7 @@ void LLFloaterView::reshapeFloater(S32 width, S32 height, BOOL called_from_paren
// "No vertical adjustment" usually means that the bottom of the view
// has been pushed up or down. Hence we want the floaters to follow
// the top.
- if (!adjust_vertical)
- {
- follow_flags |= FOLLOWS_TOP;
- }
- else if (top_offset < bottom_offset)
+ if (top_offset < bottom_offset)
{
follow_flags |= FOLLOWS_TOP;
}
@@ -2847,7 +2840,7 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
mAutoTile = p.auto_tile;
mOpenCentered = p.open_centered;
- if (p.save_rect)
+ if (p.save_rect && mRectControl.empty())
{
mRectControl = "t"; // flag to build mRectControl name once mInstanceName is set
}
@@ -2885,13 +2878,54 @@ boost::signals2::connection LLFloater::setCloseCallback( const commit_signal_t::
}
LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");
+static LLFastTimer::DeclareTimer FTM_EXTERNAL_FLOATER_LOAD("Load Extern Floater Reference");
bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)
{
- Params params(LLUICtrlFactory::getDefaultParams<LLFloater>());
+ Params default_params(LLUICtrlFactory::getDefaultParams<LLFloater>());
+ Params params(default_params);
+
LLXUIParser parser;
parser.readXUI(node, params, filename); // *TODO: Error checking
+ std::string xml_filename = params.filename;
+
+ if (!xml_filename.empty())
+ {
+ LLXMLNodePtr referenced_xml;
+
+ if (output_node)
+ {
+ //if we are exporting, we want to export the current xml
+ //not the referenced xml
+ Params output_params;
+ parser.readXUI(node, output_params, LLUICtrlFactory::getInstance()->getCurFileName());
+ setupParamsForExport(output_params, parent);
+ output_node->setName(node->getName()->mString);
+ parser.writeXUI(output_node, output_params, &default_params);
+ return TRUE;
+ }
+
+ LLUICtrlFactory::instance().pushFileName(xml_filename);
+
+ LLFastTimer _(FTM_EXTERNAL_FLOATER_LOAD);
+ if (!LLUICtrlFactory::getLayeredXMLNode(xml_filename, referenced_xml))
+ {
+ llwarns << "Couldn't parse panel from: " << xml_filename << llendl;
+
+ return FALSE;
+ }
+
+ parser.readXUI(referenced_xml, params, LLUICtrlFactory::getInstance()->getCurFileName());
+
+ // add children using dimensions from referenced xml for consistent layout
+ setShape(params.rect);
+ LLUICtrlFactory::createChildren(this, referenced_xml, child_registry_t::instance());
+
+ LLUICtrlFactory::instance().popFileName();
+ }
+
+
if (output_node)
{
Params output_params(params);
@@ -2912,7 +2946,6 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::str
{
params.rect.left.set(0);
}
-
params.from_xui = true;
applyXUILayout(params, parent);
initFromParams(params);
@@ -3054,3 +3087,25 @@ bool LLFloater::buildFromFile(const std::string& filename, LLXMLNodePtr output_n
return res;
}
+
+void LLFloater::stackWith(LLFloater& other)
+{
+ static LLUICachedControl<S32> floater_offset ("UIFloaterOffset", 16);
+
+ LLRect next_rect;
+ if (other.getHost())
+ {
+ next_rect = other.getHost()->getRect();
+ }
+ else
+ {
+ next_rect = other.getRect();
+ }
+ next_rect.translate(floater_offset, -floater_offset);
+
+ next_rect.setLeftTopAndSize(next_rect.mLeft, next_rect.mTop, getRect().getWidth(), getRect().getHeight());
+
+ mRectControl.clear(); // don't save rect of stacked floaters
+ setShape(next_rect);
+}
+
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index 5b7b020881..58c2d34253 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -253,7 +253,7 @@ public:
LLHandle<LLFloater> getHandle() const { return mHandle; }
const LLSD& getKey() { return mKey; }
- BOOL matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); }
+ virtual bool matchesKey(const LLSD& key) { return mSingleInstance || KeyCompare::equate(key, mKey); }
const std::string& getInstanceName() { return mInstanceName; }
@@ -265,6 +265,8 @@ public:
virtual void setTornOff(bool torn_off) { mTornOff = torn_off; }
+ void stackWith(LLFloater& other);
+
// Return a closeable floater, if any, given the current focus.
static LLFloater* getClosableFloaterFromFocus();
@@ -289,9 +291,6 @@ public:
void updateTransparency(ETypeTransparency transparency_type);
protected:
-
- void setRectControl(const std::string& rectname) { mRectControl = rectname; };
-
virtual void applySavedVariables();
void applyRectControl();
@@ -455,8 +454,6 @@ protected:
public:
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
- void reshapeFloater(S32 width, S32 height, BOOL called_from_parent, BOOL adjust_vertical);
-
/*virtual*/ void draw();
/*virtual*/ LLRect getSnapRect() const;
/*virtual*/ void refresh();
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
index 4677d535db..fc7dcfcc4e 100644
--- a/indra/llui/llfloaterreg.cpp
+++ b/indra/llui/llfloaterreg.cpp
@@ -57,7 +57,7 @@ void LLFloaterReg::add(const std::string& name, const std::string& filename, con
}
//static
-LLRect LLFloaterReg::getFloaterRect(const std::string& name)
+LLFloater* LLFloaterReg::getLastFloaterInGroup(const std::string& name)
{
LLRect rect;
const std::string& groupname = sGroupMap[name];
@@ -66,20 +66,10 @@ LLRect LLFloaterReg::getFloaterRect(const std::string& name)
instance_list_t& list = sInstanceMap[groupname];
if (!list.empty())
{
- static LLUICachedControl<S32> floater_offset ("UIFloaterOffset", 16);
- LLFloater* last_floater = list.back();
- if (last_floater->getHost())
- {
- rect = last_floater->getHost()->getRect();
- }
- else
- {
- rect = last_floater->getRect();
- }
- rect.translate(floater_offset, -floater_offset);
+ return list.back();
}
}
- return rect;
+ return NULL;
}
//static
@@ -129,17 +119,20 @@ LLFloater* LLFloaterReg::getInstance(const std::string& name, const LLSD& key)
}
// Note: key should eventually be a non optional LLFloater arg; for now, set mKey to be safe
- res->mKey = key;
+ if (res->mKey.isUndefined())
+ {
+ res->mKey = key;
+ }
res->setInstanceName(name);
res->applySavedVariables(); // Can't apply rect and dock state until setting instance name
if (res->mAutoTile && !res->getHost() && index > 0)
{
- const LLRect& cur_rect = res->getRect();
- LLRect next_rect = getFloaterRect(groupname);
- next_rect.setLeftTopAndSize(next_rect.mLeft, next_rect.mTop, cur_rect.getWidth(), cur_rect.getHeight());
- res->setRect(next_rect);
- res->setRectControl(LLStringUtil::null); // don't save rect of tiled floaters
- gFloaterView->adjustToFitScreen(res, true);
+ LLFloater* last_floater = getLastFloaterInGroup(groupname);
+ if (last_floater)
+ {
+ res->stackWith(*last_floater);
+ gFloaterView->adjustToFitScreen(res, true);
+ }
}
else
{
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
index 8414b92113..a2027a77a0 100644
--- a/indra/llui/llfloaterreg.h
+++ b/indra/llui/llfloaterreg.h
@@ -86,7 +86,7 @@ public:
const std::string& groupname = LLStringUtil::null);
// Helpers
- static LLRect getFloaterRect(const std::string& name);
+ static LLFloater* getLastFloaterInGroup(const std::string& name);
// Find / get (create) / remove / destroy
static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD());
diff --git a/indra/llui/llfunctorregistry.h b/indra/llui/llfunctorregistry.h
index 752c7df7ee..899cc3a326 100644
--- a/indra/llui/llfunctorregistry.h
+++ b/indra/llui/llfunctorregistry.h
@@ -103,7 +103,7 @@ public:
}
else
{
- llwarns << "tried to find '" << name << "' in LLFunctorRegistry, but it wasn't there." << llendl;
+ lldebugs << "tried to find '" << name << "' in LLFunctorRegistry, but it wasn't there." << llendl;
return mMap[LOGFUNCTOR];
}
}
@@ -115,7 +115,7 @@ private:
static void log_functor(const LLSD& notification, const LLSD& payload)
{
- llwarns << "log_functor called with payload: " << payload << llendl;
+ lldebugs << "log_functor called with payload: " << payload << llendl;
}
static void do_nothing(const LLSD& notification, const LLSD& payload)
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index 9b6830a816..a59247ba09 100644
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -49,6 +49,8 @@ void LLLayoutStack::OrientationNames::declareValues()
//
LLLayoutPanel::LLLayoutPanel(const Params& p)
: LLPanel(p),
+ mExpandedMinDimSpecified(false),
+ mExpandedMinDim(p.min_dim),
mMinDim(p.min_dim),
mMaxDim(p.max_dim),
mAutoResize(p.auto_resize),
@@ -58,6 +60,13 @@ LLLayoutPanel::LLLayoutPanel(const Params& p)
mVisibleAmt(1.f), // default to fully visible
mResizeBar(NULL)
{
+ // Set the expanded min dim if it is provided, otherwise it gets the p.min_dim value
+ if (p.expanded_min_dim.isProvided())
+ {
+ mExpandedMinDimSpecified = true;
+ mExpandedMinDim = p.expanded_min_dim();
+ }
+
// panels initialized as hidden should not start out partially visible
if (!getVisible())
{
@@ -78,20 +87,20 @@ LLLayoutPanel::~LLLayoutPanel()
delete mResizeBar;
mResizeBar = NULL;
}
-
+
F32 LLLayoutPanel::getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation)
{
if (orientation == LLLayoutStack::HORIZONTAL)
{
F32 collapse_amt =
- clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)mMinDim / (F32)llmax(1, getRect().getWidth()));
+ clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, (F32)getRelevantMinDim() / (F32)llmax(1, getRect().getWidth()));
return mVisibleAmt * collapse_amt;
}
else
{
- F32 collapse_amt =
- clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)mMinDim / (F32)llmax(1, getRect().getHeight())));
- return mVisibleAmt * collapse_amt;
+ F32 collapse_amt =
+ clamp_rescale(mCollapseAmt, 0.f, 1.f, 1.f, llmin(1.f, (F32)getRelevantMinDim() / (F32)llmax(1, getRect().getHeight())));
+ return mVisibleAmt * collapse_amt;
}
}
@@ -182,14 +191,14 @@ BOOL LLLayoutStack::postBuild()
}
bool LLLayoutStack::addChild(LLView* child, S32 tab_group)
- {
+{
LLLayoutPanel* panelp = dynamic_cast<LLLayoutPanel*>(child);
- if (panelp)
- {
+ if (panelp)
+ {
mPanels.push_back(panelp);
- }
+ }
return LLView::addChild(child, tab_group);
- }
+}
S32 LLLayoutStack::getDefaultHeight(S32 cur_height)
@@ -281,9 +290,9 @@ bool LLLayoutStack::getPanelMinSize(const std::string& panel_name, S32* min_dimp
{
LLLayoutPanel* panel = findEmbeddedPanelByName(panel_name);
- if (panel)
+ if (panel && min_dimp)
{
- if (min_dimp) *min_dimp = panel->mMinDim;
+ *min_dimp = panel->getRelevantMinDim();
}
return NULL != panel;
@@ -316,23 +325,23 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
e_panel_list_t::iterator panel_it;
for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- LLPanel* panelp = (*panel_it);
+ LLLayoutPanel* panelp = (*panel_it);
if (panelp->getVisible())
{
if (mAnimate)
{
if (!mAnimatedThisFrame)
{
- (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(mOpenTimeConstant));
- if ((*panel_it)->mVisibleAmt > 0.99f)
+ panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(mOpenTimeConstant));
+ if (panelp->mVisibleAmt > 0.99f)
{
- (*panel_it)->mVisibleAmt = 1.f;
+ panelp->mVisibleAmt = 1.f;
}
}
}
else
{
- (*panel_it)->mVisibleAmt = 1.f;
+ panelp->mVisibleAmt = 1.f;
}
}
else // not visible
@@ -341,36 +350,36 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
if (!mAnimatedThisFrame)
{
- (*panel_it)->mVisibleAmt = lerp((*panel_it)->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
- if ((*panel_it)->mVisibleAmt < 0.001f)
+ panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ if (panelp->mVisibleAmt < 0.001f)
{
- (*panel_it)->mVisibleAmt = 0.f;
+ panelp->mVisibleAmt = 0.f;
}
}
}
else
{
- (*panel_it)->mVisibleAmt = 0.f;
+ panelp->mVisibleAmt = 0.f;
}
}
- if ((*panel_it)->mCollapsed)
+ if (panelp->mCollapsed)
{
- (*panel_it)->mCollapseAmt = lerp((*panel_it)->mCollapseAmt, 1.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, 1.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
}
else
{
- (*panel_it)->mCollapseAmt = lerp((*panel_it)->mCollapseAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
+ panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant));
}
if (mOrientation == HORIZONTAL)
{
// enforce minimize size constraint by default
- if (panelp->getRect().getWidth() < (*panel_it)->mMinDim)
+ if (panelp->getRect().getWidth() < panelp->getRelevantMinDim())
{
- panelp->reshape((*panel_it)->mMinDim, panelp->getRect().getHeight());
+ panelp->reshape(panelp->getRelevantMinDim(), panelp->getRect().getHeight());
}
- total_width += llround(panelp->getRect().getWidth() * (*panel_it)->getCollapseFactor(mOrientation));
+ total_width += llround(panelp->getRect().getWidth() * panelp->getCollapseFactor(mOrientation));
// want n-1 panel gaps for n panels
if (panel_it != mPanels.begin())
{
@@ -380,11 +389,11 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
else //VERTICAL
{
// enforce minimize size constraint by default
- if (panelp->getRect().getHeight() < (*panel_it)->mMinDim)
+ if (panelp->getRect().getHeight() < panelp->getRelevantMinDim())
{
- panelp->reshape(panelp->getRect().getWidth(), (*panel_it)->mMinDim);
+ panelp->reshape(panelp->getRect().getWidth(), panelp->getRelevantMinDim());
}
- total_height += llround(panelp->getRect().getHeight() * (*panel_it)->getCollapseFactor(mOrientation));
+ total_height += llround(panelp->getRect().getHeight() * panelp->getCollapseFactor(mOrientation));
if (panel_it != mPanels.begin())
{
total_height += mPanelSpacing;
@@ -403,34 +412,23 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
continue;
}
+ S32 relevant_dimension = (mOrientation == HORIZONTAL) ? (*panel_it)->getRect().getWidth() : (*panel_it)->getRect().getHeight();
+ S32 relevant_min = (*panel_it)->getRelevantMinDim();
+
// if currently resizing a panel or the panel is flagged as not automatically resizing
// only track total available headroom, but don't use it for automatic resize logic
if ((*panel_it)->mResizeBar->hasMouseCapture()
|| (!(*panel_it)->mAutoResize
&& !force_resize))
{
- if (mOrientation == HORIZONTAL)
- {
- shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
- }
- else //VERTICAL
- {
- shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
- }
+ shrink_headroom_total += relevant_dimension - relevant_min;
}
else
{
num_resizable_panels++;
- if (mOrientation == HORIZONTAL)
- {
- shrink_headroom_available += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
- shrink_headroom_total += (*panel_it)->getRect().getWidth() - (*panel_it)->mMinDim;
- }
- else //VERTICAL
- {
- shrink_headroom_available += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
- shrink_headroom_total += (*panel_it)->getRect().getHeight() - (*panel_it)->mMinDim;
- }
+
+ shrink_headroom_available += relevant_dimension - relevant_min;
+ shrink_headroom_total += relevant_dimension - relevant_min;
}
}
@@ -452,27 +450,28 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- LLPanel* panelp = (*panel_it);
+ LLLayoutPanel* panelp = (*panel_it);
S32 cur_width = panelp->getRect().getWidth();
S32 cur_height = panelp->getRect().getHeight();
S32 new_width = cur_width;
- S32 new_height = cur_height;
+ S32 new_height = cur_height;
+ S32 relevant_min = panelp->getRelevantMinDim();
if (mOrientation == HORIZONTAL)
{
- new_width = llmax((*panel_it)->mMinDim, new_width);
+ new_width = llmax(relevant_min, new_width);
}
else
{
- new_height = llmax((*panel_it)->mMinDim, new_height);
+ new_height = llmax(relevant_min, new_height);
}
S32 delta_size = 0;
// if panel can automatically resize (not animating, and resize flag set)...
- if ((*panel_it)->getCollapseFactor(mOrientation) == 1.f
- && (force_resize || (*panel_it)->mAutoResize)
- && !(*panel_it)->mResizeBar->hasMouseCapture())
+ if (panelp->getCollapseFactor(mOrientation) == 1.f
+ && (force_resize || panelp->mAutoResize)
+ && !panelp->mResizeBar->hasMouseCapture())
{
if (mOrientation == HORIZONTAL)
{
@@ -481,8 +480,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
// shrink proportionally to amount over minimum
// so we can do this in one pass
- delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
- shrink_headroom_available -= (cur_width - (*panel_it)->mMinDim);
+ delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_width - relevant_min) / (F32)shrink_headroom_available)) : 0;
+ shrink_headroom_available -= (cur_width - relevant_min);
}
else
{
@@ -491,7 +490,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
num_resizable_panels--;
}
pixels_to_distribute -= delta_size;
- new_width = llmax((*panel_it)->mMinDim, cur_width + delta_size);
+ new_width = llmax(relevant_min, cur_width + delta_size);
}
else
{
@@ -504,8 +503,8 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
{
// shrink proportionally to amount over minimum
// so we can do this in one pass
- delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - (*panel_it)->mMinDim) / (F32)shrink_headroom_available)) : 0;
- shrink_headroom_available -= (cur_height - (*panel_it)->mMinDim);
+ delta_size = (shrink_headroom_available > 0) ? llround((F32)pixels_to_distribute * ((F32)(cur_height - relevant_min) / (F32)shrink_headroom_available)) : 0;
+ shrink_headroom_available -= (cur_height - relevant_min);
}
else
{
@@ -513,7 +512,7 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
num_resizable_panels--;
}
pixels_to_distribute -= delta_size;
- new_height = llmax((*panel_it)->mMinDim, cur_height + delta_size);
+ new_height = llmax(relevant_min, cur_height + delta_size);
}
else
{
@@ -566,19 +565,20 @@ void LLLayoutStack::updateLayout(BOOL force_resize)
LLLayoutPanel* last_resizeable_panel = NULL;
for (panel_it = mPanels.begin(); panel_it != mPanels.end(); ++panel_it)
{
- LLPanel* panelp = (*panel_it);
+ LLLayoutPanel* panelp = (*panel_it);
+ S32 relevant_min = panelp->getRelevantMinDim();
if (mOrientation == HORIZONTAL)
{
(*panel_it)->mResizeBar->setResizeLimits(
- (*panel_it)->mMinDim,
- (*panel_it)->mMinDim + shrink_headroom_total);
+ relevant_min,
+ relevant_min + shrink_headroom_total);
}
else //VERTICAL
{
(*panel_it)->mResizeBar->setResizeLimits(
- (*panel_it)->mMinDim,
- (*panel_it)->mMinDim + shrink_headroom_total);
+ relevant_min,
+ relevant_min + shrink_headroom_total);
}
// toggle resize bars based on panel visibility, resizability, etc
@@ -658,7 +658,7 @@ void LLLayoutStack::calcMinExtents()
{
if (mOrientation == HORIZONTAL)
{
- mMinWidth += (*panel_it)->mMinDim;
+ mMinWidth += (*panel_it)->getRelevantMinDim();
if (panel_it != mPanels.begin())
{
mMinWidth += mPanelSpacing;
@@ -666,7 +666,7 @@ void LLLayoutStack::calcMinExtents()
}
else //VERTICAL
{
- mMinHeight += (*panel_it)->mMinDim;
+ mMinHeight += (*panel_it)->getRelevantMinDim();
if (panel_it != mPanels.begin())
{
mMinHeight += mPanelSpacing;
@@ -688,7 +688,7 @@ void LLLayoutStack::createResizeBars()
LLResizeBar::Params resize_params;
resize_params.name("resize");
resize_params.resizing_view(lp);
- resize_params.min_size(lp->mMinDim);
+ resize_params.min_size(lp->getRelevantMinDim());
resize_params.side(side);
resize_params.snapping_enabled(false);
LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
@@ -713,10 +713,7 @@ void LLLayoutStack::createResizeBars()
//static
void LLLayoutStack::updateClass()
{
- LLInstanceTrackerScopedGuard guard;
- for (LLLayoutStack::instance_iter it = guard.beginInstances();
- it != guard.endInstances();
- ++it)
+ for (instance_iter it = beginInstances(); it != endInstances(); ++it)
{
it->updateLayout();
}
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
index 4ac8ef0ee9..d8ef0aeaca 100644
--- a/indra/llui/lllayoutstack.h
+++ b/indra/llui/lllayoutstack.h
@@ -30,10 +30,10 @@
#include "llpanel.h"
-class LLPanel;
class LLLayoutPanel;
+
class LLLayoutStack : public LLView, public LLInstanceTracker<LLLayoutStack>
{
public:
@@ -149,6 +149,7 @@ private:
F32 mCloseTimeConstant;
}; // end class LLLayoutStack
+
class LLLayoutPanel : public LLPanel
{
friend class LLLayoutStack;
@@ -156,13 +157,15 @@ friend class LLUICtrlFactory;
public:
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
- Optional<S32> min_dim,
+ Optional<S32> expanded_min_dim,
+ min_dim,
max_dim;
Optional<bool> user_resize,
auto_resize;
Params()
- : min_dim("min_dim", 0),
+ : expanded_min_dim("expanded_min_dim", 0),
+ min_dim("min_dim", 0),
max_dim("max_dim", 0),
user_resize("user_resize", true),
auto_resize("auto_resize", true)
@@ -177,15 +180,36 @@ public:
~LLLayoutPanel();
void initFromParams(const Params& p);
- void setMinDim(S32 value) { mMinDim = value; }
+
+ S32 getMinDim() const { return mMinDim; }
+ void setMinDim(S32 value) { mMinDim = value; if (!mExpandedMinDimSpecified) mExpandedMinDim = value; }
+
+ S32 getMaxDim() const { return mMaxDim; }
void setMaxDim(S32 value) { mMaxDim = value; }
-protected:
- LLLayoutPanel(const Params& p) ;
+ S32 getExpandedMinDim() const { return mExpandedMinDim; }
+ void setExpandedMinDim(S32 value) { mExpandedMinDim = value; mExpandedMinDimSpecified = true; }
+
+ S32 getRelevantMinDim() const
+ {
+ S32 min_dim = mMinDim;
+
+ if (!mCollapsed)
+ {
+ min_dim = mExpandedMinDim;
+ }
+
+ return min_dim;
+ }
+protected:
+ LLLayoutPanel(const Params& p);
F32 getCollapseFactor(LLLayoutStack::ELayoutOrientation orientation);
+ bool mExpandedMinDimSpecified;
+ S32 mExpandedMinDim;
+
S32 mMinDim;
S32 mMaxDim;
BOOL mAutoResize;
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 0196080d90..06fbc0f234 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -37,6 +37,7 @@
#include "llgl.h"
#include "lltimer.h"
+#include "llcalc.h"
//#include "llclipboard.h"
#include "llcontrol.h"
#include "llbutton.h"
@@ -81,6 +82,7 @@ LLLineEditor::Params::Params()
: max_length(""),
keystroke_callback("keystroke_callback"),
prevalidate_callback("prevalidate_callback"),
+ prevalidate_input_callback("prevalidate_input_callback"),
background_image("background_image"),
background_image_disabled("background_image_disabled"),
background_image_focused("background_image_focused"),
@@ -132,6 +134,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
mIgnoreTab( p.ignore_tab ),
mDrawAsterixes( p.is_password ),
mSelectAllonFocusReceived( p.select_on_focus ),
+ mSelectAllonCommit( TRUE ),
mPassDelete(FALSE),
mReadOnly(FALSE),
mBgImage( p.background_image ),
@@ -173,6 +176,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
updateTextPadding();
setCursor(mText.length());
+ setPrevalidateInput(p.prevalidate_input_callback());
setPrevalidate(p.prevalidate_callback());
LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu>
@@ -228,7 +232,10 @@ void LLLineEditor::onCommit()
setControlValue(getValue());
LLUICtrl::onCommit();
- selectAll();
+
+ // Selection on commit needs to be turned off when evaluating maths
+ // expressions, to allow indication of the error position
+ if (mSelectAllonCommit) selectAll();
}
// Returns TRUE if user changed value at all
@@ -405,23 +412,15 @@ void LLLineEditor::setText(const LLStringExplicit &new_text)
// Picks a new cursor position based on the actual screen size of text being drawn.
void LLLineEditor::setCursorAtLocalPos( S32 local_mouse_x )
{
- const llwchar* wtext = mText.getWString().c_str();
- LLWString asterix_text;
- if (mDrawAsterixes)
- {
- for (S32 i = 0; i < mText.length(); i++)
- {
- asterix_text += utf8str_to_wstring(PASSWORD_ASTERISK);
- }
- wtext = asterix_text.c_str();
- }
+ S32 cursor_pos = calcCursorPos(local_mouse_x);
+
+ S32 left_pos = llmin( mSelectionStart, cursor_pos );
+ S32 length = llabs( mSelectionStart - cursor_pos );
+ const LLWString& substr = mText.getWString().substr(left_pos, length);
+
+ if (mIsSelecting && !prevalidateInput(substr))
+ return;
- S32 cursor_pos =
- mScrollHPos +
- mGLFont->charFromPixelOffset(
- wtext, mScrollHPos,
- (F32)(local_mouse_x - mTextLeftEdge),
- (F32)(mTextRightEdge - mTextLeftEdge + 1)); // min-max range is inclusive
setCursor(cursor_pos);
}
@@ -505,6 +504,11 @@ BOOL LLLineEditor::canSelectAll() const
void LLLineEditor::selectAll()
{
+ if (!prevalidateInput(mText.getWString()))
+ {
+ return;
+ }
+
mSelectionStart = mText.length();
mSelectionEnd = 0;
setCursor(mSelectionEnd);
@@ -590,6 +594,9 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
if (mask & MASK_SHIFT)
{
+ // assume we're starting a drag select
+ mIsSelecting = TRUE;
+
// Handle selection extension
S32 old_cursor_pos = getCursor();
setCursorAtLocalPos(x);
@@ -624,8 +631,6 @@ BOOL LLLineEditor::handleMouseDown(S32 x, S32 y, MASK mask)
mSelectionStart = old_cursor_pos;
mSelectionEnd = getCursor();
}
- // assume we're starting a drag select
- mIsSelecting = TRUE;
}
else
{
@@ -796,6 +801,9 @@ void LLLineEditor::removeChar()
{
if( getCursor() > 0 )
{
+ if (!prevalidateInput(mText.getWString().substr(getCursor()-1, 1)))
+ return;
+
mText.erase(getCursor() - 1, 1);
setCursor(getCursor() - 1);
@@ -816,6 +824,9 @@ void LLLineEditor::addChar(const llwchar uni_char)
}
else if (LL_KIM_OVERWRITE == gKeyboard->getInsertMode())
{
+ if (!prevalidateInput(mText.getWString().substr(getCursor(), 1)))
+ return;
+
mText.erase(getCursor(), 1);
}
@@ -864,6 +875,13 @@ void LLLineEditor::extendSelection( S32 new_cursor_pos )
startSelection();
}
+ S32 left_pos = llmin( mSelectionStart, new_cursor_pos );
+ S32 selection_length = llabs( mSelectionStart - new_cursor_pos );
+ const LLWString& selection = mText.getWString().substr(left_pos, selection_length);
+
+ if (!prevalidateInput(selection))
+ return;
+
setCursor(new_cursor_pos);
mSelectionEnd = getCursor();
}
@@ -994,8 +1012,12 @@ void LLLineEditor::deleteSelection()
{
if( !mReadOnly && hasSelection() )
{
- S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
- S32 selection_length = llabs( mSelectionStart - mSelectionEnd );
+ S32 left_pos, selection_length;
+ getSelectionRange(&left_pos, &selection_length);
+ const LLWString& selection = mText.getWString().substr(left_pos, selection_length);
+
+ if (!prevalidateInput(selection))
+ return;
mText.erase(left_pos, selection_length);
deselect();
@@ -1013,12 +1035,16 @@ void LLLineEditor::cut()
{
if( canCut() )
{
+ S32 left_pos, length;
+ getSelectionRange(&left_pos, &length);
+ const LLWString& selection = mText.getWString().substr(left_pos, length);
+
+ if (!prevalidateInput(selection))
+ return;
+
// Prepare for possible rollback
LLLineEditorRollback rollback( this );
-
- S32 left_pos = llmin( mSelectionStart, mSelectionEnd );
- S32 length = llabs( mSelectionStart - mSelectionEnd );
gClipboard.copyFromSubstring( mText.getWString(), left_pos, length );
deleteSelection();
@@ -1098,6 +1124,9 @@ void LLLineEditor::pasteHelper(bool is_primary)
if (!paste.empty())
{
+ if (!prevalidateInput(paste))
+ return;
+
// Prepare for possible rollback
LLLineEditorRollback rollback(this);
@@ -1445,6 +1474,13 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char)
LLLineEditorRollback rollback( this );
+ {
+ LLWString u_char;
+ u_char.assign(1, uni_char);
+ if (!prevalidateInput(u_char))
+ return handled;
+ }
+
addChar(uni_char);
mKeystrokeTimer.reset();
@@ -1496,6 +1532,15 @@ void LLLineEditor::doDelete()
}
else if ( getCursor() < mText.length())
{
+ const LLWString& text_to_delete = mText.getWString().substr(getCursor(), 1);
+
+ if (!prevalidateInput(text_to_delete))
+ {
+ if( mKeystrokeCallback )
+ mKeystrokeCallback( this );
+
+ return;
+ }
setCursor(getCursor() + 1);
removeChar();
}
@@ -1843,6 +1888,27 @@ S32 LLLineEditor::findPixelNearestPos(const S32 cursor_offset) const
return result;
}
+S32 LLLineEditor::calcCursorPos(S32 mouse_x)
+{
+ const llwchar* wtext = mText.getWString().c_str();
+ LLWString asterix_text;
+ if (mDrawAsterixes)
+ {
+ for (S32 i = 0; i < mText.length(); i++)
+ {
+ asterix_text += utf8str_to_wstring(PASSWORD_ASTERISK);
+ }
+ wtext = asterix_text.c_str();
+ }
+
+ S32 cur_pos = mScrollHPos +
+ mGLFont->charFromPixelOffset(
+ wtext, mScrollHPos,
+ (F32)(mouse_x - mTextLeftEdge),
+ (F32)(mTextRightEdge - mTextLeftEdge + 1)); // min-max range is inclusive
+
+ return cur_pos;
+}
//virtual
void LLLineEditor::clear()
{
@@ -1936,6 +2002,22 @@ void LLLineEditor::setPrevalidate(LLTextValidate::validate_func_t func)
updateAllowingLanguageInput();
}
+void LLLineEditor::setPrevalidateInput(LLTextValidate::validate_func_t func)
+{
+ mPrevalidateInputFunc = func;
+ updateAllowingLanguageInput();
+}
+
+bool LLLineEditor::prevalidateInput(const LLWString& wstr)
+{
+ if (mPrevalidateInputFunc && !mPrevalidateInputFunc(wstr))
+ {
+ return false;
+ }
+
+ return true;
+}
+
// static
BOOL LLLineEditor::postvalidateFloat(const std::string &str)
{
@@ -1995,6 +2077,32 @@ BOOL LLLineEditor::postvalidateFloat(const std::string &str)
return success;
}
+BOOL LLLineEditor::evaluateFloat()
+{
+ bool success;
+ F32 result = 0.f;
+ std::string expr = getText();
+ LLStringUtil::toUpper(expr);
+
+ success = LLCalc::getInstance()->evalString(expr, result);
+
+ if (!success)
+ {
+ // Move the cursor to near the error on failure
+ setCursor(LLCalc::getInstance()->getLastErrorPos());
+ // *TODO: Translated error message indicating the type of error? Select error text?
+ }
+ else
+ {
+ // Replace the expression with the result
+ std::string result_str = llformat("%f",result);
+ setText(result_str);
+ selectAll();
+ }
+
+ return success;
+}
+
void LLLineEditor::onMouseCaptureLost()
{
endSelection();
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index fe191e5971..583bde360a 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -76,6 +76,7 @@ public:
Optional<keystroke_callback_t> keystroke_callback;
Optional<LLTextValidate::validate_func_t, LLTextValidate::ValidateTextNamedFuncs> prevalidate_callback;
+ Optional<LLTextValidate::validate_func_t, LLTextValidate::ValidateTextNamedFuncs> prevalidate_input_callback;
Optional<LLViewBorder::Params> border;
@@ -220,6 +221,7 @@ public:
void deleteSelection();
void setSelectAllonFocusReceived(BOOL b);
+ void setSelectAllonCommit(BOOL b) { mSelectAllonCommit = b; }
typedef boost::function<void (LLLineEditor* caller, void* user_data)> callback_t;
void setKeystrokeCallback(callback_t callback, void* user_data);
@@ -232,8 +234,16 @@ public:
// Prevalidation controls which keystrokes can affect the editor
void setPrevalidate( LLTextValidate::validate_func_t func );
+ // This method sets callback that prevents from:
+ // - deleting, selecting, typing, cutting, pasting characters that are not valid.
+ // Also callback that this method sets differs from setPrevalidate in a way that it validates just inputed
+ // symbols, before existing text is modified, but setPrevalidate validates line after it was modified.
+ void setPrevalidateInput(LLTextValidate::validate_func_t func);
static BOOL postvalidateFloat(const std::string &str);
+ bool prevalidateInput(const LLWString& wstr);
+ BOOL evaluateFloat();
+
// line history support:
void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off
void updateHistory(); // stores current line in history
@@ -251,6 +261,7 @@ private:
void addChar(const llwchar c);
void setCursorAtLocalPos(S32 local_mouse_x);
S32 findPixelNearestPos(S32 cursor_offset = 0) const;
+ S32 calcCursorPos(S32 mouse_x);
BOOL handleSpecialKey(KEY key, MASK mask);
BOOL handleSelectionKey(KEY key, MASK mask);
BOOL handleControlKey(KEY key, MASK mask);
@@ -312,6 +323,7 @@ protected:
S32 mLastSelectionEnd;
LLTextValidate::validate_func_t mPrevalidateFunc;
+ LLTextValidate::validate_func_t mPrevalidateInputFunc;
LLFrameTimer mKeystrokeTimer;
LLTimer mTripleClickTimer;
@@ -330,6 +342,7 @@ protected:
BOOL mDrawAsterixes;
BOOL mSelectAllonFocusReceived;
+ BOOL mSelectAllonCommit;
BOOL mPassDelete;
BOOL mReadOnly;
diff --git a/indra/llui/llloadingindicator.h b/indra/llui/llloadingindicator.h
index 4c47cc267c..7c44478848 100644
--- a/indra/llui/llloadingindicator.h
+++ b/indra/llui/llloadingindicator.h
@@ -86,6 +86,8 @@ public:
*/
void start();
+ void reset() { mCurImageIdx = 0; }
+
private:
LLLoadingIndicator(const Params&);
void initFromParams(const Params&);
diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp
index eed0085273..50d59f79f4 100644
--- a/indra/llui/llmenubutton.cpp
+++ b/indra/llui/llmenubutton.cpp
@@ -35,9 +35,16 @@
static LLDefaultChildRegistry::Register<LLMenuButton> r("menu_button");
+void LLMenuButton::MenuPositions::declareValues()
+{
+ declare("topleft", MP_TOP_LEFT);
+ declare("topright", MP_TOP_RIGHT);
+ declare("bottomleft", MP_BOTTOM_LEFT);
+}
LLMenuButton::Params::Params()
-: menu_filename("menu_filename")
+: menu_filename("menu_filename"),
+ position("position", MP_BOTTOM_LEFT)
{
}
@@ -45,7 +52,7 @@ LLMenuButton::Params::Params()
LLMenuButton::LLMenuButton(const LLMenuButton::Params& p)
: LLButton(p),
mIsMenuShown(false),
- mMenuPosition(MP_BOTTOM_LEFT)
+ mMenuPosition(p.position)
{
std::string menu_filename = p.menu_filename;
diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h
index 7b657595da..e2396e7fb2 100644
--- a/indra/llui/llmenubutton.h
+++ b/indra/llui/llmenubutton.h
@@ -35,21 +35,30 @@ class LLMenuButton
: public LLButton
{
public:
+ typedef enum e_menu_position
+ {
+ MP_TOP_LEFT,
+ MP_TOP_RIGHT,
+ MP_BOTTOM_LEFT
+ } EMenuPosition;
+
+ struct MenuPositions
+ : public LLInitParam::TypeValuesHelper<EMenuPosition, MenuPositions>
+ {
+ static void declareValues();
+ };
+
struct Params
: public LLInitParam::Block<Params, LLButton::Params>
{
// filename for it's toggleable menu
Optional<std::string> menu_filename;
+ Optional<EMenuPosition> position;
Params();
};
- typedef enum e_menu_position
- {
- MP_TOP_LEFT,
- MP_TOP_RIGHT,
- MP_BOTTOM_LEFT
- } EMenuPosition;
+
boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb );
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index f744e9db41..9052bc7d1d 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -511,7 +511,7 @@ void LLMultiSlider::draw()
mIt->second.mTop + extra_triangle_height,
mIt->second.mLeft + mIt->second.getWidth() / 2,
mIt->second.mBottom - extra_triangle_height,
- mTriangleColor.get(), TRUE);
+ mTriangleColor.get() % opacity, TRUE);
}
}
else if (!thumb_imagep)
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
index b2383106a8..e3193bc352 100644
--- a/indra/llui/llpanel.cpp
+++ b/indra/llui/llpanel.cpp
@@ -87,7 +87,8 @@ LLPanel::Params::Params()
filename("filename"),
class_name("class"),
help_topic("help_topic"),
- visible_callback("visible_callback")
+ visible_callback("visible_callback"),
+ accepts_badge("accepts_badge")
{
name = "panel";
addSynonym(background_visible, "bg_visible");
@@ -98,6 +99,7 @@ LLPanel::Params::Params()
LLPanel::LLPanel(const LLPanel::Params& p)
: LLUICtrl(p),
+ LLBadgeHolder(p.accepts_badge),
mBgVisible(p.background_visible),
mBgOpaque(p.background_opaque),
mBgOpaqueColor(p.bg_opaque_color()),
@@ -485,6 +487,8 @@ void LLPanel::initFromParams(const LLPanel::Params& p)
mBgAlphaImage = p.bg_alpha_image();
mBgOpaqueImageOverlay = p.bg_opaque_image_overlay;
mBgAlphaImageOverlay = p.bg_alpha_image_overlay;
+
+ setAcceptsBadge(p.accepts_badge);
}
static LLFastTimer::DeclareTimer FTM_PANEL_SETUP("Panel Setup");
@@ -511,9 +515,6 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
if (!xml_filename.empty())
{
- LLUICtrlFactory::instance().pushFileName(xml_filename);
-
- LLFastTimer timer(FTM_EXTERNAL_PANEL_LOAD);
if (output_node)
{
//if we are exporting, we want to export the current xml
@@ -526,6 +527,9 @@ BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr outpu
return TRUE;
}
+ LLUICtrlFactory::instance().pushFileName(xml_filename);
+
+ LLFastTimer timer(FTM_EXTERNAL_PANEL_LOAD);
if (!LLUICtrlFactory::getLayeredXMLNode(xml_filename, referenced_xml))
{
llwarns << "Couldn't parse panel from: " << xml_filename << llendl;
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
index 7bbbeaf709..790025cb2d 100644
--- a/indra/llui/llpanel.h
+++ b/indra/llui/llpanel.h
@@ -35,6 +35,7 @@
#include "lluiimage.h"
#include "lluistring.h"
#include "v4color.h"
+#include "llbadgeholder.h"
#include <list>
#include <queue>
@@ -51,7 +52,7 @@ class LLUIImage;
* With or without border,
* Can contain LLUICtrls.
*/
-class LLPanel : public LLUICtrl
+class LLPanel : public LLUICtrl, public LLBadgeHolder
{
public:
struct LocalizedString : public LLInitParam::Block<LocalizedString>
@@ -89,6 +90,8 @@ public:
Multiple<LocalizedString> strings;
Optional<CommitCallbackParam> visible_callback;
+
+ Optional<bool> accepts_badge;
Params();
};
@@ -262,6 +265,9 @@ protected:
std::string mHelpTopic; // the name of this panel's help topic to display in the Help Viewer
typedef std::deque<const LLCallbackMap::map_t*> factory_stack_t;
static factory_stack_t sFactoryStack;
+
+ // for setting the xml filename when building panel in context dependent cases
+ std::string mXMLFilename;
private:
BOOL mBgVisible; // any background at all?
@@ -280,8 +286,6 @@ private:
typedef std::map<std::string, std::string> ui_string_map_t;
ui_string_map_t mUIStrings;
- // for setting the xml filename when building panel in context dependent cases
- std::string mXMLFilename;
}; // end class LLPanel
diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h
index 69dab2b411..f776c781b3 100644
--- a/indra/llui/llsdparam.h
+++ b/indra/llui/llsdparam.h
@@ -93,8 +93,17 @@ class LLSDParamAdapter : public T
LLParamSDParser parser;
parser.readSD(sd, *this);
}
+
+ operator LLSD() const
+ {
+ LLParamSDParser parser;
+ LLSD sd;
+ parser.writeSD(sd, *this);
+ return sd;
+ }
LLSDParamAdapter(const T& val)
+ : T(val)
{
T::operator=(val);
}
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
index 15a7438ec9..934879cdfd 100644
--- a/indra/llui/llspinctrl.cpp
+++ b/indra/llui/llspinctrl.cpp
@@ -44,7 +44,7 @@
#include "llresmgr.h"
#include "lluictrlfactory.h"
-const U32 MAX_STRING_LENGTH = 32;
+const U32 MAX_STRING_LENGTH = 255;
static LLDefaultChildRegistry::Register<LLSpinCtrl> r2("spinner");
@@ -124,14 +124,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)
params.max_length.bytes(MAX_STRING_LENGTH);
params.commit_callback.function((boost::bind(&LLSpinCtrl::onEditorCommit, this, _2)));
- if( mPrecision>0 )//should accept float numbers
- {
- params.prevalidate_callback(&LLTextValidate::validateFloat);
- }
- else //should accept int numbers
- {
- params.prevalidate_callback(&LLTextValidate::validateInt);
- }
+ //*NOTE: allow entering of any chars for LLCalc, proper input will be evaluated on commit
params.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
mEditor = LLUICtrlFactory::create<LLLineEditor> (params);
@@ -140,6 +133,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)
// than when it doesn't. Instead, if you always have to double click to select all the text,
// it's easier to understand
//mEditor->setSelectAllonFocusReceived(TRUE);
+ mEditor->setSelectAllonCommit(FALSE);
addChild(mEditor);
updateEditor();
@@ -304,9 +298,10 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
{
BOOL success = FALSE;
- std::string text = mEditor->getText();
- if( LLLineEditor::postvalidateFloat( text ) )
+ if( mEditor->evaluateFloat() )
{
+ std::string text = mEditor->getText();
+
LLLocale locale(LLLocale::USER_LOCALE);
F32 val = (F32) atof(text.c_str());
@@ -327,7 +322,11 @@ void LLSpinCtrl::onEditorCommit( const LLSD& data )
}
updateEditor();
- if( !success )
+ if( success )
+ {
+ updateEditor();
+ }
+ else
{
reportInvalidData();
}
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 349dbc3405..919364be63 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -2024,8 +2024,17 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,
}
else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd)
{
- // segment wraps to next line, so just set doc pos to the end of the line
- pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength());
+ if (getLineNumFromDocIndex(line_iter->mDocIndexEnd - 1) == line_iter->mLineNum)
+ {
+ // if segment wraps to the next line we should step one char back
+ // to compensate for the space char between words
+ // which is removed due to wrapping
+ pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength());
+ }
+ else
+ {
+ pos = llclamp(line_iter->mDocIndexEnd, 0, getLength());
+ }
break;
}
start_x += text_width;
diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp
index 4b9faa0560..234e600ccd 100644
--- a/indra/llui/lltextvalidate.cpp
+++ b/indra/llui/lltextvalidate.cpp
@@ -188,6 +188,39 @@ namespace LLTextValidate
return success;
}
+ bool validateNonNegativeS32NoSpace(const LLWString &str)
+ {
+ LLLocale locale(LLLocale::USER_LOCALE);
+
+ LLWString test_str = str;
+ S32 len = test_str.length();
+ bool success = TRUE;
+ if(0 < len)
+ {
+ if('-' == test_str[0])
+ {
+ success = FALSE;
+ }
+ S32 i = 0;
+ while(success && (i < len))
+ {
+ if(!LLStringOps::isDigit(test_str[i]) || LLStringOps::isSpace(test_str[i++]))
+ {
+ success = FALSE;
+ }
+ }
+ }
+ if (success)
+ {
+ S32 val = strtol(wstring_to_utf8str(test_str).c_str(), NULL, 10);
+ if (val < 0)
+ {
+ success = FALSE;
+ }
+ }
+ return success;
+ }
+
bool validateAlphaNum(const LLWString &str)
{
LLLocale locale(LLLocale::USER_LOCALE);
diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h
index 84644be30c..5c830d7db3 100644
--- a/indra/llui/lltextvalidate.h
+++ b/indra/llui/lltextvalidate.h
@@ -46,6 +46,7 @@ namespace LLTextValidate
bool validateInt(const LLWString &str );
bool validatePositiveS32(const LLWString &str);
bool validateNonNegativeS32(const LLWString &str);
+ bool validateNonNegativeS32NoSpace(const LLWString &str);
bool validateAlphaNum(const LLWString &str );
bool validateAlphaNumSpace(const LLWString &str );
bool validateASCIIPrintableNoPipe(const LLWString &str);
diff --git a/indra/llui/lltimectrl.cpp b/indra/llui/lltimectrl.cpp
new file mode 100644
index 0000000000..9ea1e8815e
--- /dev/null
+++ b/indra/llui/lltimectrl.cpp
@@ -0,0 +1,432 @@
+/**
+ * @file lltimectrl.cpp
+ * @brief LLTimeCtrl base class
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "lltimectrl.h"
+
+#include "llui.h"
+#include "lluiconstants.h"
+
+#include "llbutton.h"
+#include "llfontgl.h"
+#include "lllineeditor.h"
+#include "llkeyboard.h"
+#include "llstring.h"
+#include "lltextbox.h"
+#include "lluictrlfactory.h"
+
+static LLDefaultChildRegistry::Register<LLTimeCtrl> time_r("time");
+
+const U32 AMPM_LEN = 3;
+const U32 MINUTES_MIN = 0;
+const U32 MINUTES_MAX = 59;
+const U32 HOURS_MIN = 1;
+const U32 HOURS_MAX = 12;
+const U32 MINUTES_PER_HOUR = 60;
+const U32 MINUTES_PER_DAY = 24 * MINUTES_PER_HOUR;
+
+
+LLTimeCtrl::Params::Params()
+: label_width("label_width"),
+ snap_to("snap_to"),
+ allow_text_entry("allow_text_entry", true),
+ text_enabled_color("text_enabled_color"),
+ text_disabled_color("text_disabled_color"),
+ up_button("up_button"),
+ down_button("down_button")
+{}
+
+LLTimeCtrl::LLTimeCtrl(const LLTimeCtrl::Params& p)
+: LLUICtrl(p),
+ mLabelBox(NULL),
+ mTextEnabledColor(p.text_enabled_color()),
+ mTextDisabledColor(p.text_disabled_color()),
+ mTime(0),
+ mSnapToMin(5)
+{
+ static LLUICachedControl<S32> spinctrl_spacing ("UISpinctrlSpacing", 0);
+ static LLUICachedControl<S32> spinctrl_btn_width ("UISpinctrlBtnWidth", 0);
+ static LLUICachedControl<S32> spinctrl_btn_height ("UISpinctrlBtnHeight", 0);
+ S32 centered_top = getRect().getHeight();
+ S32 centered_bottom = getRect().getHeight() - 2 * spinctrl_btn_height;
+ S32 label_width = llclamp(p.label_width(), 0, llmax(0, getRect().getWidth() - 40));
+ S32 editor_left = label_width + spinctrl_spacing;
+
+ //================= Label =================//
+ if( !p.label().empty() )
+ {
+ LLRect label_rect( 0, centered_top, label_width, centered_bottom );
+ LLTextBox::Params params;
+ params.name("TimeCtrl Label");
+ params.rect(label_rect);
+ params.initial_value(p.label());
+ if (p.font.isProvided())
+ {
+ params.font(p.font);
+ }
+ mLabelBox = LLUICtrlFactory::create<LLTextBox> (params);
+ addChild(mLabelBox);
+
+ editor_left = label_rect.mRight + spinctrl_spacing;
+ }
+
+ S32 editor_right = getRect().getWidth() - spinctrl_btn_width - spinctrl_spacing;
+
+ //================= Editor ================//
+ LLRect editor_rect( editor_left, centered_top, editor_right, centered_bottom );
+ LLLineEditor::Params params;
+ params.name("SpinCtrl Editor");
+ params.rect(editor_rect);
+ if (p.font.isProvided())
+ {
+ params.font(p.font);
+ }
+
+ params.follows.flags(FOLLOWS_LEFT | FOLLOWS_BOTTOM);
+ params.max_length.chars(8);
+ params.keystroke_callback(boost::bind(&LLTimeCtrl::onTextEntry, this, _1));
+ mEditor = LLUICtrlFactory::create<LLLineEditor> (params);
+ mEditor->setPrevalidateInput(LLTextValidate::validateNonNegativeS32NoSpace);
+ mEditor->setPrevalidate(boost::bind(&LLTimeCtrl::isTimeStringValid, this, _1));
+ mEditor->setText(LLStringExplicit("12:00 AM"));
+ addChild(mEditor);
+
+ //================= Spin Buttons ==========//
+ LLButton::Params up_button_params(p.up_button);
+ up_button_params.rect = LLRect(editor_right + 1, getRect().getHeight(), editor_right + spinctrl_btn_width, getRect().getHeight() - spinctrl_btn_height);
+
+ up_button_params.click_callback.function(boost::bind(&LLTimeCtrl::onUpBtn, this));
+ up_button_params.mouse_held_callback.function(boost::bind(&LLTimeCtrl::onUpBtn, this));
+ mUpBtn = LLUICtrlFactory::create<LLButton>(up_button_params);
+ addChild(mUpBtn);
+
+ LLButton::Params down_button_params(p.down_button);
+ down_button_params.rect = LLRect(editor_right + 1, getRect().getHeight() - spinctrl_btn_height, editor_right + spinctrl_btn_width, getRect().getHeight() - 2 * spinctrl_btn_height);
+ down_button_params.click_callback.function(boost::bind(&LLTimeCtrl::onDownBtn, this));
+ down_button_params.mouse_held_callback.function(boost::bind(&LLTimeCtrl::onDownBtn, this));
+ mDownBtn = LLUICtrlFactory::create<LLButton>(down_button_params);
+ addChild(mDownBtn);
+
+ setUseBoundingRect( TRUE );
+}
+
+F32 LLTimeCtrl::getTime24() const
+{
+ // 0.0 - 23.99;
+ return mTime / 60.0f;
+}
+
+U32 LLTimeCtrl::getHours24() const
+{
+ return (U32) getTime24();
+}
+
+U32 LLTimeCtrl::getMinutes() const
+{
+ return mTime % MINUTES_PER_HOUR;
+}
+
+void LLTimeCtrl::setTime24(F32 time)
+{
+ time = llclamp(time, 0.0f, 23.99f); // fix out of range values
+ mTime = llround(time * MINUTES_PER_HOUR); // fixes values like 4.99999
+
+ updateText();
+}
+
+BOOL LLTimeCtrl::handleKeyHere(KEY key, MASK mask)
+{
+ if (mEditor->hasFocus())
+ {
+ if(key == KEY_UP)
+ {
+ onUpBtn();
+ return TRUE;
+ }
+ if(key == KEY_DOWN)
+ {
+ onDownBtn();
+ return TRUE;
+ }
+ if (key == KEY_RETURN)
+ {
+ onCommit();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void LLTimeCtrl::onUpBtn()
+{
+ switch(getEditingPart())
+ {
+ case HOURS:
+ increaseHours();
+ break;
+ case MINUTES:
+ increaseMinutes();
+ break;
+ case DAYPART:
+ switchDayPeriod();
+ break;
+ default:
+ break;
+ }
+
+ updateText();
+ onCommit();
+}
+
+void LLTimeCtrl::onDownBtn()
+{
+ switch(getEditingPart())
+ {
+ case HOURS:
+ decreaseHours();
+ break;
+ case MINUTES:
+ decreaseMinutes();
+ break;
+ case DAYPART:
+ switchDayPeriod();
+ break;
+ default:
+ break;
+ }
+
+ updateText();
+ onCommit();
+}
+
+void LLTimeCtrl::onFocusLost()
+{
+ updateText();
+ onCommit();
+ LLUICtrl::onFocusLost();
+}
+
+void LLTimeCtrl::onTextEntry(LLLineEditor* line_editor)
+{
+ std::string time_str = line_editor->getText();
+ U32 h12 = parseHours(getHoursString(time_str));
+ U32 m = parseMinutes(getMinutesString(time_str));
+ bool pm = parseAMPM(getAMPMString(time_str));
+
+ if (h12 == 12)
+ {
+ h12 = 0;
+ }
+
+ U32 h24 = pm ? h12 + 12 : h12;
+
+ mTime = h24 * MINUTES_PER_HOUR + m;
+}
+
+bool LLTimeCtrl::isTimeStringValid(const LLWString &wstr)
+{
+ std::string str = wstring_to_utf8str(wstr);
+
+ return isHoursStringValid(getHoursString(str)) &&
+ isMinutesStringValid(getMinutesString(str)) &&
+ isPMAMStringValid(getAMPMString(str));
+}
+
+void LLTimeCtrl::increaseMinutes()
+{
+ mTime = (mTime + mSnapToMin) % MINUTES_PER_DAY - (mTime % mSnapToMin);
+}
+
+void LLTimeCtrl::increaseHours()
+{
+ mTime = (mTime + MINUTES_PER_HOUR) % MINUTES_PER_DAY;
+}
+
+void LLTimeCtrl::decreaseMinutes()
+{
+ if (mTime < mSnapToMin)
+ {
+ mTime = MINUTES_PER_DAY - mTime;
+ }
+
+ mTime -= (mTime % mSnapToMin) ? mTime % mSnapToMin : mSnapToMin;
+}
+
+void LLTimeCtrl::decreaseHours()
+{
+ if (mTime < MINUTES_PER_HOUR)
+ {
+ mTime = 23 * MINUTES_PER_HOUR + mTime;
+ }
+ else
+ {
+ mTime -= MINUTES_PER_HOUR;
+ }
+}
+
+bool LLTimeCtrl::isPM() const
+{
+ return mTime >= (MINUTES_PER_DAY / 2);
+}
+
+void LLTimeCtrl::switchDayPeriod()
+{
+ if (isPM())
+ {
+ mTime -= MINUTES_PER_DAY / 2;
+ }
+ else
+ {
+ mTime += MINUTES_PER_DAY / 2;
+ }
+}
+
+void LLTimeCtrl::updateText()
+{
+ U32 h24 = getHours24();
+ U32 m = getMinutes();
+ U32 h12 = h24 > 12 ? h24 - 12 : h24;
+
+ if (h12 == 0)
+ h12 = 12;
+
+ mEditor->setText(llformat("%d:%02d %s", h12, m, isPM() ? "PM":"AM"));
+}
+
+LLTimeCtrl::EEditingPart LLTimeCtrl::getEditingPart()
+{
+ S32 cur_pos = mEditor->getCursor();
+ std::string time_str = mEditor->getText();
+
+ S32 colon_index = time_str.find_first_of(':');
+
+ if (cur_pos <= colon_index)
+ {
+ return HOURS;
+ }
+ else if (cur_pos > colon_index && cur_pos <= (S32)(time_str.length() - AMPM_LEN))
+ {
+ return MINUTES;
+ }
+ else if (cur_pos > (S32)(time_str.length() - AMPM_LEN))
+ {
+ return DAYPART;
+ }
+
+ return NONE;
+}
+
+// static
+std::string LLTimeCtrl::getHoursString(const std::string& str)
+{
+ size_t colon_index = str.find_first_of(':');
+ std::string hours_str = str.substr(0, colon_index);
+
+ return hours_str;
+}
+
+// static
+std::string LLTimeCtrl::getMinutesString(const std::string& str)
+{
+ size_t colon_index = str.find_first_of(':');
+ ++colon_index;
+
+ int minutes_len = str.length() - colon_index - AMPM_LEN;
+ std::string minutes_str = str.substr(colon_index, minutes_len);
+
+ return minutes_str;
+}
+
+// static
+std::string LLTimeCtrl::getAMPMString(const std::string& str)
+{
+ return str.substr(str.size() - 2, 2); // returns last two characters
+}
+
+// static
+bool LLTimeCtrl::isHoursStringValid(const std::string& str)
+{
+ U32 hours;
+ if ((!LLStringUtil::convertToU32(str, hours) || (hours <= HOURS_MAX)) && str.length() < 3)
+ return true;
+
+ return false;
+}
+
+// static
+bool LLTimeCtrl::isMinutesStringValid(const std::string& str)
+{
+ U32 minutes;
+ if (!LLStringUtil::convertToU32(str, minutes) || (minutes <= MINUTES_MAX) && str.length() < 3)
+ return true;
+
+ return false;
+}
+
+// static
+bool LLTimeCtrl::isPMAMStringValid(const std::string& str)
+{
+ S32 len = str.length();
+
+ bool valid = (str[--len] == 'M') && (str[--len] == 'P' || str[len] == 'A');
+
+ return valid;
+}
+
+// static
+U32 LLTimeCtrl::parseHours(const std::string& str)
+{
+ U32 hours;
+ if (LLStringUtil::convertToU32(str, hours) && (hours >= HOURS_MIN) && (hours <= HOURS_MAX))
+ {
+ return hours;
+ }
+ else
+ {
+ return HOURS_MIN;
+ }
+}
+
+// static
+U32 LLTimeCtrl::parseMinutes(const std::string& str)
+{
+ U32 minutes;
+ if (LLStringUtil::convertToU32(str, minutes) && (minutes >= MINUTES_MIN) && (minutes <= MINUTES_MAX))
+ {
+ return minutes;
+ }
+ else
+ {
+ return MINUTES_MIN;
+ }
+}
+
+// static
+bool LLTimeCtrl::parseAMPM(const std::string& str)
+{
+ return str == "PM";
+}
diff --git a/indra/llui/lltimectrl.h b/indra/llui/lltimectrl.h
new file mode 100644
index 0000000000..b5f268c76a
--- /dev/null
+++ b/indra/llui/lltimectrl.h
@@ -0,0 +1,131 @@
+/**
+ * @file lltimectrl.h
+ * @brief Time control
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LLTIMECTRL_H_
+#define LLTIMECTRL_H_
+
+#include "stdtypes.h"
+#include "llbutton.h"
+#include "v4color.h"
+#include "llrect.h"
+
+class LLLineEditor;
+
+class LLTimeCtrl
+: public LLUICtrl
+{
+ LOG_CLASS(LLTimeCtrl);
+public:
+ struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
+ {
+ Optional<S32> label_width;
+ Optional<S32> snap_to;
+ Optional<bool> allow_text_entry;
+
+ Optional<LLUIColor> text_enabled_color;
+ Optional<LLUIColor> text_disabled_color;
+
+ Optional<LLButton::Params> up_button;
+ Optional<LLButton::Params> down_button;
+
+ Params();
+ };
+
+ F32 getTime24() const; // 0.0 - 24.0
+ U32 getHours24() const; // 0 - 23
+ U32 getMinutes() const; // 0 - 59
+
+ void setTime24(F32 time); // 0.0 - 23.98(3)
+
+protected:
+ LLTimeCtrl(const Params&);
+ friend class LLUICtrlFactory;
+
+private:
+
+ enum EDayPeriod
+ {
+ AM,
+ PM
+ };
+
+ enum EEditingPart
+ {
+ HOURS,
+ MINUTES,
+ DAYPART,
+ NONE
+ };
+
+ virtual void onFocusLost();
+ virtual BOOL handleKeyHere(KEY key, MASK mask);
+
+ void onUpBtn();
+ void onDownBtn();
+ void onTextEntry(LLLineEditor* line_editor);
+
+ bool isTimeStringValid(const LLWString& wstr);
+
+ void increaseMinutes();
+ void increaseHours();
+
+ void decreaseMinutes();
+ void decreaseHours();
+
+ bool isPM() const;
+ void switchDayPeriod();
+
+ void updateText();
+
+ EEditingPart getEditingPart();
+
+ static std::string getHoursString(const std::string& str);
+ static std::string getMinutesString(const std::string& str);
+ static std::string getAMPMString(const std::string& str);
+
+ static bool isHoursStringValid(const std::string& str);
+ static bool isMinutesStringValid(const std::string& str);
+ static bool isPMAMStringValid(const std::string& str);
+
+ static U32 parseHours(const std::string& str);
+ static U32 parseMinutes(const std::string& str);
+ static bool parseAMPM(const std::string& str);
+
+ class LLTextBox* mLabelBox;
+
+ class LLLineEditor* mEditor;
+ LLUIColor mTextEnabledColor;
+ LLUIColor mTextDisabledColor;
+
+ class LLButton* mUpBtn;
+ class LLButton* mDownBtn;
+
+ U32 mTime; // minutes since midnight: 0 - 1439
+ U32 mSnapToMin; // interval in minutes to snap to
+
+ BOOL mAllowEdit;
+};
+#endif /* LLTIMECTRL_H_ */
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 8020ca802b..58ba9e05f5 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -95,7 +95,6 @@ static LLDefaultChildRegistry::Register<LLSearchEditor> register_search_editor("
// register other widgets which otherwise may not be linked in
static LLDefaultChildRegistry::Register<LLLoadingIndicator> register_loading_indicator("loading_indicator");
-
//
// Functions
//
@@ -524,8 +523,15 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
if (solid_color)
{
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
- gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gSolidColorProgram.bind();
+ }
+ else
+ {
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
+ }
}
gGL.getTexUnit(0)->bind(image);
@@ -699,7 +705,14 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
if (solid_color)
{
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+ else
+ {
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
}
@@ -2082,7 +2095,7 @@ namespace LLInitParam
alpha("alpha"),
control("")
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
@@ -2097,14 +2110,14 @@ namespace LLInitParam
}
}
- void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
+ void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue(bool make_block_authoritative)
{
LLColor4 color = getValue();
- red.set(color.mV[VRED], false);
- green.set(color.mV[VGREEN], false);
- blue.set(color.mV[VBLUE], false);
- alpha.set(color.mV[VALPHA], false);
- control.set("", false);
+ red.set(color.mV[VRED], make_block_authoritative);
+ green.set(color.mV[VGREEN], make_block_authoritative);
+ blue.set(color.mV[VBLUE], make_block_authoritative);
+ alpha.set(color.mV[VALPHA], make_block_authoritative);
+ control.set("", make_block_authoritative);
}
bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -2124,7 +2137,7 @@ namespace LLInitParam
updateValue(LLFontGL::getFontDefault());
}
addSynonym(name, "");
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
@@ -2150,13 +2163,13 @@ namespace LLInitParam
}
}
- void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
+ void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue(bool make_block_authoritative)
{
if (getValue())
{
- name.set(LLFontGL::nameFromFont(getValue()), false);
- size.set(LLFontGL::sizeFromFont(getValue()), false);
- style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), false);
+ name.set(LLFontGL::nameFromFont(getValue()), make_block_authoritative);
+ size.set(LLFontGL::sizeFromFont(getValue()), make_block_authoritative);
+ style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), make_block_authoritative);
}
}
@@ -2169,7 +2182,7 @@ namespace LLInitParam
width("width"),
height("height")
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<LLRect, TypeValues<LLRect> >::updateValueFromBlock()
@@ -2236,19 +2249,19 @@ namespace LLInitParam
updateValue(rect);
}
- void ParamValue<LLRect, TypeValues<LLRect> >::updateBlockFromValue()
+ void ParamValue<LLRect, TypeValues<LLRect> >::updateBlockFromValue(bool make_block_authoritative)
{
// because of the ambiguity in specifying a rect by position and/or dimensions
- // we clear the "provided" flag so that values from xui/etc have priority
- // over those calculated from the rect object
-
+ // we use the lowest priority pairing so that any valid pairing in xui
+ // will override those calculated from the rect object
+ // in this case, that is left+width and bottom+height
LLRect& value = getValue();
- left.set(value.mLeft, false);
- right.set(value.mRight, false);
- bottom.set(value.mBottom, false);
- top.set(value.mTop, false);
- width.set(value.getWidth(), false);
- height.set(value.getHeight(), false);
+
+ left.set(value.mLeft, make_block_authoritative);
+ width.set(value.getWidth(), make_block_authoritative);
+
+ bottom.set(value.mBottom, make_block_authoritative);
+ height.set(value.getHeight(), make_block_authoritative);
}
ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::ParamValue(const LLCoordGL& coord)
@@ -2256,7 +2269,7 @@ namespace LLInitParam
x("x"),
y("y")
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
}
void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateValueFromBlock()
@@ -2264,10 +2277,10 @@ namespace LLInitParam
updateValue(LLCoordGL(x, y));
}
- void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateBlockFromValue()
+ void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateBlockFromValue(bool make_block_authoritative)
{
- x.set(getValue().mX, false);
- y.set(getValue().mY, false);
+ x.set(getValue().mX, make_block_authoritative);
+ y.set(getValue().mY, make_block_authoritative);
}
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index c583d58d5a..7801a01ace 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -33,6 +33,7 @@
#include "llrect.h"
#include "llcontrol.h"
#include "llcoord.h"
+#include "llglslshader.h"
#include "llinitparam.h"
#include "llregistry.h"
#include "lluicolor.h"
@@ -47,6 +48,7 @@
// for initparam specialization
#include "llfontgl.h"
+
class LLColor4;
class LLVector3;
class LLVector2;
@@ -408,7 +410,7 @@ namespace LLInitParam
ParamValue(const LLRect& value);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
template<>
@@ -426,7 +428,7 @@ namespace LLInitParam
ParamValue(const LLUIColor& color);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
template<>
@@ -441,7 +443,7 @@ namespace LLInitParam
ParamValue(const LLFontGL* value);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
template<>
@@ -480,8 +482,11 @@ namespace LLInitParam
ParamValue(const LLCoordGL& val);
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
}
+extern LLGLSLShader gSolidColorProgram;
+extern LLGLSLShader gUIProgram;
+
#endif
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
index 0a06b5e74f..d58df5801b 100644
--- a/indra/llui/lluictrl.cpp
+++ b/indra/llui/lluictrl.cpp
@@ -68,6 +68,7 @@ LLUICtrl::ControlVisibility::ControlVisibility()
LLUICtrl::Params::Params()
: tab_stop("tab_stop", true),
chrome("chrome", false),
+ requests_front("requests_front", false),
label("label"),
initial_value("value"),
init_callback("init_callback"),
@@ -96,9 +97,10 @@ const LLUICtrl::Params& LLUICtrl::getDefaultParams()
LLUICtrl::LLUICtrl(const LLUICtrl::Params& p, const LLViewModelPtr& viewmodel)
: LLView(p),
- mTentative(FALSE),
mIsChrome(FALSE),
+ mRequestsFront(p.requests_front),
mTabStop(FALSE),
+ mTentative(FALSE),
mViewModel(viewmodel),
mControlVariable(NULL),
mEnabledControlVariable(NULL),
@@ -123,6 +125,8 @@ void LLUICtrl::initFromParams(const Params& p)
{
LLView::initFromParams(p);
+ mRequestsFront = p.requests_front;
+
setIsChrome(p.chrome);
setControlName(p.control_name);
if(p.enabled_controls.isProvided())
@@ -403,6 +407,36 @@ LLViewModel* LLUICtrl::getViewModel() const
return mViewModel;
}
+//virtual
+BOOL LLUICtrl::postBuild()
+{
+ //
+ // Find all of the children that want to be in front and move them to the front
+ //
+
+ if (getChildCount() > 0)
+ {
+ std::vector<LLUICtrl*> childrenToMoveToFront;
+
+ for (LLView::child_list_const_iter_t child_it = beginChild(); child_it != endChild(); ++child_it)
+ {
+ LLUICtrl* uictrl = dynamic_cast<LLUICtrl*>(*child_it);
+
+ if (uictrl && uictrl->mRequestsFront)
+ {
+ childrenToMoveToFront.push_back(uictrl);
+ }
+ }
+
+ for (std::vector<LLUICtrl*>::iterator it = childrenToMoveToFront.begin(); it != childrenToMoveToFront.end(); ++it)
+ {
+ sendChildToFront(*it);
+ }
+ }
+
+ return LLView::postBuild();
+}
+
bool LLUICtrl::setControlValue(const LLSD& value)
{
if (mControlVariable)
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index b37e9f6b1b..09bed9b958 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -94,7 +94,8 @@ public:
{
Optional<std::string> label;
Optional<bool> tab_stop,
- chrome;
+ chrome,
+ requests_front;
Optional<LLSD> initial_value;
Optional<CommitCallbackParam> init_callback,
@@ -143,6 +144,8 @@ protected:
virtual LLViewModel* getViewModel() const;
// We shouldn't ever need to set this directly
//virtual void setViewModel(const LLViewModelPtr&);
+
+ virtual BOOL postBuild();
public:
// LLView interface
@@ -301,8 +304,9 @@ protected:
private:
- BOOL mTabStop;
BOOL mIsChrome;
+ BOOL mRequestsFront;
+ BOOL mTabStop;
BOOL mTentative;
LLRootHandle<LLUICtrl> mUICtrlHandle;
diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp
index f37947a50b..1d9ce29ba9 100644
--- a/indra/llui/lluiimage.cpp
+++ b/indra/llui/lluiimage.cpp
@@ -172,15 +172,15 @@ namespace LLInitParam
}
}
- void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
+ void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue(bool make_block_authoritative)
{
if (getValue() == NULL)
{
- name.set("none", false);
+ name.set("none", make_block_authoritative);
}
else
{
- name.set(getValue()->getName(), false);
+ name.set(getValue()->getName(), make_block_authoritative);
}
}
diff --git a/indra/llui/lluiimage.h b/indra/llui/lluiimage.h
index 139d88e0ac..f07e8fa746 100644
--- a/indra/llui/lluiimage.h
+++ b/indra/llui/lluiimage.h
@@ -103,12 +103,12 @@ namespace LLInitParam
ParamValue(LLUIImage* const& image)
: super_t(image)
{
- updateBlockFromValue();
+ updateBlockFromValue(false);
addSynonym(name, "name");
}
void updateValueFromBlock();
- void updateBlockFromValue();
+ void updateBlockFromValue(bool make_block_authoritative);
};
// Need custom comparison function for our test app, which only loads
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 9db1feafd1..a9e8fbb4e4 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -1134,7 +1134,7 @@ std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
//
LLUrlEntryNoLink::LLUrlEntryNoLink()
{
- mPattern = boost::regex("<nolink>.*</nolink>",
+ mPattern = boost::regex("<nolink>.*?</nolink>",
boost::regex::perl|boost::regex::icase);
}
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 245126d178..659a54cc6e 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1299,15 +1299,7 @@ void LLView::drawChildren()
{
if (!mChildList.empty())
{
- static const LLRect* rootRect = NULL;
-
- if (!mParentView)
- {
- rootRect = &mRect;
- }
-
- LLRect screenRect;
-
+ LLView* rootp = LLUI::getRootView();
++sDepth;
for (child_list_reverse_iter_t child_iter = mChildList.rbegin(); child_iter != mChildList.rend();) // ++child_iter)
@@ -1317,9 +1309,8 @@ void LLView::drawChildren()
if (viewp->getVisible() && viewp->getRect().isValid())
{
- // Only draw views that are within the root view
- localRectToScreen(viewp->getRect(),&screenRect);
- if ( rootRect->overlaps(screenRect) && LLUI::sDirtyRect.overlaps(screenRect))
+ LLRect screen_rect = viewp->calcScreenRect();
+ if ( rootp->getLocalRect().overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect))
{
LLUI::pushMatrix();
{
@@ -1664,15 +1655,19 @@ BOOL LLView::hasAncestor(const LLView* parentp) const
BOOL LLView::childHasKeyboardFocus( const std::string& childname ) const
{
- LLView *child = findChildView(childname, TRUE);
- if (child)
- {
- return gFocusMgr.childHasKeyboardFocus(child);
- }
- else
+ LLView *focus = dynamic_cast<LLView *>(gFocusMgr.getKeyboardFocus());
+
+ while (focus != NULL)
{
- return FALSE;
+ if (focus->getName() == childname)
+ {
+ return TRUE;
+ }
+
+ focus = focus->getParent();
}
+
+ return FALSE;
}
//-----------------------------------------------------------------------------
diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp
index 26b3b17577..d522123260 100644
--- a/indra/llui/tests/llurlentry_stub.cpp
+++ b/indra/llui/tests/llurlentry_stub.cpp
@@ -137,7 +137,7 @@ namespace LLInitParam
void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
{}
- void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
+ void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue(bool)
{}
bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -152,7 +152,7 @@ namespace LLInitParam
void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
{}
- void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
+ void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue(bool)
{}
void TypeValues<LLFontGL::HAlign>::declareValues()
@@ -167,7 +167,7 @@ namespace LLInitParam
void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
{}
- void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
+ void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue(bool)
{}
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index e09ef33d49..fb6a2eabf1 100644
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -95,7 +95,7 @@ namespace LLInitParam
{
const U8* my_addr = reinterpret_cast<const U8*>(this);
const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
- mEnclosingBlockOffset = (U16)(my_addr - block_addr);
+ mEnclosingBlockOffset = 0x7FFFffff & ((U32)(my_addr - block_addr));
}
bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
@@ -111,7 +111,7 @@ namespace LLInitParam
void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
{}
- void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
+ void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue(bool)
{}
bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -127,7 +127,7 @@ namespace LLInitParam
void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
{}
- void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
+ void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue(bool)
{}
void TypeValues<LLFontGL::HAlign>::declareValues()
@@ -142,7 +142,7 @@ namespace LLInitParam
void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
{}
- void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
+ void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue(bool)
{}
bool ParamCompare<LLUIImage*, false>::equals(
diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt
index 2c581cf8d6..a819d12861 100644
--- a/indra/llvfs/CMakeLists.txt
+++ b/indra/llvfs/CMakeLists.txt
@@ -83,13 +83,13 @@ if (LL_TESTS)
include(LLAddBuildTest)
# UNIT TESTS
SET(llvfs_TEST_SOURCE_FILES
- lldiriterator.cpp
- )
+ lldiriterator.cpp
+ )
set_source_files_properties(lldiriterator.cpp
- PROPERTIES
- LL_TEST_ADDITIONAL_LIBRARIES "${vfs_BOOST_LIBRARIES}"
- )
+ PROPERTIES
+ LL_TEST_ADDITIONAL_LIBRARIES "${vfs_BOOST_LIBRARIES}"
+ )
LL_ADD_PROJECT_UNIT_TESTS(llvfs "${llvfs_TEST_SOURCE_FILES}")
# INTEGRATION TESTS
diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp
index 25550321f0..ff92cbb7fd 100644
--- a/indra/llvfs/lldiriterator.cpp
+++ b/indra/llvfs/lldiriterator.cpp
@@ -52,8 +52,20 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
{
fs::path dir_path(dirname);
- // Check if path exists.
- if (!fs::exists(dir_path))
+ bool is_dir = false;
+
+ // Check if path is a directory.
+ try
+ {
+ is_dir = fs::is_directory(dir_path);
+ }
+ catch (fs::basic_filesystem_error<fs::path>& e)
+ {
+ llwarns << e.what() << llendl;
+ return;
+ }
+
+ if (!is_dir)
{
llwarns << "Invalid path: \"" << dir_path.string() << "\"" << llendl;
return;
@@ -66,7 +78,7 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
}
catch (fs::basic_filesystem_error<fs::path>& e)
{
- llerrs << e.what() << llendl;
+ llwarns << e.what() << llendl;
return;
}
@@ -82,7 +94,7 @@ LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
}
catch (boost::regex_error& e)
{
- llerrs << "\"" << exp << "\" is not a valid regular expression: "
+ llwarns << "\"" << exp << "\" is not a valid regular expression: "
<< e.what() << llendl;
return;
}
diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp
index 3d3ed9f6d4..bf49b9668e 100644
--- a/indra/llvfs/lllfsthread.cpp
+++ b/indra/llvfs/lllfsthread.cpp
@@ -67,10 +67,6 @@ LLLFSThread::LLLFSThread(bool threaded) :
LLQueuedThread("LFS", threaded),
mPriorityCounter(PRIORITY_LOWBITS)
{
- if(!mLocalAPRFilePoolp)
- {
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
- }
}
LLLFSThread::~LLLFSThread()
@@ -182,8 +178,7 @@ bool LLLFSThread::Request::processRequest()
if (mOperation == FILE_READ)
{
llassert(mOffset >= 0);
- LLAPRFile infile ; // auto-closes
- infile.open(mFileName, LL_APR_RB, mThread->getLocalAPRFilePool());
+ LLAPRFile infile(mFileName, LL_APR_RB);
if (!infile.getFileHandle())
{
llwarns << "LLLFS: Unable to read file: " << mFileName << llendl;
@@ -205,8 +200,7 @@ bool LLLFSThread::Request::processRequest()
apr_int32_t flags = APR_CREATE|APR_WRITE|APR_BINARY;
if (mOffset < 0)
flags |= APR_APPEND;
- LLAPRFile outfile ; // auto-closes
- outfile.open(mFileName, flags, mThread->getLocalAPRFilePool());
+ LLAPRFile outfile(mFileName, flags);
if (!outfile.getFileHandle())
{
llwarns << "LLLFS: Unable to write file: " << mFileName << llendl;
diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp
index 82c926620a..ade19f8103 100644
--- a/indra/llvfs/llvfs.cpp
+++ b/indra/llvfs/llvfs.cpp
@@ -234,7 +234,7 @@ LLVFS::LLVFS(const std::string& index_filename, const std::string& data_filename
mDataFP(NULL),
mIndexFP(NULL)
{
- mDataMutex = new LLMutex(0);
+ mDataMutex = new LLMutex;
S32 i;
for (i = 0; i < VFSLOCK_COUNT; i++)
@@ -2098,8 +2098,7 @@ void LLVFS::dumpFiles()
std::string filename = id.asString() + extension;
llinfos << " Writing " << filename << llendl;
- LLAPRFile outfile;
- outfile.open(filename, LL_APR_WB);
+ LLAPRFile outfile(filename, LL_APR_WB);
outfile.write(&buffer[0], size);
outfile.close();
diff --git a/indra/llwindow/GL/glh_extensions.h b/indra/llwindow/GL/glh_extensions.h
index b936b5d307..d89d85930b 100644
--- a/indra/llwindow/GL/glh_extensions.h
+++ b/indra/llwindow/GL/glh_extensions.h
@@ -1,5 +1,7 @@
/*
* glh_extensions.h
+ * $LicenseInfo:firstyear=2006&license=mit$ (mit used here to satisfy validity checker)
+ * Copyright (C) 2006, NVIDIA
* From nVidia Corporation, downloaded 2006-12-18 from:
* http://developer.nvidia.com/attach/8196
* ("NVParse Library with Source (.zip) (2390 KB)")
@@ -8,6 +10,8 @@
* "The files bison.exe, bison.simple, and flex.exe are covered by
* the GPL. All other files in this distribution can be used however
* you want."
+ * $/LicenseInfo$
+
*/
#ifndef GLH_EXTENSIONS
diff --git a/indra/llwindow/GL/glh_genext.h b/indra/llwindow/GL/glh_genext.h
index 8d42025198..cd5d1604a8 100644
--- a/indra/llwindow/GL/glh_genext.h
+++ b/indra/llwindow/GL/glh_genext.h
@@ -1,5 +1,7 @@
/*
* glh_genext.h
+ * $LicenseInfo:firstyear=2008&license=mit$ (mit used here to satisfy validity checker)
+ * Copyright (C) 2008, NVIDIA
* From nVidia Corporation, downloaded 2006-12-18 from:
* http://developer.nvidia.com/attach/8196
* ("NVParse Library with Source (.zip) (2390 KB)")
@@ -8,6 +10,7 @@
* "The files bison.exe, bison.simple, and flex.exe are covered by
* the GPL. All other files in this distribution can be used however
* you want."
+ * $/LicenseInfo$
*/
/* File generated by extgen.cpp -- do not modify */
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index 551d487cc8..1239e2d40b 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -1172,8 +1172,39 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
// First we try and get a 32 bit depth pixel format
BOOL result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
+
+ while(!result && mFSAASamples > 0)
+ {
+ llwarns << "FSAASamples: " << mFSAASamples << " not supported." << llendl ;
+
+ mFSAASamples /= 2 ; //try to decrease sample pixel number until to disable anti-aliasing
+ if(mFSAASamples < 2)
+ {
+ mFSAASamples = 0 ;
+ }
+
+ if (mFSAASamples > 0)
+ {
+ attrib_list[end_attrib + 3] = mFSAASamples;
+ }
+ else
+ {
+ cur_attrib = end_attrib ;
+ end_attrib = 0 ;
+ attrib_list[cur_attrib++] = 0 ; //end
+ }
+ result = wglChoosePixelFormatARB(mhDC, attrib_list, NULL, 256, pixel_formats, &num_formats);
+
+ if(result)
+ {
+ llwarns << "Only support FSAASamples: " << mFSAASamples << llendl ;
+ }
+ }
+
if (!result)
{
+ llwarns << "mFSAASamples: " << mFSAASamples << llendl ;
+
close();
show_window_creation_error("Error after wglChoosePixelFormatARB 32-bit");
return FALSE;
diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt
index 21cdf5f926..beefcda361 100644
--- a/indra/llxml/CMakeLists.txt
+++ b/indra/llxml/CMakeLists.txt
@@ -48,22 +48,22 @@ target_link_libraries( llxml
# tests
if (LL_TESTS)
- # unit tests
+ # unit tests
- SET(llxml_TEST_SOURCE_FILES
- # none yet!
- )
- LL_ADD_PROJECT_UNIT_TESTS(llxml "${llxml_TEST_SOURCE_FILES}")
+ SET(llxml_TEST_SOURCE_FILES
+ # none yet!
+ )
+ LL_ADD_PROJECT_UNIT_TESTS(llxml "${llxml_TEST_SOURCE_FILES}")
- # integration tests
+ # integration tests
- # set(TEST_DEBUG on)
- set(test_libs
- ${LLXML_LIBRARIES}
- ${WINDOWS_LIBRARIES}
- ${LLMATH_LIBRARIES}
- ${LLCOMMON_LIBRARIES}
- )
+ # set(TEST_DEBUG on)
+ set(test_libs
+ ${LLXML_LIBRARIES}
+ ${WINDOWS_LIBRARIES}
+ ${LLMATH_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
+ )
- LL_ADD_INTEGRATION_TEST(llcontrol "" "${test_libs}")
+ LL_ADD_INTEGRATION_TEST(llcontrol "" "${test_libs}")
endif (LL_TESTS)
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
index e402061e1f..050d4b729f 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -385,7 +385,8 @@ class LLCachedControl
{
public:
LLCachedControl(LLControlGroup& group,
- const std::string& name,
+ const std::string& name,
+
const T& default_value,
const std::string& comment = "Declared In Code")
{
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index b3312798dd..c024fd405e 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -40,7 +40,7 @@ namespace LLInitParam
{
const U8* my_addr = reinterpret_cast<const U8*>(this);
const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
- mEnclosingBlockOffset = (U16)(my_addr - block_addr);
+ mEnclosingBlockOffset = 0x7FFFffff & ((U32)(my_addr - block_addr));
}
//
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index a853999e94..194ef8af6a 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -34,6 +34,8 @@
#include <boost/unordered_map.hpp>
#include <boost/shared_ptr.hpp>
+#include "llerror.h"
+
namespace LLInitParam
{
template<typename T> const T& defaultValue() { static T value; return value; }
@@ -302,8 +304,9 @@ namespace LLInitParam
private:
friend class BaseBlock;
- U16 mEnclosingBlockOffset;
- bool mIsProvided;
+ U32 mEnclosingBlockOffset:31;
+ U32 mIsProvided:1;
+
};
// various callbacks and constraints associated with an individual param
@@ -737,7 +740,6 @@ namespace LLInitParam
if (src_typed_param.isProvided()
&& (overwrite || !dst_typed_param.isProvided()))
{
- dst_typed_param.clearValueName();
dst_typed_param.set(src_typed_param.getValue());
return true;
}
@@ -1741,39 +1743,35 @@ namespace LLInitParam
: mValue(value),
mValueAge(VALUE_AUTHORITATIVE),
mKeyVersion(0),
- mValidatedVersion(-1)
+ mValidatedVersion(-1),
+ mValidated(false)
{}
bool deserializeBlock(Parser& parser, Parser::name_stack_range_t name_stack, S32 generation)
{
derived_t& typed_param = static_cast<derived_t&>(*this);
- // type to apply parse direct value T
+ // try to parse direct value T
if (name_stack.first == name_stack.second)
{
if(parser.readValue(typed_param.mValue))
{
- typed_param.clearValueName();
typed_param.mValueAge = VALUE_AUTHORITATIVE;
- typed_param.updateBlockFromValue();
+ typed_param.updateBlockFromValue(false);
+
+ typed_param.clearValueName();
return true;
}
}
// fall back on parsing block components for T
- // if we deserialized at least one component...
- if (typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation))
- {
- return true;
- }
-
- return false;
+ return typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation);
}
void serializeBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const
{
- const self_t& typed_param = static_cast<const self_t&>(*this);
- const self_t* diff_param = static_cast<const self_t*>(diff_block);
+ const derived_t& typed_param = static_cast<const derived_t&>(*this);
+ const derived_t* diff_param = static_cast<const derived_t*>(diff_block);
std::string key = typed_param.getValueName();
@@ -1798,7 +1796,20 @@ namespace LLInitParam
// be exported as <color green="1"/>, since it was probably the intent of the user to
// be specific about the RGB color values. This also fixes an issue where we distinguish
// between rect.left not being provided and rect.left being explicitly set to 0 (same as default)
- block_t::serializeBlock(parser, name_stack, NULL);
+
+ if (typed_param.mValueAge == VALUE_AUTHORITATIVE)
+ {
+ // if the value is authoritative but the parser doesn't accept the value type
+ // go ahead and make a copy, and splat the value out to its component params
+ // and serialize those params
+ derived_t copy(typed_param);
+ copy.updateBlockFromValue(true);
+ copy.block_t::serializeBlock(parser, name_stack, NULL);
+ }
+ else
+ {
+ block_t::serializeBlock(parser, name_stack, NULL);
+ }
}
}
}
@@ -1847,7 +1858,7 @@ namespace LLInitParam
{
BaseBlock::paramChanged(changed_param, user_provided);
if (user_provided)
- {
+ {
// a parameter changed, so our value is out of date
mValueAge = VALUE_NEEDS_UPDATE;
}
@@ -1860,7 +1871,7 @@ namespace LLInitParam
mValueAge = VALUE_AUTHORITATIVE;
mValue = val;
typed_param.clearValueName();
- static_cast<derived_t*>(const_cast<self_t*>(this))->updateBlockFromValue();
+ static_cast<derived_t*>(this)->updateBlockFromValue(false);
}
value_assignment_t getValue() const
@@ -1915,7 +1926,6 @@ namespace LLInitParam
mutable bool mValidated; // lazy validation flag
private:
-
mutable T mValue;
mutable EValueAge mValueAge;
};
diff --git a/indra/lscript/lscript_compile/bison.bat b/indra/lscript/lscript_compile/bison.bat
index 54cf0231d9..0baff4e5ef 100644
--- a/indra/lscript/lscript_compile/bison.bat
+++ b/indra/lscript/lscript_compile/bison.bat
@@ -1,11 +1,11 @@
-@REM Run bison under Windows. This script is needed so that bison can
-@REM find m4, even if neither program is present in PATH.
-
-@set bison=%1
-set M4PATH=%2
-set M4=
-@set output=%3
-@set input=%4
-
-set PATH=%M4PATH%;%PATH%
-%bison% -d -o %output% %input%
+@REM Run bison under Windows. This script is needed so that bison can
+@REM find m4, even if neither program is present in PATH.
+
+@set bison=%1
+set M4PATH=%2
+set M4=
+@set output=%3
+@set input=%4
+
+set PATH=%M4PATH%;%PATH%
+%bison% -d -o %output% %input%
diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l
index 188c9e1950..4e103ae2ba 100644
--- a/indra/lscript/lscript_compile/indra.l
+++ b/indra/lscript/lscript_compile/indra.l
@@ -603,6 +603,8 @@ extern "C" { int yyerror(const char *fmt, ...); }
"PARCEL_DETAILS_OWNER" { count(); yylval.ival = PARCEL_DETAILS_OWNER; return(INTEGER_CONSTANT); }
"PARCEL_DETAILS_GROUP" { count(); yylval.ival = PARCEL_DETAILS_GROUP; return(INTEGER_CONSTANT); }
"PARCEL_DETAILS_AREA" { count(); yylval.ival = PARCEL_DETAILS_AREA; return(INTEGER_CONSTANT); }
+"PARCEL_DETAILS_ID" { count(); yylval.ival = PARCEL_DETAILS_ID; return(INTEGER_CONSTANT); }
+"PARCEL_DETAILS_SEE_AVATARS" { count(); yylval.ival = PARCEL_DETAILS_SEE_AVATARS; return(INTEGER_CONSTANT); }
"STRING_TRIM_HEAD" { count(); yylval.ival = STRING_TRIM_HEAD; return(INTEGER_CONSTANT); }
"STRING_TRIM_TAIL" { count(); yylval.ival = STRING_TRIM_TAIL; return(INTEGER_CONSTANT); }
diff --git a/indra/lscript/lscript_compile/windows/unistd.h b/indra/lscript/lscript_compile/windows/unistd.h
index 49e9152d63..0b7e2581e3 100644
--- a/indra/lscript/lscript_compile/windows/unistd.h
+++ b/indra/lscript/lscript_compile/windows/unistd.h
@@ -1,24 +1,24 @@
-/**
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-/* After all that, this file is empty. */
+/**
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+/* After all that, this file is empty. */
diff --git a/indra/mac_crash_logger/CrashReporter.nib/objects.xib b/indra/mac_crash_logger/CrashReporter.nib/objects.xib
index 634d1c5321..32647391b6 100644
--- a/indra/mac_crash_logger/CrashReporter.nib/objects.xib
+++ b/indra/mac_crash_logger/CrashReporter.nib/objects.xib
@@ -15,7 +15,7 @@
<string name="bounds">414 390 434 487 </string>
</object>
<object class="IBCarbonStaticText" id="181">
- <string name="title">Second Life appears to have crashed or frozen the last time it ran.&#10;&#10;This crash reporter collects information about your computer&apos;s hardware configuration, operating system, and some Second Life logs, all of which are used for debugging purposes only.&#10;&#10;In the space below, please briefly describe what you were doing or trying to do just prior to the crash. Thank you for your help!&#10;&#10;This report is NOT read by Customer Support. If you have billing or other questions, please go to: http://www.secondlife.com/support/&#10;&#10;If you don&apos;t wish to send Linden Lab a crash report, press Cancel.&#10;</string>
+ <string name="title">Second Life appears to have crashed or frozen the last time it ran.&#10;&#10;This crash reporter collects information about your computer&apos;s hardware configuration, operating system, and some Second Life logs, all of which are used for debugging purposes only.&#10;&#10;In the space below, please briefly describe what you were doing or trying to do just prior to the crash. Thank you for your help!&#10;&#10;This report is NOT read by Customer Support. If you have billing or other questions, please go to: http://www.secondlife.com/support/&#10;&#10;If you don&apos;t wish to send Linden Lab a crash report, press Don&apos;t Send.&#10;</string>
<string name="bounds">20 20 231 487 </string>
</object>
<object class="IBCarbonWindow" id="166">
diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp
index bec8cce04e..b555e92b96 100644
--- a/indra/mac_crash_logger/llcrashloggermac.cpp
+++ b/indra/mac_crash_logger/llcrashloggermac.cpp
@@ -29,9 +29,6 @@
#include <Carbon/Carbon.h>
#include <iostream>
-#include <sstream>
-
-#include "boost/tokenizer.hpp"
#include "indra_constants.h" // CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
#include "llerror.h"
@@ -247,7 +244,7 @@ bool LLCrashLoggerMac::mainLoop()
void LLCrashLoggerMac::updateApplication(const std::string& message)
{
- LLCrashLogger::updateApplication();
+ LLCrashLogger::updateApplication(message);
}
bool LLCrashLoggerMac::cleanup()
diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp
index 20b491c401..6571b35241 100644
--- a/indra/mac_crash_logger/mac_crash_logger.cpp
+++ b/indra/mac_crash_logger/mac_crash_logger.cpp
@@ -25,22 +25,23 @@
*/
#include "linden_common.h"
-
#include "llcrashloggermac.h"
int main(int argc, char **argv)
{
- //time(&gLaunchTime);
-
- llinfos << "Starting Second Life Viewer Crash Reporter" << llendl;
+ llinfos << "Starting crash reporter." << llendl;
LLCrashLoggerMac app;
app.parseCommandOptions(argc, argv);
- if(!app.init())
+
+ if (! app.init())
{
- return 0;
+ llwarns << "Unable to initialize application." << llendl;
+ return 1;
}
+
app.mainLoop();
-
+ app.cleanup();
+ llinfos << "Crash reporter finished normally." << llendl;
return 0;
}
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
index 56cefde4bd..54dc5de1ea 100644
--- a/indra/media_plugins/example/CMakeLists.txt
+++ b/indra/media_plugins/example/CMakeLists.txt
@@ -79,4 +79,4 @@ if (DARWIN)
LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp"
)
-endif (DARWIN) \ No newline at end of file
+endif (DARWIN)
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
index 6bc272c009..77d6d19663 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
@@ -37,7 +37,6 @@ extern "C" {
#include <stdio.h>
#include <gst/gst.h>
-#include "apr_pools.h"
#include "apr_dso.h"
}
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
index 2e4baaa9eb..93a10424dd 100644
--- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
+++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
@@ -28,16 +28,18 @@
#if LL_GSTREAMER010_ENABLED
+#include "linden_common.h"
+
#include <string>
extern "C" {
#include <gst/gst.h>
-#include "apr_pools.h"
#include "apr_dso.h"
}
#include "llmediaimplgstreamertriviallogging.h"
+#include "llaprpool.h"
#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) RTN (*ll##GSTSYM)(__VA_ARGS__) = NULL
#include "llmediaimplgstreamer_syms_raw.inc"
@@ -56,7 +58,7 @@ void ll_gst_debug_register_funcptr(GstDebugFuncPtr func, gchar* ptrname)
}
static bool sSymsGrabbed = false;
-static apr_pool_t *sSymGSTDSOMemoryPool = NULL;
+static LLAPRPool sSymGSTDSOMemoryPool;
static apr_dso_handle_t *sSymGSTDSOHandleG = NULL;
static apr_dso_handle_t *sSymGSTDSOHandleV = NULL;
@@ -78,11 +80,11 @@ bool grab_gst_syms(std::string gst_dso_name,
#define LL_GST_SYM(REQ, GSTSYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##GSTSYM, sSymGSTDSOHandle, #GSTSYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #GSTSYM); if (REQ) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #GSTSYM, (void*)ll##GSTSYM);}while(0)
//attempt to load the shared libraries
- apr_pool_create(&sSymGSTDSOMemoryPool, NULL);
+ sSymGSTDSOMemoryPool.create();
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymGSTDSOHandle,
gst_dso_name.c_str(),
- sSymGSTDSOMemoryPool) ))
+ sSymGSTDSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", gst_dso_name.c_str());
#include "llmediaimplgstreamer_syms_raw.inc"
@@ -96,7 +98,7 @@ bool grab_gst_syms(std::string gst_dso_name,
if ( APR_SUCCESS ==
(rv = apr_dso_load(&sSymGSTDSOHandle,
gst_dso_name_vid.c_str(),
- sSymGSTDSOMemoryPool) ))
+ sSymGSTDSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", gst_dso_name_vid.c_str());
#include "llmediaimplgstreamer_syms_rawv.inc"
@@ -150,8 +152,7 @@ void ungrab_gst_syms()
if ( sSymGSTDSOMemoryPool )
{
- apr_pool_destroy(sSymGSTDSOMemoryPool);
- sSymGSTDSOMemoryPool = NULL;
+ sSymGSTDSOMemoryPool.destroy();
}
// NULL-out all of the symbols we'd grabbed
diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp
index 91be3a89e9..94dfd80700 100644
--- a/indra/media_plugins/webkit/linux_volume_catcher.cpp
+++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp
@@ -65,7 +65,7 @@ extern "C" {
#undef LL_PA_SYM
static bool sSymsGrabbed = false;
-static apr_pool_t *sSymPADSOMemoryPool = NULL;
+static LLAPRPool sSymPADSOMemoryPool;
static apr_dso_handle_t *sSymPADSOHandleG = NULL;
bool grab_pa_syms(std::string pulse_dso_name)
@@ -84,11 +84,11 @@ bool grab_pa_syms(std::string pulse_dso_name)
#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##PASYM, sSymPADSOHandle, #PASYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #PASYM); if (REQUIRED) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #PASYM, (void*)ll##PASYM);}while(0)
//attempt to load the shared library
- apr_pool_create(&sSymPADSOMemoryPool, NULL);
+ sSymPADSOMemoryPool.create();
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymPADSOHandle,
pulse_dso_name.c_str(),
- sSymPADSOMemoryPool) ))
+ sSymPADSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", pulse_dso_name.c_str());
@@ -130,12 +130,8 @@ void ungrab_pa_syms()
apr_dso_unload(sSymPADSOHandleG);
sSymPADSOHandleG = NULL;
}
-
- if ( sSymPADSOMemoryPool )
- {
- apr_pool_destroy(sSymPADSOMemoryPool);
- sSymPADSOMemoryPool = NULL;
- }
+
+ sSymPADSOMemoryPool.destroy();
// NULL-out all of the symbols we'd grabbed
#define LL_PA_SYM(REQUIRED, PASYM, RTN, ...) do{ll##PASYM = NULL;}while(0)
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 27f3c7260e..430ae9d4dc 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -1,1386 +1,1447 @@
-/**
- * @file media_plugin_webkit.cpp
- * @brief Webkit plugin for LLMedia API plugin system
- *
- * @cond
- * $LicenseInfo:firstyear=2008&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- * @endcond
- */
-
-#include "llqtwebkit.h"
-
-#include "linden_common.h"
-#include "indra_constants.h" // for indra keyboard codes
-
-#include "llgl.h"
-
-#include "llplugininstance.h"
-#include "llpluginmessage.h"
-#include "llpluginmessageclasses.h"
-#include "media_plugin_base.h"
-
-// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified
-#if LL_LINUX
-# define LL_QTWEBKIT_USES_PIXMAPS 0
-extern "C" {
-# include <glib.h>
-# include <glib-object.h>
-}
-#else
-# define LL_QTWEBKIT_USES_PIXMAPS 0
-#endif // LL_LINUX
-
-# include "volume_catcher.h"
-
-#if LL_WINDOWS
-# include <direct.h>
-#else
-# include <unistd.h>
-# include <stdlib.h>
-#endif
-
-#if LL_WINDOWS
- // *NOTE:Mani - This captures the module handle for the dll. This is used below
- // to get the path to this dll for webkit initialization.
- // I don't know how/if this can be done with apr...
- namespace { HMODULE gModuleHandle;};
- BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
- {
- gModuleHandle = (HMODULE) hinstDLL;
- return TRUE;
- }
-#endif
-
-////////////////////////////////////////////////////////////////////////////////
-//
-class MediaPluginWebKit :
- public MediaPluginBase,
- public LLEmbeddedBrowserWindowObserver
-{
-public:
- MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data);
- ~MediaPluginWebKit();
-
- /*virtual*/ void receiveMessage(const char *message_string);
-
-private:
-
- std::string mProfileDir;
- std::string mHostLanguage;
- std::string mUserAgent;
- bool mCookiesEnabled;
- bool mJavascriptEnabled;
- bool mPluginsEnabled;
-
- enum
- {
- INIT_STATE_UNINITIALIZED, // LLQtWebkit hasn't been set up yet
- INIT_STATE_INITIALIZED, // LLQtWebkit has been set up, but no browser window has been created yet.
- INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued
- INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed
- INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws
- INIT_STATE_WAIT_COMPLETE, // Waiting for first real navigate complete event
- INIT_STATE_RUNNING // All initialization gymnastics are complete.
- };
- int mBrowserWindowId;
- int mInitState;
- std::string mInitialNavigateURL;
- bool mNeedsUpdate;
-
- bool mCanCut;
- bool mCanCopy;
- bool mCanPaste;
- int mLastMouseX;
- int mLastMouseY;
- bool mFirstFocus;
- F32 mBackgroundR;
- F32 mBackgroundG;
- F32 mBackgroundB;
- std::string mTarget;
-
- VolumeCatcher mVolumeCatcher;
-
- void setInitState(int state)
- {
-// std::cerr << "changing init state to " << state << std::endl;
- mInitState = state;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- void update(int milliseconds)
- {
-#if LL_QTLINUX_DOESNT_HAVE_GLIB
- // pump glib generously, as Linux browser plugins are on the
- // glib main loop, even if the browser itself isn't - ugh
- // This is NOT NEEDED if Qt itself was built with glib
- // mainloop integration.
- GMainContext *mainc = g_main_context_default();
- while(g_main_context_iteration(mainc, FALSE));
-#endif // LL_QTLINUX_DOESNT_HAVE_GLIB
-
- // pump qt
- LLQtWebKit::getInstance()->pump( milliseconds );
-
- mVolumeCatcher.pump();
-
- checkEditState();
-
- if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
- {
- if(!mInitialNavigateURL.empty())
- {
- // We already have the initial navigate URL -- kick off the navigate.
- LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, mInitialNavigateURL );
- mInitialNavigateURL.clear();
- }
- }
-
- if ( (mInitState > INIT_STATE_WAIT_REDRAW) && mNeedsUpdate )
- {
- const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
-
- unsigned int rowspan = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId );
- unsigned int height = LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId );
-#if !LL_QTWEBKIT_USES_PIXMAPS
- unsigned int buffer_size = rowspan * height;
-#endif // !LL_QTWEBKIT_USES_PIXMAPS
-
-// std::cerr << "webkit plugin: updating" << std::endl;
-
- // TODO: should get rid of this memcpy if possible
- if ( mPixels && browser_pixels )
- {
-// std::cerr << " memcopy of " << buffer_size << " bytes" << std::endl;
-
-#if LL_QTWEBKIT_USES_PIXMAPS
- // copy the pixel data upside-down because of the co-ord system
- for (int y=0; y<height; ++y)
- {
- memcpy( &mPixels[(height-y-1)*rowspan], &browser_pixels[y*rowspan], rowspan );
- }
-#else
- memcpy( mPixels, browser_pixels, buffer_size );
-#endif // LL_QTWEBKIT_USES_PIXMAPS
- }
-
- if ( mWidth > 0 && mHeight > 0 )
- {
-// std::cerr << "Setting dirty, " << mWidth << " x " << mHeight << std::endl;
- setDirty( 0, 0, mWidth, mHeight );
- }
-
- mNeedsUpdate = false;
- };
- };
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- bool initBrowser()
- {
- // already initialized
- if ( mInitState > INIT_STATE_UNINITIALIZED )
- return true;
-
- // set up directories
- char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use
- if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
- {
- llwarns << "Couldn't get cwd - probably too long - failing to init." << llendl;
- return false;
- }
- std::string application_dir = std::string( cwd );
-
-#if LL_LINUX
- // take care to initialize glib properly, because some
- // versions of Qt don't, and we indirectly need it for (some
- // versions of) Flash to not crash the browser.
- if (!g_thread_supported ()) g_thread_init (NULL);
- g_type_init();
-#endif
-
-#if LL_DARWIN
- // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.
- // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger.
- // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it
- // which gets hit when the plugin is probed by webkit.
- // Unsetting the environment variable here works around this issue.
- unsetenv("USERBREAK");
-#endif
-
-#if LL_WINDOWS
- //*NOTE:Mani - On windows, at least, the component path is the
- // location of this dll's image file.
- std::string component_dir;
- char dll_path[_MAX_PATH];
- DWORD len = GetModuleFileNameA(gModuleHandle, (LPCH)&dll_path, _MAX_PATH);
- while(len && dll_path[ len ] != ('\\') )
- {
- len--;
- }
- if(len >= 0)
- {
- dll_path[len] = 0;
- component_dir = dll_path;
- }
- else
- {
- // *NOTE:Mani - This case should be an rare exception.
- // GetModuleFileNameA should always give you a full path, no?
- component_dir = application_dir;
- }
-#else
- std::string component_dir = application_dir;
-#endif
-
- // window handle - needed on Windows and must be app window.
-#if LL_WINDOWS
- char window_title[ MAX_PATH ];
- GetConsoleTitleA( window_title, MAX_PATH );
- void* native_window_handle = (void*)FindWindowA( NULL, window_title );
-#else
- void* native_window_handle = 0;
-#endif
-
- // main browser initialization
- bool result = LLQtWebKit::getInstance()->init( application_dir, component_dir, mProfileDir, native_window_handle );
- if ( result )
- {
- mInitState = INIT_STATE_INITIALIZED;
-
- return true;
- };
-
- return false;
- };
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- bool initBrowserWindow()
- {
- // already initialized
- if ( mInitState > INIT_STATE_INITIALIZED )
- return true;
-
- // not enough information to initialize the browser yet.
- if ( mWidth < 0 || mHeight < 0 || mDepth < 0 ||
- mTextureWidth < 0 || mTextureHeight < 0 )
- {
- return false;
- };
-
- // Set up host language before creating browser window
- if(!mHostLanguage.empty())
- {
- LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage);
- }
-
- // turn on/off cookies based on what host app tells us
- LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
-
- // turn on/off plugins based on what host app tells us
- LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
-
- // turn on/off Javascript based on what host app tells us
- LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
-
- // create single browser window
- mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
-
- // tell LLQtWebKit about the size of the browser window
- LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
-
- // observer events that LLQtWebKit emits
- LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this );
-
- // append details to agent string
- LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
-
-#if !LL_QTWEBKIT_USES_PIXMAPS
- // don't flip bitmap
- LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
-#endif // !LL_QTWEBKIT_USES_PIXMAPS
-
- // set background color
- // convert background color channels from [0.0, 1.0] to [0, 255];
- LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) );
-
- // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns.
- setInitState(INIT_STATE_NAVIGATING);
-
- // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance.
- // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially
- // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date.
- // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E"
- // where RRGGBB is the background color in HTML style
- std::stringstream url;
-
- url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#";
- // convert background color channels from [0.0, 1.0] to [0, 255];
- url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f);
- url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f);
- url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f);
- url << "%22%3E%3C/body%3E%3C/html%3E";
-
- //lldebugs << "data url is: " << url.str() << llendl;
-
- LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() );
-// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
-
- return true;
- }
-
- void setVolume(F32 vol);
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onCursorChanged(const EventType& event)
- {
- LLQtWebKit::ECursor llqt_cursor = (LLQtWebKit::ECursor)event.getIntValue();
- std::string name;
-
- switch(llqt_cursor)
- {
- case LLQtWebKit::C_ARROW:
- name = "arrow";
- break;
- case LLQtWebKit::C_IBEAM:
- name = "ibeam";
- break;
- case LLQtWebKit::C_SPLITV:
- name = "splitv";
- break;
- case LLQtWebKit::C_SPLITH:
- name = "splith";
- break;
- case LLQtWebKit::C_POINTINGHAND:
- name = "hand";
- break;
-
- default:
- llwarns << "Unknown cursor ID: " << (int)llqt_cursor << llendl;
- break;
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "cursor_changed");
- message.setValue("name", name);
- sendMessage(message);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onPageChanged( const EventType& event )
- {
- if(mInitState == INIT_STATE_WAIT_REDRAW)
- {
- setInitState(INIT_STATE_WAIT_COMPLETE);
- }
-
- // flag that an update is required
- mNeedsUpdate = true;
- };
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onNavigateBegin(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin");
- message.setValue("uri", event.getEventUri());
- message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
- message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
- sendMessage(message);
-
- setStatus(STATUS_LOADING);
- }
-
- if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
- {
- // Skip the WAIT_REDRAW state now -- with the right background color set, it should no longer be necessary.
-// setInitState(INIT_STATE_WAIT_REDRAW);
- setInitState(INIT_STATE_WAIT_COMPLETE);
- }
-
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onNavigateComplete(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- if(mInitState < INIT_STATE_RUNNING)
- {
- setInitState(INIT_STATE_RUNNING);
-
- // Clear the history, so the "back" button doesn't take you back to "about:blank".
- LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId);
- }
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
- message.setValue("uri", event.getEventUri());
- message.setValueS32("result_code", event.getIntValue());
- message.setValue("result_string", event.getStringValue());
- message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
- message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
- sendMessage(message);
-
- setStatus(STATUS_LOADED);
- }
- else if(mInitState == INIT_STATE_NAVIGATING)
- {
- setInitState(INIT_STATE_NAVIGATE_COMPLETE);
- }
-
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onUpdateProgress(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "progress");
- message.setValueS32("percent", event.getIntValue());
- sendMessage(message);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onStatusTextChange(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "status_text");
- message.setValue("status", event.getStringValue());
- sendMessage(message);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onTitleChange(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text");
- message.setValue("name", event.getStringValue());
- sendMessage(message);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onNavigateErrorPage(const EventType& event)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page");
- message.setValueS32("status_code", event.getIntValue());
- sendMessage(message);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onLocationChange(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "location_changed");
- message.setValue("uri", event.getEventUri());
- sendMessage(message);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onClickLinkHref(const EventType& event)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href");
- message.setValue("uri", event.getEventUri());
- message.setValue("target", event.getStringValue());
- message.setValue("uuid", event.getStringValue2());
- sendMessage(message);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onClickLinkNoFollow(const EventType& event)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
- message.setValue("uri", event.getEventUri());
-#if LLQTWEBKIT_API_VERSION >= 7
- message.setValue("nav_type", event.getNavigationType());
-#else
- message.setValue("nav_type", "clicked");
-#endif
- sendMessage(message);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onCookieChanged(const EventType& event)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "cookie_set");
- message.setValue("cookie", event.getStringValue());
- // These could be passed through as well, but aren't really needed.
-// message.setValue("uri", event.getEventUri());
-// message.setValueBoolean("dead", (event.getIntValue() != 0))
- sendMessage(message);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onWindowCloseRequested(const EventType& event)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
- message.setValue("uuid", event.getStringValue());
- sendMessage(message);
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onWindowGeometryChangeRequested(const EventType& event)
- {
- int x, y, width, height;
- event.getRectValue(x, y, width, height);
-
- // This sometimes gets called with a zero-size request. Don't pass these along.
- if(width > 0 && height > 0)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change");
- message.setValue("uuid", event.getStringValue());
- message.setValueS32("x", x);
- message.setValueS32("y", y);
- message.setValueS32("width", width);
- message.setValueS32("height", height);
- sendMessage(message);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- std::string onRequestFilePicker( const EventType& eventIn )
- {
- return blockingPickFile();
- }
-
- std::string mAuthUsername;
- std::string mAuthPassword;
- bool mAuthOK;
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- bool onAuthRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password)
- {
- mAuthOK = false;
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_request");
- message.setValue("url", in_url);
- message.setValue("realm", in_realm);
- message.setValueBoolean("blocking_request", true);
-
- // The "blocking_request" key in the message means this sendMessage call will block until a response is received.
- sendMessage(message);
-
- if(mAuthOK)
- {
- out_username = mAuthUsername;
- out_password = mAuthPassword;
- }
-
- return mAuthOK;
- }
-
- void authResponse(LLPluginMessage &message)
- {
- mAuthOK = message.getValueBoolean("ok");
- if(mAuthOK)
- {
- mAuthUsername = message.getValue("username");
- mAuthPassword = message.getValue("password");
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- // virtual
- void onLinkHovered(const EventType& event)
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "link_hovered");
- message.setValue("link", event.getEventUri());
- message.setValue("title", event.getStringValue());
- message.setValue("text", event.getStringValue2());
- sendMessage(message);
- }
- }
-
- LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
- {
- int result = 0;
-
- if(modifiers.find("shift") != std::string::npos)
- result |= LLQtWebKit::KM_MODIFIER_SHIFT;
-
- if(modifiers.find("alt") != std::string::npos)
- result |= LLQtWebKit::KM_MODIFIER_ALT;
-
- if(modifiers.find("control") != std::string::npos)
- result |= LLQtWebKit::KM_MODIFIER_CONTROL;
-
- if(modifiers.find("meta") != std::string::npos)
- result |= LLQtWebKit::KM_MODIFIER_META;
-
- return (LLQtWebKit::EKeyboardModifier)result;
- }
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- void deserializeKeyboardData( LLSD native_key_data, uint32_t& native_scan_code, uint32_t& native_virtual_key, uint32_t& native_modifiers )
- {
- native_scan_code = 0;
- native_virtual_key = 0;
- native_modifiers = 0;
-
- if( native_key_data.isMap() )
- {
-#if LL_DARWIN
- native_scan_code = (uint32_t)(native_key_data["char_code"].asInteger());
- native_virtual_key = (uint32_t)(native_key_data["key_code"].asInteger());
- native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger());
-#elif LL_WINDOWS
- native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger());
- native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger());
- // TODO: I don't think we need to do anything with native modifiers here -- please verify
-#elif LL_LINUX
- native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger());
- native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger());
- native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger());
-#else
- // Add other platforms here as needed
-#endif
- };
- };
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- void keyEvent(LLQtWebKit::EKeyEvent key_event, int key, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
- {
- // The incoming values for 'key' will be the ones from indra_constants.h
- std::string utf8_text;
-
- if(key < KEY_SPECIAL)
- {
- // Low-ascii characters need to get passed through.
- utf8_text = (char)key;
- }
-
- // Any special-case handling we want to do for particular keys...
- switch((KEY)key)
- {
- // ASCII codes for some standard keys
- case LLQtWebKit::KEY_BACKSPACE: utf8_text = (char)8; break;
- case LLQtWebKit::KEY_TAB: utf8_text = (char)9; break;
- case LLQtWebKit::KEY_RETURN: utf8_text = (char)13; break;
- case LLQtWebKit::KEY_PAD_RETURN: utf8_text = (char)13; break;
- case LLQtWebKit::KEY_ESCAPE: utf8_text = (char)27; break;
-
- default:
- break;
- }
-
-// std::cerr << "key event " << (int)key_event << ", native_key_data = " << native_key_data << std::endl;
-
- uint32_t native_scan_code = 0;
- uint32_t native_virtual_key = 0;
- uint32_t native_modifiers = 0;
- deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers );
-
- LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, key_event, (uint32_t)key, utf8_text.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
-
- checkEditState();
- };
-
- ////////////////////////////////////////////////////////////////////////////////
- //
- void unicodeInput( const std::string &utf8str, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
- {
- uint32_t key = LLQtWebKit::KEY_NONE;
-
-// std::cerr << "unicode input, native_key_data = " << native_key_data << std::endl;
-
- if(utf8str.size() == 1)
- {
- // The only way a utf8 string can be one byte long is if it's actually a single 7-bit ascii character.
- // In this case, use it as the key value.
- key = utf8str[0];
- }
-
- uint32_t native_scan_code = 0;
- uint32_t native_virtual_key = 0;
- uint32_t native_modifiers = 0;
- deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers );
-
- LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_DOWN, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
- LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_UP, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
-
- checkEditState();
- };
-
- void checkEditState(void)
- {
- bool can_cut = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT);
- bool can_copy = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY);
- bool can_paste = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE);
-
- if((can_cut != mCanCut) || (can_copy != mCanCopy) || (can_paste != mCanPaste))
- {
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_state");
-
- if(can_cut != mCanCut)
- {
- mCanCut = can_cut;
- message.setValueBoolean("cut", can_cut);
- }
-
- if(can_copy != mCanCopy)
- {
- mCanCopy = can_copy;
- message.setValueBoolean("copy", can_copy);
- }
-
- if(can_paste != mCanPaste)
- {
- mCanPaste = can_paste;
- message.setValueBoolean("paste", can_paste);
- }
-
- sendMessage(message);
-
- }
- }
-
- std::string mPickedFile;
-
- std::string blockingPickFile(void)
- {
- mPickedFile.clear();
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file");
- message.setValueBoolean("blocking_request", true);
-
- // The "blocking_request" key in the message means this sendMessage call will block until a response is received.
- sendMessage(message);
-
- return mPickedFile;
- }
-
- void onPickFileResponse(const std::string &file)
- {
- mPickedFile = file;
- }
-
-};
-
-MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data) :
- MediaPluginBase(host_send_func, host_user_data)
-{
-// std::cerr << "MediaPluginWebKit constructor" << std::endl;
-
- mBrowserWindowId = 0;
- mInitState = INIT_STATE_UNINITIALIZED;
- mNeedsUpdate = true;
- mCanCut = false;
- mCanCopy = false;
- mCanPaste = false;
- mLastMouseX = 0;
- mLastMouseY = 0;
- mFirstFocus = true;
- mBackgroundR = 0.0f;
- mBackgroundG = 0.0f;
- mBackgroundB = 0.0f;
-
- mHostLanguage = "en"; // default to english
- mJavascriptEnabled = true; // default to on
- mPluginsEnabled = true; // default to on
- mUserAgent = "LLPluginMedia Web Browser";
-}
-
-MediaPluginWebKit::~MediaPluginWebKit()
-{
- // unhook observer
- LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this );
-
- // clean up
- LLQtWebKit::getInstance()->reset();
-
-// std::cerr << "MediaPluginWebKit destructor" << std::endl;
-}
-
-void MediaPluginWebKit::receiveMessage(const char *message_string)
-{
-// std::cerr << "MediaPluginWebKit::receiveMessage: received message: \"" << message_string << "\"" << std::endl;
- LLPluginMessage message_in;
-
- if(message_in.parse(message_string) >= 0)
- {
- std::string message_class = message_in.getClass();
- std::string message_name = message_in.getName();
- if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE)
- {
- if(message_name == "init")
- {
- LLPluginMessage message("base", "init_response");
- LLSD versions = LLSD::emptyMap();
- versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION;
- versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION;
- versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION;
- message.setValueLLSD("versions", versions);
-
- std::string plugin_version = "Webkit media plugin, Webkit version ";
- plugin_version += LLQtWebKit::getInstance()->getVersion();
- message.setValue("plugin_version", plugin_version);
- sendMessage(message);
- }
- else if(message_name == "idle")
- {
- // no response is necessary here.
- F64 time = message_in.getValueReal("time");
-
- // Convert time to milliseconds for update()
- update((int)(time * 1000.0f));
- }
- else if(message_name == "cleanup")
- {
- // DTOR most likely won't be called but the recent change to the way this process
- // is (not) killed means we see this message and can do what we need to here.
- // Note: this cleanup is ultimately what writes cookies to the disk
- LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this );
- LLQtWebKit::getInstance()->reset();
- }
- else if(message_name == "shm_added")
- {
- SharedSegmentInfo info;
- info.mAddress = message_in.getValuePointer("address");
- info.mSize = (size_t)message_in.getValueS32("size");
- std::string name = message_in.getValue("name");
-
-// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory added, name: " << name
-// << ", size: " << info.mSize
-// << ", address: " << info.mAddress
-// << std::endl;
-
- mSharedSegments.insert(SharedSegmentMap::value_type(name, info));
-
- }
- else if(message_name == "shm_remove")
- {
- std::string name = message_in.getValue("name");
-
-// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory remove, name = " << name << std::endl;
-
- SharedSegmentMap::iterator iter = mSharedSegments.find(name);
- if(iter != mSharedSegments.end())
- {
- if(mPixels == iter->second.mAddress)
- {
- // This is the currently active pixel buffer. Make sure we stop drawing to it.
- mPixels = NULL;
- mTextureSegmentName.clear();
- }
- mSharedSegments.erase(iter);
- }
- else
- {
-// std::cerr << "MediaPluginWebKit::receiveMessage: unknown shared memory region!" << std::endl;
- }
-
- // Send the response so it can be cleaned up.
- LLPluginMessage message("base", "shm_remove_response");
- message.setValue("name", name);
- sendMessage(message);
- }
- else
- {
-// std::cerr << "MediaPluginWebKit::receiveMessage: unknown base message: " << message_name << std::endl;
- }
- }
- else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
- {
- if(message_name == "set_volume")
- {
- F32 volume = message_in.getValueReal("volume");
- setVolume(volume);
- }
- }
- else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
- {
- if(message_name == "init")
- {
- mTarget = message_in.getValue("target");
-
- // This is the media init message -- all necessary data for initialization should have been received.
- if(initBrowser())
- {
-
- // Plugin gets to decide the texture parameters to use.
- mDepth = 4;
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
- message.setValueS32("default_width", 1024);
- message.setValueS32("default_height", 1024);
- message.setValueS32("depth", mDepth);
- message.setValueU32("internalformat", GL_RGBA);
- #if LL_QTWEBKIT_USES_PIXMAPS
- message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck.
- #else
- message.setValueU32("format", GL_RGBA);
- #endif // LL_QTWEBKIT_USES_PIXMAPS
- message.setValueU32("type", GL_UNSIGNED_BYTE);
- message.setValueBoolean("coords_opengl", true);
- sendMessage(message);
- }
- else
- {
- // if initialization failed, we're done.
- mDeleteMe = true;
- }
-
- }
- else if(message_name == "set_user_data_path")
- {
- std::string user_data_path = message_in.getValue("path"); // n.b. always has trailing platform-specific dir-delimiter
- mProfileDir = user_data_path + "browser_profile";
-
- // FIXME: Should we do anything with this if it comes in after the browser has been initialized?
- }
- else if(message_name == "set_language_code")
- {
- mHostLanguage = message_in.getValue("language");
-
- // FIXME: Should we do anything with this if it comes in after the browser has been initialized?
- }
- else if(message_name == "plugins_enabled")
- {
- mPluginsEnabled = message_in.getValueBoolean("enable");
- }
- else if(message_name == "javascript_enabled")
- {
- mJavascriptEnabled = message_in.getValueBoolean("enable");
- }
- else if(message_name == "size_change")
- {
- std::string name = message_in.getValue("name");
- S32 width = message_in.getValueS32("width");
- S32 height = message_in.getValueS32("height");
- S32 texture_width = message_in.getValueS32("texture_width");
- S32 texture_height = message_in.getValueS32("texture_height");
- mBackgroundR = message_in.getValueReal("background_r");
- mBackgroundG = message_in.getValueReal("background_g");
- mBackgroundB = message_in.getValueReal("background_b");
-// mBackgroundA = message_in.setValueReal("background_a"); // Ignore any alpha
-
- if(!name.empty())
- {
- // Find the shared memory region with this name
- SharedSegmentMap::iterator iter = mSharedSegments.find(name);
- if(iter != mSharedSegments.end())
- {
- mPixels = (unsigned char*)iter->second.mAddress;
- mWidth = width;
- mHeight = height;
-
- if(initBrowserWindow())
- {
-
- // size changed so tell the browser
- LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
-
- // std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight
- // << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl;
-
- S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId);
-
- // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response.
- if(real_width <= texture_width)
- {
- texture_width = real_width;
- }
- else
- {
- // This won't work -- it'll be bigger than the allocated memory. This is a fatal error.
- // std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl;
- mDeleteMe = true;
- return;
- }
- }
- else
- {
- // Setting up the browser window failed. This is a fatal error.
- mDeleteMe = true;
- }
-
-
- mTextureWidth = texture_width;
- mTextureHeight = texture_height;
-
- };
- };
-
- LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response");
- message.setValue("name", name);
- message.setValueS32("width", width);
- message.setValueS32("height", height);
- message.setValueS32("texture_width", texture_width);
- message.setValueS32("texture_height", texture_height);
- sendMessage(message);
-
- }
- else if(message_name == "load_uri")
- {
- std::string uri = message_in.getValue("uri");
-
-// std::cout << "loading URI: " << uri << std::endl;
-
- if(!uri.empty())
- {
- if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
- {
- LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, uri );
- }
- else
- {
- mInitialNavigateURL = uri;
- }
- }
- }
- else if(message_name == "mouse_event")
- {
- std::string event = message_in.getValue("event");
- S32 button = message_in.getValueS32("button");
- mLastMouseX = message_in.getValueS32("x");
- mLastMouseY = message_in.getValueS32("y");
- std::string modifiers = message_in.getValue("modifiers");
-
- // Treat unknown mouse events as mouse-moves.
- LLQtWebKit::EMouseEvent mouse_event = LLQtWebKit::ME_MOUSE_MOVE;
- if(event == "down")
- {
- mouse_event = LLQtWebKit::ME_MOUSE_DOWN;
- }
- else if(event == "up")
- {
- mouse_event = LLQtWebKit::ME_MOUSE_UP;
- }
- else if(event == "double_click")
- {
- mouse_event = LLQtWebKit::ME_MOUSE_DOUBLE_CLICK;
- }
-
- LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId, mouse_event, button, mLastMouseX, mLastMouseY, decodeModifiers(modifiers));
- checkEditState();
- }
- else if(message_name == "scroll_event")
- {
- S32 x = message_in.getValueS32("x");
- S32 y = message_in.getValueS32("y");
- std::string modifiers = message_in.getValue("modifiers");
-
- // Incoming scroll events are adjusted so that 1 detent is approximately 1 unit.
- // Qt expects 1 detent to be 120 units.
- // It also seems that our y scroll direction is inverted vs. what Qt expects.
-
- x *= 120;
- y *= -120;
-
- LLQtWebKit::getInstance()->scrollWheelEvent(mBrowserWindowId, mLastMouseX, mLastMouseY, x, y, decodeModifiers(modifiers));
- }
- else if(message_name == "key_event")
- {
- std::string event = message_in.getValue("event");
- S32 key = message_in.getValueS32("key");
- std::string modifiers = message_in.getValue("modifiers");
- LLSD native_key_data = message_in.getValueLLSD("native_key_data");
-
- // Treat unknown events as key-up for safety.
- LLQtWebKit::EKeyEvent key_event = LLQtWebKit::KE_KEY_UP;
- if(event == "down")
- {
- key_event = LLQtWebKit::KE_KEY_DOWN;
- }
- else if(event == "repeat")
- {
- key_event = LLQtWebKit::KE_KEY_REPEAT;
- }
-
- keyEvent(key_event, key, decodeModifiers(modifiers), native_key_data);
- }
- else if(message_name == "text_event")
- {
- std::string text = message_in.getValue("text");
- std::string modifiers = message_in.getValue("modifiers");
- LLSD native_key_data = message_in.getValueLLSD("native_key_data");
-
- unicodeInput(text, decodeModifiers(modifiers), native_key_data);
- }
- if(message_name == "edit_cut")
- {
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT );
- checkEditState();
- }
- if(message_name == "edit_copy")
- {
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY );
- checkEditState();
- }
- if(message_name == "edit_paste")
- {
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE );
- checkEditState();
- }
- if(message_name == "pick_file_response")
- {
- onPickFileResponse(message_in.getValue("file"));
- }
- if(message_name == "auth_response")
- {
- authResponse(message_in);
- }
- else
- if(message_name == "js_expose_object")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- bool expose_object = message_in.getValueBoolean( "expose" );
- LLQtWebKit::getInstance()->setExposeObject( expose_object );
-#endif
- }
- else
- if(message_name == "js_values_valid")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- bool valid = message_in.getValueBoolean( "valid" );
- LLQtWebKit::getInstance()->setValuesValid( valid );
-#endif
- }
- else
- if(message_name == "js_agent_location")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- F32 x = message_in.getValueReal("x");
- F32 y = message_in.getValueReal("y");
- F32 z = message_in.getValueReal("z");
- LLQtWebKit::getInstance()->setAgentLocation( x, y, z );
-#endif
- }
- else
- if(message_name == "js_agent_global_location")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- F32 x = message_in.getValueReal("x");
- F32 y = message_in.getValueReal("y");
- F32 z = message_in.getValueReal("z");
- LLQtWebKit::getInstance()->setAgentGlobalLocation( x, y, z );
-#endif
- }
- else
- if(message_name == "js_agent_orientation")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- F32 angle = message_in.getValueReal("angle");
- LLQtWebKit::getInstance()->setAgentOrientation( angle );
-#endif
- }
- else
- if(message_name == "js_agent_region")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- const std::string& region = message_in.getValue("region");
- LLQtWebKit::getInstance()->setAgentRegion( region );
-#endif
- }
- else
- if(message_name == "js_agent_maturity")
- {
-#if LLQTWEBKIT_API_VERSION >= 9
- const std::string& maturity = message_in.getValue("maturity");
- LLQtWebKit::getInstance()->setAgentMaturity( maturity );
-#endif
- }
- else
- {
-// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl;
- }
- }
- else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)
- {
- if(message_name == "focus")
- {
- bool val = message_in.getValueBoolean("focused");
- LLQtWebKit::getInstance()->focusBrowser( mBrowserWindowId, val );
-
- if(mFirstFocus && val)
- {
- // On the first focus, post a tab key event. This fixes a problem with initial focus.
- std::string empty;
- keyEvent(LLQtWebKit::KE_KEY_DOWN, KEY_TAB, decodeModifiers(empty));
- keyEvent(LLQtWebKit::KE_KEY_UP, KEY_TAB, decodeModifiers(empty));
- mFirstFocus = false;
- }
- }
- else if(message_name == "clear_cache")
- {
- LLQtWebKit::getInstance()->clearCache();
- }
- else if(message_name == "clear_cookies")
- {
- LLQtWebKit::getInstance()->clearAllCookies();
- }
- else if(message_name == "enable_cookies")
- {
- mCookiesEnabled = message_in.getValueBoolean("enable");
- LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
- }
- else if(message_name == "enable_plugins")
- {
- mPluginsEnabled = message_in.getValueBoolean("enable");
- LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
- }
- else if(message_name == "enable_javascript")
- {
- mJavascriptEnabled = message_in.getValueBoolean("enable");
- //LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
- }
- else if(message_name == "set_cookies")
- {
- LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies"));
- }
- else if(message_name == "proxy_setup")
- {
- bool val = message_in.getValueBoolean("enable");
- std::string host = message_in.getValue("host");
- int port = message_in.getValueS32("port");
- LLQtWebKit::getInstance()->enableProxy( val, host, port );
- }
- else if(message_name == "browse_stop")
- {
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_STOP );
- }
- else if(message_name == "browse_reload")
- {
- // foo = message_in.getValueBoolean("ignore_cache");
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_RELOAD );
- }
- else if(message_name == "browse_forward")
- {
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD );
- }
- else if(message_name == "browse_back")
- {
- LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK );
- }
- else if(message_name == "set_status_redirect")
- {
- int code = message_in.getValueS32("code");
- std::string url = message_in.getValue("url");
- if ( 404 == code ) // browser lib only supports 404 right now
- {
-#if LLQTWEBKIT_API_VERSION < 8
- LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
-#endif
- };
- }
- else if(message_name == "set_user_agent")
- {
- mUserAgent = message_in.getValue("user_agent");
- LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
- }
- else if(message_name == "ignore_ssl_cert_errors")
- {
-#if LLQTWEBKIT_API_VERSION >= 3
- LLQtWebKit::getInstance()->setIgnoreSSLCertErrors( message_in.getValueBoolean("ignore") );
-#else
- llwarns << "Ignoring ignore_ssl_cert_errors message (llqtwebkit version is too old)." << llendl;
-#endif
- }
- else if(message_name == "add_certificate_file_path")
- {
-#if LLQTWEBKIT_API_VERSION >= 6
- LLQtWebKit::getInstance()->addCAFile( message_in.getValue("path") );
-#else
- llwarns << "Ignoring add_certificate_file_path message (llqtwebkit version is too old)." << llendl;
-#endif
- }
- else if(message_name == "init_history")
- {
- // Initialize browser history
- LLSD history = message_in.getValueLLSD("history");
- // First, clear the URL history
- LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId);
- // Then, add the history items in order
- LLSD::array_iterator iter_history = history.beginArray();
- LLSD::array_iterator end_history = history.endArray();
- for(; iter_history != end_history; ++iter_history)
- {
- std::string url = (*iter_history).asString();
- if(! url.empty()) {
- LLQtWebKit::getInstance()->prependHistoryUrl(mBrowserWindowId, url);
- }
- }
- }
- else if(message_name == "proxy_window_opened")
- {
- std::string target = message_in.getValue("target");
- std::string uuid = message_in.getValue("uuid");
- LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid);
- }
- else if(message_name == "proxy_window_closed")
- {
- std::string uuid = message_in.getValue("uuid");
- LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid);
- }
- else
- {
-// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl;
- };
- }
- else
- {
-// std::cerr << "MediaPluginWebKit::receiveMessage: unknown message class: " << message_class << std::endl;
- };
- }
-}
-
-void MediaPluginWebKit::setVolume(F32 volume)
-{
- mVolumeCatcher.setVolume(volume);
-}
-
-int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
-{
- MediaPluginWebKit *self = new MediaPluginWebKit(host_send_func, host_user_data);
- *plugin_send_func = MediaPluginWebKit::staticReceiveMessage;
- *plugin_user_data = (void*)self;
-
- return 0;
-}
+/**
+ * @file media_plugin_webkit.cpp
+ * @brief Webkit plugin for LLMedia API plugin system
+ *
+ * @cond
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ * @endcond
+ */
+
+#include "llqtwebkit.h"
+
+#include "linden_common.h"
+#include "indra_constants.h" // for indra keyboard codes
+
+#include "llgl.h"
+
+#include "llplugininstance.h"
+#include "llpluginmessage.h"
+#include "llpluginmessageclasses.h"
+#include "media_plugin_base.h"
+
+// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified
+#if LL_LINUX
+# define LL_QTWEBKIT_USES_PIXMAPS 0
+extern "C" {
+# include <glib.h>
+# include <glib-object.h>
+}
+#else
+# define LL_QTWEBKIT_USES_PIXMAPS 0
+#endif // LL_LINUX
+
+# include "volume_catcher.h"
+
+#if LL_WINDOWS
+# include <direct.h>
+#else
+# include <unistd.h>
+# include <stdlib.h>
+#endif
+
+#if LL_WINDOWS
+ // *NOTE:Mani - This captures the module handle for the dll. This is used below
+ // to get the path to this dll for webkit initialization.
+ // I don't know how/if this can be done with apr...
+ namespace { HMODULE gModuleHandle;};
+ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+ {
+ gModuleHandle = (HMODULE) hinstDLL;
+ return TRUE;
+ }
+#endif
+
+////////////////////////////////////////////////////////////////////////////////
+//
+class MediaPluginWebKit :
+ public MediaPluginBase,
+ public LLEmbeddedBrowserWindowObserver
+{
+public:
+ MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data);
+ ~MediaPluginWebKit();
+
+ /*virtual*/ void receiveMessage(const char *message_string);
+
+private:
+
+ std::string mProfileDir;
+ std::string mHostLanguage;
+ std::string mUserAgent;
+ bool mCookiesEnabled;
+ bool mJavascriptEnabled;
+ bool mPluginsEnabled;
+ bool mEnableMediaPluginDebugging;
+
+ enum
+ {
+ INIT_STATE_UNINITIALIZED, // LLQtWebkit hasn't been set up yet
+ INIT_STATE_INITIALIZED, // LLQtWebkit has been set up, but no browser window has been created yet.
+ INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued
+ INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed
+ INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws
+ INIT_STATE_WAIT_COMPLETE, // Waiting for first real navigate complete event
+ INIT_STATE_RUNNING // All initialization gymnastics are complete.
+ };
+ int mBrowserWindowId;
+ int mInitState;
+ std::string mInitialNavigateURL;
+ bool mNeedsUpdate;
+
+ bool mCanCut;
+ bool mCanCopy;
+ bool mCanPaste;
+ int mLastMouseX;
+ int mLastMouseY;
+ bool mFirstFocus;
+ F32 mBackgroundR;
+ F32 mBackgroundG;
+ F32 mBackgroundB;
+ std::string mTarget;
+
+ VolumeCatcher mVolumeCatcher;
+
+ void postDebugMessage( const std::string& msg )
+ {
+ if ( mEnableMediaPluginDebugging )
+ {
+ LLPluginMessage debug_message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "debug_message");
+ debug_message.setValue("message_text", "Media> " + msg);
+ debug_message.setValue("message_level", "info");
+ sendMessage(debug_message);
+ }
+ }
+
+ void setInitState(int state)
+ {
+// std::cerr << "changing init state to " << state << std::endl;
+ mInitState = state;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ void update(int milliseconds)
+ {
+#if LL_QTLINUX_DOESNT_HAVE_GLIB
+ // pump glib generously, as Linux browser plugins are on the
+ // glib main loop, even if the browser itself isn't - ugh
+ // This is NOT NEEDED if Qt itself was built with glib
+ // mainloop integration.
+ GMainContext *mainc = g_main_context_default();
+ while(g_main_context_iteration(mainc, FALSE));
+#endif // LL_QTLINUX_DOESNT_HAVE_GLIB
+
+ // pump qt
+ LLQtWebKit::getInstance()->pump( milliseconds );
+
+ mVolumeCatcher.pump();
+
+ checkEditState();
+
+ if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ if(!mInitialNavigateURL.empty())
+ {
+ // We already have the initial navigate URL -- kick off the navigate.
+ LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, mInitialNavigateURL );
+ mInitialNavigateURL.clear();
+ }
+ }
+
+ if ( (mInitState > INIT_STATE_WAIT_REDRAW) && mNeedsUpdate )
+ {
+ const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId );
+
+ unsigned int rowspan = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId );
+ unsigned int height = LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId );
+#if !LL_QTWEBKIT_USES_PIXMAPS
+ unsigned int buffer_size = rowspan * height;
+#endif // !LL_QTWEBKIT_USES_PIXMAPS
+
+// std::cerr << "webkit plugin: updating" << std::endl;
+
+ // TODO: should get rid of this memcpy if possible
+ if ( mPixels && browser_pixels )
+ {
+// std::cerr << " memcopy of " << buffer_size << " bytes" << std::endl;
+
+#if LL_QTWEBKIT_USES_PIXMAPS
+ // copy the pixel data upside-down because of the co-ord system
+ for (int y=0; y<height; ++y)
+ {
+ memcpy( &mPixels[(height-y-1)*rowspan], &browser_pixels[y*rowspan], rowspan );
+ }
+#else
+ memcpy( mPixels, browser_pixels, buffer_size );
+#endif // LL_QTWEBKIT_USES_PIXMAPS
+ }
+
+ if ( mWidth > 0 && mHeight > 0 )
+ {
+// std::cerr << "Setting dirty, " << mWidth << " x " << mHeight << std::endl;
+ setDirty( 0, 0, mWidth, mHeight );
+ }
+
+ mNeedsUpdate = false;
+ };
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ bool initBrowser()
+ {
+ // already initialized
+ if ( mInitState > INIT_STATE_UNINITIALIZED )
+ return true;
+
+ // set up directories
+ char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use
+ if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
+ {
+ llwarns << "Couldn't get cwd - probably too long - failing to init." << llendl;
+ return false;
+ }
+ std::string application_dir = std::string( cwd );
+
+#if LL_LINUX
+ // take care to initialize glib properly, because some
+ // versions of Qt don't, and we indirectly need it for (some
+ // versions of) Flash to not crash the browser.
+ if (!g_thread_supported ()) g_thread_init (NULL);
+ g_type_init();
+#endif
+
+#if LL_DARWIN
+ // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.
+ // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger.
+ // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it
+ // which gets hit when the plugin is probed by webkit.
+ // Unsetting the environment variable here works around this issue.
+ unsetenv("USERBREAK");
+#endif
+
+#if LL_WINDOWS
+ //*NOTE:Mani - On windows, at least, the component path is the
+ // location of this dll's image file.
+ std::string component_dir;
+ char dll_path[_MAX_PATH];
+ DWORD len = GetModuleFileNameA(gModuleHandle, (LPCH)&dll_path, _MAX_PATH);
+ while(len && dll_path[ len ] != ('\\') )
+ {
+ len--;
+ }
+ if(len >= 0)
+ {
+ dll_path[len] = 0;
+ component_dir = dll_path;
+ }
+ else
+ {
+ // *NOTE:Mani - This case should be an rare exception.
+ // GetModuleFileNameA should always give you a full path, no?
+ component_dir = application_dir;
+ }
+#else
+ std::string component_dir = application_dir;
+#endif
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "Component dir set to: " + component_dir );
+
+ // window handle - needed on Windows and must be app window.
+#if LL_WINDOWS
+ char window_title[ MAX_PATH ];
+ GetConsoleTitleA( window_title, MAX_PATH );
+ void* native_window_handle = (void*)FindWindowA( NULL, window_title );
+#else
+ void* native_window_handle = 0;
+#endif
+
+ // main browser initialization
+ bool result = LLQtWebKit::getInstance()->init( application_dir, component_dir, mProfileDir, native_window_handle );
+ if ( result )
+ {
+ mInitState = INIT_STATE_INITIALIZED;
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "browser initialized okay" );
+
+ return true;
+ };
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "browser nOT initialized." );
+
+ return false;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ bool initBrowserWindow()
+ {
+ // already initialized
+ if ( mInitState > INIT_STATE_INITIALIZED )
+ return true;
+
+ // not enough information to initialize the browser yet.
+ if ( mWidth < 0 || mHeight < 0 || mDepth < 0 ||
+ mTextureWidth < 0 || mTextureHeight < 0 )
+ {
+ return false;
+ };
+
+ // Set up host language before creating browser window
+ if(!mHostLanguage.empty())
+ {
+ LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage);
+ postDebugMessage( "Setting language to " + mHostLanguage );
+ }
+
+ // turn on/off cookies based on what host app tells us
+ LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
+
+ // turn on/off plugins based on what host app tells us
+ LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
+
+ // turn on/off Javascript based on what host app tells us
+ LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
+
+ std::stringstream str;
+ str << "Cookies enabled = " << mCookiesEnabled << ", plugins enabled = " << mPluginsEnabled << ", Javascript enabled = " << mJavascriptEnabled;
+ postDebugMessage( str.str() );
+
+ // create single browser window
+ mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget);
+
+ str.str("");
+ str.clear();
+ str << "Setting browser window size to " << mWidth << " x " << mHeight;
+ postDebugMessage( str.str() );
+
+ // tell LLQtWebKit about the size of the browser window
+ LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
+
+ // observer events that LLQtWebKit emits
+ LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this );
+
+ // append details to agent string
+ LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
+ postDebugMessage( "Updating user agent with " + mUserAgent );
+
+#if !LL_QTWEBKIT_USES_PIXMAPS
+ // don't flip bitmap
+ LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
+#endif // !LL_QTWEBKIT_USES_PIXMAPS
+
+ // set background color
+ // convert background color channels from [0.0, 1.0] to [0, 255];
+ LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) );
+
+ // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns.
+ setInitState(INIT_STATE_NAVIGATING);
+
+ // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance.
+ // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially
+ // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date.
+ // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E"
+ // where RRGGBB is the background color in HTML style
+ std::stringstream url;
+
+ url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#";
+ // convert background color channels from [0.0, 1.0] to [0, 255];
+ url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f);
+ url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f);
+ url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f);
+ url << "%22%3E%3C/body%3E%3C/html%3E";
+
+ //lldebugs << "data url is: " << url.str() << llendl;
+
+ LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() );
+// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
+
+ return true;
+ }
+
+ void setVolume(F32 vol);
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onCursorChanged(const EventType& event)
+ {
+ LLQtWebKit::ECursor llqt_cursor = (LLQtWebKit::ECursor)event.getIntValue();
+ std::string name;
+
+ switch(llqt_cursor)
+ {
+ case LLQtWebKit::C_ARROW:
+ name = "arrow";
+ break;
+ case LLQtWebKit::C_IBEAM:
+ name = "ibeam";
+ break;
+ case LLQtWebKit::C_SPLITV:
+ name = "splitv";
+ break;
+ case LLQtWebKit::C_SPLITH:
+ name = "splith";
+ break;
+ case LLQtWebKit::C_POINTINGHAND:
+ name = "hand";
+ break;
+
+ default:
+ llwarns << "Unknown cursor ID: " << (int)llqt_cursor << llendl;
+ break;
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "cursor_changed");
+ message.setValue("name", name);
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onPageChanged( const EventType& event )
+ {
+ if(mInitState == INIT_STATE_WAIT_REDRAW)
+ {
+ setInitState(INIT_STATE_WAIT_COMPLETE);
+ }
+
+ // flag that an update is required
+ mNeedsUpdate = true;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onNavigateBegin(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin");
+ message.setValue("uri", event.getEventUri());
+ message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
+ message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
+ sendMessage(message);
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "Navigate begin event at: " + event.getEventUri() );
+
+ setStatus(STATUS_LOADING);
+ }
+
+ if(mInitState == INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ // Skip the WAIT_REDRAW state now -- with the right background color set, it should no longer be necessary.
+// setInitState(INIT_STATE_WAIT_REDRAW);
+ setInitState(INIT_STATE_WAIT_COMPLETE);
+ }
+
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onNavigateComplete(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ if(mInitState < INIT_STATE_RUNNING)
+ {
+ setInitState(INIT_STATE_RUNNING);
+
+ // Clear the history, so the "back" button doesn't take you back to "about:blank".
+ LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId);
+ }
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete");
+ message.setValue("uri", event.getEventUri());
+ message.setValueS32("result_code", event.getIntValue());
+ message.setValue("result_string", event.getStringValue());
+ message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK));
+ message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD));
+ sendMessage(message);
+
+ setStatus(STATUS_LOADED);
+ }
+ else if(mInitState == INIT_STATE_NAVIGATING)
+ {
+ setInitState(INIT_STATE_NAVIGATE_COMPLETE);
+ }
+
+ // debug spam sent to viewer and displayed in the log as usual
+ postDebugMessage( "Navigate complete event at: " + event.getEventUri() );
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onUpdateProgress(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "progress");
+ message.setValueS32("percent", event.getIntValue());
+ sendMessage(message);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onStatusTextChange(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "status_text");
+ message.setValue("status", event.getStringValue());
+ sendMessage(message);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onTitleChange(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text");
+ message.setValue("name", event.getStringValue());
+ sendMessage(message);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onNavigateErrorPage(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page");
+ message.setValueS32("status_code", event.getIntValue());
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onLocationChange(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "location_changed");
+ message.setValue("uri", event.getEventUri());
+ sendMessage(message);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onClickLinkHref(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href");
+ message.setValue("uri", event.getEventUri());
+ message.setValue("target", event.getStringValue());
+ message.setValue("uuid", event.getStringValue2());
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onClickLinkNoFollow(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
+ message.setValue("uri", event.getEventUri());
+#if LLQTWEBKIT_API_VERSION >= 7
+ message.setValue("nav_type", event.getNavigationType());
+#else
+ message.setValue("nav_type", "clicked");
+#endif
+ sendMessage(message);
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onCookieChanged(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "cookie_set");
+ message.setValue("cookie", event.getStringValue());
+ // These could be passed through as well, but aren't really needed.
+// message.setValue("uri", event.getEventUri());
+// message.setValueBoolean("dead", (event.getIntValue() != 0))
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onWindowCloseRequested(const EventType& event)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request");
+ message.setValue("uuid", event.getStringValue());
+ sendMessage(message);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onWindowGeometryChangeRequested(const EventType& event)
+ {
+ int x, y, width, height;
+ event.getRectValue(x, y, width, height);
+
+ // This sometimes gets called with a zero-size request. Don't pass these along.
+ if(width > 0 && height > 0)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change");
+ message.setValue("uuid", event.getStringValue());
+ message.setValueS32("x", x);
+ message.setValueS32("y", y);
+ message.setValueS32("width", width);
+ message.setValueS32("height", height);
+ sendMessage(message);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ std::string onRequestFilePicker( const EventType& eventIn )
+ {
+ return blockingPickFile();
+ }
+
+ std::string mAuthUsername;
+ std::string mAuthPassword;
+ bool mAuthOK;
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ bool onAuthRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password)
+ {
+ mAuthOK = false;
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_request");
+ message.setValue("url", in_url);
+ message.setValue("realm", in_realm);
+ message.setValueBoolean("blocking_request", true);
+
+ // The "blocking_request" key in the message means this sendMessage call will block until a response is received.
+ sendMessage(message);
+
+ if(mAuthOK)
+ {
+ out_username = mAuthUsername;
+ out_password = mAuthPassword;
+ }
+
+ return mAuthOK;
+ }
+
+ void authResponse(LLPluginMessage &message)
+ {
+ mAuthOK = message.getValueBoolean("ok");
+ if(mAuthOK)
+ {
+ mAuthUsername = message.getValue("username");
+ mAuthPassword = message.getValue("password");
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // virtual
+ void onLinkHovered(const EventType& event)
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "link_hovered");
+ message.setValue("link", event.getEventUri());
+ message.setValue("title", event.getStringValue());
+ message.setValue("text", event.getStringValue2());
+ sendMessage(message);
+ }
+ }
+
+ LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers)
+ {
+ int result = 0;
+
+ if(modifiers.find("shift") != std::string::npos)
+ result |= LLQtWebKit::KM_MODIFIER_SHIFT;
+
+ if(modifiers.find("alt") != std::string::npos)
+ result |= LLQtWebKit::KM_MODIFIER_ALT;
+
+ if(modifiers.find("control") != std::string::npos)
+ result |= LLQtWebKit::KM_MODIFIER_CONTROL;
+
+ if(modifiers.find("meta") != std::string::npos)
+ result |= LLQtWebKit::KM_MODIFIER_META;
+
+ return (LLQtWebKit::EKeyboardModifier)result;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ void deserializeKeyboardData( LLSD native_key_data, uint32_t& native_scan_code, uint32_t& native_virtual_key, uint32_t& native_modifiers )
+ {
+ native_scan_code = 0;
+ native_virtual_key = 0;
+ native_modifiers = 0;
+
+ if( native_key_data.isMap() )
+ {
+#if LL_DARWIN
+ native_scan_code = (uint32_t)(native_key_data["char_code"].asInteger());
+ native_virtual_key = (uint32_t)(native_key_data["key_code"].asInteger());
+ native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger());
+#elif LL_WINDOWS
+ native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger());
+ native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger());
+ // TODO: I don't think we need to do anything with native modifiers here -- please verify
+#elif LL_LINUX
+ native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger());
+ native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger());
+ native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger());
+#else
+ // Add other platforms here as needed
+#endif
+ };
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ void keyEvent(LLQtWebKit::EKeyEvent key_event, int key, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
+ {
+ // The incoming values for 'key' will be the ones from indra_constants.h
+ std::string utf8_text;
+
+ if(key < KEY_SPECIAL)
+ {
+ // Low-ascii characters need to get passed through.
+ utf8_text = (char)key;
+ }
+
+ // Any special-case handling we want to do for particular keys...
+ switch((KEY)key)
+ {
+ // ASCII codes for some standard keys
+ case LLQtWebKit::KEY_BACKSPACE: utf8_text = (char)8; break;
+ case LLQtWebKit::KEY_TAB: utf8_text = (char)9; break;
+ case LLQtWebKit::KEY_RETURN: utf8_text = (char)13; break;
+ case LLQtWebKit::KEY_PAD_RETURN: utf8_text = (char)13; break;
+ case LLQtWebKit::KEY_ESCAPE: utf8_text = (char)27; break;
+
+ default:
+ break;
+ }
+
+// std::cerr << "key event " << (int)key_event << ", native_key_data = " << native_key_data << std::endl;
+
+ uint32_t native_scan_code = 0;
+ uint32_t native_virtual_key = 0;
+ uint32_t native_modifiers = 0;
+ deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers );
+
+ LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, key_event, (uint32_t)key, utf8_text.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
+
+ checkEditState();
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ void unicodeInput( const std::string &utf8str, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap())
+ {
+ uint32_t key = LLQtWebKit::KEY_NONE;
+
+// std::cerr << "unicode input, native_key_data = " << native_key_data << std::endl;
+
+ if(utf8str.size() == 1)
+ {
+ // The only way a utf8 string can be one byte long is if it's actually a single 7-bit ascii character.
+ // In this case, use it as the key value.
+ key = utf8str[0];
+ }
+
+ uint32_t native_scan_code = 0;
+ uint32_t native_virtual_key = 0;
+ uint32_t native_modifiers = 0;
+ deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers );
+
+ LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_DOWN, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
+ LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_UP, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers);
+
+ checkEditState();
+ };
+
+ void checkEditState(void)
+ {
+ bool can_cut = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT);
+ bool can_copy = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY);
+ bool can_paste = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE);
+
+ if((can_cut != mCanCut) || (can_copy != mCanCopy) || (can_paste != mCanPaste))
+ {
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_state");
+
+ if(can_cut != mCanCut)
+ {
+ mCanCut = can_cut;
+ message.setValueBoolean("cut", can_cut);
+ }
+
+ if(can_copy != mCanCopy)
+ {
+ mCanCopy = can_copy;
+ message.setValueBoolean("copy", can_copy);
+ }
+
+ if(can_paste != mCanPaste)
+ {
+ mCanPaste = can_paste;
+ message.setValueBoolean("paste", can_paste);
+ }
+
+ sendMessage(message);
+
+ }
+ }
+
+ std::string mPickedFile;
+
+ std::string blockingPickFile(void)
+ {
+ mPickedFile.clear();
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file");
+ message.setValueBoolean("blocking_request", true);
+
+ // The "blocking_request" key in the message means this sendMessage call will block until a response is received.
+ sendMessage(message);
+
+ return mPickedFile;
+ }
+
+ void onPickFileResponse(const std::string &file)
+ {
+ mPickedFile = file;
+ }
+
+};
+
+MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data) :
+ MediaPluginBase(host_send_func, host_user_data)
+{
+// std::cerr << "MediaPluginWebKit constructor" << std::endl;
+
+ mBrowserWindowId = 0;
+ mInitState = INIT_STATE_UNINITIALIZED;
+ mNeedsUpdate = true;
+ mCanCut = false;
+ mCanCopy = false;
+ mCanPaste = false;
+ mLastMouseX = 0;
+ mLastMouseY = 0;
+ mFirstFocus = true;
+ mBackgroundR = 0.0f;
+ mBackgroundG = 0.0f;
+ mBackgroundB = 0.0f;
+
+ mHostLanguage = "en"; // default to english
+ mJavascriptEnabled = true; // default to on
+ mPluginsEnabled = true; // default to on
+ mEnableMediaPluginDebugging = false;
+ mUserAgent = "LLPluginMedia Web Browser";
+}
+
+MediaPluginWebKit::~MediaPluginWebKit()
+{
+ // unhook observer
+ LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this );
+
+ // clean up
+ LLQtWebKit::getInstance()->reset();
+
+// std::cerr << "MediaPluginWebKit destructor" << std::endl;
+}
+
+void MediaPluginWebKit::receiveMessage(const char *message_string)
+{
+// std::cerr << "MediaPluginWebKit::receiveMessage: received message: \"" << message_string << "\"" << std::endl;
+ LLPluginMessage message_in;
+
+ if(message_in.parse(message_string) >= 0)
+ {
+ std::string message_class = message_in.getClass();
+ std::string message_name = message_in.getName();
+ if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE)
+ {
+ if(message_name == "init")
+ {
+ LLPluginMessage message("base", "init_response");
+ LLSD versions = LLSD::emptyMap();
+ versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION;
+ versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION;
+ versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION;
+ message.setValueLLSD("versions", versions);
+
+ std::string plugin_version = "Webkit media plugin, Webkit version ";
+ plugin_version += LLQtWebKit::getInstance()->getVersion();
+ message.setValue("plugin_version", plugin_version);
+ sendMessage(message);
+ }
+ else if(message_name == "idle")
+ {
+ // no response is necessary here.
+ F64 time = message_in.getValueReal("time");
+
+ // Convert time to milliseconds for update()
+ update((int)(time * 1000.0f));
+ }
+ else if(message_name == "cleanup")
+ {
+ // DTOR most likely won't be called but the recent change to the way this process
+ // is (not) killed means we see this message and can do what we need to here.
+ // Note: this cleanup is ultimately what writes cookies to the disk
+ LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this );
+ LLQtWebKit::getInstance()->reset();
+ }
+ else if(message_name == "shm_added")
+ {
+ SharedSegmentInfo info;
+ info.mAddress = message_in.getValuePointer("address");
+ info.mSize = (size_t)message_in.getValueS32("size");
+ std::string name = message_in.getValue("name");
+
+// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory added, name: " << name
+// << ", size: " << info.mSize
+// << ", address: " << info.mAddress
+// << std::endl;
+
+ mSharedSegments.insert(SharedSegmentMap::value_type(name, info));
+
+ }
+ else if(message_name == "shm_remove")
+ {
+ std::string name = message_in.getValue("name");
+
+// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory remove, name = " << name << std::endl;
+
+ SharedSegmentMap::iterator iter = mSharedSegments.find(name);
+ if(iter != mSharedSegments.end())
+ {
+ if(mPixels == iter->second.mAddress)
+ {
+ // This is the currently active pixel buffer. Make sure we stop drawing to it.
+ mPixels = NULL;
+ mTextureSegmentName.clear();
+ }
+ mSharedSegments.erase(iter);
+ }
+ else
+ {
+// std::cerr << "MediaPluginWebKit::receiveMessage: unknown shared memory region!" << std::endl;
+ }
+
+ // Send the response so it can be cleaned up.
+ LLPluginMessage message("base", "shm_remove_response");
+ message.setValue("name", name);
+ sendMessage(message);
+ }
+ else
+ {
+// std::cerr << "MediaPluginWebKit::receiveMessage: unknown base message: " << message_name << std::endl;
+ }
+ }
+ else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME)
+ {
+ if(message_name == "set_volume")
+ {
+ F32 volume = message_in.getValueReal("volume");
+ setVolume(volume);
+ }
+ }
+ else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA)
+ {
+ if(message_name == "init")
+ {
+ mTarget = message_in.getValue("target");
+
+ // This is the media init message -- all necessary data for initialization should have been received.
+ if(initBrowser())
+ {
+
+ // Plugin gets to decide the texture parameters to use.
+ mDepth = 4;
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params");
+ message.setValueS32("default_width", 1024);
+ message.setValueS32("default_height", 1024);
+ message.setValueS32("depth", mDepth);
+ message.setValueU32("internalformat", GL_RGBA);
+ #if LL_QTWEBKIT_USES_PIXMAPS
+ message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck.
+ #else
+ message.setValueU32("format", GL_RGBA);
+ #endif // LL_QTWEBKIT_USES_PIXMAPS
+ message.setValueU32("type", GL_UNSIGNED_BYTE);
+ message.setValueBoolean("coords_opengl", true);
+ sendMessage(message);
+ }
+ else
+ {
+ // if initialization failed, we're done.
+ mDeleteMe = true;
+ }
+
+ }
+ else if(message_name == "set_user_data_path")
+ {
+ std::string user_data_path = message_in.getValue("path"); // n.b. always has trailing platform-specific dir-delimiter
+ mProfileDir = user_data_path + "browser_profile";
+
+ // FIXME: Should we do anything with this if it comes in after the browser has been initialized?
+ }
+ else if(message_name == "set_language_code")
+ {
+ mHostLanguage = message_in.getValue("language");
+
+ // FIXME: Should we do anything with this if it comes in after the browser has been initialized?
+ }
+ else if(message_name == "plugins_enabled")
+ {
+ mPluginsEnabled = message_in.getValueBoolean("enable");
+ }
+ else if(message_name == "javascript_enabled")
+ {
+ mJavascriptEnabled = message_in.getValueBoolean("enable");
+ }
+ else if(message_name == "size_change")
+ {
+ std::string name = message_in.getValue("name");
+ S32 width = message_in.getValueS32("width");
+ S32 height = message_in.getValueS32("height");
+ S32 texture_width = message_in.getValueS32("texture_width");
+ S32 texture_height = message_in.getValueS32("texture_height");
+ mBackgroundR = message_in.getValueReal("background_r");
+ mBackgroundG = message_in.getValueReal("background_g");
+ mBackgroundB = message_in.getValueReal("background_b");
+// mBackgroundA = message_in.setValueReal("background_a"); // Ignore any alpha
+
+ if(!name.empty())
+ {
+ // Find the shared memory region with this name
+ SharedSegmentMap::iterator iter = mSharedSegments.find(name);
+ if(iter != mSharedSegments.end())
+ {
+ mPixels = (unsigned char*)iter->second.mAddress;
+ mWidth = width;
+ mHeight = height;
+
+ if(initBrowserWindow())
+ {
+
+ // size changed so tell the browser
+ LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight );
+
+ // std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight
+ // << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl;
+
+ S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId);
+
+ // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response.
+ if(real_width <= texture_width)
+ {
+ texture_width = real_width;
+ }
+ else
+ {
+ // This won't work -- it'll be bigger than the allocated memory. This is a fatal error.
+ // std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl;
+ mDeleteMe = true;
+ return;
+ }
+ }
+ else
+ {
+ // Setting up the browser window failed. This is a fatal error.
+ mDeleteMe = true;
+ }
+
+
+ mTextureWidth = texture_width;
+ mTextureHeight = texture_height;
+
+ };
+ };
+
+ LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response");
+ message.setValue("name", name);
+ message.setValueS32("width", width);
+ message.setValueS32("height", height);
+ message.setValueS32("texture_width", texture_width);
+ message.setValueS32("texture_height", texture_height);
+ sendMessage(message);
+
+ }
+ else if(message_name == "load_uri")
+ {
+ std::string uri = message_in.getValue("uri");
+
+// std::cout << "loading URI: " << uri << std::endl;
+
+ if(!uri.empty())
+ {
+ if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE)
+ {
+ LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, uri );
+ }
+ else
+ {
+ mInitialNavigateURL = uri;
+ }
+ }
+ }
+ else if(message_name == "mouse_event")
+ {
+ std::string event = message_in.getValue("event");
+ S32 button = message_in.getValueS32("button");
+ mLastMouseX = message_in.getValueS32("x");
+ mLastMouseY = message_in.getValueS32("y");
+ std::string modifiers = message_in.getValue("modifiers");
+
+ // Treat unknown mouse events as mouse-moves.
+ LLQtWebKit::EMouseEvent mouse_event = LLQtWebKit::ME_MOUSE_MOVE;
+ if(event == "down")
+ {
+ mouse_event = LLQtWebKit::ME_MOUSE_DOWN;
+ }
+ else if(event == "up")
+ {
+ mouse_event = LLQtWebKit::ME_MOUSE_UP;
+ }
+ else if(event == "double_click")
+ {
+ mouse_event = LLQtWebKit::ME_MOUSE_DOUBLE_CLICK;
+ }
+
+ LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId, mouse_event, button, mLastMouseX, mLastMouseY, decodeModifiers(modifiers));
+ checkEditState();
+ }
+ else if(message_name == "scroll_event")
+ {
+ S32 x = message_in.getValueS32("x");
+ S32 y = message_in.getValueS32("y");
+ std::string modifiers = message_in.getValue("modifiers");
+
+ // Incoming scroll events are adjusted so that 1 detent is approximately 1 unit.
+ // Qt expects 1 detent to be 120 units.
+ // It also seems that our y scroll direction is inverted vs. what Qt expects.
+
+ x *= 120;
+ y *= -120;
+
+ LLQtWebKit::getInstance()->scrollWheelEvent(mBrowserWindowId, mLastMouseX, mLastMouseY, x, y, decodeModifiers(modifiers));
+ }
+ else if(message_name == "key_event")
+ {
+ std::string event = message_in.getValue("event");
+ S32 key = message_in.getValueS32("key");
+ std::string modifiers = message_in.getValue("modifiers");
+ LLSD native_key_data = message_in.getValueLLSD("native_key_data");
+
+ // Treat unknown events as key-up for safety.
+ LLQtWebKit::EKeyEvent key_event = LLQtWebKit::KE_KEY_UP;
+ if(event == "down")
+ {
+ key_event = LLQtWebKit::KE_KEY_DOWN;
+ }
+ else if(event == "repeat")
+ {
+ key_event = LLQtWebKit::KE_KEY_REPEAT;
+ }
+
+ keyEvent(key_event, key, decodeModifiers(modifiers), native_key_data);
+ }
+ else if(message_name == "text_event")
+ {
+ std::string text = message_in.getValue("text");
+ std::string modifiers = message_in.getValue("modifiers");
+ LLSD native_key_data = message_in.getValueLLSD("native_key_data");
+
+ unicodeInput(text, decodeModifiers(modifiers), native_key_data);
+ }
+ if(message_name == "edit_cut")
+ {
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT );
+ checkEditState();
+ }
+ if(message_name == "edit_copy")
+ {
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY );
+ checkEditState();
+ }
+ if(message_name == "edit_paste")
+ {
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE );
+ checkEditState();
+ }
+ if(message_name == "pick_file_response")
+ {
+ onPickFileResponse(message_in.getValue("file"));
+ }
+ if(message_name == "auth_response")
+ {
+ authResponse(message_in);
+ }
+ else
+ if(message_name == "enable_media_plugin_debugging")
+ {
+ mEnableMediaPluginDebugging = message_in.getValueBoolean( "enable" );
+ }
+
+ else
+ if(message_name == "js_enable_object")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ bool enable = message_in.getValueBoolean( "enable" );
+ LLQtWebKit::getInstance()->setSLObjectEnabled( enable );
+#endif
+ }
+ else
+ if(message_name == "js_agent_location")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ F32 x = message_in.getValueReal("x");
+ F32 y = message_in.getValueReal("y");
+ F32 z = message_in.getValueReal("z");
+ LLQtWebKit::getInstance()->setAgentLocation( x, y, z );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_global_location")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ F32 x = message_in.getValueReal("x");
+ F32 y = message_in.getValueReal("y");
+ F32 z = message_in.getValueReal("z");
+ LLQtWebKit::getInstance()->setAgentGlobalLocation( x, y, z );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_orientation")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ F32 angle = message_in.getValueReal("angle");
+ LLQtWebKit::getInstance()->setAgentOrientation( angle );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_region")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ const std::string& region = message_in.getValue("region");
+ LLQtWebKit::getInstance()->setAgentRegion( region );
+ LLQtWebKit::getInstance()->emitLocation();
+#endif
+ }
+ else
+ if(message_name == "js_agent_maturity")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ const std::string& maturity = message_in.getValue("maturity");
+ LLQtWebKit::getInstance()->setAgentMaturity( maturity );
+ LLQtWebKit::getInstance()->emitMaturity();
+#endif
+ }
+ else
+ if(message_name == "js_agent_language")
+ {
+#if LLQTWEBKIT_API_VERSION >= 9
+ const std::string& language = message_in.getValue("language");
+ LLQtWebKit::getInstance()->setAgentLanguage( language );
+ LLQtWebKit::getInstance()->emitLanguage();
+#endif
+ }
+ else
+ {
+// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl;
+ }
+ }
+ else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER)
+ {
+ if(message_name == "focus")
+ {
+ bool val = message_in.getValueBoolean("focused");
+ LLQtWebKit::getInstance()->focusBrowser( mBrowserWindowId, val );
+
+ if(mFirstFocus && val)
+ {
+ // On the first focus, post a tab key event. This fixes a problem with initial focus.
+ std::string empty;
+ keyEvent(LLQtWebKit::KE_KEY_DOWN, KEY_TAB, decodeModifiers(empty));
+ keyEvent(LLQtWebKit::KE_KEY_UP, KEY_TAB, decodeModifiers(empty));
+ mFirstFocus = false;
+ }
+ }
+ else if(message_name == "clear_cache")
+ {
+ LLQtWebKit::getInstance()->clearCache();
+ }
+ else if(message_name == "clear_cookies")
+ {
+ LLQtWebKit::getInstance()->clearAllCookies();
+ }
+ else if(message_name == "enable_cookies")
+ {
+ mCookiesEnabled = message_in.getValueBoolean("enable");
+ LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled );
+ }
+ else if(message_name == "enable_plugins")
+ {
+ mPluginsEnabled = message_in.getValueBoolean("enable");
+ LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
+ }
+ else if(message_name == "enable_javascript")
+ {
+ mJavascriptEnabled = message_in.getValueBoolean("enable");
+ //LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
+ }
+ else if(message_name == "set_cookies")
+ {
+ LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies"));
+ }
+ else if(message_name == "proxy_setup")
+ {
+ bool val = message_in.getValueBoolean("enable");
+ std::string host = message_in.getValue("host");
+ int port = message_in.getValueS32("port");
+ LLQtWebKit::getInstance()->enableProxy( val, host, port );
+ }
+ else if(message_name == "browse_stop")
+ {
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_STOP );
+ }
+ else if(message_name == "browse_reload")
+ {
+ // foo = message_in.getValueBoolean("ignore_cache");
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_RELOAD );
+ }
+ else if(message_name == "browse_forward")
+ {
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD );
+ }
+ else if(message_name == "browse_back")
+ {
+ LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK );
+ }
+ else if(message_name == "set_status_redirect")
+ {
+ int code = message_in.getValueS32("code");
+ std::string url = message_in.getValue("url");
+ if ( 404 == code ) // browser lib only supports 404 right now
+ {
+#if LLQTWEBKIT_API_VERSION < 8
+ LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
+#endif
+ };
+ }
+ else if(message_name == "set_user_agent")
+ {
+ mUserAgent = message_in.getValue("user_agent");
+ LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
+ }
+ else if(message_name == "show_web_inspector")
+ {
+#if LLQTWEBKIT_API_VERSION >= 10
+ bool val = message_in.getValueBoolean("show");
+ LLQtWebKit::getInstance()->showWebInspector( val );
+#else
+ llwarns << "Ignoring showWebInspector message (llqtwebkit version is too old)." << llendl;
+#endif
+ }
+ else if(message_name == "ignore_ssl_cert_errors")
+ {
+#if LLQTWEBKIT_API_VERSION >= 3
+ LLQtWebKit::getInstance()->setIgnoreSSLCertErrors( message_in.getValueBoolean("ignore") );
+#else
+ llwarns << "Ignoring ignore_ssl_cert_errors message (llqtwebkit version is too old)." << llendl;
+#endif
+ }
+ else if(message_name == "add_certificate_file_path")
+ {
+#if LLQTWEBKIT_API_VERSION >= 6
+ LLQtWebKit::getInstance()->setCAFile( message_in.getValue("path") );
+#else
+ llwarns << "Ignoring add_certificate_file_path message (llqtwebkit version is too old)." << llendl;
+#endif
+ }
+ else if(message_name == "init_history")
+ {
+ // Initialize browser history
+ LLSD history = message_in.getValueLLSD("history");
+ // First, clear the URL history
+ LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId);
+ // Then, add the history items in order
+ LLSD::array_iterator iter_history = history.beginArray();
+ LLSD::array_iterator end_history = history.endArray();
+ for(; iter_history != end_history; ++iter_history)
+ {
+ std::string url = (*iter_history).asString();
+ if(! url.empty()) {
+ LLQtWebKit::getInstance()->prependHistoryUrl(mBrowserWindowId, url);
+ }
+ }
+ }
+ else if(message_name == "proxy_window_opened")
+ {
+ std::string target = message_in.getValue("target");
+ std::string uuid = message_in.getValue("uuid");
+ LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid);
+ }
+ else if(message_name == "proxy_window_closed")
+ {
+ std::string uuid = message_in.getValue("uuid");
+ LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid);
+ }
+ else
+ {
+// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl;
+ };
+ }
+ else
+ {
+// std::cerr << "MediaPluginWebKit::receiveMessage: unknown message class: " << message_class << std::endl;
+ };
+ }
+}
+
+void MediaPluginWebKit::setVolume(F32 volume)
+{
+ mVolumeCatcher.setVolume(volume);
+}
+
+int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data)
+{
+ MediaPluginWebKit *self = new MediaPluginWebKit(host_send_func, host_user_data);
+ *plugin_send_func = MediaPluginWebKit::staticReceiveMessage;
+ *plugin_user_data = (void*)self;
+
+ return 0;
+}
+
+
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 523ea8a394..a117d9a593 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -120,7 +120,6 @@ set(viewer_SOURCE_FILES
llchiclet.cpp
llclassifiedinfo.cpp
llclassifiedstatsresponder.cpp
- llcloud.cpp
llcofwearables.cpp
llcolorswatch.cpp
llcommanddispatcherlistener.cpp
@@ -131,6 +130,7 @@ set(viewer_SOURCE_FILES
llcurrencyuimanager.cpp
llcylinder.cpp
lldateutil.cpp
+ lldaycyclemanager.cpp
lldebugmessagebox.cpp
lldebugview.cpp
lldelayedgestureerror.cpp
@@ -151,6 +151,8 @@ set(viewer_SOURCE_FILES
lldriverparam.cpp
lldynamictexture.cpp
llemote.cpp
+ llenvmanager.cpp
+ llestateinfomodel.cpp
lleventnotifier.cpp
lleventpoll.cpp
llexpandabletextbox.cpp
@@ -179,9 +181,12 @@ set(viewer_SOURCE_FILES
llfloaterbuyland.cpp
llfloatercamera.cpp
llfloatercolorpicker.cpp
- llfloaterdaycycle.cpp
+ llfloaterdeleteenvpreset.cpp
llfloaterdisplayname.cpp
- llfloaterenvsettings.cpp
+ llfloatereditdaycycle.cpp
+ llfloatereditsky.cpp
+ llfloatereditwater.cpp
+ llfloaterenvironmentsettings.cpp
llfloaterevent.cpp
llfloaterfonttest.cpp
llfloatergesture.cpp
@@ -204,6 +209,7 @@ set(viewer_SOURCE_FILES
llfloatermediasettings.cpp
llfloatermemleak.cpp
llfloatermodelpreview.cpp
+ llfloatermodeluploadbase.cpp
llfloatermodelwizard.cpp
llfloaternamedesc.cpp
llfloaternotificationsconsole.cpp
@@ -234,10 +240,8 @@ set(viewer_SOURCE_FILES
llfloateruipreview.cpp
llfloaterurlentry.cpp
llfloatervoiceeffect.cpp
- llfloaterwater.cpp
llfloaterwebcontent.cpp
llfloaterwhitelistentry.cpp
- llfloaterwindlight.cpp
llfloaterwindowsize.cpp
llfloaterworldmap.cpp
llfolderview.cpp
@@ -361,6 +365,9 @@ set(viewer_SOURCE_FILES
llpanellogin.cpp
llpanelloginlistener.cpp
llpanelmaininventory.cpp
+ llpanelmarketplaceinbox.cpp
+ llpanelmarketplaceinboxinventory.cpp
+ llpanelmarketplaceoutbox.cpp
llpanelmediasettingsgeneral.cpp
llpanelmediasettingspermissions.cpp
llpanelmediasettingssecurity.cpp
@@ -411,6 +418,7 @@ set(viewer_SOURCE_FILES
llproductinforequest.cpp
llprogressview.cpp
llrecentpeople.cpp
+ llregioninfomodel.cpp
llregionposition.cpp
llremoteparcelrequest.cpp
llsavedsettingsglue.cpp
@@ -496,6 +504,7 @@ set(viewer_SOURCE_FILES
lltranslate.cpp
lluilistener.cpp
lluploaddialog.cpp
+ lluploadfloaterobservers.cpp
llurl.cpp
llurldispatcher.cpp
llurldispatcherlistener.cpp
@@ -519,7 +528,7 @@ set(viewer_SOURCE_FILES
llviewerfloaterreg.cpp
llviewerfoldertype.cpp
llviewergenericmessage.cpp
- llviewergesture.cpp
+ llviewergesture.cpp
llviewerhelp.cpp
llviewerhelputil.cpp
llviewerhome.cpp
@@ -566,7 +575,6 @@ set(viewer_SOURCE_FILES
llvoavatardefines.cpp
llvoavatarself.cpp
llvocache.cpp
- llvoclouds.cpp
llvograss.cpp
llvoground.cpp
llvoicecallhandler.cpp
@@ -595,6 +603,7 @@ set(viewer_SOURCE_FILES
llwind.cpp
llwlanimator.cpp
llwldaycycle.cpp
+ llwlhandlers.cpp
llwlparammanager.cpp
llwlparamset.cpp
llworld.cpp
@@ -673,7 +682,6 @@ set(viewer_HEADER_FILES
llchiclet.h
llclassifiedinfo.h
llclassifiedstatsresponder.h
- llcloud.h
llcofwearables.h
llcolorswatch.h
llcommanddispatcherlistener.h
@@ -684,6 +692,7 @@ set(viewer_HEADER_FILES
llcurrencyuimanager.h
llcylinder.h
lldateutil.h
+ lldaycyclemanager.h
lldebugmessagebox.h
lldebugview.h
lldelayedgestureerror.h
@@ -694,7 +703,6 @@ set(viewer_HEADER_FILES
lldrawpoolalpha.h
lldrawpoolavatar.h
lldrawpoolbump.h
- lldrawpoolclouds.h
lldrawpoolground.h
lldrawpoolsimple.h
lldrawpoolsky.h
@@ -705,6 +713,8 @@ set(viewer_HEADER_FILES
lldriverparam.h
lldynamictexture.h
llemote.h
+ llenvmanager.h
+ llestateinfomodel.h
lleventnotifier.h
lleventpoll.h
llexpandabletextbox.h
@@ -733,9 +743,12 @@ set(viewer_HEADER_FILES
llfloaterbuyland.h
llfloatercamera.h
llfloatercolorpicker.h
- llfloaterdaycycle.h
+ llfloaterdeleteenvpreset.h
llfloaterdisplayname.h
- llfloaterenvsettings.h
+ llfloatereditdaycycle.h
+ llfloatereditsky.h
+ llfloatereditwater.h
+ llfloaterenvironmentsettings.h
llfloaterevent.h
llfloaterfonttest.h
llfloatergesture.h
@@ -758,6 +771,7 @@ set(viewer_HEADER_FILES
llfloatermediasettings.h
llfloatermemleak.h
llfloatermodelpreview.h
+ llfloatermodeluploadbase.h
llfloatermodelwizard.h
llfloaternamedesc.h
llfloaternotificationsconsole.h
@@ -788,10 +802,8 @@ set(viewer_HEADER_FILES
llfloateruipreview.h
llfloaterurlentry.h
llfloatervoiceeffect.h
- llfloaterwater.h
llfloaterwebcontent.h
llfloaterwhitelistentry.h
- llfloaterwindlight.h
llfloaterwindowsize.h
llfloaterworldmap.h
llfolderview.h
@@ -909,6 +921,9 @@ set(viewer_HEADER_FILES
llpanellogin.h
llpanelloginlistener.h
llpanelmaininventory.h
+ llpanelmarketplaceinbox.h
+ llpanelmarketplaceinboxinventory.h
+ llpanelmarketplaceoutbox.h
llpanelmediasettingsgeneral.h
llpanelmediasettingspermissions.h
llpanelmediasettingssecurity.h
@@ -959,6 +974,7 @@ set(viewer_HEADER_FILES
llproductinforequest.h
llprogressview.h
llrecentpeople.h
+ llregioninfomodel.h
llregionposition.h
llremoteparcelrequest.h
llresourcedata.h
@@ -998,7 +1014,7 @@ set(viewer_HEADER_FILES
llsurface.h
llsurfacepatch.h
llsyswellitem.h
- llsyswellwindow.h
+ llsyswellwindow.h
lltable.h
llteleporthistory.h
llteleporthistorystorage.h
@@ -1047,6 +1063,7 @@ set(viewer_HEADER_FILES
lluiconstants.h
lluilistener.h
lluploaddialog.h
+ lluploadfloaterobservers.h
llurl.h
llurldispatcher.h
llurldispatcherlistener.h
@@ -1070,7 +1087,7 @@ set(viewer_HEADER_FILES
llviewerfloaterreg.h
llviewerfoldertype.h
llviewergenericmessage.h
- llviewergesture.h
+ llviewergesture.h
llviewerhelp.h
llviewerhome.h
llviewerinventory.h
@@ -1114,7 +1131,6 @@ set(viewer_HEADER_FILES
llvoavatardefines.h
llvoavatarself.h
llvocache.h
- llvoclouds.h
llvograss.h
llvoground.h
llvoicechannel.h
@@ -1143,6 +1159,7 @@ set(viewer_HEADER_FILES
llwind.h
llwlanimator.h
llwldaycycle.h
+ llwlhandlers.h
llwlparammanager.h
llwlparamset.h
llworld.h
@@ -1225,7 +1242,7 @@ if (WINDOWS)
# precompiled header configuration
# llviewerprecompiledheaders.cpp generates
# the .pch file.
- # All sources added to viewer_SOURCE_FILES
+ # All sources added to viewer_SOURCE_FILES
# at this point use it.
if(USE_PRECOMPILED_HEADERS)
set_source_files_properties(llviewerprecompiledheaders.cpp
@@ -1234,7 +1251,37 @@ if (WINDOWS)
)
set(viewer_SOURCE_FILES "${viewer_SOURCE_FILES}" llviewerprecompiledheaders.cpp)
endif(USE_PRECOMPILED_HEADERS)
-
+
+ # Replace the icons with the appropriate ones for the channel
+ # ('test' is the default)
+ set(ICON_PATH "test")
+ string(TOLOWER ${VIEWER_CHANNEL} channel_lower)
+ if(channel_lower MATCHES "^second life release")
+ set(ICON_PATH "release")
+ elseif(channel_lower MATCHES "^second life beta viewer")
+ set(ICON_PATH "beta")
+ elseif(channel_lower MATCHES "^second life development")
+ set(ICON_PATH "development")
+ elseif(channel_lower MATCHES "project")
+ set(ICON_PATH "project")
+ endif()
+ message("Copying icons for ${ICON_PATH}")
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/secondlife.ico"
+ "${CMAKE_CURRENT_SOURCE_DIR}/res/ll_icon.ico"
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/secondlife_256.BMP"
+ "${CMAKE_CURRENT_SOURCE_DIR}/res/ll_icon.BMP"
+ )
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/secondlife_256.BMP"
+ "${CMAKE_CURRENT_SOURCE_DIR}/res-sdl/ll_icon.BMP"
+ )
+
# Add resource files to the project.
# viewerRes.rc is the only buildable file, but
# the rest are all dependencies of it.
@@ -1264,6 +1311,7 @@ if (WINDOWS)
res/lltooltranslate.cur
res/lltoolzoomin.cur
res/lltoolzoomout.cur
+ res-sdl/ll_icon.BMP
res/ll_icon.BMP
res/ll_icon.ico
res/resource.h
@@ -1279,8 +1327,8 @@ if (WINDOWS)
set_source_files_properties(${viewer_RESOURCE_FILES}
PROPERTIES HEADER_FILE_ONLY TRUE)
- set(viewer_RESOURCE_FILES
- res/viewerRes.rc
+ set(viewer_RESOURCE_FILES
+ res/viewerRes.rc
${viewer_RESOURCE_FILES}
)
@@ -1288,7 +1336,7 @@ if (WINDOWS)
if (NOT STANDALONE)
list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
- endif (NOT STANDALONE)
+ endif (NOT STANDALONE)
find_library(DINPUT_LIBRARY dinput8 ${DIRECTX_LIBRARY_DIR})
find_library(DXGUID_LIBRARY dxguid ${DIRECTX_LIBRARY_DIR})
@@ -1465,7 +1513,7 @@ set(PACKAGE ON CACHE BOOL
"Add a package target that builds an installer package.")
if (WINDOWS)
- set_target_properties(${VIEWER_BINARY_NAME}
+ set_target_properties(${VIEWER_BINARY_NAME}
PROPERTIES
# *TODO -reenable this once we get server usage sorted out
#LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\""
@@ -1497,7 +1545,7 @@ if (WINDOWS)
${SHARED_LIB_STAGING_DIR}/Debug/libtcmalloc_minimal-debug.dll
)
endif(USE_GOOGLE_PERFTOOLS)
-
+
set(COPY_INPUT_DEPENDENCIES
# The following commented dependencies are determined at variably at build time. Can't do this here.
@@ -1595,24 +1643,24 @@ if (WINDOWS)
--grid=${GRID}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
- DEPENDS
+ DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
stage_third_party_libs
${COPY_INPUT_DEPENDENCIES}
COMMENT "Performing viewer_manifest copy"
)
-
- add_custom_target(copy_w_viewer_manifest ALL DEPENDS ${CMAKE_CFG_INTDIR}/copy_touched.bat)
+
+ add_custom_target(copy_w_viewer_manifest ALL DEPENDS ${CMAKE_CFG_INTDIR}/copy_touched.bat)
add_dependencies(${VIEWER_BINARY_NAME} stage_third_party_libs llcommon copy_w_viewer_manifest)
-
+
if (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)
endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
-
- add_dependencies(${VIEWER_BINARY_NAME}
- SLPlugin
- windows-updater
+
+ add_dependencies(${VIEWER_BINARY_NAME}
+ SLPlugin
+ windows-updater
windows-crash-logger
)
@@ -1622,7 +1670,7 @@ if (WINDOWS)
TARGET ${VIEWER_BINARY_NAME} POST_BUILD
COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
ARGS
- --solution
+ --solution
${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
--workingdir
${VIEWER_BINARY_NAME}
@@ -1640,12 +1688,12 @@ if (WINDOWS)
${CMAKE_CURRENT_SOURCE_DIR}/..
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CFG_INTDIR}
- DEPENDS
- lleventhost
+ DEPENDS
+ lleventhost
${EVENT_HOST_SCRIPTS}
${CMAKE_CURRENT_SOURCE_DIR}/event_host_manifest.py
)
-
+
add_custom_command(
OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
COMMAND ${PYTHON_EXECUTABLE}
@@ -1661,15 +1709,15 @@ if (WINDOWS)
--login_channel=${VIEWER_LOGIN_CHANNEL}
--source=${CMAKE_CURRENT_SOURCE_DIR}
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
- DEPENDS
- ${VIEWER_BINARY_NAME}
+ DEPENDS
+ ${VIEWER_BINARY_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
${COPY_INPUT_DEPENDENCIES}
)
- add_custom_target(package ALL DEPENDS
+ add_custom_target(package ALL DEPENDS
${CMAKE_CFG_INTDIR}/touched.bat
- windows-setup-build-all
+ windows-setup-build-all
)
# temporarily disable packaging of event_host until hg subrepos get
# sorted out on the parabuild cluster...
@@ -1686,7 +1734,7 @@ endif (WINDOWS)
# that they depend upon. -brad
target_link_libraries(${VIEWER_BINARY_NAME}
${UPDATER_LIBRARIES}
- ${GOOGLE_PERFTOOLS_LIBRARIES}
+ ${GOOGLE_PERFTOOLS_LIBRARIES}
${LLAUDIO_LIBRARIES}
${LLCHARACTER_LIBRARIES}
${LLIMAGE_LIBRARIES}
@@ -1737,7 +1785,7 @@ else (USE_KDU)
${LLIMAGEJ2COJ_LIBRARIES}
)
endif (USE_KDU)
-
+
build_version(viewer)
set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
@@ -1749,14 +1797,14 @@ if (LINUX)
# These are the generated targets that are copied to package/
set(COPY_INPUT_DEPENDENCIES
- ${VIEWER_BINARY_NAME}
- linux-crash-logger
- linux-updater
- SLPlugin
- media_plugin_webkit
- media_plugin_gstreamer010
- llcommon
- )
+ ${VIEWER_BINARY_NAME}
+ linux-crash-logger
+ linux-updater
+ SLPlugin
+ media_plugin_webkit
+ media_plugin_gstreamer010
+ llcommon
+ )
add_custom_command(
OUTPUT ${product}.tar.bz2
@@ -1796,13 +1844,13 @@ if (LINUX)
--dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
--grid=${GRID}
--source=${CMAKE_CURRENT_SOURCE_DIR}
- DEPENDS
+ DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
${COPY_INPUT_DEPENDENCIES}
COMMENT "Performing viewer_manifest copy"
)
-
- add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)
+
+ add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)
if (PACKAGE)
add_custom_target(package ALL DEPENDS ${product}.tar.bz2)
@@ -1847,7 +1895,7 @@ if (DARWIN)
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
if (PACKAGE)
- add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
+ add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
add_custom_command(
TARGET package POST_BUILD
@@ -1942,7 +1990,7 @@ if (LL_TESTS)
)
##################################################
- # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
+ # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
##################################################
# if(USE_PRECOMPILED_HEADERS)
# set_source_files_properties(
@@ -1956,33 +2004,33 @@ if (LL_TESTS)
#set(TEST_DEBUG on)
set(test_sources llcapabilitylistener.cpp)
##################################################
- # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
+ # DISABLING PRECOMPILED HEADERS USAGE FOR TESTS
##################################################
# if(USE_PRECOMPILED_HEADERS)
# set(test_sources "${test_sources}" llviewerprecompiledheaders.cpp)
# endif(USE_PRECOMPILED_HEADERS)
- set(test_libs
- ${LLMESSAGE_LIBRARIES}
- ${WINDOWS_LIBRARIES}
+ set(test_libs
+ ${LLMESSAGE_LIBRARIES}
+ ${WINDOWS_LIBRARIES}
${LLVFS_LIBRARIES}
${LLMATH_LIBRARIES}
- ${LLCOMMON_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
${GOOGLEMOCK_LIBRARIES}
)
- LL_ADD_INTEGRATION_TEST(llcapabilitylistener
- "${test_sources}"
+ LL_ADD_INTEGRATION_TEST(llcapabilitylistener
+ "${test_sources}"
"${test_libs}"
${PYTHON_EXECUTABLE}
"${CMAKE_SOURCE_DIR}/llmessage/tests/test_llsdmessage_peer.py"
)
- set(test_libs
- ${LLMESSAGE_LIBRARIES}
- ${WINDOWS_LIBRARIES}
+ set(test_libs
+ ${LLMESSAGE_LIBRARIES}
+ ${WINDOWS_LIBRARIES}
${LLVFS_LIBRARIES}
${LLMATH_LIBRARIES}
- ${LLCOMMON_LIBRARIES}
+ ${LLCOMMON_LIBRARIES}
${GOOGLEMOCK_LIBRARIES}
${OPENSSL_LIBRARIES}
${CRYPTO_LIBRARIES}
@@ -2015,12 +2063,12 @@ if (LL_TESTS)
)
LL_ADD_INTEGRATION_TEST(llsimplestat
- ""
+ ""
"${test_libs}"
)
LL_ADD_INTEGRATION_TEST(llviewerassetstats
- llviewerassetstats.cpp
+ llviewerassetstats.cpp
"${test_libs}"
)
@@ -2030,6 +2078,22 @@ if (LL_TESTS)
#ADD_VIEWER_BUILD_TEST(lltextureinfodetails viewer)
#ADD_VIEWER_BUILD_TEST(lltexturestatsuploader viewer)
+include(LLAddBuildTest)
+SET(viewer_TEST_SOURCE_FILES
+ llagentaccess.cpp
+ llwlparammanager.cpp
+ # Not *actually* a unit test, it's an integration test.
+ # Because it won't work in the new unit test iface, i've commented out
+ # and notified Nat. Delete this when it's replaced!
+ # + poppy & brad 2009-06-05
+ # llcapabilitylistener.cpp
+ )
+set_source_files_properties(
+ ${viewer_TEST_SOURCE_FILES}
+ PROPERTIES
+ LL_TEST_ADDITIONAL_SOURCE_FILES llviewerprecompiledheaders.cpp
+ )
+
endif (LL_TESTS)
check_message_template(${VIEWER_BINARY_NAME})
diff --git a/indra/newview/app_settings/CA.pem b/indra/newview/app_settings/CA.pem
index 63bb036c92..a16b4225e5 100644
--- a/indra/newview/app_settings/CA.pem
+++ b/indra/newview/app_settings/CA.pem
@@ -1,362 +1,322 @@
-----BEGIN CERTIFICATE-----
-MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
-EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
-bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
-YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
-Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
-MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
-A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
-YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
-VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
-isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
-Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
-QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
-bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
-yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
-AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
-cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
-BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
-cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
-U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
-YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
-SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
-t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
-mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
-K+9A46sd33oqK8n8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
-BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
-cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
-4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
-Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
-0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
-FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
-bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
-SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
-6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
-m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
-eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
-kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
-6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
-CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
-aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
-gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
-aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
-tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
-nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
-77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
-Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
-ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
-zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
-rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
-YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
-oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
-FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
-0m6lG5kngOcLqagA
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
+WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
+AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
+OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
+T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
+JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
+Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
+PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
+aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
+TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
+LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
+BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
+dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
+AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
+NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
+b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
+MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
+Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
+MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
+U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
+cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
+pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
+OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
+Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
+Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
+HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
+Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
+Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
+26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
+AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
+F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
+ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
+ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
+aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
+YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
+c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
+d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
+CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
+wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
+Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
+0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
+pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
+CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
+P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
+1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
+KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
+JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
+8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
+fyWl8kgAwKQB2j8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
+MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
+vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
+CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
+WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
+oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
+h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
+f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
+B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
+vUxFnmG6v4SBkgPR0ml8xQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
+IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
+VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
+cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
+QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
+F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
+c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
+mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
+VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
+teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
+f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
+Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
+/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
+MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
+9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
+IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
+ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
+uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
+Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
+QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
+koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
+ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
+DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
+bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
+MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
+YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
+Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
+MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
+cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
+d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
+DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
+rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
+uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
+BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
+MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
+/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
+gQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
+b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
+MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
+ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
+IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
+AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
+unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
+BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
+7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
+0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
+roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
+A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
+aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
+26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
+BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
+EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
+BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
+AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
+p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
+1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
+XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
+eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
+tGWaIZDgqtCYvDi1czyL+Nw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
+MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
+QSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloXDTExMDkyMzExMTgxN1owdjELMAkG
+A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
+BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0MgU2ln
+bmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJY
+rISEtSsduHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ1
+2FJarD1X6mSQ4cfN/60vLfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjR
+AM0tdwXSnzuTEunfw0Oup559y3Iqxg1cExflB6cfAgMBAAGjggGXMIIBkzBBBgNV
+HR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0v
+Y3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
+AQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYB
+BQUHAgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVu
+dGVtICJQb2xpdHlrYSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5p
+ZSBjemFzZW0iLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVw
+b3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJfMS5wZGYwHwYDVR0jBBgwFoAU
+w4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavOYd9u9tej53vW
+XwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
++z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMb
+skF8I31JxIeBvueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR
++7KtwMg4sFDJZ8RNgOf7tbA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
-MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
-0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
-TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
-RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
-zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
-BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
-AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
-PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
-BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
-9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
-Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
-Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
-n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
-H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
+MIIDlDCCAnygAwIBAgIQWAsFbFMk27JQVxhf+eWmUDANBgkqhkiG9w0BAQUFADAn
+MQswCQYDVQQGEwJCRTEYMBYGA1UEAxMPQmVsZ2l1bSBSb290IENBMB4XDTAzMDEy
+NjIzMDAwMFoXDTE0MDEyNjIzMDAwMFowJzELMAkGA1UEBhMCQkUxGDAWBgNVBAMT
+D0JlbGdpdW0gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AMihcekcRkJ5eHFvna6pqKsot03HIOswkVp19eLSz8hMFJhCWK3HEcVAQGpa+XQS
+J4fpnOVxTiIs0RIYqjBeoiG52bv/9nTrMQHnO35YD5EWTXaJqAFPrSJmcPpLHZXB
+MFjqvNll2Jq0iOtJRlLf0lMVdssUXRlJsW9q09P9vMIt7EU/CT9YvvzU7wCMgTVy
+v/cY6pZifSsofxVsY9LKyn0FrMhtB20yvmi4BUCuVJhWPmbxMOjvxKuTXgfeMo8S
+dKpbNCNUwOpszv42kqgJF+qhLc9s44Qd3ocuMws8dOIhUDiVLlzg5cYx+dtA+mqh
+pIqTm6chBocdJ9PEoclMsG8CAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4AQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBQQ8AxW
+m2HqVzq2NZdtn925FI7b5jARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAU
+EPAMVpth6lc6tjWXbZ/duRSO2+YwDQYJKoZIhvcNAQEFBQADggEBAMhtIlGKYfgP
+lm7VILKB+MbcoxYA2s1q52sq+llIp0xJN9dzoWoBZV4yveeX09AuPHPTjHuD79ZC
+wT+oqV0PN7p20kC9zC0/00RBSZz9Wyn0AiMiW3Ebv1jZKE4tRfTa57VjRUQRDSp/
+M382SbTObqkCMa5c/ciJv0J71/Fg8teH9lcuen5qE4Ad3OPQYx49cTGxYNSeCMqr
+8JTHSHVUgfMbrXec6LKP24OsjzRr6L/D2fVDw2RV6xq9NoY2uiGMlxoh1OotO6y6
+7Kcdq765Sps1LxxcHVGnH1TtEpf/8m6HfUbJdNbv6z195lluBpQE5KJVhzgoaiJe
+4r50ErAEQyo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTEwM1oXDTI1MTIyOTEx
+MTEwM1owggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA55+R7+voFuF0vIkTodduR8ZfPxKU5u/h
+M+GrgqufAwHmdG+KF5fPVy8Mdi7mbqfK2veLFBVADbNq2e2+s2q8Ai0chS3vl//P
+l9rrR10eU79dVN4ndGMZfpXUMZblz0/Kq3Uvk5AsWUwfv1YokIhi4RMeBtOCVv3j
+LSV1rDsiap8CAwEAAaOCBFIwggROMB0GA1UdDgQWBBRtW6MBjmE3nQR4tq+blh0C
+QeXbeTCCAUQGA1UdIwSCATswggE3gBRtW6MBjmE3nQR4tq+blh0CQeXbeaGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UxIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB
+AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W
+LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMEAG
+CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
+aW9uQ0xBU0UxLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu
+ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UxLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo
+dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDB1BgNV
+HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UxLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy
+L2lwczIwMDJDTEFTRTEuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT
+aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQBacEdMbCU0z2bO
+X+iyJafrUbjPE+5KzJz2jB1YXC2d7kMy2Hhbp8gVyfUFQpd+F2IgBBj9z3IRNkDN
+foHhdse5j2cUUH+fno9jj8EPE2GPhXVmCjIP6KuPp8yzz89gC+ry+bkfSFzjHUQt
+K15I/jRAHfyJywwUrwtmklZIX0E5Og==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIEO8rJUjANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJE
+SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExFjAUBgNVBAMTDUtNRC1D
+QSBTZXJ2ZXIxIDAeBgoJkiaJk/IsZAEDFBBpbmZvY2FAa21kLWNhLmRrMB4XDTk4
+MTAxNjE5MTkyMVoXDTE4MTAxMjE5MTkyMVowZjELMAkGA1UEBhMCREsxDDAKBgNV
+BAoTA0tNRDEPMA0GA1UECxMGS01ELUNBMRYwFAYDVQQDEw1LTUQtQ0EgU2VydmVy
+MSAwHgYKCZImiZPyLGQBAxQQaW5mb2NhQGttZC1jYS5kazCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAJsLpbSgFxQ7IhFgf5f+RfBxnbCkx5C7yTjfCZvp
+/BP2LBD3OKjgLRwvASoCU3I5NMhccho6uhZVf1HC+Ac5HmXUUd+v92a7gDnohPPy
+Rgv8c6f/+R2fFen37SBemYFDtZveamVXZ2To7xAxNiMKgPTPs/Rl7F6LDsYgv1bD
+36FrjahNoSTmTbYRoK21eIOVwrZeNSzo9w3W8fj0n+V2IB1jsOh+AvjXkjbvAVky
+0/57GMlyBNKP7JIGP7LXqwWfrBXuAph1DUMz467KlHZOMkPwCjTZOab7CcLQXCCY
+12s5c5QAkwpf35hQRuOaNo6d/XFM6J9mofiWlGTT3Px1EX0CAwEAAaMQMA4wDAYD
+VR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAPlA6VZ2C2cJbsI0SBIe9v+M9
+GxI45QI7P0D7QGyrqM7oNqGq7hJdN6NFb0LyPcF3/pVzmtYVJzaGKF6spaxOEveB
+9ki1xRoXUKpaCxSweBpTzEktWa43OytRy0sbryEmHJCQkz8MPufWssf2yXHzgFFo
+XMQpcMyT7JwxPlfYVvab9Kp+nW7fIyDOG0wdmBerZ+GEQJxJEkri1HskjigxhGze
+ziocJatBuOWgqw5KRylgGIQjUGRTCbODVta+Kmqb9d+cB7FStbYtt2HebOXzBIY3
+XUM5KtGC++We7DqgU5Firek7brw8i2XsHPLKJTceb6Xo6DsSxLfBAWV6+8DCkQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
-NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
-7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
-m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
-xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
-YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
-JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
-I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
-kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
-EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
-Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
-gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
-rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
-1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
-h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
-yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
-7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
-RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
-ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
-M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
-my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
-AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
-9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
-hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
-fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
+MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
+MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
+dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
+MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
+dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
+VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
+xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
+xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
+XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
+heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
+YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
+urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
+JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
+b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
+9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
+kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
+fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
+B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
+aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
+RGQDJereW26fyfJOrN3H
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
+ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
+MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
+LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
+RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
+WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
+Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
+eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
+zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
+/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
@@ -390,184 +350,85 @@ gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb
CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
-MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
-MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
-ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
-K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
-d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
-DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
-yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
-VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
-MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
-KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
-ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
-b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
-aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
-Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
-cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
-BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
-L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
-eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
-b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
-bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
-ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
-FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
-qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
-kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
-5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
-evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
-ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
-XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
-xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
-MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
-czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
-b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
-HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
-1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
-tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
-GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
-cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
-MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
-AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
-b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
-OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
-dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
-IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
-LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
-ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
-ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
-cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
-GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
-z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
-6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
-mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
-LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
-J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
-SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
+rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
+OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
+xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
+7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
+aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
+SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
+ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
+AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
+R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
+JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
+Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0
+ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX
+l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB
+HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B
+5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3
+WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP
+gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+
+DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu
+BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs
+h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk
+LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW
+Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q
+Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2
+1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq
+ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1
+Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX
+XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN
+irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8
+TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6
+g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB
+95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj
+S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
@@ -589,141 +450,75 @@ xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
-MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
-Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
-iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
-5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
-BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
-MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
-ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
-dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
-MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
-fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
-AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
-hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
-GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
-zmVml64mXg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
-RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
-Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
-RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
-IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
-Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
-CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
-8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
-bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
-dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
-QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
-C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
-ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
-KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
-VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
-DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
-fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
-d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
-JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
-yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz
+dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG
+A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U
+cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf
+qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ
+JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ
++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS
+s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5
+HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7
+70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG
+V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S
+qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S
+5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia
+C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX
+OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE
+FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2
+KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B
+8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ
+MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc
+0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ
+u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF
+u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH
+YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8
+GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO
+RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e
+KeC2uAloGRwYQw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
-ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
-Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
-MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
-bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
-RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
-CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
-6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
-5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
-AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
-ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
-cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
-by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
-IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
-Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
-KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
-HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
-BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
-FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
-pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
-wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
-EkP/TOYGJqibGapEPHayXOw=
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
+MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
+eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
+/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
+wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
+AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
+PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
+AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
+MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
+HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
+Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
+f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
+rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
+6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
+7CAFYd4=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
+dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
+MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
+MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
+A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
+cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
+VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
+ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
+uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
+hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
+pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
@@ -745,75 +540,268 @@ A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz
+MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N
+IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11
+bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE
+RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO
+zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5
+bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF
+MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1
+VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC
+OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW
+tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ
+q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb
+EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+
+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O
+VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEAq6HgBiMui0NiZdH3zNiWYwDQYJKoZIhvcNAQEFBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBAIDToA+IyeVoW4R7gB+nt+MjWBEc9RTwWBKMi99x2ZAk
+EXyge8N6GRm9cr0gvwA63/rVeszC42JFi8tJg5jBcGnQnl6CjDVHjk8btB9jAa3k
+ltax7nosZm4XNq8afjgGhixrTcsnkm54vwDVAcCxB8MJqmSFKPKdc57PYDoKHUpI
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
+MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
+EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
+DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
+DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
+c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
+TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
+OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
+2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
+RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
+AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
+ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
+YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
+b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
+ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
+IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
+b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
+ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
+YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
+a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
+SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
+aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
+YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
+Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
+ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
+pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
+Fp1hBWeAyNDYpQcCNJgEjTME1A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
+PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
+cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
+MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
+IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
+ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
+VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
+kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
+EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
+H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
+HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
+DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
+QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
+Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
+AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
+yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
+FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
+ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
+kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
+BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
+BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
+MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
+Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
+A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
+c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
+6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
+Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
+8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
+Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
+9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
+pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
+CayJSdM=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
+MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
+dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
+UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
+ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
+c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
+OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
+mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
+BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
+qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
+gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
+bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
+dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
+6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
+h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
+/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
+pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
+DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
+aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
+MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
+QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
+b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
+ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
+/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
+58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
+halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
+1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
+ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
+mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
+kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
+dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
+ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
+B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEajCCA1KgAwIBAgIBATANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJKUDEN
+MAsGA1UECgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24g
+Rm9yIEpQS0kxETAPBgNVBAsMCEJyaWRnZUNBMB4XDTAzMTIyNzA1MDgxNVoXDTEz
+MTIyNjE0NTk1OVowWjELMAkGA1UEBhMCSlAxDTALBgNVBAoMBEpQS0kxKTAnBgNV
+BAsMIFByZWZlY3R1cmFsIEFzc29jaWF0aW9uIEZvciBKUEtJMREwDwYDVQQLDAhC
+cmlkZ2VDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANTnUmg7K3m8
+52vd77kwkq156euwoWm5no8E8kmaTSc7x2RABPpqNTlMKdZ6ttsyYrqREeDkcvPL
+yF7yf/I8+innasNtsytcTAy8xY8Avsbd4JkCGW9dyPjk9pzzc3yLQ64Rx2fujRn2
+agcEVdPCr/XpJygX8FD5bbhkZ0CVoiASBmlHOcC3YpFlfbT1QcpOSOb7o+VdKVEi
+MMfbBuU2IlYIaSr/R1nO7RPNtkqkFWJ1/nKjKHyzZje7j70qSxb+BTGcNgTHa1YA
+UrogKB+UpBftmb4ds+XlkEJ1dvwokiSbCDaWFKD+YD4B2s0bvjCbw8xuZFYGhNyR
+/2D5XfN1s2MCAwEAAaOCATkwggE1MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MG0GA1UdHwRmMGQwYqBgoF6kXDBaMQswCQYDVQQGEwJKUDENMAsGA1UE
+CgwESlBLSTEpMCcGA1UECwwgUHJlZmVjdHVyYWwgQXNzb2NpYXRpb24gRm9yIEpQ
+S0kxETAPBgNVBAsMCEJyaWRnZUNBMIGDBgNVHREEfDB6pHgwdjELMAkGA1UEBhMC
+SlAxJzAlBgNVBAoMHuWFrOeahOWAi+S6uuiqjeiovOOCteODvOODk+OCuTEeMBwG
+A1UECwwV6YO96YGT5bqc55yM5Y2U6K2w5LyaMR4wHAYDVQQLDBXjg5bjg6rjg4Pj
+grjoqo3oqLzlsYAwHQYDVR0OBBYEFNQXMiCqQNkR2OaZmQgLtf8mR8p8MA0GCSqG
+SIb3DQEBBQUAA4IBAQATjJo4reTNPC5CsvAKu1RYT8PyXFVYHbKsEpGt4GR8pDCg
+HEGAiAhHSNrGh9CagZMXADvlG0gmMOnXowriQQixrtpkmx0TB8tNAlZptZWkZC+R
+8TnjOkHrk2nFAEC3ezbdK0R7MR4tJLDQCnhEWbg50rf0wZ/aF8uAaVeEtHXa6W0M
+Xq3dSe0XAcrLbX4zZHQTaWvdpLAIjl6DZ3SCieRMyoWUL+LXaLFdTP5WBCd+No58
+IounD9X4xxze2aeRVaiV/WnQ0OSPNS7n7YXy6xQdnaOU4KRW/Lne1EDf5IfWC/ih
+bVAmhZMbcrkWWcsR6aCPG+2mV3zTD6AUzuKPal8Y
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB
+VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
+bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R
+dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw
+MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy
+dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52
+ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM
+EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj
+lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ
+znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH
+2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1
+k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs
+2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD
+VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
+AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG
+KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+
+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R
+FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
+mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE
+DNuxUCAKGkq6ahq97BvIxYSazQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
+NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
+AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
+E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
+/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
+DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
+GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
+tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
+AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
+WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
+9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
+gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
+2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
+4uJEvlz36hz1
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
+MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
+v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
+eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
+tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
+C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
+zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
+mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
+V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
+bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
+3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
+J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
+291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
+ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
+AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
+MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
+RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
+gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
+KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
+QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
+XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
+DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
+LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
+RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
+jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
+6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
+mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
+Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
+WD9f
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG
@@ -837,19 +825,305 @@ ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o
Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+MIIETTCCAzWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJDSDEO
+MAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZpY2VzMSIwIAYDVQQLExlDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0aWVzMRcwFQYDVQQDEw5BZG1pbkNBLUNELVQwMTAe
+Fw0wNjAxMjUxMzM2MTlaFw0xNjAxMjUxMjM2MTlaMG0xCzAJBgNVBAYTAkNIMQ4w
+DAYDVQQKEwVhZG1pbjERMA8GA1UECxMIU2VydmljZXMxIjAgBgNVBAsTGUNlcnRp
+ZmljYXRpb24gQXV0aG9yaXRpZXMxFzAVBgNVBAMTDkFkbWluQ0EtQ0QtVDAxMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jQlMZmpLDhV+GNR9TAoSNle
+JgQB4xAXJELQf5/ySMfoFA4MmjKqYXQkB6MGPuQKwR9XRRSPf61vqb8YPsdjRmgp
+byHBcUd5t0N8RX6wRZUnPMW+bCCo2VqAU4XFbnlc2gHKaam0wdTtbBTXEkv0ieIH
+fxCfFxXqSsSr60IkF/2/xbrAgV/QD5yHk6Ie8feAVWwi5UtaFqtu4LiFEh2QMyxs
+Oyz1OcvKzkM2g873tyiE7jzMgZP+Ww3tibk2F9+e6ZeiB37TLOmVtvgpmrws4fiI
+rFNXEYSWBVrUTbn81U47yWzOgf5fEHP07bRV5QOCzCm99qNimsbL6CG7nT78CQID
+AQABo4H3MIH0MBIGA1UdEwEB/wQIMAYBAf8CAQAwga4GA1UdIASBpjCBozCBoAYI
+YIV0AREDFQEwgZMwSAYIKwYBBQUHAgIwPBo6VGhpcyBpcyB0aGUgQWRtaW5DQS1D
+RC1UMDEgQ2VydGlmaWNhdGUgUHJhY3RpY2UgU3RhdGVtZW50LjBHBggrBgEFBQcC
+ARY7aHR0cDovL3d3dy5wa2kuYWRtaW4uY2gvcG9saWN5L0NQU18yXzE2Xzc1Nl8x
+XzE3XzNfMjFfMS5wZGYwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQqxGkKocZV
+xgNucM6GgbOkD6oZ2zANBgkqhkiG9w0BAQUFAAOCAQEAn356bbusjI5glGXRQ1DR
+v21qQf0S4s3GHyZm7cqdOkFleM70ArBT+kOP5Nm7rlSAFyVgEkmBdOg7s9tlXClU
+yeZFnp6UEYRUcijPN8D1VaNRK6PIUObpDBQT0C+kAfxG9z4v29T0SxT4sgAdC/xQ
+Fyv58Fp9bPn7owuKwKcyCH1XSyi/Bp4XFELlLOaigBZO/w+dPBz4FcJSdZjU+BaJ
+0E3nKAjHlShO5ouBSZnaJz3p+nkw2Wyo36s6GxCK0XbkSP45iniIG4FmwwZkonYF
+ypQntHbx2oL7tUQQY0PDo8bGBMcPy/G2j+dciqZRlsnfgMy10SCzQ9MUx92xUG2V
+eg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG
+EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3
+MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl
+cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR
+dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB
+pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM
+b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm
+aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz
+IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT
+lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz
+AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5
+VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG
+ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2
+BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG
+AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M
+U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh
+bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C
++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F
+uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2
+XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM
+MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D
+ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU
+cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3
+WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg
+Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw
+IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH
+UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM
+TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU
+BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM
+kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x
+AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV
+HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y
+sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL
+I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8
+J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY
+VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV
+BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt
+ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4
+MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg
+SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl
+a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi
+MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h
+4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk
+tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s
+tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL
+dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4
+c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um
+TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z
++kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O
+Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW
+OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW
+fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2
+l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw
+FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+
+8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI
+6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO
+TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME
+wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY
+Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn
+xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q
+DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q
+Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t
+hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4
+7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7
+QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
+MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
+j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
+U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
+u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
+bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
+fF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGJDCCBY2gAwIBAgIEQoaroDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjA3
+MTQxNzEwMjhaFw0xNDA3MTQxNzQwMjhaMFwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
+EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xGzAZBgNV
+BAMTEkRpZ2lDZXJ0IEdsb2JhbCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMQ8vMy66mLmnkIjr7SyEa5ijdmh04/MFHIZ7Zn2/d5du1nAsMKvaplS
+lVcLNf/hhvqvosPBBWUnIHYvClQlfOor3ZVBV5sPO89H6AEGjMVESPwHLvNygzBR
+lJ5pOoOph5AU2V7EoniPwT7UGWEOGufcGpUgQb5vF9q4HEHumLD61x01PxanBCgT
+XT0FdZouhp4ssBeHIFhX7+HqVWC4LHAhrCljDBD8YLz51Rw3ZNW0+x6rJjlGiKTL
+zTBnwCZ55cpo+SLX5dKxu0hMmwuYW0KS5dLtDkcw+t0nVmNqpQHHjq/wTjsbVRVE
+1T5NVx7hkeq4oI/OOmNflom6CD7+RLsCAwEAAaOCAwUwggMBMBIGA1UdEwEB/wQI
+MAYBAf8CAQAwggEyBgNVHSAEggEpMIIBJTCCASEGCSqGSIb2fQdLAjCCARIwJgYI
+KwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvY3BzMIHnBggrBgEFBQcC
+AjCB2hqB10ZvciB1c2Ugc29sZWx5IHdpdGggU1NMIGFuZCBTL01JTUUgY2VydGlm
+aWNhdGVzIGlzc3VlZCBieSBEaWdpY2VydCwgSW5jLiB0byBhdXRob3JpemVkIHN1
+YnNjcmliZXJzLg0KRE9FUyBOT1QgcmVwcmVzZW50IGFueSBlbmRvcnNlbWVudCBi
+eSBFbnRydXN0IEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMgYXMgdG8gdGhlIGlkZW50
+aXR5IG9mIGFueSBjZXJ0aWZpY2F0ZSBob2xkZXIuMDEGA1UdJQQqMCgGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMJMIIBGAYDVR0fBIIBDzCC
+AQswKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvc2VydmVyMS5jcmwwgd6g
+gduggdikgdUwgdIxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE7
+MDkGA1UECxMyd3d3LmVudHJ1c3QubmV0L0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
+bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0
+ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwCwYDVR0PBAQDAgEGMB8GA1Ud
+IwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMB0GA1UdDgQWBBSnxxOgegE8ne+C
+SIJI1XNRthJWKjAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIAgTANBgkqhkiG9w0B
+AQUFAAOBgQBK8bPOaGnjWKNh7bYWyJOxGDA+4HLfTz3iTeG4/D/ByeNFqV2pwdqj
+5TbXjtYPrTavbLxE5ppGlKYRoNBS59pVsPYchftjUnu2mY8f4stHZKLrCGXmUdsc
+S21/U58eDTGT1DBdHm4BBydgXbvT9ONsHSAPdSozEKe3idepFxQyAw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
+S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
+SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
+WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
+bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
+UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
+bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
+LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
+J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
+R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
+Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
+JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
+zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
+Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
+ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
+Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
+gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
+uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
+y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
+J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
+r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEwOTIzMTMxODE3WjB1MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQg
+LSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g
+5DY1Hw7hgCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZs
+jqBeynX8T90vFILqsY2K5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfH
+HB67Af+g7u0dEHdDW7lwy81MwFYxBTRy9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAEgfwwgfkwgfYGDSsGAQQB
+vj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3eXN0YXdp
+b255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2pp
+IGRsYSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENB
+IHcgaGllcmFyY2hpaSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3
+LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQw
+HwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQbsa8wHQYDVR0OBBYEFMODHtVZ
+d1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQBFIGh8Jpxt87A
+gSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
+f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIis
+TsytFzVP32/W+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB
+3vSaoYg+wdkcvb6souMJzuc2uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U
+1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uftXncwKJrMiE3lvgOOBITRzcahirL
+er4c
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
+FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
+Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
+A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
+b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
+jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
+PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
+ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
+nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
+q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
+MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
+mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
+7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
+oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
+EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
+fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
+AmvZWg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
+lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
+SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
+A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
+MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
+d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
+cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
+0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
+M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
+MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
+oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
+DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
+oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
+bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
+BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
+CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
+CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
+3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
+KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
+ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
+MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
+VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
+FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
+ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
+gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
+fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
+ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
+ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
+c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
+dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
+aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
+hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
+QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
+h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
+rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
+9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
@@ -897,69 +1171,46 @@ HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN
b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
-NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
-VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
-IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
-IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
-zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
-YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
-KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
-adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
-ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
-BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
-ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
-LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
-VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
-BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
-FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
-AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
-Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
-V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
-hjM+5i9Ibq9UkE6tsSU=
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
+MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
+cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
+CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
+dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
+cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
+2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
+lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
+ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
+299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
+vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
+dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
+AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
+zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
+LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
+7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
+++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MIIH8jCCB1ugAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
-MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMTkzMVoXDTI1MTIyOTEx
+MTkzMVowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
-H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
-8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
-SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
-mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAve2QhYLxoN2P3DVo4Xw+6Gyb2vDjfzvB
+JRvH+WFIXO3KItC1dJk2W7iFnsZJnb65Q6NDKxhwfQ4XnLuBSPqMVJ6EHB++I1p2
+pg0j7YOtec++o3ysS6zf1r01HSh8i85+AcGcgLO4Z79w9jtEGlSdrFhCLUjJJSEs
+XdzSbkEFrkMCAwEAAaOCBFIwggROMB0GA1UdDgQWBBT7o4z3Z4tAqk02rzCA6po7
+4C9o6DCCAUQGA1UdIwSCATswggE3gBT7o4z3Z4tAqk02rzCA6po74C9o6KGCARqk
ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
@@ -970,86 +1221,653 @@ VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
-qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
-D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
-r33I6unUVtkOE7LFRVA=
+D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0UzIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIB
+AgQdFhtodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wOwYJYIZIAYb4QgEEBC4W
+LGh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMEAG
+CWCGSAGG+EIBAwQzFjFodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
+aW9uQ0xBU0UzLmh0bWw/MD0GCWCGSAGG+EIBBwQwFi5odHRwczovL3d3dy5pcHMu
+ZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0UzLmh0bWw/MDsGCWCGSAGG+EIBCAQuFixo
+dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDB1BgNV
+HR8EbjBsMDKgMKAuhixodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UzLmNybDA2oDSgMoYwaHR0cHM6Ly93d3diYWNrLmlwcy5lcy9pcHMyMDAy
+L2lwczIwMDJDTEFTRTMuY3JsMC8GCCsGAQUFBwEBBCMwITAfBggrBgEFBQcwAYYT
+aHR0cDovL29jc3AuaXBzLmVzLzANBgkqhkiG9w0BAQUFAAOBgQAiu2FuR8MoQlYw
+3QtFc/BI7DgkUUeSIM49JoMU0H3a4Y+JbQxQ4q/n6yAbEuMETUyqob/HmS/NkLJq
+ur3RvGBseDXgxNyePGjFc97ITNWf5X1+4CXtBf+TTKNEMg1UpPbCz+9EkjzTcYj1
+5tjLbAp/mmLLZmCOV7cCGuXGSTBNzA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIG0zCCBbugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBzDELMAkGA1UEBhMCQVQx
+EDAOBgNVBAgTB0F1c3RyaWExDzANBgNVBAcTBlZpZW5uYTE6MDgGA1UEChMxQVJH
+RSBEQVRFTiAtIEF1c3RyaWFuIFNvY2lldHkgZm9yIERhdGEgUHJvdGVjdGlvbjEl
+MCMGA1UECxMcQS1DRVJUIENlcnRpZmljYXRpb24gU2VydmljZTEYMBYGA1UEAxMP
+QS1DRVJUIEFEVkFOQ0VEMR0wGwYJKoZIhvcNAQkBFg5pbmZvQGEtY2VydC5hdDAe
+Fw0wNDEwMjMxNDE0MTRaFw0xMTEwMjMxNDE0MTRaMIHMMQswCQYDVQQGEwJBVDEQ
+MA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQKEzFBUkdF
+IERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0aW9uMSUw
+IwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYDVQQDEw9B
+LUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0LmF0MIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3euXIy+mnf6BYKbK+QH5k679
+tUFqeT8jlZxMew8eNiHuw9KoxWBzL6KksK+5uK7Gatw+sbAYntEGE80P+Jg1hADM
+e+Fr5V0bc6QS3gkVtfUCW/RIvfMM39oxvmqJmOgPnJU7H6+nmLtsq61tv9kVJi/2
+4Y5wXW3odet72sF57EoG6s78w0BUVLNcMngS9bZZzmdG3/d6JbkGgoNF/8DcgCBJ
+W/t0JrcIzyppXIOVtUzzOrrU86zuUgT3Rtkl5kjG7DEHpFb9H0fTOY1v8+gRoaO6
+2gA0PCiysgVZjwgVeYe3KAg11nznyleDv198uK3Dc1oXIGYjJx2FpKWUvAuAEwID
+AQABo4ICvDCCArgwHQYDVR0OBBYEFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYMIH5BgNV
+HSMEgfEwge6AFDd/Pj6ZcWDKJNSRE3nQdCm0qCTYoYHSpIHPMIHMMQswCQYDVQQG
+EwJBVDEQMA4GA1UECBMHQXVzdHJpYTEPMA0GA1UEBxMGVmllbm5hMTowOAYDVQQK
+EzFBUkdFIERBVEVOIC0gQXVzdHJpYW4gU29jaWV0eSBmb3IgRGF0YSBQcm90ZWN0
+aW9uMSUwIwYDVQQLExxBLUNFUlQgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlMRgwFgYD
+VQQDEw9BLUNFUlQgQURWQU5DRUQxHTAbBgkqhkiG9w0BCQEWDmluZm9AYS1jZXJ0
+LmF0ggEAMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMEcGA1UdJQRAMD4G
+CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD
+CAYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAP8wUQYDVR0gBEowSDBGBggq
+KAAYAQEBAzA6MDgGCCsGAQUFBwIBFixodHRwOi8vd3d3LmEtY2VydC5hdC9jZXJ0
+aWZpY2F0ZS1wb2xpY3kuaHRtbDA7BglghkgBhvhCAQgELhYsaHR0cDovL3d3dy5h
+LWNlcnQuYXQvY2VydGlmaWNhdGUtcG9saWN5Lmh0bWwwGQYDVR0RBBIwEIEOaW5m
+b0BhLWNlcnQuYXQwLwYDVR0SBCgwJoEOaW5mb0BhLWNlcnQuYXSGFGh0dHA6Ly93
+d3cuYS1jZXJ0LmF0MEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHBzOi8vc2VjdXJlLmEt
+Y2VydC5hdC9jZ2ktYmluL2EtY2VydC1hZHZhbmNlZC5jZ2kwDQYJKoZIhvcNAQEF
+BQADggEBACX1IvgfdG2rvfv35O48vSEvcVaEdlN8USFBHWz3JRAozgzvaBtwHkjK
+Zwt5l/BWOtjbvHfRjDt7ijlBEcxOOrNC1ffyMHwHrXpvff6YpQ5wnxmIYEQcURiG
+HMqruEX0WkuDNgSKwefsgXs27eeBauHgNGVcTYH1rmHu/ZyLpLxOyJQ2PCzA1DzW
+3rWkIX92ogJ7lTRdWrbxwUL1XGinxnnaQ74+/y0pI9JNEv7ic2tpkweRMpkedaLW
+msC1+orfKTebsg69aMaCx7o6jNONRmR/7TVaPf8/k6g52cHZ9YWjQvup22b5rWxG
+J5r5LZ4vCPmF4+T4lutjUYAa/lGuQTg=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
+jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
+ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
+ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
+Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
+AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
+HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
+uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
+TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
+xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
+CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
+O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
+6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
+MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
+TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
+dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
+KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
+N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
+dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
+MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
+b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
+zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
+3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
+WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
+Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
+NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
+ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
+QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
+YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
+aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
+ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
+ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
+amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
+IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
+Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
+ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
+YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
+dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
+b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
+CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
+xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
+0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
+QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
+f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
+8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
+VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
+Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
+h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
+uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
+DzFc6PLZ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
+LSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3
+LanJtdueNe6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP
+6KZTU0DixOrV+K7iWaqAiQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6H
+dbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPEOpO94mAKcBUhk6T/ki0evXX/ZvvktwmF
+3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Dbw34hA1A+ckTwhxzecrB8
+TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC3P8QqoK4
+ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHk
+MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
+Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
+aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
+cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
+OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
+cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
+HQ4EFgQUXvthcPHlH5BgGhlMErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIc
+e95Mvn710KCAISA0CuHD4aznTU6pLoCDShW47OR+GTpJUm1coTcUqlBHV9mra4VF
+rBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJGdsJF/XU/7smummgj
+MNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oFJTlp
+uxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1D
+OcePEhKz1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BX
+WCW+KxwiBrtQTXv4dTE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
+AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
+TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
+9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
+MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
+BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
+MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
+LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
+s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
+xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
+u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
+F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
+Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
+PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
+HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
+NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
+AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
+L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
+YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
+NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
+0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
-SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
-MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
-m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
-ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
-eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
-3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
-ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
-AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
-BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
-hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
-AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
-aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
-H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq
+SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD
+VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
+HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMzExMTE0NTRa
+Fw0yNTEyMjkxMTE0NTRaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
+bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg
+cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu
+ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD
+QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp
+bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP
+aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpOZZJ
+iHAzKHzoV9xIki3eLXp56UjxFehnY+c+Dh1nUiVO0t//vmGMP6B2LTFfx9FBKRBi
+kYcW7raIcSDi62Or0sAG5UUgG4ruGLE7XtCnnx4xjgbFZ4tTjdgi5Wh9GVhfP7Oo
+9ahi8Eqao+alFbhvB6LD3xZZqM2j9cmD8GzYAQIDAQABo4IESzCCBEcwHQYDVR0O
+BBYEFAeUqHBsCqTumbhV3S5MRXf2Nq+5MIIBTgYDVR0jBIIBRTCCAUGAFAeUqHBs
+CqTumbhV3S5MRXf2Nq+5oYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
+CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ
+bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt
+YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD
+aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT
+IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
+BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
+CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB
+BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
+EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBD
+BglghkgBhvhCAQ0ENhY0Q2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
+aHR0cHM6Ly93d3cuaXBzLmVzLzAqBglghkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvMDgGCWCGSAGG+EIBBAQrFilodHRwczovL3d3dy5pcHMu
+ZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA9BglghkgBhvhCAQMEMBYuaHR0cHM6
+Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2b2NhdGlvbkNBQy5odG1sPzA6BglghkgB
+hvhCAQcELRYraHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENBQy5o
+dG1sPzA4BglghkgBhvhCAQgEKxYpaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIv
+cG9saWN5Q0FDLmh0bWwwbwYDVR0fBGgwZjAvoC2gK4YpaHR0cHM6Ly93d3cuaXBz
+LmVzL2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwM6AxoC+GLWh0dHBzOi8vd3d3YmFj
+ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAvBggrBgEFBQcBAQQjMCEw
+HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
+gYEATiRvY2nro9B6QNgTOgojWSrXMKpXHa6hLRxL2GZPEFg059x2ERs3pw7RlJJZ
+ctupZam06zvBnGfQL4ZhevXl6ST6RAAmOikuj8kbiFSgujjCJY1wv5/7zzgBWzdL
+NzqKC18p1T2KZa8B2qKfQCqzV/J3fgI/725+9ekqKNLiE5Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
+MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
+IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
+IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
+RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
+U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
+IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
+ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
+QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
+rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
+NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
+QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
+txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
+BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
+AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
+tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
+IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
+6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
+MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
+czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
+b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
+YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
+HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
+1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
+tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
+GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
+cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
+MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
+AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
+b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
+OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
+dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
+IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
+LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
+ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
+ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
+cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
+GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
+z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
+6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
+mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
+LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
+J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
+SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEUzCCAzugAwIBAgIDAOJDMA0GCSqGSIb3DQEBBQUAMIHPMQswCQYDVQQGEwJB
+VDGBizCBiAYDVQQKHoGAAEEALQBUAHIAdQBzAHQAIABHAGUAcwAuACAAZgD8AHIA
+IABTAGkAYwBoAGUAcgBoAGUAaQB0AHMAcwB5AHMAdABlAG0AZQAgAGkAbQAgAGUA
+bABlAGsAdAByAC4AIABEAGEAdABlAG4AdgBlAHIAawBlAGgAcgAgAEcAbQBiAEgx
+GDAWBgNVBAsTD0EtVHJ1c3QtUXVhbC0wMTEYMBYGA1UEAxMPQS1UcnVzdC1RdWFs
+LTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEzMDIzMDAwMFowgc8xCzAJBgNVBAYT
+AkFUMYGLMIGIBgNVBAoegYAAQQAtAFQAcgB1AHMAdAAgAEcAZQBzAC4AIABmAPwA
+cgAgAFMAaQBjAGgAZQByAGgAZQBpAHQAcwBzAHkAcwB0AGUAbQBlACAAaQBtACAA
+ZQBsAGUAawB0AHIALgAgAEQAYQB0AGUAbgB2AGUAcgBrAGUAaAByACAARwBtAGIA
+SDEYMBYGA1UECxMPQS1UcnVzdC1RdWFsLTAxMRgwFgYDVQQDEw9BLVRydXN0LVF1
+YWwtMDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCmhgdxIbxTGEOH
+fXGiewI3NFldAWKFWfLofO+5I1UbvA5avt7IgsGXz/tI/f5HGUbascI0i7xG0tqV
+lA5ctQgLRqxgxHtgTkMcqsAEYdsz3LZsCdXO1QrvEBGLTSABdxiL/gSWJ6z77CSw
+x7Xg02HwxPV82cjGkSF3ENGJntuIAAnRDWn/ORHjFatNRymoMbHaOEZXSGhf7Y5F
+rrHEqGyi9E6sv784De/T1aTvskn8cWeUmDzv//omiG/a/V9KQex/61XN8OthUQVn
+X+u/liL2NKx74I2C/GgHX5B0WkPNqsSOgmlvJ/cKuT0PveUgVFDAA0oYBgcE1KDM
+lBbN0kmPAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECEs8jB2F
+6W+tMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAIUusmJzMJRiQ
+8TAHrJAOelfuWoTGcqdIv7Tys/fNl2yF2fjvHT8J01aKialFVpbVeQ2XKb1O2bHO
+QYAKgsdZ2jZ/sdL2UVFRTHmidLu6PdgWCBRhJYQELQophO9QVvfhAA0TwbESYqTz
++nlI5Gr7CZe8f6HEmhJmCtUQsdQCufGglRh4T+tIGiNGcnyVEHZ93mSVepFr1VA2
+9CTRPteuGjA81jeAz9peYiFE1CXvxK9cJiv0BcALFLWmADCoRLzIRZhA+sAwYUmw
+M1rqVCPA3kBQvIC95tyQvNy2dG0Vs+O6PwLaNX/suSlElQ06X2l1VwMaYb4vZKFq
+N0bOhBXEVg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ
+cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ
+BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt
+VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D
+0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9
+ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G
+A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs
+aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I
+flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
+biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
+MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
+d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
+76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
+6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
+emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
+MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
+MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
+MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
+FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
+aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
+gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
+qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
+lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
+8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
+45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
+UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
+O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
+bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
+GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
+77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
+hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
+92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
+Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
+ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
+Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl
+MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe
+U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX
+DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy
+dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj
+YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV
+OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr
+zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM
+VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ
+hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO
+ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw
+awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs
+OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF
+coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc
+okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8
+t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy
+1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/
+SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDyzCCArOgAwIBAgIDAOJIMA0GCSqGSIb3DQEBBQUAMIGLMQswCQYDVQQGEwJB
+VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp
+bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1
+YWwtMDIxGDAWBgNVBAMMD0EtVHJ1c3QtUXVhbC0wMjAeFw0wNDEyMDIyMzAwMDBa
+Fw0xNDEyMDIyMzAwMDBaMIGLMQswCQYDVQQGEwJBVDFIMEYGA1UECgw/QS1UcnVz
+dCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
+a2VociBHbWJIMRgwFgYDVQQLDA9BLVRydXN0LVF1YWwtMDIxGDAWBgNVBAMMD0Et
+VHJ1c3QtUXVhbC0wMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJaR
+q9eOsFm4Ab20Hq2Z/aH86gyWa48uSUjY6eQkguHYuszr3gdcSMYZggFHQgnhfLmf
+ro/27l5rqKhWiDhWs+b+yZ1PNDhRPJy+86ycHMg9XJqErveULBSyZDdgjhSwOyrN
+ibUir/fkf+4sKzP5jjytTKJXD/uCxY4fAd9TjMEVpN3umpIS0ijpYhclYDHvzzGU
+833z5Dwhq5D8bc9jp8YSAHFJ1xzIoO1jmn3jjyjdYPnY5harJtHQL73nDQnfbtTs
+5ThT9GQLulrMgLU4WeyAWWWEMWpfVZFMJOUkmoOEer6A8e5fIAeqdxdsC+JVqpZ4
+CAKel/Arrlj1gFA//jsCAwEAAaM2MDQwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4E
+CgQIQj0rJKbBRc4wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBG
+yxFjUA2bPkXUSC2SfJ29tmrbiLKal+g6a9M8Xwd+Ejo+oYkNP6F4GfeDtAXpm7xb
+9Ly8lhdbHcpRhzCUQHJ1tBCiGdLgmhSx7TXjhhanKOdDgkdsC1T+++piuuYL72TD
+gUy2Sb1GHlJ1Nc6rvB4fpxSDAOHqGpUq9LWsc3tFkXqRqmQVtqtR77npKIFBioc6
+2jTBwDMPX3hDJDR1DSPc6BnZliaNw2IHdiMQ0mBoYeRnFdq+TyDKsjmJOOQPLzzL
+/saaw6F891+gBjLFEFquDyR73lAPJS279R3csi8WWk4ZYUC/1V8H3Ktip/J6ac8e
+qhLCbmJ81Lo92JGHz/ot
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXzCCA0egAwIBAgIBATANBgkqhkiG9w0BAQUFADCB0DELMAkGA1UEBhMCRVMx
+SDBGBgNVBAoTP0laRU5QRSBTLkEuIC0gQ0lGIEEtMDEzMzcyNjAtUk1lcmMuVml0
+b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFCMEAGA1UEBxM5QXZkYSBkZWwgTWVk
+aXRlcnJhbmVvIEV0b3JiaWRlYSAzIC0gMDEwMTAgVml0b3JpYS1HYXN0ZWl6MRMw
+EQYDVQQDEwpJemVucGUuY29tMR4wHAYJKoZIhvcNAQkBFg9JbmZvQGl6ZW5wZS5j
+b20wHhcNMDMwMTMwMjMwMDAwWhcNMTgwMTMwMjMwMDAwWjCB0DELMAkGA1UEBhMC
+RVMxSDBGBgNVBAoTP0laRU5QRSBTLkEuIC0gQ0lGIEEtMDEzMzcyNjAtUk1lcmMu
+Vml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFCMEAGA1UEBxM5QXZkYSBkZWwg
+TWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAzIC0gMDEwMTAgVml0b3JpYS1HYXN0ZWl6
+MRMwEQYDVQQDEwpJemVucGUuY29tMR4wHAYJKoZIhvcNAQkBFg9JbmZvQGl6ZW5w
+ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1btoCXXhp3xIW
+D+Bxl8nUCxkyiazWfpt0e68t+Qt9+lZjKZSdEw2Omj4qvr+ovRmDXO3iWpWVOWDl
+3JHJjAzFCe8ZEBNDH+QNYwZHmPBaMYFOYFdbAFVHWvys152C308hcFJ6xWWGmjvl
+2eMiEl9P2nR2LWue368DCu+ak7j3gjAXaCOdP1a7Bfr+RW3X2SC5R4Xyp8iHlL5J
+PHJD/WBkLrezwzQPdACw8m9EG7q9kUwlNpL32mROujS3ZkT6mQTzJieLiE3X04s0
+uIUqVkk5MhjcHFf7al0N5CzjtTcnXYJKN2Z9EDVskk4olAdGi46eSoZXbjUOP5gk
+Ej6wVZAXAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MB0GA1UdDgQWBBTqVk/sPIOhFIh4gbIrBSLAB0FbQjANBgkqhkiG9w0BAQUFAAOC
+AQEAYp7mEzzhw6o5Hf5+T5kcI+t4BJyiIWy7vHlLs/G8dLYXO81aN/Mzg928eMTR
+TxxYZL8dd9uwsJ50TVfX6L0R4Dyw6wikh3fHRrat9ufXi63j5K91Ysr7aXqnF38d
+iAgHYkrwC3kuxHBb9C0KBz6h8Q45/KCyN7d37wWAq38yyhPDlaOvyoE6bdUuK5hT
+m5EYA5JmPyrhQ1moDOyueWBAjxzMEMj+OAY1H90cLv6wszsqerxRrdTOHBdv7MjB
+EIpvEEQkXUxVXAzFuuT6m2t91Lfnwfl/IvljHaVC7DlyyhRYHD6D4Rx+4QKp4tWL
+vpw6LkI+gKNJ/YdMCsRZQzEEFA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
+MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
+YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
+MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
+ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
+MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
+ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
+PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
+wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
+EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
+avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
+sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
+/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
+IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
+OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
+TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
+dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
+ReYNnyicsbkqWletNw+vHX/bvZ8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
+EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
+OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
+dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
+SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
+gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
+iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
+Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
+BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
+SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
+b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
+bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
+Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
+aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
+IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
+c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
+biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
+ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
+UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
+YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
+dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
+bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
+sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
+n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
+NitjrFgBazMpUIaD8QFI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICZzCCAdCgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY
+MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
+A1BLSTEcMBoGA1UEAxMTRG9EIENMQVNTIDMgUm9vdCBDQTAeFw0wMDA1MTkxMzEz
+MDBaFw0yMDA1MTQxMzEzMDBaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu
+IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD
+ExNEb0QgQ0xBU1MgMyBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC1MP5kvurMbe2BLPd/6Rm6DmlqKOGpqcuVWB/x5pppU+CIP5HFUbljl6jmIYwT
+XjY8qFf6+HAsTGrLvzCnTBbkMlz4ErBR+BZXjS+0TfouqJToKmHUVw1Hzm4sL36Y
+Z8wACKu2lhY1woWR5VugCsdmUmLzYXWVF668KlYppeArUwIDAQABoy8wLTAdBgNV
+HQ4EFgQUbJyl8FyPbUGNxBc7kFfCD6PNbf4wDAYDVR0TBAUwAwEB/zANBgkqhkiG
+9w0BAQUFAAOBgQCvcUT5lyPMaGmMQwdBuoggsyIAQciYoFUczT9usZNcrfoYmrsc
+c2/9JEKPh59Rz76Gn+nXikhPCNlplKw/5g8tlw8ok3ZPYt//oM1h+KaGDDE0INx/
+L6j7Ob6V7jhZAmLB3mwVT+DfnbvkeXMk/WNklfdKqJkfSGWVx3u/eDLneg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgIQNhIilsXjOKUgodJfTNcJVDANBgkqhkiG9w0BAQUFADCB
+zjELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
+CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhh
+d3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl
+cnZlckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIxMDEwMTIzNTk1OVow
+gc4xCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcT
+CUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNV
+BAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRo
+YXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1z
+ZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
+aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560
+ZXUCTe/LCaIhUdib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j
++ao6hnO2RlNYyIkFvYMRuHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/
+BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBlkKyID1bZ5jA01CbH0FDxkt5r1DmI
+CSLGpmODA/eZd9iy5Ri4XWPz1HP7bJyZePFLeH0ZJMMrAoT4vCLZiiLXoPxx7JGH
+IPG47LHlVYCsPVLIOQ7C8MAFT9aCdYy9X9LcdpoFEsmvcsPcJX6kTY4XpeCHf+Ga
+WuFg3GQjPEIuTQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
+MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
+isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
+78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
+zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
+BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
+Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
+T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
+mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx
+MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg
+R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD
+VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR
+JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T
+fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu
+jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z
+wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ
+fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD
+VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G
+CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1
+7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn
+8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs
+ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
+ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/
+2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
-MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMzU5WhcNMjUxMjI5
+MTEyMzU5WjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
-G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
-VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
-6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
-2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMFh+lWUEmnBK5F6da6IALvvPO6f
+MWYw9LFAmwJsjcdKTVElPugUKLwgPLHxjO19kdmXIqPVzGOxq9krIwvdppffBYRU
+Fro6y8xja40gpdaeBXFGdVj19mR7C2adPoeVPTy1OTdSVLsWF8W/rdiLMy/p+PrV
+gTP/t56Fpu9MOeDjAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQU/J6FGtwGJXEh8C+L
+ElXQxYDuBq4wggFGBgNVHSMEggE9MIIBOYAU/J6FGtwGJXEh8C+LElXQxYDuBq6h
ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
@@ -1060,21 +1878,456 @@ AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
-2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
-3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
-AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMyBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg
+hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG
++EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB
+My5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
+L3Jldm9jYXRpb25DTEFTRUEzLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMy5odG1sPzA8BglghkgB
+hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB
+My5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy
+MDAyL2lwczIwMDJDTEFTRUEzLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw
+cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUEzLmNybDAvBggrBgEFBQcBAQQjMCEw
+HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
+gYEAGG8JN0Ca0pQR0X/Lg33qtKfi2JPe2iRqdRswDoL3CTn+bRN20V/wbKDAwyxc
+7eJOroysytPkEF4wZhipaKCjaWJROZGCeU1jM7mZe9pQPzeofT//VLi8zKaUA4lZ
+BvYI44gntZQoaFxJna5NHHde+mbbPYlHb8c6g0mf9S3tODs=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDXTCCAkWgAwIBAgIDAOJCMA0GCSqGSIb3DQEBBQUAMFUxCzAJBgNVBAYTAkFU
+MRAwDgYDVQQKEwdBLVRydXN0MRkwFwYDVQQLExBBLVRydXN0LW5RdWFsLTAxMRkw
+FwYDVQQDExBBLVRydXN0LW5RdWFsLTAxMB4XDTA0MTEzMDIzMDAwMFoXDTE0MTEz
+MDIzMDAwMFowVTELMAkGA1UEBhMCQVQxEDAOBgNVBAoTB0EtVHJ1c3QxGTAXBgNV
+BAsTEEEtVHJ1c3QtblF1YWwtMDExGTAXBgNVBAMTEEEtVHJ1c3QtblF1YWwtMDEw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD/9RyAEZ6eHmhYzNJ328f0
+jmdSUFi6EqRqOxb3jHNPTIpK82CR6z5lmSnZQNUuCPD+htbNZffd2DKVB06NOyZ1
+2zcOMCgj4GtkZoqE0zPpPT3bpoE55nkZZe/qWEX/64wz/L/4EdkvKDSKG/UsP75M
+tmCVY5m2Eg73RVFRz4ccBIMpHel4lzEqSkdDtZOY5fnkrE333hx67nxq21vY8Eyf
+8O4fPQ5RtN8eohQCcPQ1z6ypU1R7N9jPRpnI+yzMOiwd3+QcKhHi1miCzo0pkOaB
+1CwmfsTyNl8qU0NJUL9Ta6cea7WThwTiWol2yD88cd2cy388xpbNkfrCPmZNGLoV
+AgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECE5ZzscCMocwMA4G
+A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEA69I9R1hU9Gbl9vV7W7AH
+QpUJAlFAvv2It/eY8p2ouQUPVaSZikaKtAYrCD/arzfXB43Qet+dM6CpHsn8ikYR
+vQKePjXv3Evf+C1bxwJAimcnZV6W+bNOTpdo8lXljxkmfN+Z5S+XzvK2ttUtP4Et
+YOVaxHw2mPMNbvDeY+foJkiBn3KYjGabMaR8moZqof5ofj4iS/WyamTZti6v/fKx
+n1vII+/uWkcxV5DT5+r9HLon0NYF0Vg317Wh+gWDV59VZo+dcwJDb+keYqMFYoqp
+77SGkZGu41S8NGYkQY3X9rNHRkDbLfpKYDmy6NanpOE1EHW1/sNSFAs43qZZKJEQ
+xg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDMDCCApmgAwIBAgIQDY4VEuGsu3eNOOMk34ww8jANBgkqhkiG9w0BAQUFADCB
+yzELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3Rl
+IFBlcnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNp
+Y0B0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIxMDEwMTIzNTk1OVowgcsx
+CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNh
+cGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0Nl
+cnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQ
+ZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNA
+dGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+C
+FeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeV
+oQxN2jSQHReJl+A1OFdKwPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlW
+Cy4cgNrx454p7xS9CkT7G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB
+/zANBgkqhkiG9w0BAQUFAAOBgQCIO/64+XpCRhGgpKJkhc1IHJzVilHNL8F9sQfP
+1wHeMj+W5IT+0V6tDH4OY0lqDhDkl9A/xacp2aZTHkseP1T6wIQ1c+qRqdxdk1cF
+BgwHua8LRDmIIaDugnOpRi9pbCV0qc3fp9f9hTAElDVKpxszJCxEFu0KxN+AqmUa
+v3Em8A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs
+ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw
+MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj
+aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp
+Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg
+nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1
+HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N
+Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN
+dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0
+HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
+BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G
+CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU
+sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3
+4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg
+8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1
+mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
+MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
+Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
+iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
+5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
+BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
+MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
+ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
+dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
+MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
+MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
+fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
+AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
+hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
+GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
+zmVml64mXg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
+bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
+j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
+Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
+MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
+fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
++DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
+QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
+BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
+EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
+b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
+djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
+EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
+9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
+F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
+eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
+Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
+k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
+ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
+dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
+txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
+VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
+QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
+S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
+mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
+qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
+TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
+1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
+NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
+VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
+bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
+H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
+4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
+BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
+EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
+FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
+lA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
+b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
+iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
+r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
+04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
+GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
+3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
+lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
+MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
+dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
+WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
+VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
+9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
+DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
+Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
+QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
+xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
+A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
+kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
+Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
+Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
+JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
+RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID2TCCAsGgAwIBAgIDAjbQMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMTAwMjE5MjIzOTI2WhcNMjAwMjE4MjIzOTI2WjBAMQswCQYDVQQG
+EwJVUzEXMBUGA1UEChMOR2VvVHJ1c3QsIEluYy4xGDAWBgNVBAMTD0dlb1RydXN0
+IFNTTCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJCzgMHk5Uat
+cGA9uuUU3Z6KXot1WubKbUGlI+g5hSZ6p1V3mkihkn46HhrxJ6ujTDnMyz1Hr4Gu
+FmpcN+9FQf37mpc8oEOdxt8XIdGKolbCA0mEEoE+yQpUYGa5jFTk+eb5lPHgX3UR
+8im55IaisYmtph6DKWOy8FQchQt65+EuDa+kvc3nsVrXjAVaDktzKIt1XTTYdwvh
+dGLicTBi2LyKBeUxY0pUiWozeKdOVSQdl+8a5BLGDzAYtDRN4dgjOyFbLTAZJQ50
+96QhS6CkIMlszZhWwPKoXz4mdaAN+DaIiixafWcwqQ/RmXAueOFRJq9VeiS+jDkN
+d53eAsMMvR8CAwEAAaOB2TCB1jAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFEJ5
+VBthzVUrPmPVPEhX9Z/7Rc5KMB8GA1UdIwQYMBaAFMB6mGiNifurBWQMEX2qfWW4
+ysxOMBIGA1UdEwEB/wQIMAYBAf8CAQAwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDov
+L2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwNAYIKwYBBQUHAQEE
+KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5nZW90cnVzdC5jb20wDQYJKoZI
+hvcNAQEFBQADggEBANTvU4ToGr2hiwTAqfVfoRB4RV2yV2pOJMtlTjGXkZrUJPji
+J2ZwMZzBYlQG55cdOprApClICq8kx6jEmlTBfEx4TCtoLF0XplR4TEbigMMfOHES
+0tdT41SFULgCy+5jOvhWiU1Vuy7AyBh3hjELC3DwfjWDpCoTZFZnNF0WX3OsewYk
+2k9QbSqr0E1TQcKOu3EDSSmGGM8hQkx0YlEVxW+o78Qn5Rsz3VqI138S0adhJR/V
+4NwdzxoQ2KDLX4z6DOW/cf/lXUQdpj6HR/oaToODEj+IZpWYeZqF6wJHzSXj8gYE
+TpnKXKBuervdo5AaRTPvvz7SBMS24CqFZUE+ENQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdjCCAl6gAwIBAgIEOhsEBTANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJE
+SzEMMAoGA1UEChMDS01EMQ8wDQYDVQQLEwZLTUQtQ0ExIzAhBgNVBAMTGktNRC1D
+QSBLdmFsaWZpY2VyZXQgUGVyc29uMB4XDTAwMTEyMTIzMjQ1OVoXDTE1MTEyMjIz
+MjQ1OVowUTELMAkGA1UEBhMCREsxDDAKBgNVBAoTA0tNRDEPMA0GA1UECxMGS01E
+LUNBMSMwIQYDVQQDExpLTUQtQ0EgS3ZhbGlmaWNlcmV0IFBlcnNvbjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBANriF4Xd6yD7ZlBE317UBDObn+vRMVc6
+p3wNQODdEDJe2z1ncCz9NJvhoLGdOJhyg7VVPh0P2c+KZ9WI9mWOKZI2bp2WkLju
+jCcxbhTrurY3Wfc6gwLBqqFV8wWgaZKmvVWizjw9Kyi25f3yX4fOho6Qq2lvVbub
+tvVFXAd51GJ+/2Yed+a4Or2bz2RcqHS81B3pywsD4mgJR5xREv5jqPfwNP+V7bkc
+X+pfO4kVhZ/V+8MSPdQHgcV/iB3wP2mwgWyIBNc1reBidGTiz8unnWu55hcNfsvt
+LJbTs9OHhsR7naRuy+S402nDnD5vnONOFEsiHn46w+T0rtu7h6j4OvkCAwEAAaNW
+MFQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUeWLqmhI42Jxj7DifDsW+
+DlQhKD0wHwYDVR0jBBgwFoAUeWLqmhI42Jxj7DifDsW+DlQhKD0wDQYJKoZIhvcN
+AQEFBQADggEBANML/P42OuJ9aUV/0fItuIyc1JhqWvSqn5bXj+9eyEegcp8bHLHY
+42D1O+z0lNipdjYPSdMJ0wZOEUhr+150SdDQ1P/zQL8AUaLEBkRt7ZdzXPVH3PER
+qnf9IrpYBknZKfCAoVchA6Rr9WU3Sd8bMoRfMLKg8c0M8G6EPwCTcOFriSkbtvNG
+zd8r8I+WfUYIN/p8DI9JT9qfjVODnYPRMUm6KPvq27TsrGruKrqyaV94kWc8co8A
+v3zFLeCtghvUiRBdx+8Q7m5t4CkuSr0WINrqjIPFW2QrM1r82y09Fd16RkqL4LOg
+Lh6vB5KnTApv62rWdw7zWwYnjY6/vXYY1Aw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
+BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
+cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
+4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
+Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
+0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
+FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
+bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
+SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
+6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
+m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
+eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
+kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
+6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
+CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
+aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
+gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
+aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
+tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
+nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
+77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
+Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
+ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
+zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
+rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
+YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
+oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
+FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
+0m6lG5kngOcLqagA
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF8DCCA9igAwIBAgIPBuhGJy8fCo/RhFzjafbVMA0GCSqGSIb3DQEBBQUAMDgx
+CzAJBgNVBAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXpl
+bnBlLmNvbTAeFw0wNzEyMTMxMzA4MjdaFw0zNzEyMTMwODI3MjVaMDgxCzAJBgNV
+BAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXplbnBlLmNv
+bTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMnTesoPHqynhugWZWqx
+whtFMnGV2f4QW8yv56V5AY+Jw8ryVXH3d753lPNypCxE2J6SmxQ6oeckkAoKVo7F
+2CaU4dlI4S0+2gpy3aOZFdqBoof0e24md4lYrdbrDLJBenNubdt6eEHpCIgSfocu
+ZhFjbFT7PJ1ywLwu/8K33Q124zrX97RovqL144FuwUZvXY3gTcZUVYkaMzEKsVe5
+o4qYw+w7NMWVQWl+dcI8IMVhulFHoCCQk6GQS/NOfIVFVJrRBSZBsLVNHTO+xAPI
+JXzBcNs79AktVCdIrC/hxKw+yMuSTFM5NyPs0wH54AlETU1kwOENWocivK0bo/4m
+tRXzp/yEGensoYi0RGmEg/OJ0XQGqcwL1sLeJ4VQJsoXuMl6h1YsGgEebL4TrRCs
+tST1OJGh1kva8bvS3ke18byB9llrzxlT6Y0Vy0rLqW9E5RtBz+GGp8rQap+8TI0G
+M1qiheWQNaBiXBZO8OOi+gMatCxxs1gs3nsL2xoP694hHwZ3BgOwye+Z/MC5TwuG
+KP7Suerj2qXDR2kS4Nvw9hmL7Xtw1wLW7YcYKCwEJEx35EiKGsY7mtQPyvp10gFA
+Wo15v4vPS8+qFsGV5K1Mij4XkdSxYuWC5YAEpAN+jb/af6IPl08M0w3719Hlcn4c
+yHf/W5oPt64FRuXxqBbsR6QXAgMBAAGjgfYwgfMwgbAGA1UdEQSBqDCBpYEPaW5m
+b0BpemVucGUuY29tpIGRMIGOMUcwRQYDVQQKDD5JWkVOUEUgUy5BLiAtIENJRiBB
+MDEzMzcyNjAtUk1lcmMuVml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFDMEEG
+A1UECQw6QXZkYSBkZWwgTWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAxNCAtIDAxMDEw
+IFZpdG9yaWEtR2FzdGVpejAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUHRxlDqjyJXu0kc/ksbHmvVV0bAUwDQYJKoZIhvcNAQEFBQAD
+ggIBAMeBRm8hGE+gBe/n1bqXUKJg7aWSFBpSm/nxiEqg3Hh10dUflU7F57dp5iL0
++CmoKom+z892j+Mxc50m0xwbRxYpB2iEitL7sRskPtKYGCwkjq/2e+pEFhsqxPqg
+l+nqbFik73WrAGLRne0TNtsiC7bw0fRue0aHwp28vb5CO7dz0JoqPLRbEhYArxk5
+ja2DUBzIgU+9Ag89njWW7u/kwgN8KRwCfr00J16vU9adF79XbOnQgxCvv11N75B7
+XSus7Op9ACYXzAJcY9cZGKfsK8eKPlgOiofmg59OsjQerFQJTx0CCzl+gQgVuaBp
+E8gyK+OtbBPWg50jLbJtooiGfqgNASYJQNntKE6MkyQP2/EeTXp6WuKlWPHcj1+Z
+ggwuz7LdmMySlD/5CbOlliVbN/UShUHiGUzGigjB3Bh6Dx4/glmimj4/+eAJn/3B
+kUtdyXvWton83x18hqrNA/ILUpLxYm9/h+qrdslsUMIZgq+qHfUgKGgu1fxkN0/P
+pUTEvnK0jHS0bKf68r10OEMr3q/53NjgnZ/cPcqlY0S/kqJPTIAcuxrDmkoEVU3K
+7iYLHL8CxWTTnn7S05EcS6L1HOUXHA0MUqORH5zwIe0ClG+poEnK6EOMxPQ02nwi
+o8ZmPrgbBYhdurz3vOXcFD2nhqi2WVIhA16L4wTtSyoeo09Q
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICsDCCAhmgAwIBAgIQZ8jh6OO+HL38kTuOpiOHSTANBgkqhkiG9w0BAQUFADCB
+izELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxML
+RHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENl
+cnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcN
+OTcwMTAxMDAwMDAwWhcNMjEwMTAxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTAT
+BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNV
+BAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNV
+BAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
+MIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u
+6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522
+FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzAR
+MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS+mqF4EF+3kKMZ/F
+QfRWVKvpwuWXjhj+kckMPiZkyaFMJ2SnvQGTVXFuF0853BvcSTUQOSP/ypvIz2Y/
+3Ewa1IEGQlIf4SaxFhe65nByMUToTo1b5NP50OOPJWQx5yr4GIg2GlLFDUE1G2m3
+JvUXzMEZXkt8XOKDgJH6L/uatxY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtDCCApygAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJKUDEc
+MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEOMAwGA1UECxMFTVBIUFQxJjAk
+BgNVBAsTHU1QSFBUIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMDMxNDA3
+NTAyNloXDTEyMDMxMzE0NTk1OVowYzELMAkGA1UEBhMCSlAxHDAaBgNVBAoTE0ph
+cGFuZXNlIEdvdmVybm1lbnQxDjAMBgNVBAsTBU1QSFBUMSYwJAYDVQQLEx1NUEhQ
+VCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAI3GUWlK9G9FVm8DhpKu5t37oxZbj6lZcFvEZY07YrYojWO657ub
+z56WE7q/PI/6Sm7i7qYE+Vp80r6thJvfmn7SS3BENrRqiapSenhooYD12jIe3iZQ
+2SXqx7WgYwyBGdQwGaYTijzbRFpgc0K8o4a99fIoHhz9J8AKqXasddMCqfJRaH30
+YJ7HnOvRYGL6HBrGhJ7X4Rzijyk9a9+3VOBsYcnIlx9iODoiYhA6r0ojuIu8/JA1
+oTTZrS0MyU/SLdFdJze2O1wnqTULXQybzJz3ad6oC/F5a69c0m92akYd9nGBrPxj
+EhucaQynC/QoCLs3aciLgioAnEJqy7i3EgUCAwEAAaNzMHEwHwYDVR0jBBgwFoAU
+YML3pLoA0h93Yngl8Gb/UgAh73owHQYDVR0OBBYEFGDC96S6ANIfd2J4JfBm/1IA
+Ie96MAwGA1UdEwQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQE
+AwIABTANBgkqhkiG9w0BAQUFAAOCAQEANPR8DN66iWZBs/lSm1vOzhqRkXDLT6xL
+LvJtjPLqmE469szGyFSKzsof6y+/8YgZlOoeX1inF4ox/SH1ATnwdIIsPbXuRLjt
+axboXvBh5y2ffC3hmzJVvJ87tb6mVWQeL9VFUhNhAI0ib+9OIZVEYI/64MFkDk4e
+iWG5ts6oqIJH1V7dVZg6pQ1Tc0Ckhn6N1m1hD30S0/zoPn/20Wq6OCF3he8VJrRG
+dcW9BD/Bkesko1HKhMBDjHVrJ8cFwbnDSoo+Ki47eJWaz/cOzaSsaMVUsR5POava
+/abhhgHn/eOJdXiVslyK0DYscjsdB3aBUfwZlomxYOzG6CgjQPhJdw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
+QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG
+A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
+BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln
+bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo
+VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs
+Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI
+iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD
+VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0
+oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey
+LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF
+BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi
+UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg
+T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0
+b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS
+C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw
+CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt
+iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M
+eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71
+iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp
+ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
+hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
+MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
+cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
+Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
+0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
+wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
+7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
+8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
+BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
+JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
+6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
+3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
+D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
+CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
@@ -1123,112 +2376,169 @@ hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3
3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
+MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD
+b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv
+b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx
+MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl
+ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0
+aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
+eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e
+eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq
+wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV
+WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO
+2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+
+H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU
+yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
+MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH
+lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB
+MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj
+YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu
+Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl
+cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k
+IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp
+ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz
+aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu
+Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw
+bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG
+SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS
+9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y
+m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv
+Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961
+kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH
+CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy
+MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl
+ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm
+BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF
+5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv
+DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v
+zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT
+yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj
+dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh
+MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB
+Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI
+4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz
+dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY
+aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G
+DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
+CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH
+LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
+MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
+UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v
+U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN
+AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw
+MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD
+VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM
+BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m
+cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws
+ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx
+8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/
+s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c
+9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V
+pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+
+pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC
+aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y
+CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ
+6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG
+A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0
+MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF
+AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob
+sRQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
-MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
-isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
-78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
-zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
-BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
-Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
-T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
-mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
+MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
+U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
+NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
+ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
+ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
+DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
+8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
+X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
+K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
+1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
+A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
+zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
+YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
+bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
+L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
+eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
+VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
+WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
+pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
+13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
+U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
+F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
+oJ2daZH9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV
+BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X
+DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ
+BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4
+QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny
+gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw
+zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q
+130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2
+JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw
+ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT
+AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj
+AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG
+9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h
+bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc
+fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu
+HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w
+t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
+AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
+yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
+38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
+AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
+DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
+HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
@@ -1250,70 +2560,635 @@ kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
+IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
+NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
+SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
+IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
+7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
+m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
+xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
+YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
+JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
+I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
+kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
+EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
+Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
+gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
+rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
+1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
+h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
+yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
+7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
+RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
+ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
+M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
+my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
+AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
+9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
+hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
+fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
+dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
+NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
+VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
+vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
+BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
+IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
+NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
+y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
+0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
+E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe
+MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0
+ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw
+IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL
+SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH
+SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh
+ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X
+DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1
+TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ
+fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA
+sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU
+WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS
+nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH
+dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip
+NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC
+AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF
+MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB
+uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl
+PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP
+JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/
+gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2
+j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6
+5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB
+o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS
+/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z
+Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE
+W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D
+hNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF3zCCA8egAwIBAgIOGTMAAQACKBqaBLzyVUUwDQYJKoZIhvcNAQEFBQAwejEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV
+BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUGA1UEAxMeVEMgVHJ1
+c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMB4XDTA2MDMyMjE1NTgzNFoXDTMwMTIz
+MTIyNTk1OVowejELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVy
+IEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUG
+A1UEAxMeVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAi9R3azRs5TbYalxeOO781R15Azt7g2JEgk6I
+7d6D/+7MUGIFBZWZdpj2ufJf2AaRksL2LWYXH/1TA+iojWOpbuHWG4y8mLOLO9Tk
+Lsp9hUkmW3m4GotAnn+7yT9jLM/RWny6KCJBElpN+Rd3/IX9wkngKhh/6aAsnPlE
+/AxoOUL1JwW+jhV6YJ3wO8c85j4WvK923mq3ouGrRkXrjGV90ZfzlxElq1nroCLZ
+gt2Y7X7i+qBhCkoy3iwX921E6oFHWZdXNwM53V6CItQzuPomCba8OYgvURVOm8M7
+3xOCiN1LNPIz1pDp81PcNXzAw9l8eLPNcD+NauCjgUjkKa1juPD8KGQ7mbN9/pqd
+iPaZIgiRRxaJNXhdd6HPv0nh/SSUK2k2e+gc5iqQilvVOzRZQtxtz7sPQRxVzfUN
+Wy4WIibvYR6X/OJTyM9bo8ep8boOhhLLE8oVx+zkNo3aXBM9ZdIOXXB03L+PemrB
+Lg/Txl4PK1lszGFs/sBhTtnmT0ayWuIZFHCE+CAA7QGnl37DvRJckiMXoKUdRRcV
+I5qSCLUiiI3cKyTr4LEXaNOvYb3ZhXj2jbp4yjeNY77nrB/fpUcJucglMVRGURFV
+DYlcjdrSGC1z8rjVJ/VIIjfRYvd7Dcg4i6FKsPzQ8eu3hmPn4A5zf/1yUbXpfeJV
+BWR4Z38CAwEAAaNjMGEwHwYDVR0jBBgwFoAUzdeQoW6jv9sw1toyJZAM5jkegGUw
+DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFM3XkKFu
+o7/bMNbaMiWQDOY5HoBlMA0GCSqGSIb3DQEBBQUAA4ICAQB+FojoEw42zG4qhQc4
+xlaJeuNHIWZMUAgxWlHQ/KZeFHXeTDvs8e3MfhEHSmHu6rOOOqQzxu2KQmZP8Tx7
+yaUFQZmx7Cxb7tyW0ohTS3g0uW7muw/FeqZ8Dhjfbw90TNGp8aHp2FRkzF6WeKJW
+GsFzshXGVwXf2vdIJIqOf2qp+U3pPmrOYCx9LZAI9mOPFdAtnIz/8f38DBZQVhT7
+upeG7rRJA1TuG1l/MDoCgoYhrv7wFfLfToPmmcW6NfcgkIw47XXP4S73BDD7Ua2O
+giRAyn0pXdXZ92Vk/KqfdLh9kl3ShCngE+qK99CrxK7vFcXCifJ7tjtJmGHzTnKR
+N4xJkunI7Cqg90lufA0kxmts8jgvynAF5X/fxisrgIDV2m/LQLvYG/AkyRDIRAJ+
+LtOYqqIN8SvQ2vqOHP9U6OFKbt2o1ni1N6WsZNUUI8cOpevhCTjXwHxgpV2Yj4wC
+1dxWqPNNWKkL1HxkdAEy8t8PSoqpAqKiHYR3wvHMl700GXRd4nQ+dSf3r7/ufA5t
+VIimVuImrTESPB5BeW0X6hNeH/Vcn0lZo7Ivo0LD+qh+v6WfSMlgYmIK371F3uNC
+tVGW/cT1Gpm4UqJEzS1hjBWPgdVdotSQPYxuQGHDWV3Y2eH2dEcieXR92sqjbzcV
+NvAsGnE8EXbfXRo+VGN4a2V+Hw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHqTCCBZGgAwIBAgIQYwaGp8U3ZaVDkKhqWMzUMjANBgkqhkiG9w0BAQUFADCB
+jzELMAkGA1UEBhMCTFYxNTAzBgNVBAoTLFZBUyBMYXR2aWphcyBQYXN0cyAtIFZp
+ZW4ucmVnLk5yLjQwMDAzMDUyNzkwMSMwIQYDVQQLExpTZXJ0aWZpa2FjaWphcyBw
+YWthbHBvanVtaTEkMCIGA1UEAxMbVkFTIExhdHZpamFzIFBhc3RzIFNTSShSQ0Ep
+MB4XDTA2MDkxMzA5MjIxMFoXDTI0MDkxMzA5Mjc1N1owgY8xCzAJBgNVBAYTAkxW
+MTUwMwYDVQQKEyxWQVMgTGF0dmlqYXMgUGFzdHMgLSBWaWVuLnJlZy5Oci40MDAw
+MzA1Mjc5MDEjMCEGA1UECxMaU2VydGlmaWthY2lqYXMgcGFrYWxwb2p1bWkxJDAi
+BgNVBAMTG1ZBUyBMYXR2aWphcyBQYXN0cyBTU0koUkNBKTCCAiIwDQYJKoZIhvcN
+AQEBBQADggIPADCCAgoCggIBAJu4+f1hVS9PpKUUtS6OuSSPrPuxVD9A/0/F5YZo
+e1OT+zWCNahQLpRSoNuDPnXaFXCsCc/ugkmtNkm5tHGLtAChQgbKCApjl7YI/O60
+3Jh4GYLJ+H9kPqrJ/rGN67Bk9bzzxD46kOpOjj8bGbxqg8ORPGxV+wpSwOjhXXeF
+M8VJ3+xqv79sN/6OSaIVGM6LjmseOKMwb4iBfnJWRBrEejkP9sSPltSy6wBOXN67
+5zu35iQFk2tN5pFEv+6YG8eFGxFBeyI2p74+6Ho33BjekJ2PzbLXmj/iF39bDOHv
+P2Y9biTksM7DDIhslNo4JXxSOeNzFLMARWOaDEJAXgTG93JkzsluM7Pk020klTeT
+fvIAXRmLH/NDc6ifRdIGqey0Qrv67gzHTz9RH9Gv0KwYf4eBIv6p3QeWbXz4TtlN
+OlBp1UF+xdp02I5z5X6D4cMZgbe9v0COvi6aogyqTgIuuyrhCF0xA8msJ7Cv3NXI
+FH1AnVWJIfmQzNTJYEFzq+jN2DpVOQqCmf6b9fU8HJHLwPpGVK4h/CqsXHveepdx
+/WxrzUiapNuBfBg3L5B9YZS9F8lctlQWd8oJSqrpvE+UdQFaVryS0o+515feVnQB
+9xZxSbH1GEaZQe5i4bMsZXVpKXJDA/ibH/o49J7sQBCOrJfVsDO+nxjcLfdBeFRK
+YkTnAgMBAAGjggH9MIIB+TAOBgNVHQ8BAf8EBAMCAQYwGAYIKwYBBQUHAQMEDDAK
+MAgGBgQAjkYBATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTMw/Vm/3OsOFqW
+GyGJuIFMH8teJTAQBgkrBgEEAYI3FQEEAwIBADCCAYkGA1UdIASCAYAwggF8MIIB
+eAYLKwYBBAGBxFkBAQIwggFnMIIBOAYIKwYBBQUHAgIwggEqHoIBJgBTAGkAcwAg
+AGkAcgAgAHMAZQByAHQAaQBmAGkAawBhAHQAcwAsACAAawBvACAAaQB6AGQAZQB2
+AGkAcwAgAFYAQQBTACAATABhAHQAdgBpAGoAYQBzACAAUABhAHMAdABzACwAIABu
+AG8AZAByAG8AcwBpAG4AbwB0ACAAYQB0AGIAaQBsAHMAdABpAGIAdQAgAEUAbABl
+AGsAdAByAG8AbgBpAHMAawBvACAAZABvAGsAdQBtAGUAbgB0AHUAIABsAGkAawB1
+AG0AYQBtACAAdQBuACAARQBpAHIAbwBwAGEAcwAgAFAAYQByAGwAYQBtAGUAbgB0
+AGEAIABkAGkAcgBlAGsAdABpAHYAYQBpACAAMQA5ADkAOQAvADkAMwAvAEUASzAp
+BggrBgEFBQcCARYdaHR0cDovL3d3dy5lLW1lLmx2L3JlcG9zaXRvcnkwDQYJKoZI
+hvcNAQEFBQADggIBAB8oSjWQIWNoCi94r6MegiaXoz8nGdJLo0J6BhNlW8EEy+t9
+fO+U8vGJ9bffUgIhadLqljTloM+XuJxVDhCFoxReLAX4tTp28/l6uN62DCdp8suU
+kQsdudWOb5kvzfIZVjk6SFbwAf+Cdbay/dHU9fJjV0xNoX7MELoEae/0FPyzlx9F
+7m9KKH/Rxie8x6Opa3vtghNvq94P+3HrXBEaqSzQMJ/8NjdW75XpurcTtq6fAmGt
+nuxrBG82nw+Z98LJyEwouSjUIdeeVNXAzvSO5FWUe48kxjj8q3qkVnc9qEXvZJKk
+0Ep+u3OL9A1Sc7g6SF5DgNOpcHdi/8coHHMeQ+YnJFtJueY2pI79xS0veqV5EnrX
+IbIlbcgPosNhS+VI4le6n/KKId3bZPDaGd/OwJuAOcJ3d2MVU3KE+qSPBzeGIX1Q
++j1qN9uRDjez/c4Lynth0Jx0nH04aG3pex3W8Sq07ztgUncF5gLCX4xbvPB9t3PH
+kWuyKrNjozTVq60lcUf/Gj56to2VdsPups0DCWzuRWeYz5lIdsHOinSaaFIBNCLI
+7eIUC4S9bhCMsXKbvugI11fVf+q0AT1O5OLoZ+eMfunnQhHvlUbIkda+JxeAGTSY
+58bfHvwhX56GPbx+8Jy9cp70R4JbcWfz+txUTKhc2FnH0AcOEzMnvPRp8Gsh
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIIBhDCeat3PfIwDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UE
+BhMCQ0gxEjAQBgNVBAoTCVN3aXNzU2lnbjEyMDAGA1UEAxMpU3dpc3NTaWduIENB
+IChSU0EgSUsgTWF5IDYgMTk5OSAxODowMDo1OCkxHzAdBgkqhkiG9w0BCQEWEGNh
+QFN3aXNzU2lnbi5jb20wHhcNMDAxMTI2MjMyNzQxWhcNMzExMTI2MjMyNzQxWjB2
+MQswCQYDVQQGEwJDSDESMBAGA1UEChMJU3dpc3NTaWduMTIwMAYDVQQDEylTd2lz
+c1NpZ24gQ0EgKFJTQSBJSyBNYXkgNiAxOTk5IDE4OjAwOjU4KTEfMB0GCSqGSIb3
+DQEJARYQY2FAU3dpc3NTaWduLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKw5fjnmNneLQlUCQG8jQLwwfbrOZoUwNX8cbNqhxK03/xUloFVgAt+S
+Te2RxNXaCAXLBPn5ZST35TLV57aLmbHCtifv3YZqaaQGvjedltIBMJihJhZ+h3LY
+SKsUb+xEJ3x5ZUf8jP+Q1g57y1s8SnBFWN/ni5NkF1Y1y31VwOi9wiOf/VISL+uu
+SC4i1CP1Kbz3BDs6Hht1GpRYCbJ/K0bc9oJSpWpT5PGONsGIawqMbJuyoDghsXQ1
+pbn2e8K64BSscGZVZTNooSGgNiHmACNJBYXiWVWrwXPF4l6SddmC3Rj0aKXjgECc
+FkHLDQcsM5JsK2ZLryTDUsQFbxVP2ikCAwEAAaNHMEUwCwYDVR0PBAQDAgEGMAwG
+A1UdEwQFMAMBAf8wHQYDVR0OBBYEFJbXcc05KtT8iLGKq1N4ae+PR34WMAkGA1Ud
+IwQCMAAwDQYJKoZIhvcNAQEFBQADggEBAKMy6W8HvZdS1fBpEUzl6Lvw50bgE1Xc
+HU1JypSBG9mhdcXZo5AlPB4sCvx9Dmfwhyrdsshc0TP2V3Vh6eQqnEF5qB4lVziT
+Bko9mW6Ot+pPnwsy4SHpx3rw6jCYnOqfUcZjWqqqRrq/3P1waz+Mn4cLMVEg3Xaz
+qYov/khvSqS0JniwjRlo2H6f/1oVUKZvP+dUhpQepfZrOqMAWZW4otp6FolyQyeU
+NN6UCRNiUKl5vTijbKwUUwfER/1Vci3M1/O1QCfttQ4vRN4Buc0xqYtGL3cd5WiO
+vWzyhlTzAI6VUdNkQhhHJSAyTpj6dmXDRzrryoFGa2PjgESxz7XBaSI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
+MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
+Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
+iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
+/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
+jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
+HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
+sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
+gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
+KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
+AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
+URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
+H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
+I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
+iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
+kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
+IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
+EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
+VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
+dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
+E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
+D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
+4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
+lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
+bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
+o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
+MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
+LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
+BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
+AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
+j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
+KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
+2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
+mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+cp . `md5 -q .`.pem
+cp ./.pem `md5 -q ./.pem`.pem
+cp ./cert000.pem `md5 -q ./cert000.pem`.pem
+cp ./cert001.pem `md5 -q ./cert001.pem`.pem
+cp ./cert002.pem `md5 -q ./cert002.pem`.pem
+cp ./cert003.pem `md5 -q ./cert003.pem`.pem
+cp ./cert004.pem `md5 -q ./cert004.pem`.pem
+cp ./cert005.pem `md5 -q ./cert005.pem`.pem
+cp ./cert006.pem `md5 -q ./cert006.pem`.pem
+cp ./cert007.pem `md5 -q ./cert007.pem`.pem
+cp ./cert008.pem `md5 -q ./cert008.pem`.pem
+cp ./cert009.pem `md5 -q ./cert009.pem`.pem
+cp ./cert010.pem `md5 -q ./cert010.pem`.pem
+cp ./cert011.pem `md5 -q ./cert011.pem`.pem
+cp ./cert012.pem `md5 -q ./cert012.pem`.pem
+cp ./cert013.pem `md5 -q ./cert013.pem`.pem
+cp ./cert014.pem `md5 -q ./cert014.pem`.pem
+cp ./cert015.pem `md5 -q ./cert015.pem`.pem
+cp ./cert016.pem `md5 -q ./cert016.pem`.pem
+cp ./cert017.pem `md5 -q ./cert017.pem`.pem
+cp ./cert018.pem `md5 -q ./cert018.pem`.pem
+cp ./cert019.pem `md5 -q ./cert019.pem`.pem
+cp ./cert020.pem `md5 -q ./cert020.pem`.pem
+cp ./cert021.pem `md5 -q ./cert021.pem`.pem
+cp ./cert022.pem `md5 -q ./cert022.pem`.pem
+cp ./cert023.pem `md5 -q ./cert023.pem`.pem
+cp ./cert024.pem `md5 -q ./cert024.pem`.pem
+cp ./cert025.pem `md5 -q ./cert025.pem`.pem
+cp ./cert026.pem `md5 -q ./cert026.pem`.pem
+cp ./cert027.pem `md5 -q ./cert027.pem`.pem
+cp ./cert028.pem `md5 -q ./cert028.pem`.pem
+cp ./cert029.pem `md5 -q ./cert029.pem`.pem
+cp ./cert030.pem `md5 -q ./cert030.pem`.pem
+cp ./cert031.pem `md5 -q ./cert031.pem`.pem
+cp ./cert032.pem `md5 -q ./cert032.pem`.pem
+cp ./cert033.pem `md5 -q ./cert033.pem`.pem
+cp ./cert034.pem `md5 -q ./cert034.pem`.pem
+cp ./cert035.pem `md5 -q ./cert035.pem`.pem
+cp ./cert036.pem `md5 -q ./cert036.pem`.pem
+cp ./cert037.pem `md5 -q ./cert037.pem`.pem
+cp ./cert038.pem `md5 -q ./cert038.pem`.pem
+cp ./cert039.pem `md5 -q ./cert039.pem`.pem
+cp ./cert040.pem `md5 -q ./cert040.pem`.pem
+cp ./cert041.pem `md5 -q ./cert041.pem`.pem
+cp ./cert042.pem `md5 -q ./cert042.pem`.pem
+cp ./cert043.pem `md5 -q ./cert043.pem`.pem
+cp ./cert044.pem `md5 -q ./cert044.pem`.pem
+cp ./cert045.pem `md5 -q ./cert045.pem`.pem
+cp ./cert046.pem `md5 -q ./cert046.pem`.pem
+cp ./cert047.pem `md5 -q ./cert047.pem`.pem
+cp ./cert048.pem `md5 -q ./cert048.pem`.pem
+cp ./cert049.pem `md5 -q ./cert049.pem`.pem
+cp ./cert050.pem `md5 -q ./cert050.pem`.pem
+cp ./cert051.pem `md5 -q ./cert051.pem`.pem
+cp ./cert052.pem `md5 -q ./cert052.pem`.pem
+cp ./cert053.pem `md5 -q ./cert053.pem`.pem
+cp ./cert054.pem `md5 -q ./cert054.pem`.pem
+cp ./cert055.pem `md5 -q ./cert055.pem`.pem
+cp ./cert056.pem `md5 -q ./cert056.pem`.pem
+cp ./cert057.pem `md5 -q ./cert057.pem`.pem
+cp ./cert058.pem `md5 -q ./cert058.pem`.pem
+cp ./cert059.pem `md5 -q ./cert059.pem`.pem
+cp ./cert060.pem `md5 -q ./cert060.pem`.pem
+cp ./cert061.pem `md5 -q ./cert061.pem`.pem
+cp ./cert062.pem `md5 -q ./cert062.pem`.pem
+cp ./cert063.pem `md5 -q ./cert063.pem`.pem
+cp ./cert064.pem `md5 -q ./cert064.pem`.pem
+cp ./cert065.pem `md5 -q ./cert065.pem`.pem
+cp ./cert066.pem `md5 -q ./cert066.pem`.pem
+cp ./cert067.pem `md5 -q ./cert067.pem`.pem
+cp ./cert068.pem `md5 -q ./cert068.pem`.pem
+cp ./cert069.pem `md5 -q ./cert069.pem`.pem
+cp ./cert070.pem `md5 -q ./cert070.pem`.pem
+cp ./cert071.pem `md5 -q ./cert071.pem`.pem
+cp ./cert072.pem `md5 -q ./cert072.pem`.pem
+cp ./cert073.pem `md5 -q ./cert073.pem`.pem
+cp ./cert074.pem `md5 -q ./cert074.pem`.pem
+cp ./cert075.pem `md5 -q ./cert075.pem`.pem
+cp ./cert076.pem `md5 -q ./cert076.pem`.pem
+cp ./cert077.pem `md5 -q ./cert077.pem`.pem
+cp ./cert078.pem `md5 -q ./cert078.pem`.pem
+cp ./cert079.pem `md5 -q ./cert079.pem`.pem
+cp ./cert080.pem `md5 -q ./cert080.pem`.pem
+cp ./cert081.pem `md5 -q ./cert081.pem`.pem
+cp ./cert082.pem `md5 -q ./cert082.pem`.pem
+cp ./cert083.pem `md5 -q ./cert083.pem`.pem
+cp ./cert084.pem `md5 -q ./cert084.pem`.pem
+cp ./cert085.pem `md5 -q ./cert085.pem`.pem
+cp ./cert086.pem `md5 -q ./cert086.pem`.pem
+cp ./cert087.pem `md5 -q ./cert087.pem`.pem
+cp ./cert088.pem `md5 -q ./cert088.pem`.pem
+cp ./cert089.pem `md5 -q ./cert089.pem`.pem
+cp ./cert090.pem `md5 -q ./cert090.pem`.pem
+cp ./cert091.pem `md5 -q ./cert091.pem`.pem
+cp ./cert092.pem `md5 -q ./cert092.pem`.pem
+cp ./cert093.pem `md5 -q ./cert093.pem`.pem
+cp ./cert094.pem `md5 -q ./cert094.pem`.pem
+cp ./cert095.pem `md5 -q ./cert095.pem`.pem
+cp ./cert096.pem `md5 -q ./cert096.pem`.pem
+cp ./cert097.pem `md5 -q ./cert097.pem`.pem
+cp ./cert098.pem `md5 -q ./cert098.pem`.pem
+cp ./cert099.pem `md5 -q ./cert099.pem`.pem
+cp ./cert100.pem `md5 -q ./cert100.pem`.pem
+cp ./cert101.pem `md5 -q ./cert101.pem`.pem
+cp ./cert102.pem `md5 -q ./cert102.pem`.pem
+cp ./cert103.pem `md5 -q ./cert103.pem`.pem
+cp ./cert104.pem `md5 -q ./cert104.pem`.pem
+cp ./cert105.pem `md5 -q ./cert105.pem`.pem
+cp ./cert106.pem `md5 -q ./cert106.pem`.pem
+cp ./cert107.pem `md5 -q ./cert107.pem`.pem
+cp ./cert108.pem `md5 -q ./cert108.pem`.pem
+cp ./cert109.pem `md5 -q ./cert109.pem`.pem
+cp ./cert110.pem `md5 -q ./cert110.pem`.pem
+cp ./cert111.pem `md5 -q ./cert111.pem`.pem
+cp ./cert112.pem `md5 -q ./cert112.pem`.pem
+cp ./cert113.pem `md5 -q ./cert113.pem`.pem
+cp ./cert114.pem `md5 -q ./cert114.pem`.pem
+cp ./cert115.pem `md5 -q ./cert115.pem`.pem
+cp ./cert116.pem `md5 -q ./cert116.pem`.pem
+cp ./cert117.pem `md5 -q ./cert117.pem`.pem
+cp ./cert118.pem `md5 -q ./cert118.pem`.pem
+cp ./cert119.pem `md5 -q ./cert119.pem`.pem
+cp ./cert120.pem `md5 -q ./cert120.pem`.pem
+cp ./cert121.pem `md5 -q ./cert121.pem`.pem
+cp ./cert122.pem `md5 -q ./cert122.pem`.pem
+cp ./cert123.pem `md5 -q ./cert123.pem`.pem
+cp ./cert124.pem `md5 -q ./cert124.pem`.pem
+cp ./cert125.pem `md5 -q ./cert125.pem`.pem
+cp ./cert126.pem `md5 -q ./cert126.pem`.pem
+cp ./cert127.pem `md5 -q ./cert127.pem`.pem
+cp ./cert128.pem `md5 -q ./cert128.pem`.pem
+cp ./cert129.pem `md5 -q ./cert129.pem`.pem
+cp ./cert130.pem `md5 -q ./cert130.pem`.pem
+cp ./cert131.pem `md5 -q ./cert131.pem`.pem
+cp ./cert132.pem `md5 -q ./cert132.pem`.pem
+cp ./cert133.pem `md5 -q ./cert133.pem`.pem
+cp ./cert134.pem `md5 -q ./cert134.pem`.pem
+cp ./cert135.pem `md5 -q ./cert135.pem`.pem
+cp ./cert136.pem `md5 -q ./cert136.pem`.pem
+cp ./cert137.pem `md5 -q ./cert137.pem`.pem
+cp ./cert138.pem `md5 -q ./cert138.pem`.pem
+cp ./cert139.pem `md5 -q ./cert139.pem`.pem
+cp ./cert140.pem `md5 -q ./cert140.pem`.pem
+cp ./cert141.pem `md5 -q ./cert141.pem`.pem
+cp ./cert142.pem `md5 -q ./cert142.pem`.pem
+cp ./cert143.pem `md5 -q ./cert143.pem`.pem
+cp ./cert144.pem `md5 -q ./cert144.pem`.pem
+cp ./cert145.pem `md5 -q ./cert145.pem`.pem
+cp ./cert146.pem `md5 -q ./cert146.pem`.pem
+cp ./cert147.pem `md5 -q ./cert147.pem`.pem
+cp ./cert148.pem `md5 -q ./cert148.pem`.pem
+cp ./cert149.pem `md5 -q ./cert149.pem`.pem
+cp ./cert150.pem `md5 -q ./cert150.pem`.pem
+cp ./cert151.pem `md5 -q ./cert151.pem`.pem
+cp ./cert152.pem `md5 -q ./cert152.pem`.pem
+cp ./cert153.pem `md5 -q ./cert153.pem`.pem
+cp ./cert154.pem `md5 -q ./cert154.pem`.pem
+cp ./cert155.pem `md5 -q ./cert155.pem`.pem
+cp ./cert156.pem `md5 -q ./cert156.pem`.pem
+cp ./cert157.pem `md5 -q ./cert157.pem`.pem
+cp ./cert158.pem `md5 -q ./cert158.pem`.pem
+cp ./cert159.pem `md5 -q ./cert159.pem`.pem
+cp ./cert160.pem `md5 -q ./cert160.pem`.pem
+cp ./cert161.pem `md5 -q ./cert161.pem`.pem
+cp ./cert162.pem `md5 -q ./cert162.pem`.pem
+cp ./cert163.pem `md5 -q ./cert163.pem`.pem
+cp ./cert164.pem `md5 -q ./cert164.pem`.pem
+cp ./cert165.pem `md5 -q ./cert165.pem`.pem
+cp ./cert166.pem `md5 -q ./cert166.pem`.pem
+cp ./cert167.pem `md5 -q ./cert167.pem`.pem
+cp ./cert168.pem `md5 -q ./cert168.pem`.pem
+cp ./cert169.pem `md5 -q ./cert169.pem`.pem
+cp ./cert170.pem `md5 -q ./cert170.pem`.pem
+cp ./cert171.pem `md5 -q ./cert171.pem`.pem
+cp ./cert172.pem `md5 -q ./cert172.pem`.pem
+cp ./cert173.pem `md5 -q ./cert173.pem`.pem
+cp ./cert174.pem `md5 -q ./cert174.pem`.pem
+cp ./cert175.pem `md5 -q ./cert175.pem`.pem
+cp ./cert176.pem `md5 -q ./cert176.pem`.pem
+cp ./cert177.pem `md5 -q ./cert177.pem`.pem
+cp ./cert178.pem `md5 -q ./cert178.pem`.pem
+cp ./foo.sh `md5 -q ./foo.sh`.pem
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
+V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
+4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
+H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
+8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
+vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
+mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
+btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
+T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
+WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
+c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
+4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
+VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
+CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
+aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
+czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
+A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
+Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
+7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
+d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
+4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
+t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
+DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
+k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
+zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
+Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
+mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
+4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+cp . `md5 -q .`.pem
+cp ./cert000 `md5 -q ./cert000`.pem
+cp ./cert001 `md5 -q ./cert001`.pem
+cp ./cert002 `md5 -q ./cert002`.pem
+cp ./cert003 `md5 -q ./cert003`.pem
+cp ./cert004 `md5 -q ./cert004`.pem
+cp ./cert005 `md5 -q ./cert005`.pem
+cp ./cert006 `md5 -q ./cert006`.pem
+cp ./cert007 `md5 -q ./cert007`.pem
+cp ./cert008 `md5 -q ./cert008`.pem
+cp ./cert009 `md5 -q ./cert009`.pem
+cp ./cert010 `md5 -q ./cert010`.pem
+cp ./cert011 `md5 -q ./cert011`.pem
+cp ./cert012 `md5 -q ./cert012`.pem
+cp ./cert013 `md5 -q ./cert013`.pem
+cp ./cert014 `md5 -q ./cert014`.pem
+cp ./cert015 `md5 -q ./cert015`.pem
+cp ./cert016 `md5 -q ./cert016`.pem
+cp ./cert017 `md5 -q ./cert017`.pem
+cp ./cert018 `md5 -q ./cert018`.pem
+cp ./cert019 `md5 -q ./cert019`.pem
+cp ./cert020 `md5 -q ./cert020`.pem
+cp ./cert021 `md5 -q ./cert021`.pem
+cp ./cert022 `md5 -q ./cert022`.pem
+cp ./cert023 `md5 -q ./cert023`.pem
+cp ./cert024 `md5 -q ./cert024`.pem
+cp ./cert025 `md5 -q ./cert025`.pem
+cp ./cert026 `md5 -q ./cert026`.pem
+cp ./cert027 `md5 -q ./cert027`.pem
+cp ./cert028 `md5 -q ./cert028`.pem
+cp ./cert029 `md5 -q ./cert029`.pem
+cp ./cert030 `md5 -q ./cert030`.pem
+cp ./cert031 `md5 -q ./cert031`.pem
+cp ./cert032 `md5 -q ./cert032`.pem
+cp ./cert033 `md5 -q ./cert033`.pem
+cp ./cert034 `md5 -q ./cert034`.pem
+cp ./cert035 `md5 -q ./cert035`.pem
+cp ./cert036 `md5 -q ./cert036`.pem
+cp ./cert037 `md5 -q ./cert037`.pem
+cp ./cert038 `md5 -q ./cert038`.pem
+cp ./cert039 `md5 -q ./cert039`.pem
+cp ./cert040 `md5 -q ./cert040`.pem
+cp ./cert041 `md5 -q ./cert041`.pem
+cp ./cert042 `md5 -q ./cert042`.pem
+cp ./cert043 `md5 -q ./cert043`.pem
+cp ./cert044 `md5 -q ./cert044`.pem
+cp ./cert045 `md5 -q ./cert045`.pem
+cp ./cert046 `md5 -q ./cert046`.pem
+cp ./cert047 `md5 -q ./cert047`.pem
+cp ./cert048 `md5 -q ./cert048`.pem
+cp ./cert049 `md5 -q ./cert049`.pem
+cp ./cert050 `md5 -q ./cert050`.pem
+cp ./cert051 `md5 -q ./cert051`.pem
+cp ./cert052 `md5 -q ./cert052`.pem
+cp ./cert053 `md5 -q ./cert053`.pem
+cp ./cert054 `md5 -q ./cert054`.pem
+cp ./cert055 `md5 -q ./cert055`.pem
+cp ./cert056 `md5 -q ./cert056`.pem
+cp ./cert057 `md5 -q ./cert057`.pem
+cp ./cert058 `md5 -q ./cert058`.pem
+cp ./cert059 `md5 -q ./cert059`.pem
+cp ./cert060 `md5 -q ./cert060`.pem
+cp ./cert061 `md5 -q ./cert061`.pem
+cp ./cert062 `md5 -q ./cert062`.pem
+cp ./cert063 `md5 -q ./cert063`.pem
+cp ./cert064 `md5 -q ./cert064`.pem
+cp ./cert065 `md5 -q ./cert065`.pem
+cp ./cert066 `md5 -q ./cert066`.pem
+cp ./cert067 `md5 -q ./cert067`.pem
+cp ./cert068 `md5 -q ./cert068`.pem
+cp ./cert069 `md5 -q ./cert069`.pem
+cp ./cert070 `md5 -q ./cert070`.pem
+cp ./cert071 `md5 -q ./cert071`.pem
+cp ./cert072 `md5 -q ./cert072`.pem
+cp ./cert073 `md5 -q ./cert073`.pem
+cp ./cert074 `md5 -q ./cert074`.pem
+cp ./cert075 `md5 -q ./cert075`.pem
+cp ./cert076 `md5 -q ./cert076`.pem
+cp ./cert077 `md5 -q ./cert077`.pem
+cp ./cert078 `md5 -q ./cert078`.pem
+cp ./cert079 `md5 -q ./cert079`.pem
+cp ./cert080 `md5 -q ./cert080`.pem
+cp ./cert081 `md5 -q ./cert081`.pem
+cp ./cert082 `md5 -q ./cert082`.pem
+cp ./cert083 `md5 -q ./cert083`.pem
+cp ./cert084 `md5 -q ./cert084`.pem
+cp ./cert085 `md5 -q ./cert085`.pem
+cp ./cert086 `md5 -q ./cert086`.pem
+cp ./cert087 `md5 -q ./cert087`.pem
+cp ./cert088 `md5 -q ./cert088`.pem
+cp ./cert089 `md5 -q ./cert089`.pem
+cp ./cert090 `md5 -q ./cert090`.pem
+cp ./cert091 `md5 -q ./cert091`.pem
+cp ./cert092 `md5 -q ./cert092`.pem
+cp ./cert093 `md5 -q ./cert093`.pem
+cp ./cert094 `md5 -q ./cert094`.pem
+cp ./cert095 `md5 -q ./cert095`.pem
+cp ./cert096 `md5 -q ./cert096`.pem
+cp ./cert097 `md5 -q ./cert097`.pem
+cp ./cert098 `md5 -q ./cert098`.pem
+cp ./cert099 `md5 -q ./cert099`.pem
+cp ./cert100 `md5 -q ./cert100`.pem
+cp ./cert101 `md5 -q ./cert101`.pem
+cp ./cert102 `md5 -q ./cert102`.pem
+cp ./cert103 `md5 -q ./cert103`.pem
+cp ./cert104 `md5 -q ./cert104`.pem
+cp ./cert105 `md5 -q ./cert105`.pem
+cp ./cert106 `md5 -q ./cert106`.pem
+cp ./cert107 `md5 -q ./cert107`.pem
+cp ./cert108 `md5 -q ./cert108`.pem
+cp ./cert109 `md5 -q ./cert109`.pem
+cp ./cert110 `md5 -q ./cert110`.pem
+cp ./cert111 `md5 -q ./cert111`.pem
+cp ./cert112 `md5 -q ./cert112`.pem
+cp ./cert113 `md5 -q ./cert113`.pem
+cp ./cert114 `md5 -q ./cert114`.pem
+cp ./cert115 `md5 -q ./cert115`.pem
+cp ./cert116 `md5 -q ./cert116`.pem
+cp ./cert117 `md5 -q ./cert117`.pem
+cp ./cert118 `md5 -q ./cert118`.pem
+cp ./cert119 `md5 -q ./cert119`.pem
+cp ./cert120 `md5 -q ./cert120`.pem
+cp ./cert121 `md5 -q ./cert121`.pem
+cp ./cert122 `md5 -q ./cert122`.pem
+cp ./cert123 `md5 -q ./cert123`.pem
+cp ./cert124 `md5 -q ./cert124`.pem
+cp ./cert125 `md5 -q ./cert125`.pem
+cp ./cert126 `md5 -q ./cert126`.pem
+cp ./cert127 `md5 -q ./cert127`.pem
+cp ./foo.sh `md5 -q ./foo.sh`.pem
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET
+MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE
+AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw
+CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg
+YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE
+Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX
+mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD
+XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW
+S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp
+FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD
+AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu
+ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z
+ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv
+Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw
+DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6
+yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq
+EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
+CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB
+EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN
+PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
+MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
+VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
+CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
+tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
+dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
+PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
+BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
+ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
+7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
+43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
+pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
+WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
@@ -1346,143 +3221,59 @@ YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
BKNDLdr8C2LqL19iUw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
-IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
-DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
-EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
-ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
-dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
-QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
-dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
-wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
-G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
-AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
-c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
-9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
-YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
-Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
-MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
-cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
-d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
-DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
-rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
-uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
-BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
-MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
-/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
-gQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
-dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
-bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
-QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
-BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
-IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
-bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
-Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
-Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
-Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
-ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
-b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
-KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
-BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
-BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
-MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
-Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
-A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
-c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
-6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
-Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
-8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
-Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
-9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
-pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
-CayJSdM=
+MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
+EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
+aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
+MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
+dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
+bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
+eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
+r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
+3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
+vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
+mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
+wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
+hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
+TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
+biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
+ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
+dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
+b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
+c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
+ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
+dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
+ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
+ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
+Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
+ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
+A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
+MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
+NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
+VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
+83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
+macqaJVmlaut74nLYKkGEsaUR+ko
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
+MIICmDCCAgGgAwIBAgIBDjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJVUzEY
+MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNFQ0ExFDASBgNVBAMT
+C0VDQSBSb290IENBMB4XDTA0MDYxNDEwMjAwOVoXDTQwMDYxNDEwMjAwOVowSzEL
+MAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDEMMAoGA1UECxMD
+RUNBMRQwEgYDVQQDEwtFQ0EgUm9vdCBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEArkr2eXIS6oAKIpDkOlcQZdMGdncoygCEIU+ktqY3of5SVVXU7/it7kJ1
+EUzR4ii2vthQtbww9aAnpQxcEmXZk8eEyiGEPy+cCQMllBY+efOtKgjbQNDZ3lB9
+19qzUJwBl2BMxslU1XsJQw9SK10lPbQm4asa8E8e5zTUknZBWnECAwEAAaOBizCB
+iDAfBgNVHSMEGDAWgBT2uAQnDlYW2blj2f2hVGVBoAhILzAdBgNVHQ4EFgQU9rgE
+Jw5WFtm5Y9n9oVRlQaAISC8wDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
+Af8wJQYDVR0gBB4wHDAMBgpghkgBZQMCAQwBMAwGCmCGSAFlAwIBDAIwDQYJKoZI
+hvcNAQEFBQADgYEAHh0EQY2cZ209aBb5q0wW1ER0dc4OGzsLyqjHfaQ4TEaMmUwL
+AJRta/c4KVWLiwbODsvgJk+CaWmSL03gRW/ciVb/qDV7qh9Pyd1cOlanZTAnPog2
+i82yL3i2fK9DCC84uoxEQbgqK2jx9bIjFTwlAqITk9fGAm5mdT84IEwq1Gw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
@@ -1512,56 +3303,234 @@ eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+MIIDIjCCAougAwIBAgIQNKT/9jCvTKU8MxdCoZRmdTANBgkqhkiG9w0BAQUFADCB
+xDELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
+CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhh
+d3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
+ZS5jb20wHhcNOTYwODAxMDAwMDAwWhcNMjEwMTAxMjM1OTU5WjCBxDELMAkGA1UE
+BhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
+MR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlm
+aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZl
+ciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8w
+DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
+/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF
+/rFrKbYvScg71CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982
+OsK1ZiIS1ocNAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF
+BQADgYEAvkBpQW/G28GnvwfAReTQtUMeTJUzNelewj4o9qgNUNX/4gwP/FACjq6R
+ua00io2fJ3GqGcxL6ATK1BdrEhrWxl/WzV7/iXa/2EjYWb0IiokdV81FHlK6EpqE
++hiJX+j5MDVqAWC5mYCDhQpu2vTJj15zLTFKY6B08h+LItIpPus=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
-ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
-TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
-NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
-VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
-Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
-N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
-iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
-YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
-axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
-yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
-ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
-VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
-BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
-QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
-ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
-YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
-QErNaLly7HF27FSOH4UMAWr6pjisH8SE
+MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
+IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
+DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
+EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
+ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
+dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
+QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
+dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
+wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
+G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
+AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
+c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
+9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
+gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
+MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
+UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
+NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
+dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
+dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
+38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
+KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
+DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
+qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
+JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
+PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
+BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
+jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
+eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
+vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
+IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
+i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
+O+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
+206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
+KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
+JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
+BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
+Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
+PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
+Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
+Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
+o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
+YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
+FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
+xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
+LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
+obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
+CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
+IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
+DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
+AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
+Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
+AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
+Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
+RY8mkaKO/qk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
+IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
+cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
+MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
+bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
+DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
+WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
+Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
+HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
+z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
+SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
+AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
+KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
+AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
+BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
+VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
+ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
+ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
+/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
+A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
+k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
+iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
+2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIQMDAwMDk3Mzc1NzM4NjAwMDANBgkqhkiG9w0BAQUFADBV
+MQswCQYDVQQGEwJGUjETMBEGA1UEChMKQ2VydGlOb21pczEcMBoGA1UECxMTQUMg
+UmFjaW5lIC0gUm9vdCBDQTETMBEGA1UEAxMKQ2VydGlOb21pczAeFw0wMDExMDkw
+MDAwMDBaFw0xMjExMDkwMDAwMDBaMFUxCzAJBgNVBAYTAkZSMRMwEQYDVQQKEwpD
+ZXJ0aU5vbWlzMRwwGgYDVQQLExNBQyBSYWNpbmUgLSBSb290IENBMRMwEQYDVQQD
+EwpDZXJ0aU5vbWlzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SWb
+4mS5RXB3ENSIcfrEzCj/TRUQuT1tMCU0YUfXFSgcPdWglIzCv3kvh07QoB+8xMl+
+fQHvSSduAxnNewz0GBY9rApCPKlP6CcnJr74OSVZIiWt9wLfl4wwhNhZOiikIpZp
+EdOXWqRc84P5cUlN3Lwmr1sjCWmHfTSS4cAKxfDbFLfE61etosyoFZUTQbIhb1Bf
+JL5xRXAUZudQiU42n/yAoSUrN4FLUfPQNlOe1AB81pIgX8g2ojwxDjfgqSs1JmBF
+uLKJ45uVLEenQBPmQCGjL3maV86IRmR3a9UGlgvKAk0NBdh8mrQyQvcUlLBIQBCm
+l7wppt6maQHUNEPQSwIDAQABoz8wPTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQU+F4ho6ijFeb4tRG7/kIEXU2OgnowDQYJKoZIhvcNAQEF
+BQADggEBACe9FJayK6bXkJQrilBFMh75QPdFOks9PJuo86OMUlBDZGYFTCh9Arex
+N3KYCnAEzazYIALwr7eASJJDIQMu1Q+pkx/7ACde4kP47F27M2rm+v5HnGooCLz2
+s7Fe/WUycTQqgwF5lNp03m1ce/TvovgkEZeVN5wM/7+SsZLJGDigXGeq48j2g2hn
+8OckX9Ciyo0U3/1IVeigNBisiaOlsHSZOEPBZQRiZULob+NVbXVPo8nM1OyP3aHI
+LQex1yYcCr9m93nOiZyKkur3Uedf1yMTBe+fflnPFKGYnVqvTGXCKVdHzQBfpILA
+AuaC+5ykZhSiSMf8nmL2oPMcLO7YQw4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL
+ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx
+MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc
+MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+
+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH
+iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj
+vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA
+0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB
+OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/
+BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E
+FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01
+GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW
+zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4
+1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE
+f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F
+jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN
+ZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
+YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
+MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
+MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
+ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
+K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
+d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
+DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
+yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
+VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
+MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
+KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
+ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
+b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
+aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
+Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
+cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
+BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
+L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
+eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
+b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
+bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
+ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
+FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
+qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
+kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
+5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
+evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
+ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
+XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
+xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET
+MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0
+MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBw
+bGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
+FjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg+
++FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1
+XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9w
+tj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IW
+q6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKM
+aLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3
+R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAE
+ggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93
+d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNl
+IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0
+YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBj
+b25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZp
+Y2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBc
+NplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQP
+y3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7
+R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4Fg
+xhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oP
+IQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AX
+UKqK1drk/NAJBzewdXUh
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB
@@ -1590,6 +3559,278 @@ mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU
Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
+MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
+G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
+VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
+6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
+2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
+SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
+AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
+cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
+b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
+BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
+MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
+MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
+2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
+3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
+AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
+GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
+Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
+WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
+rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
+ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
+Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
+PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
+/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
+oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
+yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
+EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
+A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
+MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
+BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
+g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
+fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
+WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
+B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
+hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
+TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
+mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
+ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
+4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
+8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAqWgAwIBAgIQEj3w59oqIkekOIngiu7JZzANBgkqhkiG9w0BAQUFADCB
+0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3Rl
+IFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1m
+cmVlbWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIxMDEwMTIzNTk1
+OVowgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNV
+BAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNV
+BAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1Ro
+YXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29u
+YWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
+gYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Z
+hx2G6qPduc6WZBrCFG5ErHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56
+fAylS1V/Bhkpf56aJtVquzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYD
+VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAemGDU5fJUYLA9GoFkR/db
+o9lvwykLp9KpgUn2w22FFChFRAH0cVyVLhQPGivRqWvBX2c9FvFyIK++FsoOMF/J
+y6WTLMNnVB5yIoojdmyUHVFSbJ3E4EcC18y/8IB7GG4l3GJh1qb+wR1/2bP9jVxF
+EFrGZWSa6yz1A0/WSGL7Lg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y
+YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua
+kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL
+QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp
+6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG
+yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i
+QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO
+tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu
+QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ
+Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u
+olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48
+x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
+MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
+MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
+dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
+cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
+DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
+gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
+yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
+L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
+EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
+7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
+QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
+qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEUDCCA7mgAwIBAgIJAN4ppNGwj6yIMA0GCSqGSIb3DQEBBAUAMIHMMQswCQYD
+VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j
+aXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5jLjEpMCcGA1UECxMgTGluZGVu
+IExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIExpbmRlbiBMYWIg
+Q2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZIhvcNAQkBFhBjYUBsaW5kZW5s
+YWIuY29tMB4XDTA1MDQyMTAyNDAzMVoXDTI1MDQxNjAyNDAzMVowgcwxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
+c2NvMRkwFwYDVQQKExBMaW5kZW4gTGFiLCBJbmMuMSkwJwYDVQQLEyBMaW5kZW4g
+TGFiIENlcnRpZmljYXRlIEF1dGhvcml0eTEpMCcGA1UEAxMgTGluZGVuIExhYiBD
+ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgkqhkiG9w0BCQEWEGNhQGxpbmRlbmxh
+Yi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKXh1MThucdTbMg9bYBO
+rAm8yWns32YojB0PRfbq8rUjepEhTm3/13s0u399Uc202v4ejcGhkIDWJZd2NZMF
+oKrhmRfxGHSKPCuFaXC3jh0lRECj7k8FoPkcmaPjSyodrDFDUUuv+C06oYJoI+rk
+8REyal9NwgHvqCzOrZtiTXAdAgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUO1zK2e1f
+1wO1fHAjq6DTJobKDrcwggEBBgNVHSMEgfkwgfaAFDtcytntX9cDtXxwI6ug0yaG
+yg63oYHSpIHPMIHMMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEW
+MBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5j
+LjEpMCcGA1UECxMgTGluZGVuIExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAn
+BgNVBAMTIExpbmRlbiBMYWIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZI
+hvcNAQkBFhBjYUBsaW5kZW5sYWIuY29tggkA3imk0bCPrIgwDAYDVR0TBAUwAwEB
+/zANBgkqhkiG9w0BAQQFAAOBgQA/ZkgfvwHYqk1UIAKZS3kMCxz0HvYuEQtviwnu
+xA39CIJ65Zozs28Eg1aV9/Y+Of7TnWhW+U3J3/wD/GghaAGiKK6vMn9gJBIdBX/9
+e6ef37VGyiOEFFjnUIbuk0RWty0orN76q/lI/xjCi15XSA/VSq2j4vmnwfZcPTDu
+glmQ1A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
+EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
+bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
+YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
+Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
+MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
+A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
+YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
+VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
+isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
+Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
+QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
+bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
+yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
+AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
+cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
+BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
+cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
+U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
+YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
+SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
+t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
+mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
+K+9A46sd33oqK8n8
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJKUDEO
+MAwGA1UEChMFTEdQS0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMB4XDTA2
+MDMzMTE1MDAwMFoXDTE2MDMzMTE0NTk1OVowOTELMAkGA1UEBhMCSlAxDjAMBgNV
+BAoTBUxHUEtJMRowGAYDVQQLExFBcHBsaWNhdGlvbiBDQSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBALk1xhD422jbB8RATLAdHjbcw0H2z1UVbQh/
+XMZoVeXnV/GWUebhTXgPbkAVcDtl/hHf59PWWDU74Z8C/JRSRi6znmCbAp7JgtL2
+464JT4REtmKbAFFouDqt7GTRMkvplESDtA7OIYlrsDbAmMZLnMI+W2AqCTErLatM
+3rGg/VhWwoMdILzEhAmHe6iVl8YljoPgPpMN0cd9c6mo/BkAQC4iuHozQfV4/Vpx
+54LZSIhc7KiFhy1tgIlnGmm+EMBaju2IfT5vLDhrN85H2KIxMN5+U2Vsi4ZTQSBs
+vUilfq8AWlYSWIHR3IlZ+bXu+E2a2EQpi3mn9yKq6nxctBaIIA0CAwEAAaOBsjCB
+rzAdBgNVHQ4EFgQUf7hdjsQYa8Z9zC7prs405xdd4KEwDgYDVR0PAQH/BAQDAgEG
+MEwGA1UdHwRFMEMwQaA/oD2kOzA5MQswCQYDVQQGEwJKUDEOMAwGA1UEChMFTEdQ
+S0kxGjAYBgNVBAsTEUFwcGxpY2F0aW9uIENBIEcyMA8GA1UdEwEB/wQFMAMBAf8w
+HwYDVR0jBBgwFoAUf7hdjsQYa8Z9zC7prs405xdd4KEwDQYJKoZIhvcNAQEFBQAD
+ggEBADzYczZABkhKVBn1J0g5JaVuQue2zRvLOTS3m+xPKr535MqE/B3rmyJA1fT7
+aIdy/Eddag5SSuO1XUjGIpbmM21tq/bN18skWoyoRZ4+YYJ9lNUF8Bo1X3EvLlS1
+QQXvhg1S75yYG/EsTDrR84bTjD56L4ZFjoMyJlu/U8oOUVbcmsJaMBkNp57Vqpsg
+OWl4IfSXbdEOEUwu0xtasPmXeFwqj1Jl7kxCJcI3MA5tKzWUgwbor0U7BGanMLv5
+4CE7Y259RF06alPvERck/VSyWmxzViHJbC2XpEKzJ2EFIWNt6ii8TxpvQtyYq1XT
+HhvAkj+bweY7F1bixJhDJe62ywA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx
+CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp
+ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa
+QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw
+NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft
+ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu
+QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq
+hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG
+qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL
+fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ
+Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4
+Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ
+54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b
+MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j
+ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej
+YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt
+A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF
+rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ
+pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB
+lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy
+YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50
+7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs
+YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6
+xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc
+unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/
+Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp
+ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42
+gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0
+jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+
+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD
+W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/
+RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r
+MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk
+BYn8eNZcLCZDqQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
@@ -1608,306 +3849,165 @@ I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
-NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
-VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
-bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
-H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
-4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
-BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
-EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
-FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
-lA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
-YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
-FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
-J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
-r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
+MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
+dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
+bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
+QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
+BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
+IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
+bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
+Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
+Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
+Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
+ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
+b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
+KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
+YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
+GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
+BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
+3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
+YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
+rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
+ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
+oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
+b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
+AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
+GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
+G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
+l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
+smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
-lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
-AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
-HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
-qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
-cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
-cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
-T8qAkbYp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
+zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
+TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW
+NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV
+Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD
+TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2
+MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF
+Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh
+IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6
+dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO
+V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC
+GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN
+v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB
+AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB
+Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO
+76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK
+OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH
+ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi
+yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL
+buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj
+2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE
+BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz
+dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL
+MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp
+cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP
+Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr
+ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL
+MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1
+yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr
+VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/
+nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ
+KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG
+XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj
+vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt
+Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g
+N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC
+nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
-DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
-aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
-MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
-QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
-b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
-ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
-/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
-58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
-halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
-1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
-ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
-mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
-kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
-dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
-ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
-B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc
+MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp
+b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT
+AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs
+aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H
+j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K
+f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55
+IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw
+FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht
+QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm
+/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ
+k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ
+MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC
+seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ
+hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+
+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U
+DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj
+B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
-b290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEwOTIzMTMxODE3WjB1MQswCQYDVQQG
-EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
-Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQg
-LSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g
-5DY1Hw7hgCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZs
-jqBeynX8T90vFILqsY2K5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfH
-HB67Af+g7u0dEHdDW7lwy81MwFYxBTRy9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAEgfwwgfkwgfYGDSsGAQQB
-vj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3eXN0YXdp
-b255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2pp
-IGRsYSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENB
-IHcgaGllcmFyY2hpaSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3
-LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQw
-HwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQbsa8wHQYDVR0OBBYEFMODHtVZ
-d1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQBFIGh8Jpxt87A
-gSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
-f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIis
-TsytFzVP32/W+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB
-3vSaoYg+wdkcvb6souMJzuc2uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U
-1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uftXncwKJrMiE3lvgOOBITRzcahirL
-er4c
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
+IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
+R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
+PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
+Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
+TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
+5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
+S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
+2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
+EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
+EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
+/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
+A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
+abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
+I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
+4iIprn2DQKi6bA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQ
@@ -1939,90 +4039,166 @@ aLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF6caa
wBFjzz5ePr3WHV1wA7EY6oT4zBx+2gT9XBTB
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
-QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG
-A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
-BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln
-bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo
-VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs
-Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI
-iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD
-VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0
-oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey
-LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF
-BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi
-UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg
-T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0
-b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS
-C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw
-CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt
-iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M
-eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71
-iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp
-ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
-hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
+MIIC+TCCAmKgAwIBAgIENvEbGTANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJF
+UzENMAsGA1UEChMERk5NVDEYMBYGA1UECxMPRk5NVCBDbGFzZSAyIENBMB4XDTk5
+MDMxODE0NTYxOVoXDTE5MDMxODE1MjYxOVowNjELMAkGA1UEBhMCRVMxDTALBgNV
+BAoTBEZOTVQxGDAWBgNVBAsTD0ZOTVQgQ2xhc2UgMiBDQTCBnTANBgkqhkiG9w0B
+AQEFAAOBiwAwgYcCgYEAmD+tGTaTPT7+dkIU/TVv8fqtInpY40bQXcZa+WItjzFe
+/rQw/lB0rNadHeBixkndFBJ9cQusBsE/1waH4JCJ1uXjA7LyJ7GfM8iqazZKo8Q/
+eUGdiUYvKz5j1DhWkaodsQ1CdU3zh07jD03MtGy/YhOH6tCbjrbi/xn0lAnVlmEC
+AQOjggEUMIIBEDARBglghkgBhvhCAQEEBAMCAAcwWAYDVR0fBFEwTzBNoEugSaRH
+MEUxCzAJBgNVBAYTAkVTMQ0wCwYDVQQKEwRGTk1UMRgwFgYDVQQLEw9GTk1UIENs
+YXNlIDIgQ0ExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5OTAzMTgxNDU2
+MTlagQ8yMDE5MDMxODE0NTYxOVowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFECa
+dkSXdAfErBTLHo1POkV8MNdhMB0GA1UdDgQWBBRAmnZEl3QHxKwUyx6NTzpFfDDX
+YTAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBAGFMoHxZY1tm+O5lE85DgEe5sjXJyITHa3NgReSdN531jiW5
++aqqyuP4Q5wvoIkFsUUylCoeA41dpt7PV5Xa3yZgX8vflR64zgjY+IrJT6lodZPj
+LwVMZGACokIeb4ZoZVUO2ENv8pExPqNHPCgFr0W2nSJMJntLfVsV+RlG3whd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO
+TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX
+DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl
+ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv
+b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291
+qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp
+uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU
+Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE
+pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp
+5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M
+UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN
+GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy
+5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv
+6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK
+eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6
+B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/
+BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov
+L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG
+SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS
+CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen
+5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897
+IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK
+gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL
++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL
+vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm
+bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk
+N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC
+Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z
+ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDcDCCAligAwIBAgIBBTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJVUzEY
+MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT
+A1BLSTEWMBQGA1UEAxMNRG9EIFJvb3QgQ0EgMjAeFw0wNDEyMTMxNTAwMTBaFw0y
+OTEyMDUxNTAwMTBaMFsxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVy
+bm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRYwFAYDVQQDEw1Eb0Qg
+Um9vdCBDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCzB9o07
+rP8/PNZxvrh0IgfscEEV/KtA4weqwcPYn/7aTDq/P8jYKHtLNgHArEUlw9IOCo+F
+GGQQPRoTcCpvjtfcjZOzQQ84Ic2tq8I9KgXTVxE3Dc2MUfmT48xGSSGOFLTNyxQ+
+OM1yMe6rEvJl6jQuVl3/7mN1y226kTT8nvP0LRy+UMRC31mI/2qz+qhsPctWcXEF
+lrufgOWARVlnQbDrw61gpIB1BhecDvRD4JkOG/t/9bPMsoGCsf0ywbi+QaRktWA6
+WlEwjM7eQSwZR1xJEGS5dKmHQa99brrBuKG/ZTE6BGf5tbuOkooAY7ix5ow4X4P/
+UNU7ol1rshDMYwIDAQABoz8wPTAdBgNVHQ4EFgQUSXS7DF66ev4CVO97oMaVxgmA
+cJYwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBAJiRjT+JyLv1wGlzKTs1rLqzCHY9cAmS6YREIQF9FHYb7lFsHY0VNy17MWn0
+mkS4r0bMNPojywMnGdKDIXUr5+AbmSbchECV6KjSzPZYXGbvP0qXEIIdugqi3VsG
+K52nZE7rLgE1pLQ/E61V5NVzqGmbEfGY8jEeb0DU+HifjpGgb3AEkGaqBivO4XqS
+tX3h4NGW56E6LcyxnR8FRO2HmdNNGnA5wQQM5X7Z8a/XIA7xInolpHOZzD+kByeW
+qKKV7YK5FtOeC4fCwfKI9WLfaN/HvGlR7bFc3FRUKQ8JOZqsA8HbDE2ubwp6Fknx
+v5HSOJTT9pUst2zJQraNypCNhdk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBBDANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN
+MAsGA1UECgwES0lTQTEuMCwGA1UECwwlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkgQ2VudHJhbDEWMBQGA1UEAwwNS0lTQSBSb290Q0EgMTAeFw0wNTA4MjQw
+ODA1NDZaFw0yNTA4MjQwODA1NDZaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKDARL
+SVNBMS4wLAYDVQQLDCVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50
+cmFsMRYwFAYDVQQDDA1LSVNBIFJvb3RDQSAxMIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEAvATk+hM58DSWIGtsaLv623f/J/es7C/n/fB/bW+MKs0lCVsk
+9KFo/CjsySXirO3eyDOE9bClCTqnsUdIxcxPjHmc+QZXfd3uOPbPFLKc6tPAXXdi
+8EcNuRpAU1xkcK8IWsD3z3X5bI1kKB4g/rcbGdNaZoNy4rCbvdMlFQ0yb2Q3lIVG
+yHK+d9VuHygvx2nt54OJM1jT3qC/QOhDUO7cTWu8peqmyGGO9cNkrwYV3CmLP3WM
+vHFE2/yttRcdbYmDz8Yzvb9Fov4Kn6MRXw+5H5wawkbMnChmn3AmPC7fqoD+jMUE
+CSVPzZNHPDfqAmeS/vwiJFys0izgXAEzisEZ2wIBA6MyMDAwHQYDVR0OBBYEFL+2
+J9gDWnZlTGEBQVYx5Yt7OtnMMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF
+BQADggEBABOvUQveimpb5poKyLGQSk6hAp3MiNKrZr097LuxQpVqslxa/6FjZJap
+aBV/JV6K+KRzwYCKhQoOUugy50X4TmWAkZl0Q+VFnUkq8JSV3enhMNITbslOsXfl
+BM+tWh6UCVrXPAgcrnrpFDLBRa3SJkhyrKhB2vAhhzle3/xk/2F0KpzZm4tfwjeT
+2KM3LzuTa7IbB6d/CVDv0zq+IWuKkDsnSlFOa56ch534eJAx7REnxqhZvvwYC/uO
+fi5C4e3nCSG9uRPFVmf0JqZCQ5BEVLRxm3bkGhKsGigA35vB1fjbXKP4krG9tNT5
+UNkAAk/bg9ART6RCVmE6fhMy04Qfybo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
+HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
+ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD
+VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy
+ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy
+dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p
+OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2
+8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K
+Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe
+hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk
+6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw
+DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q
+AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI
+bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB
+ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z
+qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn
+0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN
+sSi6
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
-b290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
-EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
-Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
-LSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7B
-rBlbN5maM5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRA
-spEXE4gvwb08ASY6w5s+HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8w
-nfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxWCeol9IekpBRVmuuSA6QG0Jkm+pGDJ05y
-j2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9JyN0ag1yII/LPx8HK5J4
-W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3xW20QjQcS
-ZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHk
-MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
-IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
-Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
-aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
-cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
-cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
-HQ4EFgQUwGxGyl2CfpYHRonE82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1
-TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkxUGY7U9kVrLI71xBgoNVyzXTiMNDB
-vjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsanot1Xt6j0ZDC+03Fj
-LHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G22Ohu
-+EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqW
-uHitKQDVtcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6
-NA9GRTCNxm/dXlcwnmY=
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
-b290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
-EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
-Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
-LSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3
-LanJtdueNe6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP
-6KZTU0DixOrV+K7iWaqAiQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6H
-dbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPEOpO94mAKcBUhk6T/ki0evXX/ZvvktwmF
-3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Dbw34hA1A+ckTwhxzecrB8
-TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC3P8QqoK4
-ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHk
-MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
-IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
-Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
-aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
-cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
-cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
-HQ4EFgQUXvthcPHlH5BgGhlMErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIc
-e95Mvn710KCAISA0CuHD4aznTU6pLoCDShW47OR+GTpJUm1coTcUqlBHV9mra4VF
-rBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJGdsJF/XU/7smummgj
-MNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oFJTlp
-uxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1D
-OcePEhKz1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BX
-WCW+KxwiBrtQTXv4dTE=
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB
+ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly
+aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
+ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w
+NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G
+A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD
+VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX
+SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR
+VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2
+w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF
+mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg
+4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9
+4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw
+DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw
+EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx
+SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2
+ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8
+vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi
+Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ
+/L7fCg0=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
@@ -2053,75 +4229,266 @@ G7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmABKK6o
3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
-QSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloXDTExMDkyMzExMTgxN1owdjELMAkG
-A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
-BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0MgU2ln
-bmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJY
-rISEtSsduHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ1
-2FJarD1X6mSQ4cfN/60vLfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjR
-AM0tdwXSnzuTEunfw0Oup559y3Iqxg1cExflB6cfAgMBAAGjggGXMIIBkzBBBgNV
-HR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0v
-Y3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
-AQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYB
-BQUHAgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVu
-dGVtICJQb2xpdHlrYSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5p
-ZSBjemFzZW0iLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVw
-b3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJfMS5wZGYwHwYDVR0jBBgwFoAU
-w4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavOYd9u9tej53vW
-XwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
-+z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMb
-skF8I31JxIeBvueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR
-+7KtwMg4sFDJZ8RNgOf7tbA=
+MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
+HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
+qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
+cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
+cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
+T8qAkbYp
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
-UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v
-U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN
-AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw
-MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD
-VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM
-BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m
-cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws
-ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx
-8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/
-s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c
-9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V
-pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+
-pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC
-aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y
-CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ
-6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG
-A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0
-MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF
-AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob
-sRQ=
+MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i
+2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ
+2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
+MIIH/zCCB2igAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjMxMTEyMTQxWhcNMjUxMjI5
+MTEyMTQxWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM8g89BgSKoCxBXZ5C+NnlURLSnM
+UWZoAGXaFFWf6q7f69uN1nXaUfTEzPstvTUfE7fpZmF8lEDz+2AvjBg086hVnra0
+b0APA0VnanJyW2ZIlkKFGMCB4WJqh7JB7i45jITVXthPV2vsjlKM97Pnnhimz8Fb
+r+RZcsz69vRptMqxAgMBAAGjggRbMIIEVzAdBgNVHQ4EFgQUL8zsbGe+T/iqPIiN
+EvvHnUxb9F4wggFGBgNVHSMEggE9MIIBOYAUL8zsbGe+T/iqPIiNEvvHnUxb9F6h
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBDBglghkgBhvhCAQ0ENhY0Q0xBU0VBMSBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cHM6Ly93d3cuaXBzLmVzLzAqBglg
+hkgBhvhCAQIEHRYbaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDwGCWCGSAGG
++EIBBAQvFi1odHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VB
+MS5jcmwwQQYJYIZIAYb4QgEDBDQWMmh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
+L3Jldm9jYXRpb25DTEFTRUExLmh0bWw/MD4GCWCGSAGG+EIBBwQxFi9odHRwczov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsQ0xBU0VBMS5odG1sPzA8BglghkgB
+hvhCAQgELxYtaHR0cHM6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VB
+MS5odG1sMHcGA1UdHwRwMG4wM6AxoC+GLWh0dHBzOi8vd3d3Lmlwcy5lcy9pcHMy
+MDAyL2lwczIwMDJDTEFTRUExLmNybDA3oDWgM4YxaHR0cHM6Ly93d3diYWNrLmlw
+cy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRUExLmNybDAvBggrBgEFBQcBAQQjMCEw
+HwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQAD
+gYEAGY2khC4v4mlenqRcy8Mn8mcWca88t4CY9LCJMqlIt7i559BNkMMB66tXsNp9
+N2QhnTordKOjkdgZJmCb7DUdMJEQQT0Y5W7JA6WvHatAFu8feRJ4ImaTjI0Xz3Dd
+Jbz6O++igCw0l4EY5gayn2BFpAm+7ZpEcdpR/OCOH80lNDo=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
+SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
+Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
+BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
+cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
+vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
+Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
+0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
+4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
+eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
+R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
+A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
+dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
+Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
+WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
+HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
+KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
+Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
+wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
+9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
+jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
+aQNiuJkFBT1reBK9sG9l
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
+MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
+EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
+BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
+xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
+87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
+2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
+WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
+0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
+A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
+pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
+ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
+aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
+hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
+hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
+P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
+iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
+xqE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
+ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
+MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
+dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
+c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
+UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
+58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
+o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
+MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
+aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
+A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
+Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
+8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
+IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
+BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
+MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
+YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
+dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
+BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
+papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
+DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
+KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
+XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFUjCCBDqgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN
+MAsGA1UEChMES0lTQTEuMCwGA1UECxMlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkgQ2VudHJhbDEWMBQGA1UEAxMNS0lTQSBSb290Q0EgMzAeFw0wNDExMTkw
+NjM5NTFaFw0xNDExMTkwNjM5NTFaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKEwRL
+SVNBMS4wLAYDVQQLEyVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50
+cmFsMRYwFAYDVQQDEw1LSVNBIFJvb3RDQSAzMIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEA3rrtF2Wu0b1KPazbgHLMWOHn4ZPazDB6z+8Lri2nQ6u/p0LP
+CFYIpEcdffqG79gwlyY0YTyADvjU65/8IjAboW0+40zSVU4WQDfC9gdu2we1pYyW
+geKbXH6UYcjOhDyx+gDmctMJhXfp3F4hT7TkTvTiF6tQrxz/oTlYdVsSspa5jfBw
+YkhbVigqpYeRNrkeJPW5unu2UlFbF1pgBWycwubGjD756t08jP+J3kNwrB248XXN
+OMpTDUdoasY8GMq94bS+DvTQ49IT+rBRERHUQavo9DmO4TSETwuTqmo4/OXGeEeu
+dhf6oYA3BgAVCP1rI476cg2V1ktisWjC3TSbXQIBA6OCAg8wggILMB8GA1UdIwQY
+MBaAFI+B8NqmzXQ8vmb0FWtGpP4GKMyqMB0GA1UdDgQWBBSPgfDaps10PL5m9BVr
+RqT+BijMqjAOBgNVHQ8BAf8EBAMCAQYwggEuBgNVHSAEggElMIIBITCCAR0GBFUd
+IAAwggETMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LnJvb3RjYS5vci5rci9yY2Ev
+Y3BzLmh0bWwwgd4GCCsGAQUFBwICMIHRHoHOx3QAIMd4yZ3BHLKUACCs9cd4x3jJ
+ncEcx4WyyLLkACgAVABoAGkAcwAgAGMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAGkA
+cwAgAGEAYwBjAHIAZQBkAGkAdABlAGQAIAB1AG4AZABlAHIAIABFAGwAZQBjAHQA
+cgBvAG4AaQBjACAAUwBpAGcAbgBhAHQAdQByAGUAIABBAGMAdAAgAG8AZgAgAHQA
+aABlACAAUgBlAHAAdQBiAGwAaQBjACAAbwBmACAASwBvAHIAZQBhACkwMwYDVR0R
+BCwwKqQoMCYxJDAiBgNVBAMMG+2VnOq1reygleuztOuztO2YuOynhO2dpeybkDAz
+BgNVHRIELDAqpCgwJjEkMCIGA1UEAwwb7ZWc6rWt7KCV67O067O07Zi47KeE7Z2l
+7JuQMA8GA1UdEwEB/wQFMAMBAf8wDAYDVR0kBAUwA4ABADANBgkqhkiG9w0BAQUF
+AAOCAQEAz9b3Dv2wjG4FFY6oXCuyWtEeV6ZeGKqCEQj8mbdbp+PI0qLT+SQ09+Pk
+rolUR9NpScmAwRHr4inH9gaLX7riXs+rw87P7pIl3J85Hg4D9N6QW6FwmVzHc07J
+pHVJeyWhn4KSjU3sYcUMMqfHODiAVToqgx2cZHm5Dac1Smjvj/8F2LpOVmHY+Epw
+mAiWk9hgxzrsX58dKzVPSBShmrtv7tIDhlPxEMcHVGJeNo7iHCsdF03m9VrvirqC
+6HfZKBF+N4dKlArJQOk1pTr7ZD7yXxZ683bXzu4/RB1Fql8RqlMcOh9SUWJUD6OQ
+Nc9Nb7rHviwJ8TX4Absk3TC8SA/u2Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgIQKTZHquOKrIZKI1byyrdhrzANBgkqhkiG9w0BAQUFADBO
+MQswCQYDVQQGEwJ1czEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQ0wCwYDVQQL
+EwRGQkNBMRYwFAYDVQQDEw1Db21tb24gUG9saWN5MB4XDTA3MTAxNTE1NTgwMFoX
+DTI3MTAxNTE2MDgwMFowTjELMAkGA1UEBhMCdXMxGDAWBgNVBAoTD1UuUy4gR292
+ZXJubWVudDENMAsGA1UECxMERkJDQTEWMBQGA1UEAxMNQ29tbW9uIFBvbGljeTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJeNvTMn5K1b+3i9L0dHbsd4
+6ZOcpN7JHP0vGzk4rEcXwH53KQA7Ax9oD81Npe53uCxiazH2+nIJfTApBnznfKM9
+hBiKHa4skqgf6F5PjY7rPxr4nApnnbBnTfAu0DDew5SwoM8uCjR/VAnTNr2kSVdS
+c+md/uRIeUYbW40y5KVIZPMiDZKdCBW/YDyD90ciJSKtKXG3d+8XyaK2lF7IMJCk
+FEhcVlcLQUwF1CpMP64Sm1kRdXAHImktLNMxzJJ+zM2kfpRHqpwJCPZLr1LoakCR
+xVW9QLHIbVeGlRfmH3O+Ry4+i0wXubklHKVSFzYIWcBCvgortFZRPBtVyYyQd+sC
+AwEAAaN7MHkwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFC9Yl9ipBZilVh/72at17wI8NjTHMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJ
+KwYBBAGCNxUCBBYEFHa3YJbdFFYprHWF03BjwbxHhhyLMA0GCSqGSIb3DQEBBQUA
+A4IBAQBgrvNIFkBypgiIybxHLCRLXaCRc+1leJDwZ5B6pb8KrbYq+Zln34PFdx80
+CTj5fp5B4Ehg/uKqXYeI6oj9XEWyyWrafaStsU+/HA2fHprA1RRzOCuKeEBuMPdi
+4c2Z/FFpZ2wR3bgQo2jeJqVW/TZsN5hs++58PGxrcD/3SDcJjwtCga1GRrgLgwb0
+Gzigf0/NC++DiYeXHIowZ9z9VKEDfgHLhUyxCynDvux84T8PCVI8L6eaSP436REG
+WOE2QYrEtr+O3c5Ks7wawM36GpnScZv6z7zyxFSjiDV2zBssRm8MtNHDYXaSdBHq
+S4CNHIkRi+xb/xfJSPzn4AYR4oRe
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS
+S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
+SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx
+OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry
+b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC
+VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE
+sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F
+ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY
+KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG
++7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG
+HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P
+IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M
+733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk
+Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G
+CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW
+AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5
+mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa
+XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ
+qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
@@ -2149,319 +4516,163 @@ BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
ZQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
+MIIIQTCCB6qgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr
+SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG
+A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIzMTExMjY0
+M1oXDTI1MTIyOTExMjY0M1owggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy
+Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l
+dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw
+cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh
+bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU
+aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B
+CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+0umTdn+FPP2gAb0RL0ZCDyt/BZvGa/VRcayaUh8flSfMkO+WP45RNv0WAM43pSGU
+Rmvt5P+hfuqf0aKbOPMTxLmYumVFQ/nXvRWdlC4AYN6YGrk8yfXh/NbEJN/n48iE
+GRK0HFyz9eIWYSdg8vAt5PDzrPigeYSdReL2AfBE5ZECAwEAAaOCBIkwggSFMB0G
+A1UdDgQWBBSR2UK8nKnK0Bw3E1JXFqANHikdPjCCAVAGA1UdIwSCAUcwggFDgBSR
+2UK8nKnK0Bw3E1JXFqANHikdPqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
+BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ
+UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp
+cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg
+Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD
+EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w
+HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
+BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
+BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
+FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD
+VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw
+cy5lczBIBglghkgBhvhCAQ0EOxY5VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
+IGlzc3VlZCBieSBodHRwczovL3d3dy5pcHMuZXMvMCoGCWCGSAGG+EIBAgQdFhto
+dHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi8wQQYJYIZIAYb4QgEEBDQWMmh0dHBz
+Oi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEYG
+CWCGSAGG+EIBAwQ5FjdodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0
+aW9uVGltZXN0YW1waW5nLmh0bWw/MEMGCWCGSAGG+EIBBwQ2FjRodHRwczovL3d3
+dy5pcHMuZXMvaXBzMjAwMi9yZW5ld2FsVGltZXN0YW1waW5nLmh0bWw/MEEGCWCG
+SAGG+EIBCAQ0FjJodHRwczovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1l
+c3RhbXBpbmcuaHRtbDCBgQYDVR0fBHoweDA4oDagNIYyaHR0cHM6Ly93d3cuaXBz
+LmVzL2lwczIwMDIvaXBzMjAwMlRpbWVzdGFtcGluZy5jcmwwPKA6oDiGNmh0dHBz
+Oi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNy
+bDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5l
+cy8wDQYJKoZIhvcNAQEFBQADgYEAxKMCdGABCUwYXU900W1zDCfTSDC1TxFVGRnH
+I4soqfp4D34sJ/adkgD2GMgkAMVf+C1MY/yQFV4nmOal9K7SNrG1JR8OeDoRjpM4
+rtO9qYbuHD3TW47/y/aZSZxP4ccocGpPOkvqfrnndKRKY0WUk/7Qg5aqpIXni2Gg
+olkTZbQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC
+Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g
+Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0
+aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa
+Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg
+SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo
+aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp
+ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z
+7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//
+DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx
+zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8
+hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs
+4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u
+gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY
+NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3
+j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG
+52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB
+echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
+ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI
+zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy
+wy39FCqQmbkHzJ8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
+TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
+MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
+ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
+ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
+9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
+hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
+tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
+BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
+SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
+OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
+cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
+7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
+/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
+eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
+u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
+7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
+hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
+1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
+OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
+2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
+O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
+AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
+Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
+LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
+oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
+MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
+NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
+cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
+2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
+JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
+Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
+n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
+PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
+MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
+ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
+TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
+NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
+IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
+VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
+Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
+N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
+iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
+YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
+axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
+yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
+AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
+ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
+VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
+BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
+IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
+QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
+ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
+YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
+QErNaLly7HF27FSOH4UMAWr6pjisH8SE
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
@@ -2495,327 +4706,37 @@ OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
+MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
+IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
+WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
+ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
+IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
+IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
+6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
+jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
+izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
+zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
+pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
+KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
+ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
+AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
+ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
+A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
+uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
+jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
+u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
+YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
+puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
+icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
+DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
+kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
+Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
@@ -2862,100 +4783,73 @@ um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
-DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
-Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
-OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
-bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
-dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
-18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
-yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
-LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
-A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
-zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
-BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
-GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
-cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
-HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
-CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
-BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
-cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
-YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
-YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
-ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
-00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
-cCOxgN8aIDjnfg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
+MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
+m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
+ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
+eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
+3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
+SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
+AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
+cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
+b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
+BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
+MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
+MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
+AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
+aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
+H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
+MIIEGjCCAwKgAwIBAgIDAYagMA0GCSqGSIb3DQEBBQUAMIGjMQswCQYDVQQGEwJG
+STEQMA4GA1UECBMHRmlubGFuZDEhMB8GA1UEChMYVmFlc3RvcmVraXN0ZXJpa2Vz
+a3VzIENBMSkwJwYDVQQLEyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBTZXJ2aWNl
+czEZMBcGA1UECxMQVmFybWVubmVwYWx2ZWx1dDEZMBcGA1UEAxMQVlJLIEdvdi4g
+Um9vdCBDQTAeFw0wMjEyMTgxMzUzMDBaFw0yMzEyMTgxMzUxMDhaMIGjMQswCQYD
+VQQGEwJGSTEQMA4GA1UECBMHRmlubGFuZDEhMB8GA1UEChMYVmFlc3RvcmVraXN0
+ZXJpa2Vza3VzIENBMSkwJwYDVQQLEyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBT
+ZXJ2aWNlczEZMBcGA1UECxMQVmFybWVubmVwYWx2ZWx1dDEZMBcGA1UEAxMQVlJL
+IEdvdi4gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALCF
+FdrIAzfQo0Y3bBseljDCWoUSZyPyu5/nioFgJ/gTqTy894aqqvTzJSm0/nWuHoGG
+igWyHWWyOOi0zCia+xc28ZPVec7Bg4shT8MNrUHfeJ1I4x9CRPw8bSEga60ihCRC
+jxdNwlAfZM0tOSJWiP2yY51U2kJpwMhP1xjiPshphJQ9LIDGfM6911Mf64i5psu7
+hVfvV3ZdDIvTXhJBnyHAOfQmbQj6OLOhd7HuFtjQaNq0mKWgZUZKa41+qk1guPjI
+DfxxPu45h4G02fhukO4/DmHXHSto5i7hQkQmeCxY8n0Wf2HASSQqiYe2XS8pGfim
+545SnkFLWg6quMJmQlMCAwEAAaNVMFMwDwYDVR0TAQH/BAUwAwEB/zARBglghkgB
+hvhCAQEEBAMCAAcwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBTb6eGb0tEkC/yr
+46Bn6q6cS3f0sDANBgkqhkiG9w0BAQUFAAOCAQEArX1ID1QRnljurw2bEi8hpM2b
+uoRH5sklVSPj3xhYKizbXvfNVPVRJHtiZ+GxH0mvNNDrsczZog1Sf0JLiGCXzyVy
+t08pLWKfT6HAVVdWDsRol5EfnGTCKTIB6dTI2riBmCguGMcs/OubUpbf9MiQGS0j
+8/G7cdqehSO9Gu8u5Hp5t8OdhkktY7ktdM9lDzJmid87Ie4pbzlj2RXBbvbfgD5Q
+eBmK3QOjFKU3p7UsfLYRh+cF8ry23tT/l4EohP7+bEaFEEGfTXWMB9SZZ291im/k
+UJL2mdUQuMSpe/cXjUu/15WfCdxEDx4yw8DP03kN5Mc7h/CQNIghYkmSBAQfvA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
@@ -3025,53 +4919,24 @@ zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
MBr1mmz0DlP5OlvRHA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
+MIIDQzCCAiugAwIBAgIQX/h7KCtU3I1CoxW1aMmt/zANBgkqhkiG9w0BAQUFADA1
+MRYwFAYDVQQKEw1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENB
+IDIwNDgwHhcNMDQwNTE0MjAxNzEyWhcNMjkwNTE0MjAyNTQyWjA1MRYwFAYDVQQK
+Ew1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENBIDIwNDgwggEg
+MA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCwmrmrp68Kd6ficba0ZmKUeIhH
+xmJVhEAyv8CrLqUccda8bnuoqrpu0hWISEWdovyD0My5jOAmaHBKeN8hF570YQXJ
+FcjPFto1YYmUQ6iEqDGYeJu5Tm8sUxJszR2tKyS7McQr/4NEb7Y9JHcJ6r8qqB9q
+VvYgDxFUl4F1pyXOWWqCZe+36ufijXWLbvLdT6ZeYpzPEApk0E5tzivMW/VgpSdH
+jWn0f84bcN5wGyDWbs2mAag8EtKpP6BrXruOIIt6keO1aO6g58QBdKhTCytKmg9l
+Eg6CTY5j/e/rmxrbU6YTYK/CfdfHbBcl1HP7R2RQgYCUTOG/rksc35LtLgXfAgED
+o1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJ/PI
+FR5umgIJFq0roIlgX9p7L6owEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEF
+BQADggEBAJ2dhISjQal8dwy3U8pORFBi71R803UXHOjgxkhLtv5MOhmBVrBW7hmW
+Yqpao2TB9k5UM8Z3/sUcuuVdJcr18JOagxEu5sv4dEX+5wW4q+ffy0vhN4TauYuX
+cB7w4ovXsNgOnbFp1iqRe6lJT37mjpXYgyc81WhJDtSd9i7rp77rMKSsH0T8lasz
+Bvt9YAretIpjsJyp8qS5UwGH0GikJ3+r/+n6yUA4iGe0OcaEb1fJU9u6ju7AQ7L4
+CYNu/2bPPu8Xs1gYJQk0XuPL1hS27PKSb3TkL4Eq1ZKR4OCXPDJoBYVL0fdX4lId
+kxpUnwVwwEpxYB5DC2Ae/qPOgRnhCzU=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
@@ -3106,80 +4971,188 @@ LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
pYYsfPQS
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
+NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
+BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
+Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
+4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
+KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
+rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
+94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
+sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
+gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
+kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
+vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
+O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
+AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
+9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
+eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
+0vdXcDazv/wor3ElhVsT/h5/WrQ8
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
+MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
+IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
+dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
+li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
+rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
+WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
+F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
+xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
+Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
+dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
+ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
+IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
+c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
+ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
+KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
+KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
+y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
+dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
+VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
+MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
+fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
+7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
+cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
+mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
+xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
+SnQ2+Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
+Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
+rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
+hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
+BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
+iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
+AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
+bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
+MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
+VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
+u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
+hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
+ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
+QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
+quGnM/b9Sh/22WA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
+aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
+MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
+VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
+fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
+TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
+fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
+1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
+kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
+A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
+ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
+dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
+Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
+HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
+jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
+dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf
+tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg
+uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J
+XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK
+8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99
+5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3
+kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy
+dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6
+Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz
+JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290
+Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS
+GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt
+ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8
+au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV
+hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI
+dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
@@ -3207,6 +5180,477 @@ LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
jVaMaA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
+MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
+Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
+5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
+3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
+vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
+8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
+zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
+3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
+FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
+Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
+ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
+MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
+ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
+BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
+6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
+GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
+dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
+1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
+62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
+BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
+MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
+cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
+b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
+IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
+iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
+4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
+XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
+MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
+H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
+8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
+SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
+mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
+BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
+dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
+SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
+TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
+czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
+MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
+Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
+Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
+qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
+D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
+r33I6unUVtkOE7LFRVA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES
+MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU
+V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz
+WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO
+LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE
+AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH
+K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX
+RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z
+rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx
+3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq
+hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC
+MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls
+XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D
+lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn
+aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ
+YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDODCCAqGgAwIBAgIQQAWyU6AaRkNQCYGPEhB27DANBgkqhkiG9w0BAQUFADCB
+zzELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJ
+Q2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3Rl
+IFBlcnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXBy
+ZW1pdW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMTAxMDEyMzU5NTla
+MIHPMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQH
+EwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQL
+Ex9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3
+dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwt
+cHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ
+Ztn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O
+0DI3lIi1DbbZ8/JE2dWIEt12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8f
+AHB8Zs8QJQi6+u4A6UYDZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMB
+Af8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBALpkCujztDHJJ2+idqAtNnHHhsAI
+wk7t2pokGYf8WiOcck0I361cwzskgR1Xj7YSpSID7xK90S1elo8mJk9LG3w7oFIa
+pag3hsRHKsrdQfho9cITQSma8AyozaH8FSMC23or1GJRQkfEox/00sVNVBDr2vDM
+p083DL08yxDjGugV
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
+NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
+zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
+YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
+KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
+adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
+BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
+dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
+SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
+TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
+czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
+MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
+Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
+Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
+Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
+V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
+hjM+5i9Ibq9UkE6tsSU=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFVTCCBD2gAwIBAgIEO/OB0DANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJj
+aDEOMAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZpY2VzMSIwIAYDVQQLExlD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMRYwFAYDVQQDEw1BZG1pbi1Sb290LUNB
+MB4XDTAxMTExNTA4NTEwN1oXDTIxMTExMDA3NTEwN1owbDELMAkGA1UEBhMCY2gx
+DjAMBgNVBAoTBWFkbWluMREwDwYDVQQLEwhTZXJ2aWNlczEiMCAGA1UECxMZQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdGllczEWMBQGA1UEAxMNQWRtaW4tUm9vdC1DQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMvgr0QUIv5qF0nyXZ3PXAJi
+C4C5Wr+oVTN7oxIkXkxvO0GJToM9n7OVJjSmzBL0zJ2HXj0MDRcvhSY+KiZZc6Go
+vDvr5Ua481l7ILFeQAFtumeza+vvxeL5Nd0Maga2miiacLNAKXbAcUYRa0Ov5VZB
+++YcOYNNt/aisWbJqA2y8He+NsEgJzK5zNdayvYXQTZN+7tVgWOck16Da3+4FXdy
+fH1NCWtZlebtMKtERtkVAaVbiWW24CjZKAiVfggjsiLo3yVMPGj3budLx5D9hEEm
+vlyDOtcjebca+AcZglppWMX/iHIrx7740y0zd6cWEqiLIcZCrnpkr/KzwO135GkC
+AwEAAaOCAf0wggH5MA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIASBkTCBjjCBiwYI
+YIV0AREDAQAwfzArBggrBgEFBQcCAjAfGh1UaGlzIGlzIHRoZSBBZG1pbi1Sb290
+LUNBIENQUzBQBggrBgEFBQcCARZEaHR0cDovL3d3dy5pbmZvcm1hdGlrLmFkbWlu
+LmNoL1BLSS9saW5rcy9DUFNfMl8xNl83NTZfMV8xN18zXzFfMC5wZGYwfwYDVR0f
+BHgwdjB0oHKgcKRuMGwxFjAUBgNVBAMTDUFkbWluLVJvb3QtQ0ExIjAgBgNVBAsT
+GUNlcnRpZmljYXRpb24gQXV0aG9yaXRpZXMxETAPBgNVBAsTCFNlcnZpY2VzMQ4w
+DAYDVQQKEwVhZG1pbjELMAkGA1UEBhMCY2gwHQYDVR0OBBYEFIKf+iNzIPGXi7JM
+Tb5CxX9mzWToMIGZBgNVHSMEgZEwgY6AFIKf+iNzIPGXi7JMTb5CxX9mzWTooXCk
+bjBsMQswCQYDVQQGEwJjaDEOMAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZp
+Y2VzMSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMRYwFAYDVQQD
+Ew1BZG1pbi1Sb290LUNBggQ784HQMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0B
+AQUFAAOCAQEAeE96XCYRpy6umkPKXDWCRn7INo96ZrWpMggcDORuofHIwdTkgOeM
+vWOxDN/yuT7CC3FAaUajbPRbDw0hRMcqKz0aC8CgwcyIyhw/rFK29mfNTG3EviP9
+QSsEbnelFnjpm1wjz4EaBiFjatwpUbI6+Zv3XbEt9QQXBn+c6DeFLe4xvC4B+MTr
+a440xTk59pSYux8OHhEvqIwHCkiijGqZhTS3KmGFeBopaR+dJVBRBMoXwzk4B3Hn
+0Zib1dEYFZa84vPJZyvxCbLOnPRDJgH6V2uQqbG+6DXVaf/wORVOvF/wzzv0viM/
+RWbEtJZdvo8N3sdtCULzifnxP/V0T9+4ZQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa
+MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE
+AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8
+RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy
+cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE
+J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC
+YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0
+E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE
+G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45
+g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY
+AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV
+mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu
+8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/
+Vv4AEbT8dNfEeFxrkDbh
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
+YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
+aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
+Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
+IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
+KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
+HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
+DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
+AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
+nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
+rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
+jBJ7xUS0rg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
+LSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7B
+rBlbN5maM5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRA
+spEXE4gvwb08ASY6w5s+HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8w
+nfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxWCeol9IekpBRVmuuSA6QG0Jkm+pGDJ05y
+j2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9JyN0ag1yII/LPx8HK5J4
+W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3xW20QjQcS
+ZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHk
+MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
+Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
+aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
+cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
+OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
+cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
+HQ4EFgQUwGxGyl2CfpYHRonE82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1
+TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkxUGY7U9kVrLI71xBgoNVyzXTiMNDB
+vjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsanot1Xt6j0ZDC+03Fj
+LHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G22Ohu
++EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqW
+uHitKQDVtcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6
+NA9GRTCNxm/dXlcwnmY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
+RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
+Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
+RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
+IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
+Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
+CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
+8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
+bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
+dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
+QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
+C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
+IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
+ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
+KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
+VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
+DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
+fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
+d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
+JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
+yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
+YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
+MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
+NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
+A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
+A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
+Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
+QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
+eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
+B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
+z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
+AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
+ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
+TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
+MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
+VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
+VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
+AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
+bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
+ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
+VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
+ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
+AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
+ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
+Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
+MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
+bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
+RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
+CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
+6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
+5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
+AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
+ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
+cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
+by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
+IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
+Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
+KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
+HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
+BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
+FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
+pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
+wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
+EkP/TOYGJqibGapEPHayXOw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
+MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
+KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
+A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
+5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
+SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
+JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
+ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
+AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
+AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
+CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
+b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
+7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
+0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
+nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
+x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
+33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL
+MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV
+BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0
+Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1
+OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i
+SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc
+VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z
+jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j
+FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2
+W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC
+L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh
+d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G
+TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd
+xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue
+dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5
++F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL
+iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM
+ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd
+MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg
+Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL
+MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD
+VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg
+isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z
+NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI
++MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R
+hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+
+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD
+AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP
+Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s
+EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2
+mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC
+e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow
+dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
@@ -3253,85 +5697,189 @@ yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
o2A=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
+MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
+IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
+IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
+Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
+BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
+MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
+ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
+8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
+zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
+fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
+w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
+G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
+epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
+laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
+QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
+fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
+YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
+ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
+gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
+MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
+IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
+dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
+czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
+dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
+aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
+AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
+b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
+ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
+nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
+18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
+gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
+Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
+sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
+SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
+CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
+GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
+zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
+omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIGJDCCBY2gAwIBAgIEQoaroDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjA3
-MTQxNzEwMjhaFw0xNDA3MTQxNzQwMjhaMFwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
-EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xGzAZBgNV
-BAMTEkRpZ2lDZXJ0IEdsb2JhbCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAMQ8vMy66mLmnkIjr7SyEa5ijdmh04/MFHIZ7Zn2/d5du1nAsMKvaplS
-lVcLNf/hhvqvosPBBWUnIHYvClQlfOor3ZVBV5sPO89H6AEGjMVESPwHLvNygzBR
-lJ5pOoOph5AU2V7EoniPwT7UGWEOGufcGpUgQb5vF9q4HEHumLD61x01PxanBCgT
-XT0FdZouhp4ssBeHIFhX7+HqVWC4LHAhrCljDBD8YLz51Rw3ZNW0+x6rJjlGiKTL
-zTBnwCZ55cpo+SLX5dKxu0hMmwuYW0KS5dLtDkcw+t0nVmNqpQHHjq/wTjsbVRVE
-1T5NVx7hkeq4oI/OOmNflom6CD7+RLsCAwEAAaOCAwUwggMBMBIGA1UdEwEB/wQI
-MAYBAf8CAQAwggEyBgNVHSAEggEpMIIBJTCCASEGCSqGSIb2fQdLAjCCARIwJgYI
-KwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvY3BzMIHnBggrBgEFBQcC
-AjCB2hqB10ZvciB1c2Ugc29sZWx5IHdpdGggU1NMIGFuZCBTL01JTUUgY2VydGlm
-aWNhdGVzIGlzc3VlZCBieSBEaWdpY2VydCwgSW5jLiB0byBhdXRob3JpemVkIHN1
-YnNjcmliZXJzLg0KRE9FUyBOT1QgcmVwcmVzZW50IGFueSBlbmRvcnNlbWVudCBi
-eSBFbnRydXN0IEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMgYXMgdG8gdGhlIGlkZW50
-aXR5IG9mIGFueSBjZXJ0aWZpY2F0ZSBob2xkZXIuMDEGA1UdJQQqMCgGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMJMIIBGAYDVR0fBIIBDzCC
-AQswKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvc2VydmVyMS5jcmwwgd6g
-gduggdikgdUwgdIxCzAJBgNVBAYTAlVTMRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE7
-MDkGA1UECxMyd3d3LmVudHJ1c3QubmV0L0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0
-ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwCwYDVR0PBAQDAgEGMB8GA1Ud
-IwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMB0GA1UdDgQWBBSnxxOgegE8ne+C
-SIJI1XNRthJWKjAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIAgTANBgkqhkiG9w0B
-AQUFAAOBgQBK8bPOaGnjWKNh7bYWyJOxGDA+4HLfTz3iTeG4/D/ByeNFqV2pwdqj
-5TbXjtYPrTavbLxE5ppGlKYRoNBS59pVsPYchftjUnu2mY8f4stHZKLrCGXmUdsc
-S21/U58eDTGT1DBdHm4BBydgXbvT9ONsHSAPdSozEKe3idepFxQyAw==
+MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
+IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
+MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
+SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
+IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
+0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
+TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
+RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
+zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
+BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
+AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
+PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
+BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
+9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
+Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
+Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
+n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
+H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
-MIIEUDCCA7mgAwIBAgIJAN4ppNGwj6yIMA0GCSqGSIb3DQEBBAUAMIHMMQswCQYD
-VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j
-aXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5jLjEpMCcGA1UECxMgTGluZGVu
-IExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIExpbmRlbiBMYWIg
-Q2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZIhvcNAQkBFhBjYUBsaW5kZW5s
-YWIuY29tMB4XDTA1MDQyMTAyNDAzMVoXDTI1MDQxNjAyNDAzMVowgcwxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
-c2NvMRkwFwYDVQQKExBMaW5kZW4gTGFiLCBJbmMuMSkwJwYDVQQLEyBMaW5kZW4g
-TGFiIENlcnRpZmljYXRlIEF1dGhvcml0eTEpMCcGA1UEAxMgTGluZGVuIExhYiBD
-ZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgkqhkiG9w0BCQEWEGNhQGxpbmRlbmxh
-Yi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKXh1MThucdTbMg9bYBO
-rAm8yWns32YojB0PRfbq8rUjepEhTm3/13s0u399Uc202v4ejcGhkIDWJZd2NZMF
-oKrhmRfxGHSKPCuFaXC3jh0lRECj7k8FoPkcmaPjSyodrDFDUUuv+C06oYJoI+rk
-8REyal9NwgHvqCzOrZtiTXAdAgMBAAGjggE2MIIBMjAdBgNVHQ4EFgQUO1zK2e1f
-1wO1fHAjq6DTJobKDrcwggEBBgNVHSMEgfkwgfaAFDtcytntX9cDtXxwI6ug0yaG
-yg63oYHSpIHPMIHMMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEW
-MBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQTGluZGVuIExhYiwgSW5j
-LjEpMCcGA1UECxMgTGluZGVuIExhYiBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAn
-BgNVBAMTIExpbmRlbiBMYWIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYJKoZI
-hvcNAQkBFhBjYUBsaW5kZW5sYWIuY29tggkA3imk0bCPrIgwDAYDVR0TBAUwAwEB
-/zANBgkqhkiG9w0BAQQFAAOBgQA/ZkgfvwHYqk1UIAKZS3kMCxz0HvYuEQtviwnu
-xA39CIJ65Zozs28Eg1aV9/Y+Of7TnWhW+U3J3/wD/GghaAGiKK6vMn9gJBIdBX/9
-e6ef37VGyiOEFFjnUIbuk0RWty0orN76q/lI/xjCi15XSA/VSq2j4vmnwfZcPTDu
-glmQ1A==
+MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
+WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
+AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
+OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
+T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
+JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
+Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
+PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
+aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
+TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
+LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
+BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
+dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
+AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
+NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
+b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
+ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
+fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
+BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
+cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
+HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
+CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
+3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
+6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
+HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
+Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
+Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
+DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
+5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
+gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
+aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
+izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
+DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
+Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
+cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
+YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
+OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
+bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
+dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
+18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
+yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
+LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
+A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
+zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
+BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
+GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
+cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
+HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
+CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
+BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
+cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
+YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
+YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
+ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
+00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
+cCOxgN8aIDjnfg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN
+AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp
+dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw
+MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw
+CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ
+MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB
+SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz
+ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH
+LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP
+PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL
+2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w
+ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC
+MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk
+AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0
+AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz
+AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz
+AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f
+BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY
+P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi
+CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g
+kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95
+HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS
+na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q
+qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z
+TbvGRNs2yyqcjg==
-----END CERTIFICATE-----
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index 89e5949fbe..15434f2b8f 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -220,8 +220,7 @@
<map>
<key>desc</key>
<string>Set the detail level.
- 0 - low, 1 - medium, 2 - high, 3 - ultra
- </string>
+0 - low, 1 - medium, 2 - high, 3 - ultra</string>
<key>count</key>
<integer>1</integer>
</map>
@@ -229,10 +228,7 @@
<key>setdefault</key>
<map>
<key>desc</key>
- <string> specify the value of a particular
- configuration variable which can be
- overridden by settings.xml
- </string>
+ <string>specify the value of a particular configuration variable which can be overridden by settings.xml.</string>
<key>count</key>
<integer>2</integer>
<!-- Special case. Mapped to settings procedurally. -->
@@ -241,10 +237,7 @@
<key>set</key>
<map>
<key>desc</key>
- <string> specify the value of a particular
- configuration variable that
- overrides all other settings
- </string>
+ <string>specify the value of a particular configuration variable that overrides all other settings.</string>
<key>count</key>
<integer>2</integer>
<key>compose</key>
diff --git a/indra/newview/app_settings/keys.xml b/indra/newview/app_settings/keys.xml
index d085475c6c..6e3673e7d9 100644
--- a/indra/newview/app_settings/keys.xml
+++ b/indra/newview/app_settings/keys.xml
@@ -181,7 +181,7 @@
<binding key="PAD_DIVIDE" mask="CTL_ALT_SHIFT" command="start_gesture"/>
</third_person>
- # Basic editing camera control
+ <!-- Basic editing camera control -->
<edit>
<binding key="A" mask="NONE" command="spin_around_cw"/>
<binding key="D" mask="NONE" command="spin_around_ccw"/>
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 263b73ba23..9fa4046fdf 100644
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -498,6 +498,7 @@ PARCEL_DETAILS_OWNER Used with llGetParcelDetails to get the parcel owner id.
PARCEL_DETAILS_GROUP Used with llGetParcelDetails to get the parcel group id.
PARCEL_DETAILS_AREA Used with llGetParcelDetails to get the parcel area in square meters.
PARCEL_DETAILS_ID Used with llGetParcelDetails to get the parcel id.
+PARCEL_DETAILS_SEE_AVATARS Used with llGetParcelDetails to get the avatars visibility setting.
STRING_TRIM_HEAD Used with llStringTrim to trim leading spaces from a string.
STRING_TRIM_TAIL Used with llStringTrim to trim trailing spaces from a string.
diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml
index 9f4e89691f..ae72dee900 100644
--- a/indra/newview/app_settings/logcontrol.xml
+++ b/indra/newview/app_settings/logcontrol.xml
@@ -44,7 +44,6 @@
<array>
<!-- sample entry for debugging a specific item -->
<!-- <string>Voice</string> -->
- <string>Capabilities</string>
</array>
</map>
</array>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 76fecdf05e..6ebb0162a4 100755..100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16,14 +16,16 @@
<key>AFKTimeout</key>
<map>
<key>Comment</key>
- <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).
- Valid values are: 0, 120, 300, 600, 1800</string>
+ <string>
+ Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).
+ Valid values are: 0, 120, 300, 600, 1800
+</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <real>300</real>
+ <real>0</real>
</map>
<key>AdminMenu</key>
<map>
@@ -796,6 +798,61 @@
<key>Value</key>
<integer>5</integer>
</map>
+ <key>Socks5ProxyEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Use Socks5 Proxy</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>HttpProxyType</key>
+ <map>
+ <key>Comment</key>
+ <string>Proxy type to use for HTTP operations</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Socks</string>
+ </map>
+ <key>Socks5ProxyHost</key>
+ <map>
+ <key>Comment</key>
+ <string>Socks 5 Proxy Host</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string></string>
+ </map>
+ <key>Socks5ProxyPort</key>
+ <map>
+ <key>Comment</key>
+ <string>Socks 5 Proxy Port</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <integer>1080</integer>
+ </map>
+ <key>Socks5AuthType</key>
+ <map>
+ <key>Comment</key>
+ <string>Selected Auth mechanism for Socks5</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>None</string>
+ </map>
<key>BuildAxisDeadZone0</key>
<map>
<key>Comment</key>
@@ -1627,17 +1684,6 @@
<string />
</array>
</map>
- <key>CompressSnapshotsToDisk</key>
- <map>
- <key>Comment</key>
- <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>ConnectAsGod</key>
<map>
<key>Comment</key>
@@ -1803,6 +1849,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>CurlUseMultipleThreads</key>
+ <map>
+ <key>Comment</key>
+ <string>Use background threads for executing curl_multi_perform (requires restart)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>Cursor3D</key>
<map>
<key>Comment</key>
@@ -1924,6 +1981,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>DebugShowPrivateMem</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Private Mem Info</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DebugShowRenderInfo</key>
<map>
<key>Comment</key>
@@ -1935,17 +2003,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>DebugShowUploadCost</key>
- <map>
- <key>Comment</key>
- <string>Show what it would cost to upload assets in current scene</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>DebugShowRenderMatrices</key>
<map>
<key>Comment</key>
@@ -1979,6 +2036,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>DebugShowUploadCost</key>
+ <map>
+ <key>Comment</key>
+ <string>Show mesh upload cost</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>DebugShowXUINames</key>
<map>
<key>Comment</key>
@@ -3848,7 +3916,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>https://www.xstreetsl.com/modules.php?name=Marketplace&amp;CategoryID=233</string>
+ <string>https://marketplace.secondlife.com/products/search?search[category_id]=200&amp;search[maturity][]=General&amp;search[page]=1&amp;search[per_page]=12</string>
</map>
<key>GridCrossSections</key>
<map>
@@ -3991,7 +4059,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://search-beta.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]&amp;sid=[SESSION_ID]&amp;rid=[REGION_ID]&amp;pid=[PARCEL_ID]&amp;channel=[CHANNEL]&amp;version=[VERSION]&amp;major=[VERSION_MAJOR]&amp;minor=[VERSION_MINOR]&amp;patch=[VERSION_PATCH]&amp;build=[VERSION_BUILD]</string>
+ <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]</string>
</map>
<key>WebProfileURL</key>
<map>
@@ -4180,6 +4248,28 @@
<key>Value</key>
<real>1.0</real>
</map>
+ <key>InventoryDisplayInbox</key>
+ <map>
+ <key>Comment</key>
+ <string>Override received items inventory inbox display</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>InventoryDisplayOutbox</key>
+ <map>
+ <key>Comment</key>
+ <string>Override merchant inventory outbox display</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>InventoryLinking</key>
<map>
<key>Comment</key>
@@ -4839,7 +4929,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string />
+ <string/>
</map>
<key>LosslessJ2CUpload</key>
<map>
@@ -4861,7 +4951,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <real>20.0</real>
+ <real>60.0</real>
</map>
<key>MapOverlayIndex</key>
<map>
@@ -5380,6 +5470,17 @@
<key>Value</key>
<real>48.0</real>
</map>
+ <key>MaxHeapSize</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum heap size (GB)</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>1.6</real>
+ </map>
<key>MaxSelectDistance</key>
<map>
<key>Comment</key>
@@ -5402,6 +5503,17 @@
<key>Value</key>
<real>60.0</real>
</map>
+ <key>MediaPluginDebugging</key>
+ <map>
+ <key>Comment</key>
+ <string>Turn on debugging messages that may help diagnosing media issues (WARNING: May reduce performance).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MediaControlFadeTime</key>
<map>
<key>Comment</key>
@@ -5501,6 +5613,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>MemoryFailurePreventionEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>If set, the viewer will quit to avoid crash when memory failure happens</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>MemoryLogFrequency</key>
<map>
<key>Comment</key>
@@ -5512,6 +5635,17 @@
<key>Value</key>
<real>600.0</real>
</map>
+ <key>MemoryPrivatePoolEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Enable the private memory pool management</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>MemProfiling</key>
<map>
<key>Comment</key>
@@ -5587,7 +5721,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <real>0</real>
+ <real>1</real>
</map>
<key>MeshUploadLogXML</key>
<map>
@@ -5611,6 +5745,17 @@
<key>Value</key>
<real>0</real>
</map>
+ <key>MeshUploadTimeOut</key>
+ <map>
+ <key>Comment</key>
+ <string>Maximum time in seconds for llcurl to execute a mesh uoloading request</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <real>600</real>
+ </map>
<key>MigrateCacheDirectory</key>
<map>
<key>Comment</key>
@@ -6021,10 +6166,12 @@
<key>ToastButtonWidth</key>
<map>
<key>Comment</key>
- <string>Default width of buttons in the toast.
+ <string>
+ Default width of buttons in the toast.
Notes:
If required width will be less then this one, a button will be reshaped to default size , otherwise to required
- Change of this parameter will affect the layout of buttons in notification toast.</string>
+ Change of this parameter will affect the layout of buttons in notification toast.
+</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -6546,7 +6693,28 @@
<key>Value</key>
<integer>0</integer>
</map>
-
+ <key>PostFirstLoginIntroURL</key>
+ <map>
+ <key>Comment</key>
+ <string>URL of intro presenatation after first time users first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string></string>
+ </map>
+ <key>PostFirstLoginIntroViewed</key>
+ <map>
+ <key>Comment</key>
+ <string>Flag indicating if user has seen intro presenatation after first time users first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>PrecachingDelay</key>
<map>
<key>Comment</key>
@@ -7182,7 +7350,7 @@
</array>
</map>
- <key>RenderAnisotropic</key>
+ <key>RenderAnisotropic</key>
<map>
<key>Comment</key>
<string>Render textures using anisotropic filtering</string>
@@ -7295,8 +7463,10 @@
<key>RenderPerformanceTest</key>
<map>
<key>Comment</key>
- <string>Disable rendering of everything but in-world content for
- performance testing</string>
+ <string>
+ Disable rendering of everything but in-world content for
+ performance testing
+</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -9134,28 +9304,51 @@
<key>Value</key>
<real>1.0</real>
</map>
- <key>MeshStreamingCostScaler</key>
+ <key>MeshTriangleBudget</key>
<map>
<key>Comment</key>
- <string>DEBUG</string>
+ <string>Target visible triangle budget to use when estimating streaming cost.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
- <string>F32</string>
+ <string>U32</string>
<key>Value</key>
- <real>2.0</real>
+ <real>250000</real>
</map>
- <key>MeshThreadCount</key>
+ <key>MeshMetaDataDiscount</key>
<map>
<key>Comment</key>
- <string>Number of threads to use for loading meshes.</string>
+ <string>Number of bytes to deduct for metadata when determining streaming cost.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>U32</string>
<key>Value</key>
- <integer>8</integer>
+ <real>384</real>
</map>
+ <key>MeshMinimumByteSize</key>
+ <map>
+ <key>Comment</key>
+ <string>Minimum number of bytes per LoD block when determining streaming cost.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <real>16</real>
+ </map>
+ <key>MeshBytesPerTriangle</key>
+ <map>
+ <key>Comment</key>
+ <string>Approximation of bytes per triangle to use for determining mesh streaming cost.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>U32</string>
+ <key>Value</key>
+ <real>16</real>
+ </map>
+
<key>MeshMaxConcurrentRequests</key>
<map>
<key>Comment</key>
@@ -9387,6 +9580,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>ShowAdvancedBuilderOptions</key>
+ <map>
+ <key>Comment</key>
+ <string>Shows physics and display weight</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>ShowAdvancedGraphicsSettings</key>
<map>
<key>Comment</key>
@@ -9627,7 +9831,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>ShowSnapshotButton</key>
<map>
@@ -10237,17 +10441,6 @@
<key>Value</key>
<real>0.300000011921</real>
</map>
- <key>SkyEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the sky defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>0</integer>
- </map>
<key>SkyNightColorShift</key>
<map>
<key>Comment</key>
@@ -10289,17 +10482,6 @@
<real>0.1</real>
</array>
</map>
- <key>SkyUseClassicClouds</key>
- <map>
- <key>Comment</key>
- <string>Whether to use the old Second Life particle clouds or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>SnapEnabled</key>
<map>
<key>Comment</key>
@@ -10914,7 +11096,7 @@
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <real>-2</real>
+ <real>-1</real>
</map>
<key>UIExtraTriangleWidth</key>
<map>
@@ -10925,7 +11107,7 @@
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <real>2</real>
+ <real>4</real>
</map>
<key>UIFloaterCloseBoxSize</key>
<map>
@@ -11917,6 +12099,61 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>UseEnvironmentFromRegion</key>
+ <map>
+ <key>Comment</key>
+ <string>Choose whether to use the region's environment settings, or override them with the local settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>UseDayCycle</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether to use use a day cycle or a fixed sky.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ <key>WaterPresetName</key>
+ <map>
+ <key>Comment</key>
+ <string>Water preset to use. May be superseded by region settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
+ <key>SkyPresetName</key>
+ <map>
+ <key>Comment</key>
+ <string>Sky preset to use. May be superseded by region settings or by a day cycle (see DayCycleName).</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
+ <key>DayCycleName</key>
+ <map>
+ <key>Comment</key>
+ <string>Day cycle to use. May be superseded by region settings.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>Default</string>
+ </map>
<key>UseExternalBrowser</key>
<map>
<key>Comment</key>
@@ -12491,52 +12728,14 @@
<key>WatchdogEnabled</key>
<map>
<key>Comment</key>
- <string>Controls whether the thread watchdog timer is activated.</string>
+ <string>Controls whether the thread watchdog timer is activated. Value is boolean. Set to -1 to defer to built-in default.</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
<string>S32</string>
<key>Value</key>
- <integer>20</integer>
- </map>
- <key>WaterEditPresets</key>
- <map>
- <key>Comment</key>
- <string>Whether to be able to edit the water defaults or not</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
<integer>0</integer>
</map>
- <key>WaterFogColor</key>
- <map>
- <key>Comment</key>
- <string>Water fog color</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Color4</string>
- <key>Value</key>
- <array>
- <real>0.0863</real>
- <real>0.168</real>
- <real>0.212</real>
- <real>0</real>
- </array>
- </map>
- <key>WaterFogDensity</key>
- <map>
- <key>Comment</key>
- <string>Water fog density</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>16.0</real>
- </map>
<key>WaterGLFogDensityScale</key>
<map>
<key>Comment</key>
@@ -13351,5 +13550,43 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>WebProfileRect</key>
+ <map>
+ <key>Comment</key>
+ <string>Web profile dimensions</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Rect</string>
+ <key>Value</key>
+ <array>
+ <integer>0</integer>
+ <integer>650</integer>
+ <integer>490</integer>
+ <integer>0</integer>
+ </array>
+ </map>
+ <key>HelpFloaterOpen</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Help Floater on login?</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
+ <key>ShowHelpOnFirstLogin</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Help Floater on first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
</map>
</llsd>
diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml
index 079a54f957..bfc09286e3 100644
--- a/indra/newview/app_settings/settings_files.xml
+++ b/indra/newview/app_settings/settings_files.xml
@@ -20,7 +20,8 @@
file_name="settings.xml"
file_name_setting="ClientSettingsFile"/>
<file name="CrashSettings"
- file_name="settings_crash_behavior"/>
+ file_name="settings_crash_behavior.xml"
+ file_name_setting="CrashSettingsFile"/>
<file name="Warnings"
file_name="ignorable_dialogs.xml"
file_name_setting="WarningSettingsFile"/>
@@ -61,4 +62,4 @@
file_name="colors.xml"
file_name_setting="SkinningSettingsFile"/>
</group>
-</settings_files> \ No newline at end of file
+</settings_files>
diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml
index 70a75cb4ca..29e52ab054 100644
--- a/indra/newview/app_settings/settings_minimal.xml
+++ b/indra/newview/app_settings/settings_minimal.xml
@@ -459,5 +459,16 @@
<key>Value</key>
<integer>0</integer>
</map>
- </map>
+ <key>ShowHelpOnFirstLogin</key>
+ <map>
+ <key>Comment</key>
+ <string>Show Help Floater on first login</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
+ </map>
</llsd>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index ff24efaf2c..1142f01232 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -33,6 +33,17 @@
<key>Value</key>
<string />
</map>
+ <key>LastInventoryInboxExpand</key>
+ <map>
+ <key>Comment</key>
+ <string>The last time the received items inbox was expanded.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
<key>LastLogoff</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl
index b0fa0ddd3e..b631ecb7d2 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl
@@ -2,6 +2,24 @@
* @file avatarF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
index d9f29ced4f..c72da8d758 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
@@ -2,6 +2,24 @@
* @file avatarSkinV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
index 2796222c68..c2fe60ddaf 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
@@ -2,6 +2,24 @@
* @file avatarV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl
index d86ef19a04..4296e551db 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl
@@ -2,6 +2,24 @@
* @file eyeballF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
index 2eb814bd91..1a0866be0a 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
@@ -2,6 +2,24 @@
* @file eyeballV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
index 7613e50dca..09688b2be2 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
@@ -1,8 +1,25 @@
/**
* @file objectSkinV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
index 2638351e96..374808c091 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
@@ -2,6 +2,24 @@
* @file pickAvatarF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl
index 86b189b282..e25d84a594 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl
@@ -2,6 +2,24 @@
* @file pickAvatarV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
index 4a0815a163..19de0c0b39 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -2,6 +2,24 @@
* @file alphaF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
index b0d029dbf4..d4f56896cf 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file alphaF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
index ac3f7189c2..d57b8f8525 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file alphaSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
index 44cb78e914..f6a280462e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
@@ -2,6 +2,24 @@
* @file alphaV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
index 870d593311..0c930848e5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
@@ -1,8 +1,25 @@
/**
* @file avatarShadowF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
index c7a4f86727..bf4e79d815 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
@@ -1,8 +1,25 @@
/**
* @file attachmentShadowV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
index 68e4055cf2..f70ea4da52 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
@@ -2,6 +2,24 @@
* @file avatarAlphaV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
index 7bc78fe407..d0f3397932 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
@@ -2,6 +2,24 @@
* @file avatarEyesV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index 3268618093..3f30402583 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -2,6 +2,24 @@
* @file avatarF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
index 78986ab12e..c9a349f026 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
@@ -2,6 +2,24 @@
* @file avatarShadowF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
index f177fcd8f1..3d2ad397df 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
@@ -2,6 +2,24 @@
* @file avatarShadowV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
index 7eac11287a..37fcef81f3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
@@ -2,6 +2,24 @@
* @file avatarV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
index 8c75c8045a..3609cc054b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
@@ -2,6 +2,24 @@
* @file blurLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl
index 6ca51377c1..c858eb7a3a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl
@@ -2,6 +2,24 @@
* @file blurLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
index 862f809de5..e904b7ded0 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
@@ -2,6 +2,24 @@
* @file blurLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
index 75b4dc624a..429a891f07 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -2,6 +2,24 @@
* @file bumpF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
index dc69519a85..7d934e7ff8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file bumpV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
index 5b6726488b..92fd41554d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
@@ -2,6 +2,24 @@
* @file bumpV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
index ef300d5631..f4310dae95 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
@@ -2,6 +2,24 @@
* @file WLCloudsF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
index 3eac63076c..c175a834c2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
@@ -2,6 +2,24 @@
* @file WLCloudsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
new file mode 100644
index 0000000000..933e50fed1
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -0,0 +1,48 @@
+/**
+ * @file diffuseF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+varying vec3 vary_normal;
+
+void main()
+{
+ vec4 col = gl_Color * texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color;
+
+ if (col.a < minimum_alpha || col.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragData[0] = vec4(col.rgb, 0.0);
+ gl_FragData[1] = vec4(0,0,0,0); // spec
+ vec3 nvn = normalize(vary_normal);
+ gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
new file mode 100644
index 0000000000..f3ad6f92de
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -0,0 +1,44 @@
+/**
+ * @file diffuseAlphaMaskIndexedF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+varying vec3 vary_normal;
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+void main()
+{
+ vec4 col = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (col.a < minimum_alpha || col.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragData[0] = vec4(col.rgb, 0.0);
+ gl_FragData[1] = vec4(0,0,0,0);
+ vec3 nvn = normalize(vary_normal);
+ gl_FragData[2] = vec4(nvn.xy * 0.5 + 0.5, nvn.z, 0.0);
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
index 43af480c50..9c9a8b56c5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -2,6 +2,24 @@
* @file diffuseF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
index e7b5dcce7f..4d996a099d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
@@ -2,6 +2,24 @@
* @file diffuseIndexedF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl
index 2c4caea109..1470d7c9ca 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file diffuseSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
index b56d1493c3..7c5a4d35b3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
@@ -2,6 +2,24 @@
* @file diffuseV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index d781e08548..6c506676af 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -2,6 +2,24 @@
* @file fullbrightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
index 2eed044b7c..a4ff0b80e2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
@@ -2,6 +2,24 @@
* @file fullbrightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
index 41c149e774..bfb7760af8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
@@ -2,6 +2,24 @@
* @file giF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl
index e86f2896da..190e32b6a3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl
@@ -2,6 +2,24 @@
* @file giV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index fa811f0d55..7152e13946 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -1,10 +1,30 @@
/**
* @file impostorF.glsl
*
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
+uniform float minimum_alpha;
+uniform float maximum_alpha;
uniform sampler2D diffuseMap;
@@ -14,6 +34,12 @@ uniform sampler2D specularMap;
void main()
{
vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy);
+
+ if (col.a < minimum_alpha || col.a > maximum_alpha)
+ {
+ discard;
+ }
+
gl_FragData[0] = vec4(col.rgb, col.a * 0.005);
gl_FragData[1] = texture2D(specularMap, gl_TexCoord[0].xy);
gl_FragData[2] = vec4(texture2D(normalMap, gl_TexCoord[0].xy).xyz, 0.0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
index 723777bd3a..0cf8c68173 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
@@ -2,6 +2,24 @@
* @file impostorV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
index 25e93ae266..4ba26fb0c6 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
@@ -2,6 +2,24 @@
* @file luminanceF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl
index 4baf1fc65a..9f22175f84 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl
@@ -2,6 +2,24 @@
* @file giV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
index 3c5c780d94..42212a978e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -2,6 +2,24 @@
* @file multiPointLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl
index 6c43679acf..863bac19cf 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl
@@ -2,6 +2,24 @@
* @file multiPointLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl
index 434fb6f534..1362a48daf 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl
@@ -2,6 +2,24 @@
* @file multiPointLightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
index 0d25d7792d..85b0ce5beb 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
@@ -2,6 +2,24 @@
* @file multiSpotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl
index c80a54346e..10285817c2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl
@@ -2,6 +2,24 @@
* @file multiSpotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
index 5efa3200d4..0771f9b91a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -2,6 +2,24 @@
* @file pointLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl
index feaf38115d..cdce58c84e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl
@@ -2,6 +2,24 @@
* @file pointLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl
index c510d8ad77..db1b9d3feb 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl
@@ -2,6 +2,24 @@
* @file pointLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
index f6b0402bb9..29f5f899ba 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
@@ -2,6 +2,24 @@
* @file postDeferredF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl
index 62ae5f917a..792102a64d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl
@@ -2,6 +2,24 @@
* @file postDeferredF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
index bf829bfc56..34e30a3070 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
@@ -2,6 +2,24 @@
* @file postDeferredF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl
index bf35dfe11c..41849858e7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl
@@ -2,6 +2,24 @@
* @file postDeferredF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
index 876f65ee3a..cb83dda795 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
@@ -2,6 +2,24 @@
* @file postDeferredV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
index fa3f04bcc8..99257daca4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
@@ -2,6 +2,24 @@
* @file postgiF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl
index eebe930666..6231ee68b7 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl
@@ -2,6 +2,24 @@
* @file postgiV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
new file mode 100644
index 0000000000..615317febf
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
@@ -0,0 +1,45 @@
+/**
+ * @file shadowAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+varying vec4 post_pos;
+
+void main()
+{
+ float alpha = texture2D(diffuseMap, gl_TexCoord[0].xy).a * gl_Color.a;
+
+ if (alpha < minimum_alpha || alpha > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragColor = vec4(1,1,1,1);
+
+ gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
new file mode 100644
index 0000000000..4be18a9c5e
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
@@ -0,0 +1,41 @@
+/**
+ * @file shadowAlphaMaskV.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+
+varying vec4 post_pos;
+
+void main()
+{
+ //transform vertex
+ vec4 pos = gl_ModelViewProjectionMatrix*gl_Vertex;
+
+ post_pos = pos;
+
+ gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
+
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+ gl_FrontColor = gl_Color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
index e0c5406483..541f08d5fe 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
@@ -1,19 +1,35 @@
/**
* @file shadowF.glsl
*
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
-uniform sampler2D diffuseMap;
-
varying vec4 post_pos;
void main()
{
- gl_FragColor = vec4(1,1,1,texture2D(diffuseMap, gl_TexCoord[0].xy).a * gl_Color.a);
+ gl_FragColor = vec4(1,1,1,1);
gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
index 9271a5115c..fc3ff45614 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
@@ -1,7 +1,25 @@
/**
* @file shadowV.glsl
*
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -17,7 +35,4 @@ void main()
post_pos = pos;
gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
-
- gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
- gl_FrontColor = gl_Color;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
index 820c82ffd7..59c0a994cd 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
@@ -2,6 +2,24 @@
* @file WLSkyF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
index 1ea00f723a..3a44bb6d26 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
@@ -2,6 +2,24 @@
* @file WLSkyV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
index 60082f40d6..855d89ebe6 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -270,72 +288,41 @@ void main()
vec4 diffuse = texture2DRect(diffuseRect, tc);
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
- calcAtmospherics(pos.xyz, 1.0);
+ vec3 col;
+ float bloom = 0.0;
+ if (diffuse.a < 0.9)
+ {
+ calcAtmospherics(pos.xyz, 1.0);
+
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
+ col *= diffuse.rgb;
- col *= diffuse.rgb;
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
- if (spec.a > 0.0) // specular reflection
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col.rgb, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- /*
- // screen-space cheap fakey reflection map
- //
- vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
- depth -= 0.5; // unbias depth
- // first figure out where we'll make our 2D guess from
- vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
- // Offset the guess source a little according to a trivial
- // checkerboard dither function and spec.a.
- // This is meant to be similar to sampling a blurred version
- // of the diffuse map. LOD would be better in that regard.
- // The goal of the blur is to soften reflections in surfaces
- // with low shinyness, and also to disguise our lameness.
- float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
- float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
- ref2d += vec2(checkoffset, checkoffset);
- ref2d += tc.xy; // use as offset from destination
- // Get attributes from the 2D guess point.
- // We average two samples of diffuse (not of anything else) per
- // pixel to try to reduce aliasing some more.
- vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
- texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
- float refdepth = texture2DRect(depthMap, ref2d).a;
- vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
- vec3 refn = texture2DRect(normalMap, ref2d).rgb;
- refn = normalize(vec3((refn.xy-0.5)*2.0,refn.z)); // unpack norm
- // figure out how appropriate our guess actually was
- float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
- // darken reflections from points which face away from the reflected ray - our guess was a back-face
- //refapprop *= step(dot(refnorm, refn), 0.0);
- refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
- // get appropriate light strength for guess-point.
- // reflect light direction to increase the illusion that
- // these are reflections.
- vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
- float reflit = max(dot(refn, reflight.xyz), 0.0);
- // apply sun color to guess-point, dampen according to inappropriateness of guess
- float refmod = min(refapprop, reflit);
- vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
- vec3 ssshiny = (refprod * spec.a);
- ssshiny *= 0.3; // dampen it even more
- */
- vec3 ssshiny = vec3(0,0,0);
-
- // add the two types of shiny together
- col += (ssshiny + dumbshiny) * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
-
+
gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ gl_FragColor.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl
index 9dfacfb520..f118b0da2a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -266,7 +284,7 @@ void main()
vec2 tc = vary_fragcoord.xy;
ivec2 itc = ivec2(tc);
- vec3 fcol = vec3(0,0,0);
+ vec4 fcol = vec4(0,0,0,0);
for (int i = 0; i < samples; ++i)
{
@@ -280,17 +298,16 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texelFetch(diffuseRect, itc, i);
- if (diffuse.a >= 1.0)
- {
- fcol += diffuse.rgb;
- }
- else
+ vec3 col;
+ float bloom = 0.0;
+
+ if (diffuse.a < 0.9)
{
vec4 spec = texelFetch(specularRect, itc, i);
calcAtmospherics(pos.xyz, 1.0);
- vec3 col = atmosAmbient(vec3(0));
+ col = atmosAmbient(vec3(0));
col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
col *= diffuse.rgb;
@@ -304,15 +321,22 @@ void main()
vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;
// add the two types of shiny together
- col += dumbshiny * spec.rgb;
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
}
col = atmosLighting(col);
col = scaleSoftClip(col);
- fcol += col;
+ col = mix(col, diffuse.rgb, diffuse.a);
}
+ else
+ {
+ col = diffuse.rgb;
+ }
+
+ fcol += vec4(col, bloom);
}
- gl_FragColor.rgb = fcol.rgb/samples;
- gl_FragColor.a = 0.0;
+ gl_FragColor = fcol/samples;
}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl
index 745cc01992..fed238510a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
index 9aaffc15bf..7363bd6715 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
@@ -2,6 +2,24 @@
* @file spotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl
index 4bb9bad275..0c0171881f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl
@@ -2,6 +2,24 @@
* @file multiSpotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
index 2cf7d194cc..4ab59d4d66 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
@@ -2,6 +2,24 @@
* @file starsF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
index c43125dad9..84adf6bc41 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
@@ -2,6 +2,24 @@
* @file starsV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
index f20886565a..78ea15e87a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
@@ -2,6 +2,24 @@
* @file sunLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl
index f20886565a..78ea15e87a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl
@@ -2,6 +2,24 @@
* @file sunLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
index 665d8126a0..2f880d65dd 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -1,8 +1,25 @@
/**
* @file sunLightSSAOF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl
index 32d1b2149a..abb64334ed 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl
@@ -1,8 +1,25 @@
/**
* @file sunLightSSAOF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl
index 814deb3677..e7ab11c6ed 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl
@@ -2,6 +2,24 @@
* @file sunLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
index d005f67bf6..c6578ea177 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -2,6 +2,24 @@
* @file terrainF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
index 3038fd2966..fc19a73709 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
@@ -2,6 +2,24 @@
* @file terrainV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
index de7e038402..56a149523e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -2,6 +2,24 @@
* @file treeF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
index a9bef4292d..01401028d6 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
@@ -2,6 +2,24 @@
* @file treeV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
index 2710422d32..c3e7371c8e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -2,6 +2,24 @@
* @file waterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
index 5397290b11..9d415ade85 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
@@ -2,6 +2,24 @@
* @file waterV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
index 32f5f5f236..e827863436 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
@@ -2,6 +2,24 @@
* @file glowExtractF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl
index 9267a8585d..c2cc8ed567 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl
@@ -2,6 +2,24 @@
* @file glowExtractF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
index 76736fed53..8db6d1bf24 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
@@ -2,6 +2,24 @@
* @file glowExtractV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
index d3225546b3..75cff75ea9 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
@@ -2,6 +2,24 @@
* @file glowF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
index 9bb41626ae..a5aacc0196 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
@@ -2,6 +2,24 @@
* @file glowV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
index cdc2ca3da2..c61d5a2a08 100644
--- a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
@@ -2,6 +2,24 @@
* @file terrainF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl
index 8af981915b..917891c063 100644
--- a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl
@@ -2,6 +2,24 @@
* @file terrainV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
index d94d986581..711b42b95e 100644
--- a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
@@ -2,6 +2,24 @@
* @file terrainWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
index 06854fcc0a..72e8e739b3 100644
--- a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
@@ -2,6 +2,24 @@
* @file underWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
index 0f24e3c35a..4d555b566a 100644
--- a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
@@ -2,6 +2,24 @@
* @file waterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
index 630459b324..d44690d1fb 100644
--- a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
@@ -2,6 +2,24 @@
* @file waterFogF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
index 831d6a761c..610c06fbbc 100644
--- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
@@ -2,6 +2,24 @@
* @file waterV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
new file mode 100644
index 0000000000..27c63fdc8b
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
@@ -0,0 +1,35 @@
+/**
+ * @file customalphaF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform sampler2D diffuseMap;
+
+uniform float custom_alpha;
+
+void main()
+{
+ vec4 color = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy);
+ color.a *= custom_alpha;
+ gl_FragColor = color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl
new file mode 100644
index 0000000000..c4c896c35c
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file customalphaV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_FrontColor = gl_Color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
new file mode 100644
index 0000000000..b8963e1dec
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
@@ -0,0 +1,35 @@
+/**
+ * @file glowcombineF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#extension GL_ARB_texture_rectangle : enable
+
+uniform sampler2D glowMap;
+uniform sampler2DRect screenMap;
+
+void main()
+{
+ gl_FragColor = texture2D(glowMap, gl_TexCoord[0].xy) +
+ texture2DRect(screenMap, gl_TexCoord[1].xy);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl
new file mode 100644
index 0000000000..4c6360f71d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl
@@ -0,0 +1,33 @@
+/**
+ * @file glowcombineV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_TexCoord[1] = gl_MultiTexCoord1;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
index f6c6d945de..a3cb5225ba 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
@@ -2,6 +2,24 @@
* @file highlightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
index f114f766bf..da3bea6d06 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
@@ -2,6 +2,24 @@
* @file highlightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
new file mode 100644
index 0000000000..57248699cb
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
@@ -0,0 +1,29 @@
+/**
+ * @file occlusionF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+void main()
+{
+ gl_FragColor = vec4(1,1,1,1);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
new file mode 100644
index 0000000000..915e452e0f
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
@@ -0,0 +1,30 @@
+/**
+ * @file uiV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
new file mode 100644
index 0000000000..b1d2b949ac
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
@@ -0,0 +1,33 @@
+/**
+ * @file twotextureaddF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform sampler2D tex0;
+
+void main()
+{
+ float alpha = texture2D(tex0, gl_TexCoord[0].xy).a * gl_Color.a;
+
+ gl_FragColor = vec4(gl_Color.rgb, alpha);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
new file mode 100644
index 0000000000..fedf6ae546
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file solidcolorV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_FrontColor = gl_Color;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
new file mode 100644
index 0000000000..3408cc44f8
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
@@ -0,0 +1,32 @@
+/**
+ * @file twotextureaddF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform sampler2D tex0;
+uniform sampler2D tex1;
+
+void main()
+{
+ gl_FragColor = texture2D(tex0, gl_TexCoord[0].xy)+texture2D(tex1, gl_TexCoord[1].xy);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl
new file mode 100644
index 0000000000..94aa964be6
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file twotextureaddV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_TexCoord[1] = gl_MultiTexCoord1;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
new file mode 100644
index 0000000000..7694056b08
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
@@ -0,0 +1,31 @@
+/**
+ * @file uiF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform sampler2D diffuseMap;
+
+void main()
+{
+ gl_FragColor = gl_Color*texture2D(diffuseMap, gl_TexCoord[0].xy);
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
new file mode 100644
index 0000000000..b1b90d0b5e
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file uiV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
+ gl_TexCoord[0] = gl_MultiTexCoord0;
+ gl_FrontColor = gl_Color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
index 1796730c92..5cb3eb05a7 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
@@ -2,6 +2,24 @@
* @file lightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
index bfe0be9fdf..f3ba8b73a8 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
index 6f1fe91007..b4c8a9abce 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
index 19072cd052..925d6fbcfd 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
@@ -1,8 +1,25 @@
/**
* @file lightFullbrightShinyWaterF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
index 0ae6dc89e2..71238f7d31 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl
index 5d4bf2c33e..85cddc647d 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl
@@ -2,6 +2,24 @@
* @file lightFuncSpecularV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
index 574252af12..a9288b3df6 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
@@ -2,6 +2,24 @@
* @file lightFuncV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
index 29f575b7e5..7c9b7c218f 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
@@ -2,6 +2,24 @@
* @file lightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
index 65da5a6825..ca1af8fc79 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
@@ -2,6 +2,24 @@
* @file lightShinyWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl
index d491f1102e..4a59b8245d 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl
@@ -2,6 +2,24 @@
* @file lightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl
index ef38ee9699..742cb38d80 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl
@@ -2,6 +2,24 @@
* @file lightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
index 286c92326b..da76a977b6 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
@@ -2,6 +2,24 @@
* @file lightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl
index 772a420e33..3e0815226c 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl
@@ -2,6 +2,24 @@
* @file sumLightsSpecularV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl
index da60a3ddf5..c271dbcd18 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl
@@ -2,6 +2,24 @@
* @file sumLightsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
new file mode 100644
index 0000000000..11031a8829
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
@@ -0,0 +1,35 @@
+/**
+ * @file bumpF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform sampler2D texture0;
+uniform sampler2D texture1;
+
+void main()
+{
+ float tex0 = texture2D(texture0, gl_TexCoord[0].xy).a;
+ float tex1 = texture2D(texture1, gl_TexCoord[1].xy).a;
+
+ gl_FragColor = vec4(tex0+(1.0-tex1)-0.5);
+}
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
new file mode 100644
index 0000000000..c50ed86315
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file bumpV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+void main()
+{
+ //transform vertex
+ gl_Position = gl_ModelViewProjectionMatrix*gl_Vertex;
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+ gl_TexCoord[1] = gl_TextureMatrix[1] * gl_MultiTexCoord1;
+ gl_FrontColor = gl_Color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl
index c0b72115dd..0fab5e5001 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl
@@ -2,6 +2,24 @@
* @file fullbrightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl
index 391c06edc8..b312665032 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl
@@ -2,6 +2,24 @@
* @file fullbrightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
index f44a5ce32e..e1a7f263f7 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file shinySimpleSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
@@ -10,8 +27,6 @@
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
mat4 mat = getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
index 31e0f0a429..36b00dfbc1 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
@@ -2,6 +2,24 @@
* @file fullbrightShinyV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl
index 8ffb252f57..e1f3919907 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl
@@ -1,8 +1,25 @@
/**
* @file fullbrightShinyWaterF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl
index e5dafa8c78..b540054c56 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file fullbrightSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
@@ -10,8 +27,6 @@
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
//transform vertex
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl
index 3382384c99..22f731ffde 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl
@@ -2,6 +2,24 @@
* @file fullbrightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl
index 220f26614f..5d0ea0a8dd 100644
--- a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl
@@ -2,6 +2,24 @@
* @file fullbrightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
new file mode 100644
index 0000000000..92c09ce937
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
@@ -0,0 +1,44 @@
+/**
+ * @file impostorF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+uniform sampler2D diffuseMap;
+
+void main()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ gl_FragColor = color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
new file mode 100644
index 0000000000..eea51eba45
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
@@ -0,0 +1,34 @@
+/**
+ * @file impostorV.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+void main()
+{
+ //transform vertex
+ gl_Position = ftransform();
+ gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+
+ gl_FrontColor = gl_Color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
index d079de5377..f8f88e2577 100644
--- a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
@@ -2,6 +2,24 @@
* @file shinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl
index cd655f3bb5..f5fd4ededd 100644
--- a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file shinySimpleSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
@@ -11,8 +28,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
mat4 mat = getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
index 68a086dbc1..13a58f0d4a 100644
--- a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
@@ -2,6 +2,24 @@
* @file shinyV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl
index 4649d1c47c..1e72e23eef 100644
--- a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl
@@ -2,6 +2,24 @@
* @file shinyWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl
index b4e4dcfbbf..29a2ce617b 100644
--- a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl
@@ -2,6 +2,24 @@
* @file simpleF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl
index 900448035c..ad171f7b43 100644
--- a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file simpleSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
@@ -11,8 +28,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
void calcAtmospherics(vec3 inPositionEye);
mat4 getObjectSkinnedTransform();
-attribute vec4 object_weight;
-
void main()
{
//transform vertex
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
index b493f76fcc..dc1794e132 100644
--- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
@@ -2,6 +2,24 @@
* @file simpleV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl
index 4ec5ee43b4..2e87ac5bbc 100644
--- a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl
@@ -2,6 +2,24 @@
* @file simpleWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
index 3d05850ab3..aacc503e13 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
@@ -2,6 +2,24 @@
* @file atmosphericsF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl
index f1a0af21af..15738e37e8 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl
@@ -2,6 +2,24 @@
* @file atmosphericsHelpersV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl
index 73bbd57315..76d7d5059d 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl
@@ -2,6 +2,24 @@
* @file atmosphericsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl
index e0eb7b3767..dbacf28637 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl
@@ -2,6 +2,24 @@
* @file atmosphericVarsF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl
index a251213ff5..e051ac9851 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl
@@ -2,6 +2,24 @@
* @file atmosphericVarsV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
index 4958cb2f72..62f4e51449 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
@@ -2,6 +2,24 @@
* @file gammaF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
index 75929bc609..7c95ecdb14 100644
--- a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
+++ b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
@@ -2,6 +2,24 @@
* @file transportF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
index 3e8b719f93..f9f376c2b7 100644
--- a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
+++ b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
@@ -2,6 +2,24 @@
* @file eyeballV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
index 681e52de2a..839606cdcb 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
@@ -2,6 +2,24 @@
* @file alphaF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
index 5350359f75..84e49a5f8f 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file alphaF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
index 948a52da5b..20121da52d 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
@@ -1,8 +1,25 @@
/**
* @file alphaSkinnedV.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
index f616ecc872..307ae30098 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
@@ -2,6 +2,24 @@
* @file alphaV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
index 01e40afc4f..80f386ecb0 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
@@ -2,6 +2,24 @@
* @file avatarAlphaV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl
index 729e4b5543..d9eafb6eba 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl
@@ -2,6 +2,24 @@
* @file edgeF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl
index b22bc5b288..a84fdd5dc1 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl
@@ -2,6 +2,24 @@
* @file edgeF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl
index 393084a3db..9deff7bb2a 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl
@@ -2,6 +2,24 @@
* @file edgeV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
index f54186ffca..0b31cbefd1 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -2,6 +2,24 @@
* @file multiSpotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl
index fee32be3e3..1afa9a9fb4 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl
@@ -2,6 +2,24 @@
* @file multiSpotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
index 66a1a8515f..d7407332e5 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -267,34 +285,49 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texture2DRect(diffuseRect, tc);
- vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
-
- vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
- float scol = max(scol_ambocc.r, diffuse.a);
- float ambocc = scol_ambocc.g;
+
+ vec3 col;
+ float bloom = 0.0;
+
+ if (diffuse.a < 0.9)
+ {
+ vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
+
+ vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
+ float scol = max(scol_ambocc.r, diffuse.a);
+ float ambocc = scol_ambocc.g;
- calcAtmospherics(pos.xyz, ambocc);
+ calcAtmospherics(pos.xyz, ambocc);
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
- col *= diffuse.rgb;
+ col *= diffuse.rgb;
- if (spec.a > 0.0) // specular reflection
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
+
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- // add the two types of shiny together
- col += dumbshiny * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
gl_FragColor.rgb = col;
- gl_FragColor.a = 0.0;
+ gl_FragColor.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl
index 0bae10ca7d..1244294451 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl
@@ -2,6 +2,24 @@
* @file softenLightMSF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -255,7 +273,7 @@ void main()
vec2 tc = vary_fragcoord.xy;
ivec2 itc = ivec2(tc);
- vec3 fcol = vec3(0,0,0);
+ vec4 fcol = vec4(0,0,0,0);
vec2 scol_ambocc = texture2DRect(lightMap, tc).rg;
float ambocc = scol_ambocc.g;
@@ -270,38 +288,50 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texelFetch(diffuseRect, itc, i);
- vec4 spec = texelFetch(specularRect, itc, i);
+ vec3 col;
+ float bloom = 0.0;
+ if (diffuse.a < 0.9)
+ {
+ vec4 spec = texelFetch(specularRect, itc, i);
- float amb = 0;
+ float amb = 0;
- float scol = max(scol_ambocc.r, diffuse.a);
- amb += ambocc;
+ float scol = max(scol_ambocc.r, diffuse.a);
+ amb += ambocc;
- calcAtmospherics(pos.xyz, ambocc);
+ calcAtmospherics(pos.xyz, ambocc);
+
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+ col *= diffuse.rgb;
- col *= diffuse.rgb;
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
- if (spec.a > 0.0) // specular reflection
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- // add the two types of shiny together
- col += dumbshiny * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
- fcol += col;
+ fcol += vec4(col, bloom);
}
- gl_FragColor.rgb = fcol/samples;
- gl_FragColor.a = 0.0;
+ gl_FragColor = fcol/samples;
}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
index 745cc01992..fed238510a 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
index cd3828fbd4..25270f4939 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -2,6 +2,24 @@
* @file spotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl
index ec9b547a47..4962e73e39 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl
@@ -2,6 +2,24 @@
* @file multiSpotLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index 315139b415..1809cff1e5 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -2,6 +2,24 @@
* @file sunLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl
index 63d13c996d..ac4fe52655 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl
@@ -2,6 +2,24 @@
* @file sunLightMSF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
index d53850b489..681186d6b2 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -1,8 +1,25 @@
/**
* @file sunLightSSAOF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl
index a2a76eed9f..0fd7b7525d 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl
@@ -1,8 +1,25 @@
/**
* @file sunLightSSAOF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
index 814deb3677..e7ab11c6ed 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
@@ -2,6 +2,24 @@
* @file sunLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl
index dff4d4a68f..35411db04b 100644
--- a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl
@@ -2,6 +2,24 @@
* @file blurf.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl
index de469542f9..3e47ed15fe 100644
--- a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl
@@ -2,6 +2,24 @@
* @file blurV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl
index 8871bb3fc7..42ab8d40e8 100644
--- a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl
@@ -2,6 +2,24 @@
* @file colorFilterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl
index 9c52b8dd5d..25806cd914 100644
--- a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl
@@ -2,6 +2,24 @@
* @file drawQuadV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl
index 713f8021de..9187c8ec31 100644
--- a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl
@@ -2,6 +2,24 @@
* @file extractF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl
index fd94b2e95f..76b675a9bd 100644
--- a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl
@@ -2,6 +2,24 @@
* @file nightVisionF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl
index a1a9c9716c..abf1be6645 100644
--- a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl
+++ b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl
@@ -2,6 +2,24 @@
* @file simpleF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl
index 9527dc469b..df08fce0da 100644
--- a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl
@@ -2,6 +2,24 @@
* @file terrainF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl
index 2658bee88d..36d0c99b63 100644
--- a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl
+++ b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl
@@ -2,6 +2,24 @@
* @file terrainV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl
index 974e227b77..90468b45a2 100644
--- a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl
@@ -2,6 +2,24 @@
* @file terrainWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl
index 702e0881ac..f947aa4be1 100644
--- a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl
@@ -2,6 +2,24 @@
* @file underWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl
index c4e4bc08c5..dc543b2231 100644
--- a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl
@@ -2,6 +2,24 @@
* @file waterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl
index b66b72b401..4bdfce9260 100644
--- a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl
+++ b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl
@@ -2,6 +2,24 @@
* @file waterFogF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl
new file mode 100644
index 0000000000..4c05329065
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl
@@ -0,0 +1,48 @@
+/**
+ * @file lightAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 atmosLighting(vec3 light);
+vec3 scaleSoftClip(vec3 light);
+
+void default_lighting()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ color.rgb = scaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl
new file mode 100644
index 0000000000..0de909353e
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl
@@ -0,0 +1,51 @@
+/**
+ * @file lightAlphaMaskNonIndexedF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+
+uniform sampler2D diffuseMap;
+
+vec3 atmosLighting(vec3 light);
+vec3 scaleSoftClip(vec3 light);
+
+void default_lighting()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ color.rgb = scaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl
index 4c31602736..d12d88f1c5 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl
@@ -2,6 +2,24 @@
* @file lightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl
new file mode 100644
index 0000000000..8c7713c08d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl
@@ -0,0 +1,47 @@
+/**
+ * @file lightFullbrightAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+void fullbright_lighting()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ color.rgb = fullbrightScaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl
index 95bd052b5d..f03b1fdc74 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
new file mode 100644
index 0000000000..89468b9665
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
@@ -0,0 +1,49 @@
+/**
+ * @file lightFullbrightNonIndexedAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+uniform sampler2D diffuseMap;
+
+void fullbright_lighting()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ color.rgb = fullbrightScaleSoftClip(color.rgb);
+
+ gl_FragColor = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl
index b1e61e1a33..a909ff608a 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl
index 26f0ea84e0..d2bc912edb 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl
index 953298da0d..af73168c13 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl
index a6e10a249d..e9dab85095 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl
@@ -1,8 +1,25 @@
/**
* @file lightFullbrightShinyWaterF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
index b4bb665a2b..e0a7986705 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
@@ -1,8 +1,25 @@
/**
* @file lightFullbrightShinyWaterF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl
new file mode 100644
index 0000000000..e5998b77a9
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl
@@ -0,0 +1,47 @@
+/**
+ * @file lightFullbrightWaterAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec4 diffuseLookup(vec2 texcoord);
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void fullbright_lighting_water()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ gl_FragColor = applyWaterFog(color);
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl
index 887d4130e7..20ff3712af 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
new file mode 100644
index 0000000000..3fdd110f7d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
@@ -0,0 +1,47 @@
+/**
+ * @file lightFullbrightWaterNonIndexedAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+vec3 fullbrightAtmosTransport(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void fullbright_lighting_water()
+{
+ vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = fullbrightAtmosTransport(color.rgb);
+
+ gl_FragColor = applyWaterFog(color);
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl
index 1234682ae9..01b89019b1 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightFullbrightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl
index 149cf791f5..d419c2d116 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl
index 300fcac092..ba4cd949d6 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl
@@ -2,6 +2,24 @@
* @file lightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl
index e877c0abb1..3b30ebf6f1 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightShinyF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl
index 07572fa915..c451e68763 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl
@@ -2,6 +2,24 @@
* @file lightShinyWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl
index 3904179427..eeb997fb5f 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightShinyWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl
index 3384f64d07..24bf9b3cee 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl
@@ -2,6 +2,24 @@
* @file lightSpecularV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl
index 10c770fcc2..8045809b82 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl
@@ -2,6 +2,24 @@
* @file lightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl
new file mode 100644
index 0000000000..072dcaa6b6
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl
@@ -0,0 +1,45 @@
+/**
+ * @file lightWaterAlphaMaskF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+vec3 atmosLighting(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void default_lighting_water()
+{
+ vec4 color = diffuseLookup(gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ gl_FragColor = applyWaterFog(color);
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl
new file mode 100644
index 0000000000..2df34da4b4
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl
@@ -0,0 +1,49 @@
+/**
+ * @file lightWaterAlphaMaskNonIndexedF.glsl
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+uniform float minimum_alpha;
+uniform float maximum_alpha;
+
+uniform sampler2D diffuseMap;
+
+vec3 atmosLighting(vec3 light);
+vec4 applyWaterFog(vec4 color);
+
+void default_lighting_water()
+{
+ vec4 color = texture2D(diffuseMap,gl_TexCoord[0].xy) * gl_Color;
+
+ if (color.a < minimum_alpha || color.a > maximum_alpha)
+ {
+ discard;
+ }
+
+ color.rgb = atmosLighting(color.rgb);
+
+ color = applyWaterFog(color);
+
+ gl_FragColor = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl
index 61341a9f1f..ae7be4d231 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl
@@ -2,6 +2,24 @@
* @file lightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl
index ba850b61d0..5a86dad827 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl
@@ -2,6 +2,24 @@
* @file lightWaterF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
index 8df2e6f222..d0a12479db 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
@@ -2,6 +2,24 @@
* @file sumLightsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
index 3d43a1813a..ad045a3058 100644
--- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
@@ -2,6 +2,24 @@
* @file sumLightsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl
index f49e74406f..819b28e4fd 100644
--- a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl
@@ -2,6 +2,24 @@
* @file fullbrightShinyV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl
index 3076fa3260..abf6e37b7c 100644
--- a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl
+++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl
@@ -2,6 +2,24 @@
* @file fullbrightV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl
index 49992d3535..44c711701b 100644
--- a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl
+++ b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl
@@ -2,6 +2,24 @@
* @file shinyV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl
index 5e02391767..b0114763c1 100644
--- a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl
+++ b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl
@@ -2,6 +2,24 @@
* @file simpleV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
index 21a0812c1b..fea3cbf69b 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
@@ -2,6 +2,24 @@
* @file atmosphericsF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
index ab4cf4806d..62a034ce05 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
@@ -2,6 +2,24 @@
* @file atmosphericsHelpersV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
index b61b0bb396..be990c1757 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
@@ -2,6 +2,24 @@
* @file atmosphericsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
index 3a6585bb33..a98c04b259 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
@@ -2,6 +2,24 @@
* @file atmosphericVars.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
index 0f6e231ca6..7c3cb88b3c 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
@@ -2,6 +2,24 @@
* @file atmosphericVars.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
index 20f907a006..b90cec119b 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
@@ -2,6 +2,24 @@
* @file WLCloudsF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
index 3eac63076c..c175a834c2 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
@@ -2,6 +2,24 @@
* @file WLCloudsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
index 6570dcb608..478373d729 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
@@ -2,6 +2,24 @@
* @file gammaF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
index d14c638130..ac569e8257 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
@@ -2,6 +2,24 @@
* @file WLSkyF.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
index 1ea00f723a..3a44bb6d26 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
@@ -2,6 +2,24 @@
* @file WLSkyV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
index 28381482c1..8a8e4cb0f6 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
@@ -2,6 +2,24 @@
* @file transportF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl
index 3d970d252c..151602dbc0 100644
--- a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl
+++ b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl
@@ -2,6 +2,24 @@
* @file avatarV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl
index 498fee7c66..616ea5fe9e 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl
@@ -2,6 +2,24 @@
* @file giDownsampleF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl
index eebe930666..6231ee68b7 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl
@@ -2,6 +2,24 @@
* @file postgiV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl
index 9896f8dafe..95913a502c 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl
@@ -2,6 +2,24 @@
* @file giF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl
index df4c6b3e0a..7c55fcc286 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl
@@ -2,6 +2,24 @@
* @file giFinalF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -24,4 +42,4 @@ void main()
gl_FragColor = bloom + diff;
//gl_FragColor.rgb = vec3(texture2DRect(edgeMap, vary_fragcoord.xy).a);
-} \ No newline at end of file
+}
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl
index 7e20d71529..a6a206502c 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl
@@ -2,6 +2,24 @@
* @file giFinalV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl
index e86f2896da..190e32b6a3 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl
@@ -2,6 +2,24 @@
* @file giV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl
index 980def6443..13517a26ba 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl
@@ -2,6 +2,24 @@
* @file luminanceF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl
index 9afeac6ddf..2d99ef5481 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl
@@ -2,6 +2,24 @@
* @file giV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl
index 6d4c20f68c..0364da6258 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl
@@ -2,6 +2,24 @@
* @file postDeferredF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl
index 876f65ee3a..cb83dda795 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl
@@ -2,6 +2,24 @@
* @file postDeferredV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl
index fc65881680..009b5cc743 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl
@@ -2,6 +2,24 @@
* @file postgiF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl
index eebe930666..6231ee68b7 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl
@@ -2,6 +2,24 @@
* @file postgiV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
index d38d33cc21..1c02adea89 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -268,91 +286,50 @@ void main()
float da = max(dot(norm.xyz, vary_light.xyz), 0.0);
vec4 diffuse = texture2DRect(diffuseRect, tc);
- vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
+ vec3 col;
+ float bloom = 0.0;
+
+ if (diffuse.a < 0.9)
+ {
+ vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
- da = texture2D(lightFunc, vec2(da, 0.0)).a;
+ da = texture2D(lightFunc, vec2(da, 0.0)).a;
- vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
- float scol = max(scol_ambocc.r, diffuse.a);
- float ambocc = scol_ambocc.g;
+ vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
+ float scol = max(scol_ambocc.r, diffuse.a);
+ float ambocc = scol_ambocc.g;
- calcAtmospherics(pos.xyz, ambocc);
+ calcAtmospherics(pos.xyz, ambocc);
- vec3 col = atmosAmbient(vec3(0));
- col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+ col = atmosAmbient(vec3(0));
+ col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
- col *= diffuse.rgb;
+ col *= diffuse.rgb;
- if (spec.a > 0.0) // specular reflection
+ if (spec.a > 0.0) // specular reflection
+ {
+ // the old infinite-sky shiny reflection
+ //
+ vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+ float sa = dot(refnormpersp, vary_light.xyz);
+ vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a;
+
+ // add the two types of shiny together
+ vec3 spec_contrib = dumbshiny * spec.rgb;
+ bloom = dot(spec_contrib, spec_contrib);
+ col += spec_contrib;
+ }
+
+ col = atmosLighting(col);
+ col = scaleSoftClip(col);
+
+ col = mix(col, diffuse.rgb, diffuse.a);
+ }
+ else
{
- // the old infinite-sky shiny reflection
- //
- vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
- float sa = dot(refnormpersp, vary_light.xyz);
- vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a;
-
- /*
- // screen-space cheap fakey reflection map
- //
- vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz));
- depth -= 0.5; // unbias depth
- // first figure out where we'll make our 2D guess from
- vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth;
- // Offset the guess source a little according to a trivial
- // checkerboard dither function and spec.a.
- // This is meant to be similar to sampling a blurred version
- // of the diffuse map. LOD would be better in that regard.
- // The goal of the blur is to soften reflections in surfaces
- // with low shinyness, and also to disguise our lameness.
- float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0
- float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5);
-
- ref2d += vec2(checkoffset, checkoffset);
- ref2d += tc.xy; // use as offset from destination
- // Get attributes from the 2D guess point.
- // We average two samples of diffuse (not of anything else) per
- // pixel to try to reduce aliasing some more.
- vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb +
- texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb);
- float refdepth = texture2DRect(depthMap, ref2d).a;
- vec3 refpos = getPosition_d(ref2d, refdepth).xyz;
- float refshad = texture2DRect(lightMap, ref2d).r;
- vec3 refn = texture2DRect(normalMap, ref2d).rgb;
- refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm
- refn = normalize(refn);
- // figure out how appropriate our guess actually was
- float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos)));
- // darken reflections from points which face away from the reflected ray - our guess was a back-face
- //refapprop *= step(dot(refnorm, refn), 0.0);
- refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant
- // get appropriate light strength for guess-point.
- // reflect light direction to increase the illusion that
- // these are reflections.
- vec3 reflight = reflect(lightnorm.xyz, norm.xyz);
- float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad);
- // apply sun color to guess-point, dampen according to inappropriateness of guess
- float refmod = min(refapprop, reflit);
- vec3 refprod = vary_SunlitColor * refcol.rgb * refmod;
- vec3 ssshiny = (refprod * spec.a);
- ssshiny *= 0.3; // dampen it even more
- */
- vec3 ssshiny = vec3(0,0,0);
-
- // add the two types of shiny together
- col += (ssshiny + dumbshiny) * spec.rgb;
+ col = diffuse.rgb;
}
-
- col = atmosLighting(col);
- col = scaleSoftClip(col);
gl_FragColor.rgb = col;
-
- //gl_FragColor.rgb = gi_col.rgb;
- gl_FragColor.a = 0.0;
-
- //gl_FragColor.rg = scol_ambocc.rg;
- //gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb;
- //gl_FragColor.rgb = norm.rgb*0.5+0.5;
- //gl_FragColor.rgb = vec3(ambocc);
- //gl_FragColor.rgb = vec3(scol);
+ gl_FragColor.a = bloom;
}
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl
index 745cc01992..fed238510a 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl
@@ -2,6 +2,24 @@
* @file softenLightF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl
index de7e038402..56a149523e 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl
@@ -2,6 +2,24 @@
* @file treeF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl
index 92347a5b4a..79bd017efc 100644
--- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl
+++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl
@@ -2,6 +2,24 @@
* @file sumLightsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
index 24bbc0a1a1..dcdc72ac02 100644
--- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
+++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
@@ -2,6 +2,24 @@
* @file sumLightsV.glsl
*
* $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2005, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
diff --git a/indra/newview/app_settings/windlight/days/Colder%20Tones.xml b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
new file mode 100644
index 0000000000..63d0b099e1
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
@@ -0,0 +1,28 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Midnight</string>
+ </array>
+ <array>
+ <real>0.24999989569187164</real>
+ <string>Purple</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Blue Midday</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Blizzard</string>
+ </array>
+ <array>
+ <real>0.87499958276748657</real>
+ <string>Ghost</string>
+ </array>
+ <array>
+ <real>0.99999958276748657</real>
+ <string>Midnight</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
new file mode 100644
index 0000000000..f75b52e6ed
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
@@ -0,0 +1,32 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Night</string>
+ </array>
+ <array>
+ <real>0.12499994784593582</real>
+ <string>Blizzard</string>
+ </array>
+ <array>
+ <real>0.24999989569187164</real>
+ <string>Sunrise</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Midday 3</string>
+ </array>
+ <array>
+ <real>0.68749970197677612</real>
+ <string>Pirate</string>
+ </array>
+ <array>
+ <real>0.81249970197677612</real>
+ <string>Coastal Sunset</string>
+ </array>
+ <array>
+ <real>0.99999958276748657</real>
+ <string>Midnight</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
new file mode 100644
index 0000000000..6dc1ba9f4d
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
@@ -0,0 +1,44 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>A-12AM</string>
+ </array>
+ <array>
+ <real>0.12499994784593582</real>
+ <string>A-3AM</string>
+ </array>
+ <array>
+ <real>0.22222213447093964</real>
+ <string>Barcelona</string>
+ </array>
+ <array>
+ <real>0.30208322405815125</real>
+ <string>Sunrise</string>
+ </array>
+ <array>
+ <real>0.37499985098838806</real>
+ <string>Sailor&apos;s Delight</string>
+ </array>
+ <array>
+ <real>0.53819423913955688</real>
+ <string>Coastal Afternoon</string>
+ </array>
+ <array>
+ <real>0.63194417953491211</real>
+ <string>Pirate</string>
+ </array>
+ <array>
+ <real>0.7048608660697937</real>
+ <string>Desert Sunset</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Coastal Sunset</string>
+ </array>
+ <array>
+ <real>0.87499958276748657</real>
+ <string>Blizzard</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
new file mode 100644
index 0000000000..302af5a9ba
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
@@ -0,0 +1,72 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.062499973922967911</real>
+ <string>A-12AM</string>
+ </array>
+ <array>
+ <real>0.12499994784593582</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.18749992549419403</real>
+ <string>A-3AM</string>
+ </array>
+ <array>
+ <real>0.24999989569187164</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.31249985098838806</real>
+ <string>A-6AM</string>
+ </array>
+ <array>
+ <real>0.37499985098838806</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.43749979138374329</real>
+ <string>A-9AM</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.5624997615814209</real>
+ <string>A-12PM</string>
+ </array>
+ <array>
+ <real>0.62499970197677612</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.68749970197677612</real>
+ <string>A-3PM</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.81249970197677612</real>
+ <string>A-6PM</string>
+ </array>
+ <array>
+ <real>0.87499958276748657</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.93749958276748657</real>
+ <string>A-9PM</string>
+ </array>
+ <array>
+ <real>0.99999958276748657</real>
+ <string>Sheer Surreality</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Tropicalia.xml b/indra/newview/app_settings/windlight/days/Tropicalia.xml
new file mode 100644
index 0000000000..89a56d4a13
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Tropicalia.xml
@@ -0,0 +1,32 @@
+<llsd>
+ <array>
+ <array>
+ <real>0.062499973922967911</real>
+ <string>Purple</string>
+ </array>
+ <array>
+ <real>0.16666659712791443</real>
+ <string>Funky Funky</string>
+ </array>
+ <array>
+ <real>0.31249985098838806</real>
+ <string>Sunrise</string>
+ </array>
+ <array>
+ <real>0.49999979138374329</real>
+ <string>Fine Day</string>
+ </array>
+ <array>
+ <real>0.66666638851165771</real>
+ <string>Desert Sunset</string>
+ </array>
+ <array>
+ <real>0.74999970197677612</real>
+ <string>Sailor&apos;s Delight</string>
+ </array>
+ <array>
+ <real>0.95833295583724976</real>
+ <string>Midnight</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/days/Weird-O.xml b/indra/newview/app_settings/windlight/days/Weird-O.xml
new file mode 100644
index 0000000000..1e312f2464
--- /dev/null
+++ b/indra/newview/app_settings/windlight/days/Weird-O.xml
@@ -0,0 +1,56 @@
+<llsd>
+ <array>
+ <array>
+ <real>0</real>
+ <string>Funky Funky</string>
+ </array>
+ <array>
+ <real>0.13194438815116882</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ <array>
+ <real>0.26041656732559204</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.40624985098838806</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ <array>
+ <real>0.43749979138374329</real>
+ <string>Ghost</string>
+ </array>
+ <array>
+ <real>0.46874979138374329</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.5486108660697937</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.6076386570930481</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.68055528402328491</real>
+ <string>Ghost</string>
+ </array>
+ <array>
+ <real>0.75694411993026733</real>
+ <string>Sheer Surreality</string>
+ </array>
+ <array>
+ <real>0.87847185134887695</real>
+ <string>Gelatto</string>
+ </array>
+ <array>
+ <real>0.91319411993026733</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ <array>
+ <real>0.96527737379074097</real>
+ <string>Funky Funky Funky</string>
+ </array>
+ </array>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Midday.xml b/indra/newview/app_settings/windlight/skies/Midday.xml
new file mode 100644
index 0000000000..119b3e1418
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midday.xml
@@ -0,0 +1,141 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>1.0499999523162842</real>
+ <real>1.0499999523162842</real>
+ <real>1.0499999523162842</real>
+ <real>0.34999999403953552</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.24475815892219543</real>
+ <real>0.44872328639030457</real>
+ <real>0.75999999046325684</real>
+ <real>0.37999999523162842</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.49548381567001343</real>
+ <real>0.49548381567001343</real>
+ <real>0.63999998569488525</real>
+ <real>0.31999999284744263</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.40999999642372131</real>
+ <real>0.40999999642372131</real>
+ <real>0.40999999642372131</real>
+ <real>0.40999999642372131</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>1</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.199999809265137</real>
+ <real>10.01099967956543</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00017999998817685992</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>0.80000001192092896</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5</real>
+ <real>0.0010000000474974513</real>
+ <real>-0.47999998927116394</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>0.69999998807907104</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0.18999999761581421</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>1</real>
+ <real>-4.3711388286737929e-008</real>
+ <real>0</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>1605</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>0</real>
+ <key>sun_angle</key>
+ <real>1.5707963705062866</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>0.7342105507850647</real>
+ <real>0.78157895803451538</real>
+ <real>0.89999997615814209</real>
+ <real>0.29999998211860657</real>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Midnight.xml b/indra/newview/app_settings/windlight/skies/Midnight.xml
new file mode 100644
index 0000000000..0aba31214a
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Midnight.xml
@@ -0,0 +1,141 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>0.20405027270317078</real>
+ <real>0.24246673285961151</real>
+ <real>0.32999998331069946</real>
+ <real>0.10999999940395355</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.44999998807907104</real>
+ <real>0.44999998807907104</real>
+ <real>0.44999998807907104</real>
+ <real>1</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.23999999463558197</real>
+ <real>0.23999999463558197</real>
+ <real>0.23999999463558197</real>
+ <real>1</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.87999999523162842</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.49940013885498</real>
+ <real>10.01099967956543</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00030000001424923539</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>0</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5</real>
+ <real>0.0010000000474974513</real>
+ <real>-0.47999998927116394</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>4</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>1</real>
+ <real>-4.8876205482883961e-007</real>
+ <real>1</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>906.20001220703125</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>2</real>
+ <key>sun_angle</key>
+ <real>4.7123894691467285</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>0.34876692295074463</real>
+ <real>0.35574248433113098</real>
+ <real>0.65999996662139893</real>
+ <real>0.2199999988079071</real>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Sunrise.xml b/indra/newview/app_settings/windlight/skies/Sunrise.xml
new file mode 100644
index 0000000000..bbc7aeec59
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunrise.xml
@@ -0,0 +1,141 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>0.80999994277954102</real>
+ <real>0.46289783716201782</real>
+ <real>0.62999993562698364</real>
+ <real>0.26999998092651367</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.15793180465698242</real>
+ <real>0.43499568104743958</real>
+ <real>0.87000000476837158</real>
+ <real>0.87000000476837158</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.20673196017742157</real>
+ <real>0.40988314151763916</real>
+ <real>0.47999998927116394</real>
+ <real>0.47999998927116394</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.22616604226328718</real>
+ <real>0.22616604226328718</real>
+ <real>0.22616604226328718</real>
+ <real>0.99997219085526012</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.88000025272481253</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.49940013883861</real>
+ <real>10.010999679576344</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00062000000616535544</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>2.6999279499073054</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5.0009990693069994</real>
+ <real>0.0010000000474963411</real>
+ <real>-0.48000101923815919</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>0.53999996185302734</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0.15999999642372131</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>0.094108223915100098</real>
+ <real>0.99556195735931396</real>
+ <real>0</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>563</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>0</real>
+ <key>sun_angle</key>
+ <real>0.094247691333293915</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>2.369999885559082</real>
+ <real>2.369999885559082</real>
+ <real>2.369999885559082</real>
+ <real>0.78999996185302734</real>
+ </array>
+ </map>
+</llsd>
diff --git a/indra/newview/app_settings/windlight/skies/Sunset.xml b/indra/newview/app_settings/windlight/skies/Sunset.xml
new file mode 100644
index 0000000000..ebf08e1a3f
--- /dev/null
+++ b/indra/newview/app_settings/windlight/skies/Sunset.xml
@@ -0,0 +1,142 @@
+<llsd>
+ <map>
+ <key>ambient</key>
+ <array>
+ <real>1.0199999809265137</real>
+ <real>0.80999994277954102</real>
+ <real>0.80999994277954102</real>
+ <real>1.0199999809265137</real>
+ </array>
+ <key>blue_density</key>
+ <array>
+ <real>0.14522500336170197</real>
+ <real>0.39999699592590332</real>
+ <real>0.80000197887420654</real>
+ <real>1</real>
+ </array>
+ <key>blue_horizon</key>
+ <array>
+ <real>0.10767599940299988</real>
+ <real>0.21348699927330017</real>
+ <real>0.25</real>
+ <real>1</real>
+ </array>
+ <key>cloud_color</key>
+ <array>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>0.22615399956703186</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density1</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.87999999523162842</real>
+ <real>1</real>
+ </array>
+ <key>cloud_pos_density2</key>
+ <array>
+ <real>1.6884100437164307</real>
+ <real>0.52609699964523315</real>
+ <real>0.125</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scale</key>
+ <array>
+ <real>0.41999998688697815</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>cloud_scroll_rate</key>
+ <array>
+ <real>10.49940013885498</real>
+ <real>10.01099967956543</real>
+ </array>
+ <key>cloud_shadow</key>
+ <array>
+ <real>0.26999998092651367</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>density_multiplier</key>
+ <array>
+ <real>0.00046000001020729542</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>distance_multiplier</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>east_angle</key>
+ <real>0</real>
+ <key>enable_cloud_scroll</key>
+ <array>
+ <boolean>1</boolean>
+ <boolean>1</boolean>
+ </array>
+ <key>gamma</key>
+ <array>
+ <real>1</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>glow</key>
+ <array>
+ <real>5</real>
+ <real>0.0010000000474974513</real>
+ <real>-0.47999998927116394</real>
+ <real>1</real>
+ </array>
+ <key>haze_density</key>
+ <array>
+ <real>0.69999998807907104</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>haze_horizon</key>
+ <array>
+ <real>0.15999999642372131</real>
+ <real>0.19915600121021271</real>
+ <real>0.19915600121021271</real>
+ <real>1</real>
+ </array>
+ <key>lightnorm</key>
+ <array>
+ <real>0</real>
+ <real>0.07532646507024765</real>
+ <real>-0.99715894460678101</real>
+ <real>0</real>
+ </array>
+ <key>max_y</key>
+ <array>
+ <real>562.5</real>
+ <real>0</real>
+ <real>0</real>
+ <real>1</real>
+ </array>
+ <key>preset_num</key>
+ <integer>22</integer>
+ <key>star_brightness</key>
+ <real>0</real>
+ <key>sun_angle</key>
+ <real>3.0661947727203369</real>
+ <key>sunlight_color</key>
+ <array>
+ <real>2.8385701179504395</real>
+ <real>2.8385701179504395</real>
+ <real>2.8385701179504395</real>
+ <real>1</real>
+ </array>
+ </map>
+</llsd>
+
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index 4da155efda..1f9dc6e4e5 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -1,6 +1,6 @@
-version 29
+version 32
-// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
+// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
//
@@ -60,7 +60,6 @@ Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
RenderShaderLightingMaxLevel 1 3
RenderDeferred 1 1
-SkyUseClassicClouds 1 1
RenderDeferredSSAO 1 1
RenderShadowDetail 1 2
WatchdogDisabled 1 1
@@ -93,7 +92,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -246,10 +244,10 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
+// GL_ARB_map_buffer_range exists
//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
+list MapBufferRange
+RenderVBOMappingDisable 1 1
//
@@ -297,6 +295,7 @@ RenderDeferred 0 0
list Intel
RenderAnisotropic 1 0
+RenderVBOEnable 1 0
list GeForce2
RenderAnisotropic 1 0
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index dab73dc3d1..6e962f3c56 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -1,4 +1,4 @@
-version 25
+version 27
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
@@ -58,7 +58,6 @@ WLSkyDetail 1 128
Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
-SkyUseClassicClouds 1 1
RenderShaderLightingMaxLevel 1 3
RenderDeferred 1 1
RenderDeferredSSAO 1 1
@@ -91,7 +90,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -244,10 +242,10 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
+// GL_ARB_map_buffer_range exists
//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
+list MapBufferRange
+RenderVBOMappingDisable 1 1
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index a1e25aae08..2690e8ec70 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -1,4 +1,4 @@
-version 26
+version 30
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
@@ -47,8 +47,8 @@ RenderTerrainLODFactor 1 2.0
RenderTransparentWater 1 1
RenderTreeLODFactor 1 1.0
RenderUseImpostors 1 1
-RenderVBOEnable 1 1
-RenderVBOMappingDisable 1 1
+RenderVBOEnable 1 0
+RenderVBOMappingDisable 1 0
RenderVolumeLODFactor 1 2.0
UseStartScreen 1 1
UseOcclusion 1 1
@@ -59,12 +59,11 @@ Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 0.5
RenderShaderLightingMaxLevel 1 3
-SkyUseClassicClouds 1 1
RenderDeferred 1 1
RenderDeferredSSAO 1 1
RenderShadowDetail 1 2
WatchdogDisabled 1 1
-RenderUseStreamVBO 1 1
+RenderUseStreamVBO 1 0
RenderFSAASamples 1 16
//
@@ -93,7 +92,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -246,13 +244,6 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
-//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
-
-
-//
// "Default" setups for safe, low, medium, high
//
list safe
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index abe4ec9928..a0245f5369 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -1,4 +1,4 @@
-version 29
+version 31
// NOTE: This is mostly identical to featuretable_mac.txt with a few differences
// Should be combined into one table
@@ -59,7 +59,6 @@ Disregard128DefaultDrawDistance 1 1
Disregard96DefaultDrawDistance 1 1
RenderTextureMemoryMultiple 1 1.0
RenderShaderLightingMaxLevel 1 3
-SkyUseClassicClouds 1 1
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -93,7 +92,6 @@ RenderVolumeLODFactor 1 0.5
VertexShaderEnable 1 0
WindLightUseAtmosShaders 1 0
WLSkyDetail 1 48
-SkyUseClassicClouds 1 0
RenderDeferred 1 0
RenderDeferredSSAO 1 0
RenderShadowDetail 1 0
@@ -246,10 +244,10 @@ RenderDeferredSSAO 0 0
RenderShadowDetail 0 0
//
-// No GL_ARB_map_buffer_range
+// GL_ARB_map_buffer_range exists
//
-list NoMapBufferRange
-RenderVBOMappingDisable 1 0
+list MapBufferRange
+RenderVBOMappingDisable 1 1
//
@@ -295,6 +293,7 @@ RenderDeferred 0 0
list Intel
RenderAnisotropic 1 0
+RenderVBOEnable 1 0
list GeForce2
RenderAnisotropic 1 0
diff --git a/indra/newview/icons/beta/secondlife.icns b/indra/newview/icons/beta/secondlife.icns
new file mode 100644
index 0000000000..1fa50547bb
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife.ico b/indra/newview/icons/beta/secondlife.ico
new file mode 100644
index 0000000000..9bdd21b904
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_128.png b/indra/newview/icons/beta/secondlife_128.png
new file mode 100644
index 0000000000..fa42aa764b
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_16.png b/indra/newview/icons/beta/secondlife_16.png
new file mode 100644
index 0000000000..ff648cf3fc
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_256.BMP b/indra/newview/icons/beta/secondlife_256.BMP
new file mode 100644
index 0000000000..97bd67d3d6
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_256.png b/indra/newview/icons/beta/secondlife_256.png
new file mode 100644
index 0000000000..245e2c3e9f
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_32.png b/indra/newview/icons/beta/secondlife_32.png
new file mode 100644
index 0000000000..fd7f46bf4d
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_48.png b/indra/newview/icons/beta/secondlife_48.png
new file mode 100644
index 0000000000..cc3a795e2b
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/beta/secondlife_512.png b/indra/newview/icons/beta/secondlife_512.png
new file mode 100644
index 0000000000..a959bd9a9e
--- /dev/null
+++ b/indra/newview/icons/beta/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife.icns b/indra/newview/icons/development/secondlife.icns
new file mode 100644
index 0000000000..44f63d384c
--- /dev/null
+++ b/indra/newview/icons/development/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/development/secondlife.ico b/indra/newview/icons/development/secondlife.ico
new file mode 100644
index 0000000000..b53f23ae58
--- /dev/null
+++ b/indra/newview/icons/development/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_128.png b/indra/newview/icons/development/secondlife_128.png
new file mode 100644
index 0000000000..9b9fe656fc
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_16.png b/indra/newview/icons/development/secondlife_16.png
new file mode 100644
index 0000000000..91493a033c
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_256.BMP b/indra/newview/icons/development/secondlife_256.BMP
new file mode 100644
index 0000000000..174b22319a
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_256.png b/indra/newview/icons/development/secondlife_256.png
new file mode 100644
index 0000000000..29ed40abdc
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_32.png b/indra/newview/icons/development/secondlife_32.png
new file mode 100644
index 0000000000..3b84f5ec77
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_48.png b/indra/newview/icons/development/secondlife_48.png
new file mode 100644
index 0000000000..d2636d9d72
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/development/secondlife_512.png b/indra/newview/icons/development/secondlife_512.png
new file mode 100644
index 0000000000..75f9b231f4
--- /dev/null
+++ b/indra/newview/icons/development/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife.icns b/indra/newview/icons/project/secondlife.icns
new file mode 100644
index 0000000000..d6e26a8ed9
--- /dev/null
+++ b/indra/newview/icons/project/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/project/secondlife.ico b/indra/newview/icons/project/secondlife.ico
new file mode 100644
index 0000000000..ebb27e5325
--- /dev/null
+++ b/indra/newview/icons/project/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_128.png b/indra/newview/icons/project/secondlife_128.png
new file mode 100644
index 0000000000..d67b8228f9
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_16.png b/indra/newview/icons/project/secondlife_16.png
new file mode 100644
index 0000000000..91493a033c
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_256.BMP b/indra/newview/icons/project/secondlife_256.BMP
new file mode 100644
index 0000000000..cd890725f8
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_256.png b/indra/newview/icons/project/secondlife_256.png
new file mode 100644
index 0000000000..cccfaf7cba
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_32.png b/indra/newview/icons/project/secondlife_32.png
new file mode 100644
index 0000000000..ad7b33f789
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_48.png b/indra/newview/icons/project/secondlife_48.png
new file mode 100644
index 0000000000..104a931fbc
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/project/secondlife_512.png b/indra/newview/icons/project/secondlife_512.png
new file mode 100644
index 0000000000..74e2fa9bc6
--- /dev/null
+++ b/indra/newview/icons/project/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.icns b/indra/newview/icons/release/secondlife.icns
new file mode 100644
index 0000000000..e15e34140d
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.ico b/indra/newview/icons/release/secondlife.ico
new file mode 100644
index 0000000000..28bf1e7664
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_128.png b/indra/newview/icons/release/secondlife_128.png
new file mode 100644
index 0000000000..bcf94dcae8
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_16.png b/indra/newview/icons/release/secondlife_16.png
new file mode 100644
index 0000000000..90311ea8b0
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_256.BMP b/indra/newview/icons/release/secondlife_256.BMP
new file mode 100644
index 0000000000..74deedd7d3
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_256.png b/indra/newview/icons/release/secondlife_256.png
new file mode 100644
index 0000000000..a89fb4c74f
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_32.png b/indra/newview/icons/release/secondlife_32.png
new file mode 100644
index 0000000000..530e8fc80c
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_48.png b/indra/newview/icons/release/secondlife_48.png
new file mode 100644
index 0000000000..cb33c51f8a
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_512.png b/indra/newview/icons/release/secondlife_512.png
new file mode 100644
index 0000000000..f291e60586
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_512.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife.icns b/indra/newview/icons/test/secondlife.icns
new file mode 100644
index 0000000000..eb8d16a7e7
--- /dev/null
+++ b/indra/newview/icons/test/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/test/secondlife.ico b/indra/newview/icons/test/secondlife.ico
new file mode 100644
index 0000000000..ceb8e8e6eb
--- /dev/null
+++ b/indra/newview/icons/test/secondlife.ico
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_128.png b/indra/newview/icons/test/secondlife_128.png
new file mode 100644
index 0000000000..019f65db28
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_128.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_16.png b/indra/newview/icons/test/secondlife_16.png
new file mode 100644
index 0000000000..91493a033c
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_16.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_256.BMP b/indra/newview/icons/test/secondlife_256.BMP
new file mode 100644
index 0000000000..e23fcfdbe9
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_256.BMP
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_256.png b/indra/newview/icons/test/secondlife_256.png
new file mode 100644
index 0000000000..f402424c51
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_256.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_32.png b/indra/newview/icons/test/secondlife_32.png
new file mode 100644
index 0000000000..80d6efe13d
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_32.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_48.png b/indra/newview/icons/test/secondlife_48.png
new file mode 100644
index 0000000000..bba938feba
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_48.png
Binary files differ
diff --git a/indra/newview/icons/test/secondlife_512.png b/indra/newview/icons/test/secondlife_512.png
new file mode 100644
index 0000000000..10ff65312b
--- /dev/null
+++ b/indra/newview/icons/test/secondlife_512.png
Binary files differ
diff --git a/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r b/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r
deleted file mode 100644
index aa3cfb87d8..0000000000
--- a/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r
+++ /dev/null
@@ -1,6996 +0,0 @@
-data 'alis' (0) {
- $"0000 0000 0112 0002 0001 036D 6277 0000" /* ...........mbw.. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 C135 A717 482B 0000 0000" /* ......Á5§.H+.... */
- $"0002 0C41 7070 6C69 6361 7469 6F6E 7300" /* ...Applications. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 00E2 4F18 C2E8 9FB0 0000 0000 0000" /* ...âO.Â蟰...... */
- $"0000 FFFF FFFF 0000 0920 0000 0000 0000" /* ..ÿÿÿÿ..Æ ...... */
- $"0000 0000 0000 0000 0003 6D62 7700 0010" /* ..........mbw... */
- $"0008 0000 C136 0987 0000 0011 0008 0000" /* ....Á6Ƈ........ */
- $"C2E9 0220 0000 0001 0000 0002 0010 6D62" /* Âé. ..........mb */
- $"773A 4170 706C 6963 6174 696F 6E73 000E" /* w:Applications.. */
- $"001A 000C 0041 0070 0070 006C 0069 0063" /* .....A.p.p.l.i.c */
- $"0061 0074 0069 006F 006E 0073 000F 0008" /* .a.t.i.o.n.s.... */
- $"0003 006D 0062 0077 0012 000C 4170 706C" /* ...m.b.w....Appl */
- $"6963 6174 696F 6E73 0013 0001 2F00 FFFF" /* ications..../.ÿÿ */
- $"0000" /* .. */
-};
-
-
-data 'icns' (-16455) {
- $"6963 6E73 0001 B3AC 6973 3332 0000 0224" /* icns..³¬is32...$ */
- $"9F00 005F 8061 005D 8700 055D 9AA2 A0A4" /* Ÿ.._€a.]‡..]𢠤 */
- $"8986 0008 557D B3B2 B1B3 A881 8081 8104" /* ‰†..U}³²±³¨€. */
- $"826F 577E AF82 A801 B3AE 82AD 03AF 7B7A" /* ‚oW~¯‚¨.³®‚­.¯{z */
- $"A781 A203 9EB7 C89D 81A2 03A6 776E 9A80" /* §¢.ž·È¢.¦wnš€ */
- $"9705 959F D3DC A295 8097 5899 6C67 8F8D" /* —.•ŸÓÜ¢•€—X™lg */
- $"8E89 85C9 BCA9 C883 898D 8D8E 6561 8585" /* މ…ɼ©Èƒ‰Žea…… */
- $"83A8 B7F3 BAB4 DFB6 AA84 8585 605E 7B7D" /* ƒ¨·óº´ß¶ª„……`^{} */
- $"79D0 F9E0 F0F2 DAE1 D87C 7D7B 5D5B 7476" /* yÐùàðòÚáØ|}{][tv */
- $"7099 D876 7373 76CA 8A72 7673 5B5A 6D70" /* p™ØvssvÊŠrvs[Zmp */
- $"6B9B 816C 6F6F 67B3 C567 706C 5A59 686B" /* k›loog³ÅgplZYhk */
- $"6B67 686B 806A 056B 6F6A 6B67 5A88 5900" /* kghk€j.kojkgZˆY. */
- $"5882 598A 5801 0059 9F00 0482 8383 8480" /* X‚YŠX..YŸ..‚ƒƒ„€ */
- $"8700 057F B7BE BDC0 A786 0008 799E D0CE" /* ‡...·¾½À§†..yžÐÎ */
- $"CECF C5A1 A081 A105 A390 7AA0 D0CA 80C9" /* ÎÏÅ¡ ¡.£z ÐÊ€É */
- $"01CA D183 CE03 D09C 9ECD 81C9 03C7 D4DE" /* .ÊуÎ.МžÍÉ.ÇÔÞ */
- $"C681 C903 CD9A 94C5 80C2 05C1 C6E3 E9C8" /* ÆÉ.Íš”Å€Â.ÁÆãéÈ */
- $"C180 C20D C491 8DBD BBBC B9B6 DDD7 CCDD" /* Á€Â.Ä‘½»¼¹¶Ý×ÌÝ */
- $"B5B9 80BC 468B 87B4 B4B3 C8D1 F7D3 CFEA" /* µ¹€¼F‹‡´´³ÈÑ÷ÓÏê */
- $"D0C9 B4B4 B385 83AA ABA9 E0FB EAF5 F6E5" /* ÐÉ´´³…ƒª«©àûêõöå */
- $"EAE5 AAAB A981 80A0 A39E BAE4 A2A0 A1A2" /* ê媫©€ £žºä¢ ¡¢ */
- $"DAAF 9FA3 9F7F 7E97 9B97 B8A6 979A 9A94" /* Ú¯Ÿ£Ÿ.~—›—¸¦—šš” */
- $"CAD6 949B 977D 7D90 9493 9091 8293 0496" /* ÊÖ”›—}}”“‘‚“.– */
- $"9294 907D 8E7C 8A7B 0100 7C9F 0000 7A80" /* ’”}Ž|Š{..|Ÿ..z€ */
- $"7C00 7887 0005 77B1 B8B7 BBA0 8600 0871" /* |.x‡..w±¸·» †..q */
- $"97CB C9C8 CAC0 9B99 819A 049C 8972 99CA" /* —ËÉÈÊÀ›™š.œ‰r™Ê */
- $"82C3 00CB 83C8 03CA 9596 C681 C203 BFCF" /* ‚Ã.˃È.Ê•–ÆÂ.¿Ï */
- $"DABF 81C2 03C6 938C BD80 BA05 B9BF E0E7" /* Ú¿Â.Æ“Œ½€º.¹¿àç */
- $"C1B9 80BA 57BC 8985 B5B3 B3B0 ADD9 D2C6" /* Á¹€ºW¼‰…µ³³°­ÙÒÆ */
- $"D9AC B0B3 B3B4 827F ACAB AAC2 CCF6 CECA" /* Ù¬°³³´‚.¬«ªÂÌöÎÊ */
- $"E8CB C3AB ACAA 7D7B A1A3 A0DD FAE9 F4F5" /* èË묪}{¡£ Ýúéôõ */
- $"E3E8 E3A2 A3A0 7A78 989B 96B3 E29A 9898" /* ãè㢣 zx˜›–³âš˜˜ */
- $"9AD7 A897 9B97 7776 8F93 8FB2 9F8F 9292" /* š×¨—›—wv“²Ÿ’’ */
- $"8BC5 D28C 938F 7575 888C 8B89 8982 8B04" /* ‹ÅÒŒ“uuˆŒ‹‰‰‚‹. */
- $"8F8A 8C88 758E 748A 7301 0074 7338 6D6B" /* ŠŒˆuŽtŠs..ts8mk */
- $"0000 0108 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 1E24 2424 1600 0000 0000" /* .......$$$...... */
- $"0000 0000 0011 BDC8 C8C8 9600 0000 0000" /* ......½ÈÈÈ–..... */
- $"0000 0000 048C FFFF FFFF F5A7 9C9E 9E9E" /* .....Œÿÿÿÿõ§œžžž */
- $"9E9E 6003 8AFF FCFC FCFC FEFF FFFF FFFF" /* žž`.Šÿüüüüþÿÿÿÿÿ */
- $"FFFF FF7A 89FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿz‰ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF7A 73FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿzsÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF64 62FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdbÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF53 53FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿSSÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF45 48FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿEHÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF3C 41FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿ<Aÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FD35 3DFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿý5=ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FA30 3CFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿú0<ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FB2F 1247 4B4A 4A4A 4A4A 4A4A 4A4A" /* ÿÿû/.GKJJJJJJJJJ */
- $"4A4B 450F 0101 0201 0101 0101 0101 0101" /* JKE............. */
- $"0102 0001 696C 3332 0000 05AB FF00 BE00" /* ....il32...«ÿ.¾. */
- $"025A 7881 847F 0064 9200 0262 BBC4 83C2" /* .Zx„..d’..b»ÄƒÂ */
- $"02C7 8451 9000 0255 86BF 84BC 03BF A064" /* .Ç„Q..U†¿„¼.¿ d */
- $"6389 6400 6281 0003 5770 A2A2 85A1 01A3" /* c‰d.b..Wp¢¢…¡.£ */
- $"9D89 9B07 9C97 6758 005B 95AC 88A7 02A8" /* ‰›.œ—gX.[•¬ˆ§.¨ */
- $"A4A7 89A8 05AB 925A 61A7 AE88 AC03 ABCA" /* ¤§‰¨.«’Za§®ˆ¬.«Ê */
- $"AEAB 88AC 05AE A15E 5B9A A788 A503 A0D7" /* ®«ˆ¬.®¡^[š§ˆ¥. × */
- $"D79F 88A5 05A8 9559 5990 A288 9F04 9BAB" /* ןˆ¥.¨•YY¢ˆŸ.›« */
- $"FBAE 9C87 9F05 A28B 5857 879D 879A 0595" /* û®œ‡Ÿ.¢‹XW‡‡š.• */
- $"BDD6 E6E3 9487 9A05 9D82 5656 7F97 8594" /* ½Öæã”‡š.‚VV.—…” */
- $"0995 8FB3 F4CF B1FF AD90 9585 9405 977A" /* Æ•³ôϱÿ­•…”.—z */
- $"0000 7793 8690 078D CDF8 B886 E8E5 8B86" /* ..w“†.Íø¸†è勆 */
- $"9005 9372 0000 708F 828C 808B 0984 BBF7" /* .“r..p‚Œ€‹Æ„»÷ */
- $"C687 85AB FFA9 8580 8B82 8C05 8E6D 0000" /* Ƈ…«ÿ©…€‹‚Œ.Žm.. */
- $"6B8A 8287 0D88 8785 8FF3 FDA1 8186 84E5" /* kŠ‚‡.ˆ‡…óý¡†„å */
- $"E484 8684 8705 8868 0000 6685 8183 117E" /* 䄆„‡.ˆh..f…ƒ.~ */
- $"B3E3 D0D2 FFDC D4DF DDDB D2FD D0DE E2B7" /* ³ãÐÒÿÜÔßÝÛÒýÐÞâ· */
- $"8082 8304 6400 0062 8081 7F06 76C5 FFDB" /* €‚ƒ.d..b€..vÅÿÛ */
- $"F9F3 E381 FF06 F6D4 BFF4 FFD3 7882 7F03" /* ùóãÿ.öÔ¿ôÿÓx‚.. */
- $"6100 005F 827B 0675 B0D9 E1FF C8D8 82DF" /* a.._‚{.u°ÙáÿÈØ‚ß */
- $"05BF F3C9 DCB9 7681 7B04 7A5E 0000 5C82" /* .¿óÉܹv{.z^..\‚ */
- $"7706 786F 96FF E879 7281 7306 7278 C8C2" /* w.xo–ÿèyrs.rxÈÂ */
- $"7074 7880 7706 7875 5C00 005A 7382 7405" /* ptx€w.xu\..Zs‚t. */
- $"71C1 E19A 6D74 8173 0574 6BA2 FFAD 6C81" /* qÁášmts.tk¢ÿ­l */
- $"7406 7571 5B00 005A 6F81 7104 6F77 F2AF" /* t.uq[..Zoq.owò¯ */
- $"6984 7105 6E7E FAFB 836D 8071 0772 6D5A" /* i„q.n~úûƒm€q.rmZ */
- $"0000 586C 6F80 6E03 6C7B 9368 866E 0467" /* ..Xlo€n.l{“h†n.g */
- $"C3FA 8B69 806E 076F 6A59 0000 586A 6E81" /* Ãú‹i€n.ojY..Xjn */
- $"6D01 6C68 876D 036B 717D 6B81 6D07 6E69" /* m.lh‡m.kq}km.ni */
- $"5900 0058 666A 8E69 0168 6682 6903 6A65" /* Y..XfjŽi.hf‚i.je */
- $"5900 BD59 0000 9B59 9E00 FF00 BE00 027D" /* Y.½Y..›Yž.ÿ.¾..} */
- $"98A0 829E 029F 9E85 9200 0284 D5DE 83DC" /* ˜ ‚ž.Ÿž…’..„ÕÞƒÜ */
- $"02E0 A275 9000 0279 A7DB 84D8 03DB BD87" /* .à¢u..y§Û„Ø.Û½‡ */
- $"8689 8700 8581 0003 7A92 C0C0 85BF 01C0" /* †‰‡.…..z’ÀÀ…¿.À */
- $"BB89 B907 BAB4 887B 007E B7CC 88C7 01C8" /* »‰¹.º´ˆ{.~·ÌˆÇ.È */
- $"C68A C805 CBB2 7C84 CAD1 89CF 02DE CFCE" /* ÆŠÈ.˲|„ÊщÏ.ÞÏÎ */
- $"88CF 05D2 C380 7FBF CC88 CA03 C7E8 E5C6" /* ˆÏ.ÒÀ.¿ÌˆÊ.ÇèåÆ */
- $"88CA 05CD B87C 7CB7 CA88 C704 C4CD FCCD" /* ˆÊ.͸||·ÊˆÇ.ÄÍüÍ */
- $"C587 C705 CAB0 7A7A AFC7 87C4 05C1 D4E3" /* ŇÇ.ʰzz¯Ç‡Ä.ÁÔã */
- $"F0ED C087 C405 C8A8 7979 A7C4 85C0 09C1" /* ðíÀ‡Ä.Ȩyy§Ä…ÀÆÁ */
- $"BDD0 F7E1 D1FF CDBE C185 C005 C4A1 0000" /* ½Ð÷áÑÿ;Á…À.Ä¡.. */
- $"A0C1 86BD 07BA DEFB D5B7 F2EE B986 BD05" /*  Á†½.ºÞûÕ·ò½. */
- $"C09A 0000 9ABE 85BA 09B6 D4F9 DBB8 B6CD" /* Àš..š¾…ºÆ¶ÔùÛ¸¶Í */
- $"FFCA B785 BA05 BD94 0000 94B9 83B6 0EB4" /* ÿÊ·…º.½”..”¹ƒ¶.´ */
- $"B3B9 F7FE C4B0 B4B2 EFED B2B4 B4B5 82B6" /* ³¹÷þİ´²ïí²´´µ‚¶ */
- $"05B8 8F00 008E B481 B211 AFCD EBDF E0FF" /* .¸..Ž´².¯Íëßàÿ */
- $"E8E2 E9E8 E6E0 FEDF E8EA D0B0 81B2 05B3" /* èâéèæàþßèêа².³ */
- $"8A00 0089 AF81 AD06 A8D9 FFE7 FBF7 EB81" /* Š..‰¯­.¨Ùÿçû÷ë */
- $"FF06 F9E1 D3F8 FFE3 A980 AD05 AEAD 8600" /* ÿ.ùáÓøÿã©€­.®­†. */
- $"0086 82A9 06A5 CBE5 EAFF DAE5 82EA 05D3" /* .†‚©.¥ËåêÿÚå‚ê.Ó */
- $"F7DA E8D1 A680 A906 AAA7 8300 0082 A382" /* ÷ÚèѦ€©.ª§ƒ..‚£‚ */
- $"A405 9FB7 FFF0 A5A1 81A2 05A1 A5D9 D39F" /* ¤.Ÿ·ÿ𥡢.¡¥ÙÓŸ */
- $"A281 A406 A5A1 8000 0080 9F82 A004 9ED2" /* ¢¤.¥¡€..€Ÿ‚ .žÒ */
- $"E9BA 9B83 A004 9ABF FFC5 9A81 A007 A19C" /* 麛ƒ .š¿ÿÅš .¡œ */
- $"7F00 007E 999D 809B 059A 9FF6 C696 9C83" /* ...~™€›.šŸöÆ–œƒ */
- $"9B05 99A4 FBFB A799 809B 079C 977D 0000" /* ›.™¤ûû§™€›.œ—}.. */
- $"7C95 9980 9803 97A1 B295 8698 0494 D5FC" /* |•™€˜.—¡²•†˜.”Õü */
- $"AC95 8098 0799 937C 0000 7C93 9782 9600" /* ¬•€˜.™“|..|“—‚–. */
- $"9387 9603 9599 A295 8196 0797 917C 0000" /* “‡–.•™¢•–.—‘|.. */
- $"7B8E 928D 9102 9290 8F82 9103 928C 7B00" /* {Ž’‘.’‚‘.’Œ{. */
- $"BD7C 0000 9B7C 9E00 FF00 BE00 0275 9199" /* ½|..›|ž.ÿ.¾..u‘™ */
- $"8498 007E 9200 027D D0D9 83D7 02DB 9B6C" /* „˜.~’..}ÐÙƒ×.Û›l */
- $"9000 0271 A0D5 84D2 03D5 B67F 7E89 7F00" /* ..q Õ„Ò.Õ¶.~‰.. */
- $"7D81 0003 728B BBBB 85BA 02BB B6B3 88B4" /* }..r‹»»…º.»¶³ˆ´ */
- $"08B5 AF81 7300 76B0 C6C2 87C1 01C2 C089" /* .µ¯s.v°ÆÂ‡Á.ÂÀ‰ */
- $"C206 C3C5 AB75 7CC3 CA89 C801 DBC9 89C8" /* Â.ÃÅ«u|ÃʉÈ.ÛÉ‰È */
- $"05CB BD78 77B9 C588 C304 C0E5 E2BF C487" /* .˽xw¹ÅˆÃ.Àåâ¿Ä‡ */
- $"C305 C6B2 7574 B0C3 87C0 05BF BCC7 FCC7" /* Ã.Ʋut°Ã‡À.¿¼ÇüÇ */
- $"BE87 C005 C3A9 7272 A7BF 87BC 05B9 D0E1" /* ¾‡À.érr§¿‡¼.¹Ðá */
- $"EEEB B887 BC05 C0A1 7171 A0BC 86B8 07B5" /* î븇¼.À¡qq ¼†¸.µ */
- $"CBF6 DDCB FFC7 B586 B805 BB99 0000 98B9" /* ËöÝËÿǵ†¸.»™..˜¹ */
- $"86B5 07B2 DBFA D0AE F0EC B186 B505 B892" /* †µ.²ÛúЮð챆µ.¸’ */
- $"0000 91B5 82B2 80B1 09AC D0F9 D7AF ADC7" /* ..‘µ‚²€±Æ¬Ðùׯ­Ç */
- $"FFC4 AD80 B182 B205 B48C 0000 8BB1 81AD" /* ÿÄ­€±‚².´Œ..‹±­ */
- $"11AE ADAC ABB1 F6FD BDA8 ABAA EDEB A9AB" /* .®­¬«±öý½¨«ªíë©« */
- $"ACAC AE81 AD05 AF87 0000 86AB 81A9 11A6" /* ¬¬®­.¯‡..†«©.¦ */
- $"C8E9 DCDE FFE5 DFE7 E6E4 DDFE DCE6 E9CB" /* ÈéÜÞÿåßçæäÝþÜæéË */
- $"A781 A905 AA82 0000 81A6 81A5 069F D6FF" /* §©.ª‚..¦¥.ŸÖÿ */
- $"E4FA F6EA 81FF 06F8 DFCF F7FF E0A0 80A5" /* äúöêÿ.øßÏ÷ÿà €¥ */
- $"05A6 A47E 0000 7D82 A006 9BC6 E3E8 FFD6" /* .¦¤~..}‚ .›ÆãèÿÖ */
- $"E282 E805 CFF6 D7E6 CC9C 80A0 06A1 9E7B" /* â‚è.Ïö×æÌœ€ .¡ž{ */
- $"0000 7A9B 829C 0496 B1FF EF9D 8399 049C" /* ..z›‚œ.–±ÿ.œ */
- $"D6D0 969A 819C 069D 9979 0000 7897 8198" /* ÖЖšœ.™y..x—˜ */
- $"0597 95CF E7B4 9283 9704 91BA FFC0 9181" /* .—•Ïç´’ƒ—.‘ºÿÀ‘ */
- $"9807 9994 7700 0076 9295 8094 0493 98F5" /* ˜.™”w..v’•€”.“˜õ */
- $"C28E 8494 0592 9DFB FBA0 9180 9407 958F" /* ÂŽ„”.’ûû ‘€”.• */
- $"7500 0074 8E91 8090 038F 9AAC 8C86 9004" /* u..tŽ‘€.š¬Œ†. */
- $"8BD1 FBA6 8C80 9007 918B 7400 0074 8B8F" /* ‹Ñû¦Œ€.‘‹t..t‹ */
- $"808E 048F 8E8B 8E8F 848E 048F 8D91 9B8D" /* €Ž.ދބŽ.‘› */
- $"818E 078F 8974 0000 7487 8B8E 8A01 8987" /* Ž.‰t..t‡‹ŽŠ.‰‡ */
- $"828A 038B 8574 00BD 7400 009B 749E 006C" /* ‚Š.‹…t.½t..›tž.l */
- $"386D 6B00 0004 0800 0000 0000 0000 0000" /* 8mk............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0B76 8889 8989" /* ...........vˆ‰‰‰ */
- $"8989 8988 3800 0000 0000 0000 0000 0000" /* ‰‰‰ˆ8........... */
- $"0000 0000 0000 0000 0000 36FF FFFF FFFF" /* ..........6ÿÿÿÿÿ */
- $"FFFF FFFF A301 0000 0000 0000 0000 0000" /* ÿÿÿÿ£........... */
- $"0000 0000 0000 0000 0006 A4FF FFFF FFFF" /* ..........¤ÿÿÿÿÿ */
- $"FFFF FFFF DE59 3F40 4040 4040 4040 4040" /* ÿÿÿÿÞY?@@@@@@@@@ */
- $"4040 4033 0000 0000 1384 F8F3 F3F3 F3F3" /* @@@3.....„øóóóóó */
- $"F3F3 F3F3 F7F9 F7F7 F7F7 F7F7 F7F7 F7F7" /* óóóó÷ù÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F1 520D 001D E1FF FAFB FBFB FBFB" /* ÷÷÷ñR...áÿúûûûûû */
- $"FBFB FBFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ûûûûûûûûûûûûûûûû */
- $"FBFB FBFB FFCD 0E39 FFFF FFFF FFFF FFFF" /* ûûûûÿÍ.9ÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 1F26 F6FF FFFF FFFF FFFF" /* ÿÿÿÿÿø.&öÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE5 1318 ECFF FFFF FFFF FFFF" /* ÿÿÿÿÿå..ìÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD5 0A0F DDFF FFFF FFFF FFFF" /* ÿÿÿÿÿÕÂ.Ýÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC6 0206 D0FF FFFF FFFF FFFF" /* ÿÿÿÿÿÆ..Ðÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB6 0000 C2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¶..Âÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 0000 B2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¥..²ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF95 0000 A4FF FFFF FFFF FFFF" /* ÿÿÿÿÿ•..¤ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF87 0000 96FF FFFF FFFF FFFF" /* ÿÿÿÿÿ‡..–ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF7A 0000 8AFF FFFF FFFF FFFF" /* ÿÿÿÿÿz..Šÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6D 0000 7FFF FFFF FFFF FFFF" /* ÿÿÿÿÿm...ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF63 0000 77FF FFFF FFFF FFFF" /* ÿÿÿÿÿc..wÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5A 0000 6FFF FFFF FFFF FFFF" /* ÿÿÿÿÿZ..oÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF54 0000 69FF FFFF FFFF FFFF" /* ÿÿÿÿÿT..iÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4F 0000 65FF FFFF FFFF FFFF" /* ÿÿÿÿÿO..eÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4C 0000 64FF FFFF FFFF FFFF" /* ÿÿÿÿÿL..dÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4B 0000 61FF FFFF FFFF FFFF" /* ÿÿÿÿÿK..aÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF48 0004 2C6D 7574 7474 7474" /* ÿÿÿÿÿH..,muttttt */
- $"7474 7474 7474 7474 7474 7474 7474 7474" /* tttttttttttttttt */
- $"7474 7475 6824 0202 0D18 1C1C 1C1C 1C1C" /* tttuh$.......... */
- $"1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C" /* ................ */
- $"1C1C 1C1C 170C 0100 0103 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0301 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0069 6833 3200 0009 DEFF" /* .......ih32..ÆÞÿ */
- $"00FF 00FF 00AD 0001 5E66 8865 0261 5859" /* .ÿ.ÿ.­..^fˆe.aXY */
- $"9C00 025E A6BA 87B7 04B9 AE67 5659 9B00" /* œ..^¦º‡·.¹®gVY›. */
- $"0266 BABF 87BE 04BF BC70 5459 9A00 0252" /* .fº¿‡¾.¿¼pTYš..R */
- $"81BD 89BA 03BC 8652 5491 5585 0003 5580" /* ½‰º.¼†RT‘U…..U€ */
- $"B7BA 89B9 02BA B497 918F 0191 7683 0003" /* ·º‰¹.º´—‘.‘vƒ.. */
- $"5864 9399 8B97 0098 929B 039D 855F 5A80" /* Xd“™‹—.˜’›.…_Z€ */
- $"0002 649D A990 A500 A490 A509 A6A9 9B65" /* ..d©¥.¤¥Æ¦©›e */
- $"0000 85B4 AFAF 8EAE 03B0 AEAC AF8E AE07" /* ..…´¯¯Ž®.°®¬¯Ž®. */
- $"AFAF B280 0000 80AD 8FA9 04A8 B2E7 ACA8" /* ¯¯²€..€­©.¨²ç¬¨ */
- $"90A9 05AB 7A00 0076 A98F A604 A5A4 F1E0" /* ©.«z..v©¦.¥¤ñà */
- $"A08F A606 A7A6 7100 006D A390 A204 9DC8" /*  ¦.§¦q..m£¢.È */
- $"FFB9 9C8E A207 A3A0 6A00 0065 9D9F 8D9E" /* ÿ¹œŽ¢.£ j..eŸž */
- $"069F 9C96 A2FA EF9C 8E9E 079F 9A65 0000" /* .Ÿœ–¢úž.Ÿše.. */
- $"6097 9C8D 9B07 97A5 E2C6 D2FF C394 8D9B" /* `—œ›.—¥âÆÒÿÔ› */
- $"079C 9461 0000 5E90 988C 9709 959A D5CE" /* .œ”a..^˜Œ—Æ•šÕÎ */
- $"E4B2 FCF4 9A95 8C97 0799 8D5E 0000 5A8B" /* ä²üôš•Œ—.™^..Z‹ */
- $"968C 9409 8EC8 FFF6 C18D DDFF C78C 8C94" /* –Œ”ÆŽÈÿöÁÝÿÇŒŒ” */
- $"0796 875B 0000 5885 938B 910B 8F8F E5FF" /* .–‡[..X…“‹‘.åÿ */
- $"FFA9 87AA FFF7 988E 8B91 0793 8159 0000" /* ÿ©‡ªÿ÷˜Ž‹‘.“Y.. */
- $"577F 908B 8E0B 87CF D4D0 CA89 8D8B E0FF" /* W.‹Ž.‡ÏÔÐʉ‹àÿ */
- $"C786 8B8E 0790 7B58 0000 5779 8C86 8A81" /* dž‹Ž.{X..WyŒ†Š */
- $"8B0D 84A5 FFFF E38B 898B 85A8 FFF8 9387" /* ‹.„¥ÿÿ㋉‹…¨ÿø“‡ */
- $"818B 868A 078C 7557 0000 5674 8A85 8800" /* ‹†Š.ŒuW..VtŠ…ˆ. */
- $"8680 820E 8385 E4FF FFB9 7C83 8381 7FDD" /* †€‚.ƒ…äÿÿ¹|ƒƒ.Ý */
- $"FFC6 7E81 8200 8585 8807 8A71 5759 0056" /* ÿÆ~‚.……ˆ.ŠqWY.V */
- $"6F87 8485 1983 929F A3A0 94B0 FFFF E39D" /* o‡„….ƒ’Ÿ£ ”°ÿÿã */
- $"9F9E 9DA3 9AB0 FBF4 98A0 A09F A192 8484" /* Ÿž£š°ûô˜  Ÿ¡’„„ */
- $"8507 876D 5759 0056 6984 8482 197C A7EB" /* ….‡mWY.Vi„„‚.|§ë */
- $"FBF1 C2EC FFFB C1ED F2F6 ECFB EDD9 DBFF" /* ûñÂìÿûÁíòöìûíÙÛÿ */
- $"D4EE F0F6 F6B7 7C84 8207 8369 5700 5956" /* Ôîðöö·|„‚.ƒiW.YV */
- $"6481 847F 0979 A3FF FFEB CCFF FFD5 E084" /* d„.Æy£ÿÿëÌÿÿÕà„ */
- $"FF03 C8F1 BCC4 80FF 01C0 7785 7F06 6557" /* ÿ.Èñ¼Ä€ÿ.Àw…..eW */
- $"5959 5661 7E84 7D08 76A3 FFFF C3F4 FFF5" /* YYVa~„}.v£ÿÿÃôÿõ */
- $"CB85 FF08 EDA8 CCC0 F2FF FFC1 7485 7D06" /* Ë…ÿ.í¨ÌÀòÿÿÁt…}. */
- $"6358 5959 575E 7B84 7A09 7692 D0BE D6FF" /* cXYYW^{„zÆv’оÖÿ */
- $"FFC2 B9D0 84CF 08CD B9FF F1B1 CED0 A574" /* ÿ¹ЄÏ.͹ÿñ±ÎÐ¥t */
- $"847A 0679 6058 5959 585D 8678 0776 6A9C" /* „z.y`XYYX]†x.vjœ */
- $"FFFF F081 7086 7106 75D1 D89D 6A71 7484" /* ÿÿðp†q.uÑØjqt„ */
- $"7808 7976 5E58 5959 585B 7486 7505 73B9" /* x.yv^XYYX[t†u.s¹ */
- $"F5FF AC6D 8775 0570 8CEB F889 6F85 7508" /* õÿ¬m‡u.pŒëø‰o…u. */
- $"7672 5C58 5959 5859 7285 7306 6F8A E1C6" /* vr\XYYXYr…s.oŠáÆ */
- $"C176 7287 7306 7179 EEFF E173 7184 7308" /* Ávr‡s.qyîÿásq„s. */
- $"7470 5B58 5959 5859 7085 7205 6B97 FFE7" /* tp[XYYXYp…r.k—ÿç */
- $"776E 8972 0569 C6FF FFB4 6A84 7202 736E" /* wn‰r.iÆÿÿ´j„r.sn */
- $"5A81 5901 586D 856F 0567 B9D9 786B 7089" /* ZY.Xm…o.g¹Ùxkp‰ */
- $"6F06 6993 FFFF F173 6D83 6F01 706B 8259" /* o.i“ÿÿñsmƒo.pk‚Y */
- $"0157 6B85 6E03 6C8C 7269 8B6E 066D 6BD3" /* .Wk…n.lŒri‹n.mkÓ */
- $"FFCB 6C6D 836E 026F 6958 8159 0256 6A6E" /* ÿËlmƒn.oiXY.Vjn */
- $"856D 0169 6B8D 6D04 6A73 8A6D 6B84 6D02" /* …m.ikm.jsŠmk„m. */
- $"6E68 5881 5902 566A 6E98 6D02 6B67 6C85" /* nhXY.Vjn˜m.kgl… */
- $"6D02 6E68 5881 5902 5665 69A3 6802 6963" /* m.nhXY.Vei£h.ic */
- $"5881 5901 5858 A559 0058 B059 0000 AB59" /* XY.XX¥Y.X°Y..«Y */
- $"8000 A959 DF00 FF00 FF00 FF00 AD00 0081" /* €.©Yß.ÿ.ÿ.ÿ.­.. */
- $"8987 0283 7B7C 9C00 0280 C1D3 87D1 04D2" /* ‰‡.ƒ{|œ..€ÁÓ‡Ñ.Ò */
- $"C787 7A7C 9B00 0288 D4DA 87D9 04DA D68F" /* LJz|›..ˆÔÚ‡Ù.ÚÖ */
- $"787C 9A00 0276 A2D8 89D6 02D7 A476 9278" /* x|š..v¢Ø‰Ö.פv’x */
- $"8500 0379 A2D3 D789 D503 D6D0 B5AD 90AE" /* …..y¢Ó׉Õ.Öе­® */
- $"01B0 9683 0003 7C87 B1B7 8BB5 00B6 92B9" /* .°–ƒ..|‡±·‹µ.¶’¹ */
- $"03BA A282 7D80 0003 87BD C8C5 90C4 00C5" /* .º¢‚}€..‡½ÈÅÄ.Å */
- $"8FC4 08C5 C8B9 8700 00A7 D6D1 90D0 01CD" /* Ä.Åȹ‡..§ÖÑÐ.Í */
- $"CF90 D006 D1D3 A000 00A3 D18F CD04 CCD1" /* ÏÐ.ÑÓ ..£ÑÍ.ÌÑ */
- $"EECC CC90 CD05 CF9B 0000 9ACE 90CB 03CA" /* îÌÌÍ.Ï›..šÎË.Ê */
- $"F7E9 C68F CB07 CCCB 9300 0091 C9C9 8FC8" /* ÷éÆË.ÌË“..‘ÉÉÈ */
- $"04C6 DFFF D2C5 8EC8 07C9 C68D 0000 8BC5" /* .ÆßÿÒÅŽÈ.ÉÆ..‹Å */
- $"C78D C606 C7C5 BFC7 FDF3 C38E C607 C7C0" /* ÇÆ.ÇÅ¿ÇýóÃŽÆ.ÇÀ */
- $"8800 0086 C0C5 8DC4 07C2 C7EB DAE4 FFD9" /* ˆ..†ÀÅÄ.ÂÇëÚäÿÙ */
- $"C08D C407 C6BC 8400 0082 BBC4 8CC2 09C1" /* ÀÄ.Ƽ„..‚»ÄŒÂÆÁ */
- $"C2E2 DEED D1FD F7C1 C18C C207 C4B6 8100" /* ÂâÞíÑý÷ÁÁŒÂ.Ķ. */
- $"007F B5C2 8CC0 09BC DBFF F8D7 BBEA FFDB" /* ..µÂŒÀƼÛÿø×»êÿÛ */
- $"BA8C C007 C2B0 7E00 007C B0C0 8BBE 0BBD" /* ºŒÀ.°~..|°À‹¾.½ */
- $"BAED FFFF CCB8 CCFF F9BF BC8B BE07 C0AA" /* ºíÿÿ̸Ìÿù¿¼‹¾.Àª */
- $"7C00 007B ABBF 8BBC 0BB7 DEE1 DFDF B9BB" /* |..{«¿‹¼.·Þáßß¹» */
- $"BAED FFDA B78B BC07 BFA5 7B00 007A A5BC" /* ºíÿÚ·‹¼.¿¥{..z¥¼ */
- $"89B9 0EBA B6C6 FFFF ECB9 B9BA B6CB FFFA" /* ‰¹.º¶Æÿÿì¹¹º¶Ëÿú */
- $"BCB8 8AB9 07BC 9F7A 0000 799F B984 B601" /* ¼¸Š¹.¼Ÿz..yŸ¹„¶. */
- $"B7B5 82B3 0CEC FFFF D4AF B3B3 B2B1 EAFF" /* ·µ‚³.ìÿÿÔ¯³³²±êÿ */
- $"D9B0 81B3 01B5 B784 B607 B899 797C 0079" /* Ù°³.µ·„¶.¸™y|.y */
- $"99B7 84B4 13B3 B9BE C1C0 B9CB FFFF EDBE" /* ™·„´.³¹¾ÁÀ¹Ëÿÿí¾ */
- $"BFBE BEC1 BCCB FCF7 BB80 BF02 C0B9 B384" /* ¿¾¾Á¼Ëü÷»€¿.À¹³„ */
- $"B407 B694 797C 0079 93B4 84B1 19AD C7F1" /* ´.¶”y|.y“´„±.­Çñ */
- $"FBF5 D6F1 FFFD D5F2 F5F8 F1FB F2E4 E7FF" /* ûõÖñÿýÕòõøñûòäçÿ */
- $"E2F3 F4F8 F8D0 AD84 B107 B290 7A00 7C79" /* âóôøøÐ­„±.²z.|y */
- $"8DB0 84AE 09AA C3FF FFF2 DCFF FFE2 E984" /* °„®ÆªÃÿÿòÜÿÿâé„ */
- $"FF03 D9F6 D1D8 80FF 01D6 A985 AE06 8C7A" /* ÿ.ÙöÑØ€ÿ.Ö©…®.Œz */
- $"7C7C 7989 AD84 AB08 A7C3 FFFF D5F7 FFF8" /* ||y‰­„«.§ÃÿÿÕ÷ÿø */
- $"DA85 FF08 F2C2 DAD3 F6FF FFD7 A583 AB08" /* Ú…ÿ.òÂÚÓöÿÿ×¥ƒ«. */
- $"ACAA 897A 7C7C 7A86 A984 A809 A5B7 E0D3" /* ¬ª‰z||z†©„¨Æ¥·àÓ */
- $"E2FF FFD6 D0E0 84DF 08DD CFFF F5CB DFE0" /* âÿÿÖÐà„ß.ÝÏÿõËßà */
- $"C3A4 83A8 07A9 A686 7A7C 7C7A 8386 A506" /* 䃨.©¦†z||zƒ†¥. */
- $"A39B BAFF FFF5 AA87 A006 A3DF E2BA 9BA1" /* £›ºÿÿõª‡ .£ß⺛¡ */
- $"A284 A507 A6A2 837B 7C7C 7B82 87A2 059F" /* ¢„¥.¦¢ƒ{||{‚‡¢.Ÿ */
- $"CCF8 FFC7 9C87 A205 9EAF F0F9 AD9E 85A2" /* ÌøÿÇœ‡¢.ž¯ðù­ž…¢ */
- $"08A3 9F81 7B7C 7C7B 7F9D 859F 069C AEE8" /* .£Ÿ{||{.…Ÿ.œ®è */
- $"D4D3 A09E 879F 069D A3F4 FFE8 9D9E 849F" /* ÔÓ ž‡Ÿ.£ôÿèž„Ÿ */
- $"09A0 9B7F 7B7C 7C7B 7E9A 9D84 9C05 98B5" /* Æ ›.{||{~š„œ.˜µ */
- $"FFEE 9F99 899C 0596 D7FF FFC9 9684 9C09" /* ÿ‰œ.–×ÿÿÉ–„œÆ */
- $"9D97 7E7B 7C7C 7B7C 989B 849A 0494 CCE4" /* —~{||{|˜›„š.”Ìä */
- $"A097 8A9A 0695 B3FF FFF4 9C99 839A 019B" /*  —Šš.•³ÿÿôœ™ƒš.› */
- $"9482 7C02 7B95 9984 9803 97AD 9B95 8B98" /* ”‚|.{•™„˜.—­›•‹˜ */
- $"0697 96E0 FFDA 9797 8398 0199 9282 7C02" /* .—–àÿÚ——ƒ˜.™’‚|. */
- $"7A93 9785 9601 9395 8D96 0494 9AAB 9695" /* z“—…–.“•–.”š«–• */
- $"8496 0297 8F7B 817C 027A 9297 9896 0294" /* „–.—{|.z’—˜–.” */
- $"9295 8596 0297 8F7B 817C 027A 8C91 A390" /* ’•…–.—{|.zŒ‘£ */
- $"0291 897A 817C 017B 7BA5 7C00 7BB0 7C00" /* .‘‰z|.{{¥|.{°|. */
- $"00AB 7C80 00A9 7CDF 00FF 00FF 00FF 00AD" /* .«|€.©|ß.ÿ.ÿ.ÿ.­ */
- $"0000 7A89 8002 7C73 749C 0002 79BC CE87" /* ..z‰€.|stœ..y¼Î‡ */
- $"CC04 CDC2 8172 749B 0002 80CF D587 D304" /* Ì.ÍÂrt›..€ÏÕ‡Ó. */
- $"D4D1 8870 749A 0002 6E9B D288 D003 D1D2" /* Ôшptš..n›ÒˆÐ.ÑÒ */
- $"9E6E 9270 8500 0371 9BCE D289 D002 D1CB" /* žn’p…..q›ÎÒ‰Ð.ÑË */
- $"AF91 A801 AA90 8300 0474 80AC B2AF 8AB0" /* ¯‘¨.ªƒ..t€¬²¯Š° */
- $"02B1 B3B4 90B3 03B5 9D7A 7580 0002 80B7" /* .±³´³.µzu€..€· */
- $"C3A4 BF09 C0C3 B57F 0000 A0CF CACA 8DC9" /* ä¿ÆÀõ... ÏÊÊÉ */
- $"04CA CAC6 C8CA 8EC9 07CA CACD 9900 009C" /* .ÊÊÆÈÊŽÉ.ÊÊÍ™..œ */
- $"CA8F C604 C5CB EDC5 C58F C606 C7C8 9400" /* ÊÆ.ÅËíÅÅÆ.ÇÈ”. */
- $"0093 C790 C403 C3F6 E7BF 8FC4 07C5 C48B" /* .“ÇÄ.Ãöç¿Ä.ÅÄ‹ */
- $"0000 8AC2 C28F C104 BEDA FFCE BE8E C107" /* ..ŠÂÂÁ.¾ÚÿξŽÁ. */
- $"C2BF 8600 0083 BEC0 8DBF 06C0 BEB8 C1FC" /* ¿†..ƒ¾À¿.À¾¸Áü */
- $"F3BC 8EBF 07C0 BA81 0000 7EB9 BE8D BD07" /* 󼎿.Àº..~¹¾½. */
- $"BAC0 E9D6 E1FF D5B8 8DBD 07BF B57C 0000" /* ºÀéÖáÿÕ¸½.¿µ|.. */
- $"7AB3 BC8C BA09 B9BB DFDB EBCB FDF7 BAB9" /* z³¼ŒºÆ¹»ßÛëËý÷º¹ */
- $"8CBA 07BC AE79 0000 77AE B98C B709 B3D7" /* Œº.¼®y..w®¹Œ·Æ³× */
- $"FFF8 D3B2 E8FF D7B1 8CB7 07B9 A876 0000" /* ÿøÓ²èÿ×±Œ·.¹¨v.. */
- $"74A9 B78A B50C B6B5 B2EC FFFF C6AF C6FF" /* t©·Šµ.¶µ²ìÿÿƯÆÿ */
- $"F9B8 B48B B507 B7A3 7400 0073 A3B6 8BB3" /* ù¸´‹µ.·£t..s£¶‹³ */
- $"0BAE DBDE DDDB B0B3 B1EA FFD7 AE8B B307" /* .®ÛÞÝÛ°³±êÿ×®‹³. */
- $"B59D 7300 0072 9CB3 8AB0 04AD C0FF FFEA" /* µs..rœ³Š°.­Àÿÿê */
- $"80B0 05AD C4FF F9B4 AF8A B007 B397 7200" /* €°.­Äÿù´¯Š°.³—r. */
- $"0071 97B1 85AE 00AC 80AA 0EAB AAEA FFFF" /* .q—±…®.¬€ª.«ªêÿÿ */
- $"CFA6 AAAA A9A7 E7FF D5A7 81AA 00AC 85AE" /* Ϧªª©§çÿÕ§ª.¬…® */
- $"07B0 9171 7400 7191 AE84 AB13 AAB2 B9BB" /* .°‘qt.q‘®„«.ª²¹» */
- $"BAB2 C6FF FFEB B7B9 B8B7 BBB6 C5FC F7B5" /* º²Æÿÿë·¹¸·»¶Åü÷µ */
- $"80B9 01BA B285 AB07 AD8C 7174 0070 8BAB" /* €¹.º²…«.­Œqt.p‹« */
- $"84A8 19A4 C1EF FBF4 D2F0 FFFC D1F1 F4F8" /* „¨.¤ÁïûôÒðÿüÑñôø */
- $"F0FB F1E2 E5FF DFF2 F3F8 F8CB A484 A807" /* ðûñâåÿßòóøøË¤„¨. */
- $"A988 7200 7471 85A7 84A5 09A1 BDFF FFF0" /* ©ˆr.tq…§„¥Æ¡½ÿÿð */
- $"D9FF FFE0 E784 FF03 D6F5 CDD4 80FF 01D2" /* Ùÿÿàç„ÿ.ÖõÍÔ€ÿ.Ò */
- $"9F85 A506 8472 7474 7181 A484 A208 9EBD" /* Ÿ…¥.„rttq¤„¢.ž½ */
- $"FFFF D2F6 FFF7 D785 FF08 F1BD D8CF F6FF" /* ÿÿÒöÿ÷×…ÿ.ñ½ØÏöÿ */
- $"FFD3 9C83 A208 A3A2 8172 7474 727E A084" /* ÿÓœƒ¢.£¢rttr~ „ */
- $"9F09 9CB0 DDCF DFFF FFD2 CCDD 84DC 08DA" /* ŸÆœ°ÝÏßÿÿÒÌÝ„Ü.Ú */
- $"CBFF F4C6 DCDD BE9B 839F 08A0 9E7E 7274" /* ËÿôÆÜݾ›ƒŸ. ž~rt */
- $"7472 7C9D 849C 089D 9B93 B5FF FFF4 A397" /* tr|„œ.›“µÿÿô£— */
- $"8598 0897 9BDD E0B4 9398 9A9D 839C 089D" /* …˜.—›Ýà´“˜šƒœ. */
- $"9A7B 7374 7473 7998 8699 0597 C8F7 FFC1" /* š{sttsy˜†™.—È÷ÿÁ */
- $"9387 9905 96A9 EEF9 A695 8599 089A 9679" /* “‡™.–©îù¦•…™.š–y */
- $"7374 7473 7795 8596 0693 A7E6 D1D0 9895" /* sttsw•…–.“§æÑИ• */
- $"8796 0695 9BF3 FFE7 9595 8496 0897 9377" /* ‡–.•›óÿç••„–.—“w */
- $"7374 7473 7693 8595 058F B0FF ED98 9289" /* sttsv“…•.°ÿ혒‰ */
- $"9505 8ED4 FFFF C58E 8495 0996 9076 7374" /* •.ŽÔÿÿÅŽ„•Æ–vst */
- $"7473 7490 9384 9204 8BC8 E299 8F8A 9206" /* tst“„’.‹È♊’. */
- $"8DAD FFFF F494 9183 9202 938C 7581 7402" /* ­ÿÿô”‘ƒ’.“Œut. */
- $"738D 9184 9003 8EA7 938D 8B90 068F 8EDD" /* s‘„.ާ“‹.ŽÝ */
- $"FFD7 8E8F 8390 0191 8A82 7402 728B 8F85" /* ÿ׎ƒ.‘Š‚t.r‹… */
- $"8E01 8B8D 8D8E 048C 93A4 8E8D 848E 028F" /* Ž.‹Ž.Œ“¤Ž„Ž. */
- $"8773 8174 0272 8B8F 988E 028C 8A8D 858E" /* ‡st.r‹˜Ž.ŒŠ…Ž */
- $"028F 8773 8174 0272 8489 A388 0289 8173" /* .‡st.r„‰£ˆ.‰s */
- $"8174 0173 73A5 7400 73B0 7400 00AB 7480" /* t.ss¥t.s°t..«t€ */
- $"00A9 74DF 0068 386D 6B00 0009 0800 0000" /* .©tß.h8mk..Æ.... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 002E 4549 4A4A 4A4A 4A4A 4A4A 4A4A" /* ....EIJJJJJJJJJJ */
- $"3B0A 0400 0000 0000 0000 0000 0000 0000" /* ;Â.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 2FF9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ../ùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FD52 0802 0000 0000 0000 0000 0000 0000" /* ýR.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 4DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Mÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FF7E 1306 0000 0000 0000 0000 0000 0000" /* ÿ~.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0002 ABFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..«ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFBB 2C11 0B0B 0B0B 0B0B 0B0B 0B0B 0B0B" /* ÿ»,............. */
- $"0B0B 0B0B 0B0B 0903 0000 0000 0000 0000" /* ......Æ......... */
- $"08B2 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF DFCC CCCC CCCC CCCC CCCC CCCC CCCC" /* ÿÿßÌÌÌÌÌÌÌÌÌÌÌÌÌ */
- $"CCCC CCCC CCCC CBC9 8000 0000 0000 0026" /* ÌÌÌÌÌÌËÉ€......& */
- $"71F2 EDEE EFEF EFEF EFEF EFEF EFEF EFEF" /* qòíîïïïïïïïïïïïï */
- $"EFEF F4F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ïïô÷÷÷÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F7 F7F7 F7F5 CE41 2000 0000 5EF7" /* ÷÷÷÷÷÷÷õÎA ...^÷ */
- $"FFF8 F8F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ÿøøùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F8 FAFF EE41 0000 C4FF" /* ùùùùùùùøúÿîA..Äÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFA1 0000 B6FF" /* ÿÿÿÿÿÿÿÿÿÿÿ¡..¶ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF91 0000 A2FF" /* ÿÿÿÿÿÿÿÿÿÿÿ‘..¢ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF7A 0000 8FFF" /* ÿÿÿÿÿÿÿÿÿÿÿz..ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF68 0000 79FF" /* ÿÿÿÿÿÿÿÿÿÿÿh..yÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF57 0000 5EFF" /* ÿÿÿÿÿÿÿÿÿÿÿW..^ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF48 0000 4BFF" /* ÿÿÿÿÿÿÿÿÿÿÿH..Kÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FD3B 0000 3FFE" /* ÿÿÿÿÿÿÿÿÿÿý;..?þ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF F62F 0000 33F8" /* ÿÿÿÿÿÿÿÿÿÿö/..3ø */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF ED23 0000 27F2" /* ÿÿÿÿÿÿÿÿÿÿí#..'ò */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF DE1A 0000 1FE9" /* ÿÿÿÿÿÿÿÿÿÿÞ....é */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF CE10 0000 1ADF" /* ÿÿÿÿÿÿÿÿÿÿÎ....ß */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF C10B 0100 14D5" /* ÿÿÿÿÿÿÿÿÿÿÁ....Õ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF B509 0100 0FCD" /* ÿÿÿÿÿÿÿÿÿÿµÆ...Í */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF AA07 0001 0BC2" /* ÿÿÿÿÿÿÿÿÿÿª.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF A005 0101 09B3" /* ÿÿÿÿÿÿÿÿÿÿ ...Ƴ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 9504 0101 08A6" /* ÿÿÿÿÿÿÿÿÿÿ•....¦ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8D04 0101 069A" /* ÿÿÿÿÿÿÿÿÿÿ....š */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8505 0101 0691" /* ÿÿÿÿÿÿÿÿÿÿ…....‘ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7D05 0101 078B" /* ÿÿÿÿÿÿÿÿÿÿ}....‹ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7606 0101 0885" /* ÿÿÿÿÿÿÿÿÿÿv....… */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7106 0102 0881" /* ÿÿÿÿÿÿÿÿÿÿq.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6D07 0102 0A7E" /* ÿÿÿÿÿÿÿÿÿÿm...Â~ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6A08 0102 0B7B" /* ÿÿÿÿÿÿÿÿÿÿj....{ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6709 0102 0C7C" /* ÿÿÿÿÿÿÿÿÿÿgÆ...| */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 670A 0102 0C75" /* ÿÿÿÿÿÿÿÿÿÿgÂ...u */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 600B 0102 113A" /* ÿÿÿÿÿÿÿÿÿÿ`....: */
- $"7B85 8585 8585 8585 8585 8585 8585 8585" /* {……………………………………… */
- $"8585 8585 8585 8585 8585 8585 8585 8585" /* ………………………………………… */
- $"8585 8585 8585 8585 8574 310F 0101 0B1E" /* ………………………t1..... */
- $"2B34 3535 3535 3535 3535 3535 3535 3535" /* +455555555555555 */
- $"3535 3535 3535 3535 3535 3535 3535 3535" /* 5555555555555555 */
- $"3535 3535 3535 3535 332A 1C0A 0100 040C" /* 555555553*.Â.... */
- $"1418 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1813 0B03 0000 0002" /* ................ */
- $"0304 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0402 0100 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0069 7433" /* .............it3 */
- $"3200 0025 F700 0000 00FF 00FF 00FF 00FF" /* 2..%÷....ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 59D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.ŸY× */
- $"00A6 59D3 0001 5959 8000 9D58 8459 D000" /* .¦YÓ..YY€.X„YÐ. */
- $"0359 5900 569F 5901 5658 8359 D000 0257" /* .YY.VŸY.VXƒYÐ..W */
- $"6287 9D95 0494 917F 5E58 8359 CD00 0459" /* b‡•.”‘.^XƒYÍ..Y */
- $"005C 9ABA 9EBC 03B9 AE85 5883 59CD 0004" /* .\šºž¼.¹®…XƒYÍ.. */
- $"5900 6EB3 BE9E BF04 BEB6 9D62 5782 59CD" /* Y.n³¾ž¿.¾¶bW‚YÍ */
- $"0003 5900 74B6 A0BE 03B8 9F63 5782 59CC" /* ..Y.t¶ ¾.¸ŸcW‚YÌ */
- $"0004 5959 547A B8A0 BC03 B7A0 6357 8359" /* ..YYTz¸ ¼.· cWƒY */
- $"CB00 0459 5954 88B9 A0BB 03B7 A366 56B8" /* Ë..YYTˆ¹ ».·£fV¸ */
- $"5995 0005 5959 005B A0B9 A0BA 03B8 AA73" /* Y•..YY.[ ¹ º.¸ªs */
- $"55BA 5992 0006 5959 0053 7BB4 B9A0 BA04" /* UºY’..YY.S{´¹ º. */
- $"B9B2 905A 56BA 5990 0006 5959 0054 73AB" /* ¹²ZVºY..YY.Ts« */
- $"B8A2 B903 B5AB 865E B756 0300 5859 598E" /* ¸¢¹.µ«†^·V..XYYŽ */
- $"0007 5959 005A 83AD B6B7 A2B8 04B7 B4AD" /* ..YY.Zƒ­¶·¢¸.·´­ */
- $"9B87 B57D 047B 725D 0059 8D00 0759 5900" /* ›‡µ}.{r].Y..YY. */
- $"5A8F B2B6 B6A4 B704 B6B5 B4B2 B1B4 B003" /* Z²¶¶¤·.¶µ´²±´°. */
- $"ADA0 7600 8059 8900 8159 0355 77AC B0E2" /* ­ v.€Y‰.Y.Uw¬°â */
- $"B103 AFA4 7D56 8259 8600 0159 5980 0003" /* ±.¯¤}V‚Y†..YY€.. */
- $"5279 9697 E298 0496 9073 5456 8000 0159" /* Ry–—â˜.–sTV€..Y */
- $"5984 0008 5900 5457 6268 686D 7284 73A1" /* Y„..Y.TWbhhmr„s¡ */
- $"74B9 7309 706C 6868 6763 5900 5959 8200" /* t¹sÆplhhgcY.YY‚. */
- $"0759 0052 6E96 A4A7 A8E7 A980 A706 A6A0" /* .Y.Rn–¤§¨ç©€§.¦  */
- $"8E6A 5759 5982 0002 536F A782 B0E5 AF81" /* ŽjWYY‚..So§‚°å¯ */
- $"B006 AFAF AB99 6A00 5980 0004 5900 5A9B" /* °.¯¯«™j.Y€..Y.Z› */
- $"AEF0 AF0B AEA6 895B 0059 0000 5900 6CA7" /* ®ð¯.®¦‰[.Y..Y.l§ */
- $"B4AE 03AF ABAE AFB7 AE0A A996 6500 5900" /* ´®.¯«®¯·®Â©–e.Y. */
- $"0059 5470 A7B3 AD05 AEA8 A299 A8AE B6AD" /* .YTp§³­.®¨¢™¨®¶­ */
- $"0AA8 9666 0059 0059 5900 6CA3 B4AB 05A6" /* ¨–f.Y.YY.l£´«.¦ */
- $"EDE9 99A7 ACB5 AB0A A692 6200 5900 5959" /* íé™§¬µ«Â¦’b.Y.YY */
- $"0063 9EB3 A905 A8A8 ECFF E195 B6A9 0BA3" /* .cž³©.¨¨ìÿá•¶©.£ */
- $"8D5F 5859 0059 5900 6099 A7B3 A806 A4DC" /* _XY.YY.`™§³¨.¤Ü */
- $"FFFF CA96 AAB4 A80B A187 5B58 5900 5959" /* ÿÿÊ–ª´¨.¡‡[XY.YY */
- $"005C 94A6 B3A7 01A3 C580 FF02 AD9D A8B3" /* .\”¦³§.£Å€ÿ.­¨³ */
- $"A70B 9F82 5A58 5900 5959 5857 8DA5 B3A6" /* §.Ÿ‚ZXY.YYXW¥³¦ */
- $"07A4 AEF8 FFFF ED97 A4B2 A603 A59C 7C58" /* .¤®øÿÿí—¤²¦.¥œ|X */
- $"8359 0257 87A3 B4A4 01A1 E180 FF02 CB94" /* ƒY.W‡£´¤.¡á€ÿ.Ë” */
- $"A6B1 A403 A399 7657 8359 0254 80A1 B4A2" /* ¦±¤.£™vWƒY.T€¡´¢ */
- $"019D C180 FF03 FEA4 9BA3 B0A2 03A1 9672" /* .Á€ÿ.þ¤›£°¢.¡–r */
- $"5783 5902 547A 9FB4 A202 A0A6 F380 FF02" /* WƒY.TzŸ´¢. ¦ó€ÿ. */
- $"E192 A3B0 A203 A094 6D56 8359 0255 759D" /* á’£°¢. ”mVƒY.Uu */
- $"B5A0 019B D381 FF02 B495 A1AF A006 9D90" /* µ .›Óÿ.´•¡¯ . */
- $"6957 5959 0080 5902 546D 9BB1 9E00 9F80" /* iWYY.€Y.Tm›±ž.Ÿ€ */
- $"A002 9CAF FD80 FF02 EF93 9DAF 9E06 9B8C" /*  .œ¯ý€ÿ.ž.›Œ */
- $"6657 5959 0080 5902 5568 97B0 9D07 9F95" /* fWYY.€Y.Uh—°.Ÿ• */
- $"8A89 8B98 9CE2 81FF 02C3 8F9E AE9D 0699" /* Љ‹˜œâÿ.Þ®.™ */
- $"8861 5759 5900 8059 0256 6494 AF9C 089D" /* ˆaWYY.€Y.Vd”¯œ. */
- $"8C9E D0DD C793 8CBC 81FF 02F7 9899 AE9C" /* ŒžÐÝÇ“Œ¼ÿ.÷˜™®œ */
- $"0697 855F 5859 5900 8059 0257 5E91 AF9B" /* .—…_XYY.€Y.W^‘¯› */
- $"0195 B781 FF03 F69B 96ED 81FF 02CE 8B9C" /* .•·ÿ.ö›–íÿ.΋œ */
- $"AD9B 0D95 815D 5859 5900 0059 5957 5B8C" /* ­›.•]XYY..YYW[Œ */
- $"98AD 9903 9889 9AD8 81FF 02E0 89C4 81FF" /* ˜­™.˜‰šØÿ.à‰Äÿ */
- $"02FD 9E93 AD99 0D93 7C5A 5859 5900 0059" /* .ýž“­™.“|ZXYY..Y */
- $"5958 5987 96AC 970C 9889 D3CE 88A1 E8FF" /* YXY‡–¬—.˜‰ÓΈ¡èÿ */
- $"FFF9 9B9D F481 FF02 D788 98AC 9702 9079" /* ÿù›ôÿ.׈˜¬—.y */
- $"5A80 5901 0000 8059 0255 8395 AB96 0D97" /* Z€Y...€Y.Uƒ•«–.— */
- $"8DA4 FFFF F6B2 84B4 F6FB A28E CC82 FF02" /* ¤ÿÿö²„´öû¢ŽÌ‚ÿ. */
- $"A28F 97AB 9601 8E75 8159 0100 0080 5902" /* ¢—«–.ŽuY...€Y. */
- $"547F 94AB 9502 9688 E481 FF07 E99E 8CBC" /* T.”«•.–ˆäÿ.鞌¼ */
- $"9991 A2F8 81FF 02DD 8896 AA95 0394 8D71" /* ™‘¢øÿ.݈–ª•.”q */
- $"5880 5901 0000 8059 0255 7993 AA94 0295" /* X€Y...€Y.Uy“ª”.• */
- $"87B4 84FF 05D4 8C93 948F D182 FF02 A68C" /* ‡´„ÿ.ÔŒ“”Ñ‚ÿ.¦Œ */
- $"95A9 9403 938A 6D57 8059 0700 0059 595A" /* •©”.“ŠmW€Y...YYZ */
- $"5374 91AA 9302 908C F284 FF06 DD92 9293" /* St‘ª“.Œò„ÿ.Ý’’“ */
- $"8FA4 FB81 FF01 E086 AA93 0391 876A 5780" /* ¤ûÿ.à†ª“.‘‡jW€ */
- $"5907 0000 5959 5A53 6F8F A991 0292 87CA" /* Y...YYZSo©‘.’‡Ê */
- $"84FF 02F8 A18D 8091 018D D782 FF02 A788" /* „ÿ.ø¡€‘.ׂÿ.§ˆ */
- $"92A8 9103 8F84 6757 8059 0100 0080 5902" /* ’¨‘.„gW€Y...€Y. */
- $"556B 8DA9 9002 8E85 DB84 FF01 C78A 8190" /* Uk©.Ž…Û„ÿ.ÇŠ */
- $"028B A8FE 81FF 01E2 84A9 9003 8E82 6357" /* .‹¨þÿ.â„©.Ž‚cW */
- $"8059 0100 0080 5902 5466 8CA8 9005 9186" /* €Y...€Y.TfŒ¨.‘† */
- $"AB85 A6EE 81FF 02EE 958E 8190 028F 8CDC" /* «…¦îÿ..ŒÜ */
- $"82FF 02AA 8591 A790 038D 7F62 5880 5901" /* ‚ÿ.ª…‘§..bX€Y. */
- $"0000 8059 0254 618A A78E 0C8F 84A5 FFF0" /* ..€Y.TaЧŽ.„¥ÿð */
- $"A480 BBF9 FFFF B688 838E 0189 A982 FF01" /* ¤€»ùÿÿ¶ˆƒŽ.‰©‚ÿ. */
- $"E583 A88E 038B 7C5F 5880 5901 0000 8059" /* 僨Ž.‹|_X€Y...€Y */
- $"0256 5F87 A78D 028C 83E8 80FF 06DF 9087" /* .V_‡§.Œƒè€ÿ.߇ */
- $"D4E0 8C8C 838D 028C 8ADE 82FF 02AB 838E" /* ÔàŒŒƒ.ŒŠÞ‚ÿ.«ƒŽ */
- $"A68D 038A 7A5D 5880 5901 0000 8059 0257" /* ¦.Šz]X€Y...€Y.W */
- $"5C84 A68C 028D 7EB7 83FF 03C9 8B8E 8B85" /* \„¦Œ.~·ƒÿ.ɋދ… */
- $"8C01 87AA 82FF 01E6 82A7 8C03 8877 5C58" /* Œ.‡ª‚ÿ.æ‚§Œ.ˆw\X */
- $"8059 0100 0080 5902 5757 81A6 8A02 878A" /* €Y...€Y.WW¦Š.‡Š */
- $"F584 FF01 CB83 868A 0289 88E0 82FF 02A8" /* õ„ÿ.˃†Š.‰ˆà‚ÿ.¨ */
- $"808B A58A 0386 735B 5880 5901 0000 8059" /* €‹¥Š.†s[X€Y...€Y */
- $"0258 557F A58A 028B 7BC9 84FF 02F6 9987" /* .XU.¥Š.‹{É„ÿ.ö™‡ */
- $"878A 0184 AB82 FF01 E580 A68A 0285 715A" /* ‡Š.„«‚ÿ.倦Š.…qZ */
- $"8159 0100 0081 5902 577B 88A3 8902 8A81" /* Y...Y.W{ˆ£‰.Š */
- $"9685 FF01 BF82 8889 0288 87E0 82FF 02A7" /* –…ÿ.¿‚ˆ‰.ˆ‡à‚ÿ.§ */
- $"7F8A A489 0183 6F82 5901 0000 8159 0254" /* .Ф‰.ƒo‚Y...Y.T */
- $"7787 A488 017A DC84 FF02 EA8C 8689 8801" /* w‡¤ˆ.zÜ„ÿ.ꌆ‰ˆ. */
- $"82A9 82FF 01E3 7EA4 8802 8781 6C82 5901" /* ‚©‚ÿ.ã~¤ˆ.‡l‚Y. */
- $"0000 8159 0151 7497 860E 8784 8686 8486" /* ..Y.Qt—†.‡„††„† */
- $"8684 8685 8486 877B A685 FF11 AD7D 8685" /* †„†…„†‡{¦…ÿ.­}†… */
- $"8486 8584 8784 8487 8485 8783 83DF 82FF" /* „†…„‡„„‡„…‡ƒƒß‚ÿ */
- $"0FA4 7D87 8584 8785 8487 8485 8784 8586" /* .¤}‡…„‡…„‡„…‡„…† */
- $"8596 8602 7F69 5881 5901 0000 8059 035A" /* …–†..iXY...€Y.Z */
- $"5170 8496 850E 8182 7F7F 827F 8082 7E81" /* Qp„–….‚..‚.€‚~ */
- $"8280 837E EC84 FF12 DB7E 817F 8082 7E81" /* ‚€ƒ~ì„ÿ.Û~.€‚~ */
- $"827E 8182 7E82 817E 827B A682 FF10 E07B" /* ‚~‚~‚~‚{¦‚ÿ.à{ */
- $"8380 827E 8181 7E82 817E 8280 7F81 8494" /* ƒ€‚~~‚~‚€.„” */
- $"8503 847D 6758 8159 0100 0080 5903 5A53" /* ….„}gXY...€Y.ZS */
- $"6E84 9585 0E82 90FB BCAC FFA4 B9FF 9BD3" /* n„•….‚û¼¬ÿ¤¹ÿ›Ó */
- $"FC97 7BB9 84FF 14FC 91AA FFA8 BFFF 92D1" /* ü—{¹„ÿ.ü‘ªÿ¨¿ÿ’Ñ */
- $"FB92 E5ED 87F4 DC95 FFCB 73DF 82FF 0FA0" /* û’åí‡ôÜ•ÿËsß‚ÿ.  */
- $"79DC F889 E5ED 90F6 D88F FFC7 AAC2 7D94" /* yÜø‰åíöØÿǪÂ}” */
- $"8503 847C 6558 8159 0100 0080 5903 5A52" /* ….„|eXY...€Y.ZR */
- $"6983 9584 0E81 92FF BCAA FFC4 D2FF 96D4" /* iƒ•„.’ÿ¼ªÿÄÒÿ–Ô */
- $"FF9A 82F8 84FF 14C6 78CE FFA6 BFFF B6E4" /* ÿš‚ø„ÿ.ÆxÎÿ¦¿ÿ¶ä */
- $"FF8D E8F9 AFFE DE91 FFE3 899E 82FF 0FDB" /* ÿèù¯þÞ‘ÿ㉞‚ÿ.Û */
- $"74E2 FFB1 F3F0 8AFA E9B4 FFC8 A6C7 7C94" /* tâÿ±óðŠúé´ÿȦÇ|” */
- $"8403 8379 6258 8159 0100 0080 5903 5A51" /* „.ƒybXY...€Y.ZQ */
- $"6581 9582 047F 90FF D5C8 81FF 04BB E5F9" /* e•‚..ÿÕÈÿ.»åù */
- $"86CA 84FF 06F2 82D6 FFFF C6D6 80FF 02FC" /* †Ê„ÿ.ò‚ÖÿÿÆÖ€ÿ.ü */
- $"B5EF 80FF 06E9 B8FF FFFA 8AD6 82FF 0196" /* µï€ÿ.é¸ÿÿúŠÖ‚ÿ.– */
- $"C680 FF02 F4B4 FA80 FF03 DCC9 C57A 9482" /* Æ€ÿ.ô´ú€ÿ.ÜÉÅz”‚ */
- $"0381 7761 5881 5901 0000 8059 035A 5262" /* .waXY...€Y.ZRb */
- $"7F95 8102 7E8F FA85 FF01 B190 85FF 01AC" /* .•.~ú…ÿ.±…ÿ.¬ */
- $"9A90 FF01 C494 82FF 02D5 8DF9 87FF 01BF" /* šÿ.Ä”‚ÿ.Õù‡ÿ.¿ */
- $"7994 8103 8075 5F58 8159 0100 0081 5902" /* y”.€u_XY...Y. */
- $"5461 7D95 8002 7D8E FA84 FF02 E779 DD84" /* Ta}•€.}Žú„ÿ.çyÝ„ */
- $"FF02 E47C E690 FF02 FC8A D281 FF02 FC8C" /* ÿ.ä|æÿ.üŠÒÿ.üŒ */
- $"C787 FF01 BF77 9480 037E 725E 5881 5901" /* LJÿ.¿w”€.~r^XY. */
- $"0000 8159 0254 5D7C 957F 027C 8EFA 84FF" /* ..Y.T]|•..|Žú„ÿ */
- $"019C A285 FF01 97AD 92FF 01C7 8F80 FF04" /* .œ¢…ÿ.—­’ÿ.Ç€ÿ. */
- $"FBC0 748B F986 FF01 BE76 947F 037D 715C" /* ûÀt‹ù†ÿ.¾v”..}q\ */
- $"5881 5901 0000 8159 0254 597B 957F 027C" /* XY...Y.TY{•..| */
- $"8EFA 83FF 02D7 7BEF 84FF 02D1 7EF4 92FF" /* Žúƒÿ.×{ï„ÿ.Ñ~ô’ÿ */
- $"09FE 8CC9 F8CB 8C64 9F83 C386 FF01 BE76" /* ÆþŒÉøËŒdŸƒÃ†ÿ.¾v */
- $"947F 037C 6F5B 5881 5901 0000 8159 0355" /* ”..|o[XY...Y.U */
- $"5779 7E94 7D02 7A8C FA82 FF02 FD8A B884" /* Wy~”}.zŒú‚ÿ.ýЏ„ */
- $"FF02 FA86 C094 FF09 CF74 7C64 7FCB FFC0" /* ÿ.ú†À”ÿÆÏt|d.ËÿÀ */
- $"80F7 85FF 01BD 7494 7D02 7A6D 5B82 5901" /* €÷…ÿ.½t”}.zm[‚Y. */
- $"0000 8159 0256 5677 957C 0279 8BFA 82FF" /* ..Y.VVw•|.y‹ú‚ÿ */
- $"02C3 82FB 84FF 02BB 86FE 95FF 088C 99D5" /* .Âû„ÿ.»†þ•ÿ.Œ™Õ */
- $"FCFF FFFA 7FBC 85FF 01BD 7394 7C02 796B" /* üÿÿú.¼…ÿ.½s”|.yk */
- $"5A82 5901 0000 8159 0257 5575 957B 0277" /* Z‚Y...Y.WUu•{.w */
- $"8BFA 81FF 02F4 7DCE 84FF 02EE 7BD6 96FF" /* ‹úÿ.ô}΄ÿ.î{Ö–ÿ */
- $"01D0 A782 FF02 C47B F484 FF01 BC72 947B" /* .Ч‚ÿ.Ä{ô„ÿ.¼r”{ */
- $"0178 6983 5901 0000 8159 0258 5272 957A" /* .xiƒY...Y.XRr•z */
- $"0877 8AE8 EEEC ECF2 AA91 85FF 02A8 92F2" /* .wŠèîììòª‘…ÿ.¨’ò */
- $"95EC 03ED ED93 DC81 FF03 FD83 B2F2 82EC" /* •ì.íí“Üÿ.ýƒ²ò‚ì */
- $"02F3 B573 947A 0176 6783 5901 0000 8159" /* .óµs”z.vgƒY...Y */
- $"0258 5070 9679 007A 817F 027E 71E3 84FF" /* .XPp–y.z..~qã„ÿ */
- $"03DF 797F 8096 7F02 8078 A382 FF02 C970" /* .ßy.€–..€x£‚ÿ.Ép */
- $"8083 7F00 7D95 7902 7565 5882 5901 0000" /* €ƒ..}•y.ueX‚Y... */
- $"8159 0258 4F6F 9779 8077 0278 69AB 85FF" /* Y.XOo—y€w.xi«…ÿ */
- $"029B 7378 9977 0178 DF81 FF02 B468 7583" /* .›sx™w.xßÿ.´huƒ */
- $"7700 7895 7902 7464 5882 5901 0000 8259" /* w.x•y.tdX‚Y...‚Y */
- $"0150 6D9A 7802 747A F384 FF02 CD72 779A" /* .Pmšx.tzó„ÿ.Írwš */
- $"7808 71A0 FFFF D98C 8FC6 6D9C 7801 7363" /* x.q ÿÿÙŒÆmœx.sc */
- $"8359 0100 0082 5901 516B 9A77 016B C484" /* ƒY...‚Y.Qkšw.kÄ„ */
- $"FF02 F68A 729B 770A 7677 9B8A 80BD FDFF" /* ÿ.öŠr›wÂvw›Š€½ýÿ */
- $"9C6A 789A 7702 7261 5882 5901 0000 8159" /* œjxšw.raX‚Y...Y */
- $"035A 4F68 7598 7602 737B F184 FF01 B96E" /* .ZOhu˜v.s{ñ„ÿ.¹n */
- $"9D76 0371 85D7 FB80 FF02 F076 719A 7602" /* v.q…×û€ÿ.ðvqšv. */
- $"7060 5882 5901 0000 8159 035A 4E66 7498" /* p`X‚Y...Y.ZNft˜ */
- $"7504 7380 77C3 FE81 FF02 E97B 729D 7502" /* u.s€wÃþÿ.é{ru. */
- $"727F EF82 FF01 CD66 9A75 026F 5E58 8259" /* r.ï‚ÿ.Ífšu.o^X‚Y */
- $"0100 0081 5903 5A4D 6473 9774 0672 76EE" /* ...Y.ZMds—t.rvî */
- $"CC73 83DA 80FF 01A4 6C9F 7401 6CBE 83FF" /* ÌsƒÚ€ÿ.¤lŸt.l¾ƒÿ */
- $"02A5 6575 9874 026D 5C58 8259 0100 0081" /* .¥eu˜t.m\X‚Y... */
- $"5902 5A4D 6298 730B 6F82 FAFF F9AD 6A97" /* Y.ZMb˜s.o‚úÿù­j— */
- $"F1DC 7172 9F73 016D 9283 FF03 F981 6B74" /* ñÜqrŸs.m’ƒÿ.ùkt */
- $"9773 026C 5B58 8259 0100 0081 5902 5A4D" /* —s.l[X‚Y...Y.ZM */
- $"6098 7301 6C94 81FF 04EC 957B 8470 A073" /* `˜s.l”ÿ.ì•{„p s */
- $"0271 75E7 83FF 02DD 6972 9773 026B 5C58" /* .quçƒÿ.Ýir—s.k\X */
- $"8259 0100 0081 5902 5A50 5F98 7201 69A8" /* ‚Y...Y.ZP_˜r.i¨ */
- $"83FF 019B 69A2 7201 6ABF 84FF 02AF 6473" /* ƒÿ.›i¢r.j¿„ÿ.¯ds */
- $"9672 026A 5B58 8259 0100 0081 5903 5A51" /* –r.j[X‚Y...Y.ZQ */
- $"5D70 9771 0167 BD81 FF02 F6A1 6FA3 7101" /* ]p—q.g½ÿ.ö¡o£q. */
- $"6B94 84FF 02F7 7B6D 9671 0169 5A83 5901" /* k”„ÿ.÷{m–q.iZƒY. */
- $"0000 8159 035A 505B 6F97 7101 69D5 80FF" /* ..Y.ZP[o—q.iÕ€ÿ */
- $"03E8 8B68 70A3 7102 6F74 E984 FF02 BC65" /* .è‹hp£q.oté„ÿ.¼e */
- $"7294 7102 7067 5883 5901 0000 8159 035A" /* r”q.pgXƒY...Y.Z */
- $"5059 6F96 7007 6F6F E7FF FFD4 7A69 A670" /* PYo–p.ooçÿÿÔzi¦p */
- $"0168 BD84 FF02 EC71 6E94 7002 6F67 5883" /* .h½„ÿ.ìqn”p.ogXƒ */
- $"5901 0000 8159 035A 5058 6E96 6F06 6C79" /* Y...Y.ZPXn–o.ly */
- $"F7FF BD6E 6BA7 6F02 6A8B FD83 FF02 FC83" /* ÷ÿ½nk§o.j‹ýƒÿ.üƒ */
- $"6B94 6F02 6E66 5783 5901 0000 8159 035A" /* k”o.nfWƒY...Y.Z */
- $"5056 6D96 6E05 688E FBA5 676C A86E 026D" /* PVm–n.hŽû¥gl¨n.m */
- $"6AD0 83FF 02F5 7D6B 946E 026D 6456 8359" /* jЃÿ.õ}k”n.mdVƒY */
- $"0100 0081 5903 5A4F 556C 966D 0468 9294" /* ...Y.ZOUl–m.h’” */
- $"656C AA6D 0268 87F8 82FF 01BC 6995 6D02" /* elªm.h‡ø‚ÿ.¼i•m. */
- $"6C63 5683 5901 0000 8159 035A 5054 6C97" /* lcVƒY...Y.ZPTl— */
- $"6D01 6C68 AD6D 0866 9EF7 FFFF F3B1 6C6B" /* m.lh­m.fž÷ÿÿó±lk */
- $"956D 026C 6256 8359 0100 0081 5903 5A50" /* •m.lbVƒY...Y.ZP */
- $"546C CA6D 0667 81A6 9D7A 666C 966D 026C" /* TlÊm.g¦zfl–m.l */
- $"6256 8359 0100 0081 5903 5A51 536C CB6D" /* bVƒY...Y.ZQSlËm */
- $"0369 6565 6998 6D02 6C62 5783 5901 0000" /* .ieei˜m.lbWƒY... */
- $"8159 035A 5152 6AEA 6C02 6B61 5783 5901" /* Y.ZQRjêl.kaWƒY. */
- $"0000 8159 035A 5252 6AEA 6C02 6B61 5783" /* ..Y.ZRRjêl.kaWƒ */
- $"5901 0000 8159 035A 5252 6AEA 6C02 6B61" /* Y...Y.ZRRjêl.ka */
- $"5783 5901 0000 8159 035A 5352 6AEA 6C02" /* WƒY...Y.ZSRjêl. */
- $"6B61 5783 5900 0082 5903 5A54 5168 EA6B" /* kaWƒY..‚Y.ZTQhêk */
- $"0269 5E56 8359 0000 8359 0257 4D5E EA63" /* .i^VƒY..ƒY.WM^êc */
- $"0260 5756 8359 0100 0082 5902 5A55 53EA" /* .`WVƒY...‚Y.ZUSê */
- $"5601 5556 8459 0100 00FB 5901 0000 FB59" /* V.UV„Y...ûY...ûY */
- $"0100 00FB 5901 0000 FB59 0100 00FA 5981" /* ...ûY...ûY...úY */
- $"00F9 5982 00F7 5983 00F6 5986 00F3 59FF" /* .ùY‚.÷Yƒ.öY†.óYÿ */
- $"00FF 0000 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ...ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00DF 009F 7CD7 00A6 7CD3" /* .ÿ.ÿ.ÿ.ß.Ÿ|×.¦|Ó */
- $"0001 7C7C 8000 9D7B 847C D000 037C 7C00" /* ..||€.{„|Ð..||. */
- $"7C9F 7F01 7B7B 837C D000 027B 88A5 9EB0" /* |Ÿ..{{ƒ|Ð..{ˆ¥ž° */
- $"03AC 9D81 7B83 7CCD 0004 7C00 81B3 D09E" /* .¬{ƒ|Í..|.³Ðž */
- $"D302 D0C3 A184 7CCD 0004 7C00 8FCA D79F" /* Ó.Ðá„|Í..|.Êן */
- $"D803 CEB4 837A 827C CD00 037C 0095 CEA0" /* Ø.δƒz‚|Í..|.•Π */
- $"D803 D1B7 847A 827C CC00 047C 7C78 9BD0" /* Ø.Ñ·„z‚|Ì..||x›Ð */
- $"A0D7 03D1 B884 7A83 7CCB 0004 7C7C 79A8" /*  ×.Ѹ„zƒ|Ë..||y¨ */
- $"D3A0 D703 D2BC 867A B87C 9500 057C 7C00" /* Ó ×.Ò¼†z¸|•..||. */
- $"81BD D5A0 D603 D3C3 9278 BA7C 9200 067C" /* ½Õ Ö.ÓÃ’xº|’..| */
- $"7C00 799D CED5 A0D6 04D4 CBAC 7D79 BA7C" /* |.yÎÕ Ö.Ôˬ}yº| */
- $"9000 067C 7C00 7B97 C5D3 A2D5 03D1 C4A3" /* ..||.{—ÅÓ¢Õ.ÑÄ£ */
- $"8280 7AB4 7B03 007B 7C7C 8E00 077C 7C00" /* ‚€z´{..{||Ž..||. */
- $"81A4 C8D2 D4A2 D505 D4D0 C8B7 A69F B19E" /* ¤ÈÒÔ¢Õ.ÔÐÈ·¦Ÿ±ž */
- $"079F 9F9E 9D94 8100 7C8D 0007 7C7C 0081" /* .ŸŸž”.|..||. */
- $"ADCD D3D3 A4D4 03D3 D2D0 CE80 CCB2 CB03" /* ­ÍÓÓ¤Ô.ÓÒÐ΀̲Ë. */
- $"C7B9 9500 807C 8900 817C 037A 98C6 CDE2" /* ǹ•.€|‰.|.z˜ÆÍâ */
- $"CE03 CCBE 9B7A 827C 8600 017C 7C80 0002" /* Î.̾›z‚|†..||€.. */
- $"7697 B181 B403 B5B5 B4B4 9EB5 01B4 B4B6" /* v—±´.µµ´´žµ.´´¶ */
- $"B506 B4B4 B3AA 9177 7980 0001 7C7C 8400" /* µ.´´³ª‘wy€..||„. */
- $"097C 0078 7D87 8B8B 8D94 95E2 960A 9592" /* Æ|.x}‡‹‹”•â–•’ */
- $"8E8C 8B8B 867D 007C 7C82 0009 7C00 7892" /* ŽŒ‹‹†}.||‚.Æ|.x’ */
- $"B5C1 C4C5 C6C6 81C7 03C6 C6C7 C79E C601" /* µÁÄÅÆÆÇ.ÆÆÇÇžÆ. */
- $"C7C7 82C6 01C7 C7AC C683 C70A C6C6 C4C3" /* ÇÇ‚Æ.ÇǬƃÇÂÆÆÄà */
- $"C3BD AB8C 7A7C 7C82 0005 7893 C5CE CFD0" /* ý«Œz||‚..x“ÅÎÏÐ */
- $"E9CF 08D0 D0CF CEC9 B58B 007C 8000 047C" /* éÏ.ÐÐÏÎɵ‹.|€..| */
- $"0080 B9CE F0D0 0CCF C5A7 7E00 7C00 007C" /* .€¹ÎðÐ.Ïŧ~.|..| */
- $"008F C5CE B3CF 03D0 CDCF D0B7 CF0A C9B2" /* .ÅγÏ.ÐÍÏзÏÂɲ */
- $"8600 7C00 007C 7894 C6B3 CF05 D0CB BEBA" /* †.|..|x”ƳÏ.Ð˾º */
- $"CCD0 B6CF 0ACA B487 007C 007C 7C00 8FC4" /* ÌжÏÂÊ´‡.|.||.Ä */
- $"B4CE 05C9 F2ED B9CC CFB5 CE0B C8B1 8400" /* ´Î.Éòí¹ÌϵÎ.ȱ„. */
- $"7C00 7C7C 0089 C0CC B3CD 05CC F3FF E7B9" /* |.||.‰À̳Í.Ìóÿç¹ */
- $"CEB5 CD0B C5AC 817B 7C00 7C7C 0085 BCCB" /* εÍ.Ŭ{|.||.…¼Ë */
- $"B3CC 06C9 EAFF FFD8 BDCE B4CC 0BC4 A77D" /* ³Ì.ÉêÿÿؽδÌ.ħ} */
- $"7B7C 007C 7C00 81B6 CAB3 CC01 C9DC 80FF" /* {|.||.¶Ê³Ì.ÉÜ€ÿ */
- $"02C6 C4CD B2CC 0DCB C1A3 7D7B 7C00 7C7C" /* .ÆÄͲÌ.ËÁ£}{|.|| */
- $"7B7D B1C9 CBB2 CA07 C9CF FBFF FFF1 BACB" /* {}±É˲Ê.ÉÏûÿÿñºË */
- $"B2CA 03C9 BE9D 7B83 7C02 7BAB C8B4 CA01" /* ²Ê.ɾ{ƒ|.{«È´Ê. */
- $"C8ED 80FF 02D9 BCCB B1CA 03C9 BC98 7A83" /* Èí€ÿ.ټ˱Ê.ɼ˜zƒ */
- $"7C02 7AA5 C6B4 C901 C6DA 80FF 03FD C1C4" /* |.z¥Æ´É.ÆÚ€ÿ.ýÁÄ */
- $"CAB0 C903 C7B9 957A 837C 0279 9FC4 B4C8" /* ʰÉ.ǹ•zƒ|.yŸÄ´È */
- $"02C7 CAF7 80FF 02E8 B8C9 B0C8 03C5 B68F" /* .ÇÊ÷€ÿ.è¸É°È.Ŷ */
- $"7A83 7C02 799A C2B5 C701 C4E4 81FF 02CA" /* zƒ|.yšÂµÇ.Ääÿ.Ê */
- $"BFC8 AFC7 06C4 B38B 7A7C 7C00 807C 0278" /* ¿È¯Ç.ij‹z||.€|.x */
- $"93C0 B1C6 00C7 80C8 02C4 CFFD 80FF 01F2" /* “À±Æ.Ç€È.ÄÏý€ÿ.ò */
- $"B8B0 C606 C2AF 897A 7C7C 0080 7C02 798F" /* ¸°Æ.¯‰z||.€|.y */
- $"BEB0 C607 C8C0 B4B2 B6C3 C6ED 81FF 02D4" /* ¾°Æ.ÈÀ´²¶ÃÆíÿ.Ô */
- $"BBC7 AEC6 06C1 AC84 7A7C 7C00 807C 0279" /* »Ç®Æ.Á¬„z||.€|.y */
- $"8BBB AFC5 08C6 B6BA DCE5 D5B3 BAD8 81FF" /* ‹»¯Å.ƶºÜåÕ³ºØÿ */
- $"02F9 BBC4 AEC5 06C0 A982 7B7C 7C00 807C" /* .ù»Ä®Å.À©‚{||.€| */
- $"027A 85B7 AEC4 02C5 C1CE 81FF 03F7 BAC1" /* .z…·®Ä.ÅÁÎÿ.÷ºÁ */
- $"F481 FF02 DCB7 C6AD C40D BDA5 817B 7C7C" /* ôÿ.Ü·Æ­Ä.½¥{|| */
- $"0000 7C7C 7A83 B4C3 ADC4 03C3 B3BE E981" /* ..||zƒ´Ã­Ä.ó¾é */
- $"FF02 E8B6 DC81 FF02 FDBE C0AD C40D BCA1" /* ÿ.è¶Üÿ.ý¾À­Ä.¼¡ */
- $"7E7B 7C7C 0000 7C7C 7B80 B0C2 ACC3 0CC4" /* ~{||..||{€°Â¬Ã.Ä */
- $"B5DD DAAE C4F2 FFFF FAC2 C5F8 81FF 02E2" /* µÝÚ®ÄòÿÿúÂÅøÿ.â */
- $"B5C4 ACC3 01B9 9D81 7C07 0000 7C7C 7B7C" /* µÄ¬Ã.¹|...||{| */
- $"ABC0 ABC1 0DC2 BCC1 FFFF F7C7 ACD0 FBFC" /* «À«Á.¼Áÿÿ÷ǬÐûü */
- $"C7BC E082 FF02 C0BD C2AB C101 B79A 817C" /* Ǽà‚ÿ.À½Â«Á.·š| */
- $"0100 0080 7C02 7BA7 BFAB C102 C2B2 EB81" /* ...€|.{§¿«Á.²ë */
- $"FF07 EDB9 B3D7 C3BF C7FA 81FF 02E6 B3C2" /* ÿ.í¹³×ÿÇúÿ.æ³Â */
- $"AAC1 03C0 B595 7B80 7C01 0000 807C 027A" /* ªÁ.Àµ•{€|...€|.z */
- $"A3BE AAC0 02C1 B6CA 84FF 05DE B8C0 C0BD" /* £¾ªÀ.Á¶Ê„ÿ.Þ¸ÀÀ½ */
- $"E382 FF02 C2BA C1A9 C003 BFB2 927A 807C" /* ã‚ÿ.ºÁ©À.¿²’z€| */
- $"0100 0080 7C02 789D BCAA BF02 BEB3 F584" /* ...€|.x¼ª¿.¾³õ„ */
- $"FF06 EBBF BEBF BDC9 FC81 FF02 E8B2 C0A9" /* ÿ.뿾¿½Éüÿ.è²À© */
- $"BF03 BEB0 8F7A 807C 0100 0080 7C02 7898" /* ¿.¾°z€|...€|.x˜ */
- $"BAA9 BE02 BFB5 D984 FF02 FBC7 BC80 BE01" /* º©¾.¿µÙ„ÿ.ûǼ€¾. */
- $"BBE7 82FF 02C3 B7BF A8BE 03BC AD8B 7A80" /* »ç‚ÿ.÷¿¨¾.¼­‹z€ */
- $"7C01 0000 807C 0278 95B9 A9BD 02BC B3E9" /* |...€|.x•¹©½.¼³é */
- $"84FF 01DD B981 BD02 BACB FE81 FF02 EAB0" /* „ÿ.ݹ½.ºËþÿ.ê° */
- $"BEA8 BD03 BAAA 887A 807C 0100 0080 7C02" /* ¾¨½.ºªˆz€|...€|. */
- $"7890 B8A8 BD05 BEB2 C1AC C7F6 81FF 02F4" /* x¸¨½.¾²Á¬Çöÿ.ô */
- $"C0BC 82BD 01BB EA82 FF02 C4B6 BEA7 BD03" /* À¼‚½.»ê‚ÿ.;§½. */
- $"BAA8 867A 807C 0100 0080 7C02 788B B5A7" /* º¨†z€|...€|.x‹µ§ */
- $"BC0C BDB5 C1FF F2BD AAD5 FCFF FFD3 B983" /* ¼.½µÁÿò½ªÕüÿÿÓ¹ƒ */
- $"BC01 B9CC 82FF 02EB AFBD A7BC 03B8 A584" /* ¼.¹Ì‚ÿ.믽§¼.¸¥„ */
- $"7B80 7C01 0000 807C 0279 88B3 A8BC 01AE" /* {€|...€|.yˆ³¨¼.® */
- $"ED80 FF06 E5B1 B1E6 ECBB BB84 BC01 B9EB" /* í€ÿ.å±±æì»»„¼.¹ë */
- $"82FF 02C5 B4BD A6BC 03B7 A381 7B80 7C01" /* ‚ÿ.Å´½¦¼.·£{€|. */
- $"0000 807C 027A 85B1 A6BB 02BC AFCC 82FF" /* ..€|.z…±¦».¼¯Ì‚ÿ */
- $"04FE D6AF BBBA 85BB 01B7 CC82 FF02 ECAE" /* .þÖ¯»º…».·Ì‚ÿ.ì® */
- $"BCA6 BB03 B5A0 807B 807C 0100 0080 7C03" /* ¼¦».µ €{€|...€|. */
- $"7A80 ADB9 A5BA 02B8 B0F7 84FF 01DE B486" /* z€­¹¥º.¸°÷„ÿ.Þ´† */
- $"BA02 B9B8 EB82 FF02 C3B2 BBA5 BA03 B39C" /* º.¹¸ë‚ÿ.ò»¥º.³œ */
- $"7F7B 807C 0100 0080 7C03 7B7E AAB7 A4B8" /* .{€|...€|.{~ª·¤¸ */
- $"02BA ABD8 84FF 02F9 C1B6 87B8 01B5 CC82" /* .º«Ø„ÿ.ùÁ¶‡¸.µÌ‚ */
- $"FF02 EBAC B9A5 B803 B199 7D7B 807C 0100" /* ÿ.묹¥¸.±™}{€|.. */
- $"0080 7C03 7B7D A7B6 A4B7 02B2 B7FE 84FF" /* .€|.{}§¶¤·.²·þ„ÿ */
- $"01D7 B388 B702 B6B6 EB82 FF02 C2B0 B8A4" /* .׳ˆ·.¶¶ë‚ÿ.°¸¤ */
- $"B701 AF96 827C 0100 0081 7C02 7BA3 B5A3" /* ·.¯–‚|...|.{£µ£ */
- $"B602 B7A8 E584 FF02 F1B8 B589 B601 B3CA" /* ¶.·¨å„ÿ.ñ¸µ‰¶.³Ê */
- $"82FF 02EA AAB7 A4B6 01AD 9382 7C01 0000" /* ‚ÿ.ꪷ¤¶.­“‚|... */
- $"817C 0278 9FB4 97B5 0DB4 B5B6 B4B6 B5B4" /* |.xŸ´—µ.´µ¶´¶µ´ */
- $"B6B5 B4B6 B6AD C085 FF11 CCB0 B6B5 B4B6" /* ¶µ´¶¶­À…ÿ.̰¶µ´¶ */
- $"B5B4 B6B5 B4B6 B4B5 B6B3 B4EB 82FF 0EC0" /* µ´¶µ´¶´µ¶³´ë‚ÿ.À */
- $"AFB6 B5B4 B6B4 B4B6 B4B5 B6B4 B5B6 97B5" /* ¯¶µ´¶´´¶´µ¶´µ¶—µ */
- $"01AB 9082 7C01 0000 817C 0278 9CB3 95B5" /* .«‚|...|.xœ³•µ */
- $"0FB6 AFA7 A9AA A7AA AAA7 ABA9 A7AC B1A9" /* .¶¯§©ª§ªª§«©§¬±© */
- $"F084 FF12 E9AA A6AA AAA7 ABA9 A7AB A8A8" /* ð„ÿ.骦ªª§«©§«¨¨ */
- $"ACA8 A8AB A7A5 C882 FF0F E8A8 B2A8 A8AB" /* ¬¨¨«§¥È‚ÿ.訲¨¨« */
- $"A8A8 ACA8 A9AC A7A9 AAAB 95B5 03B4 A98E" /* ¨¨¬¨©¬§©ª«•µ.´©Ž */
- $"7B81 7C01 0000 817C 0278 99B2 95B4 0EB3" /* {|...|.x™²•´.³ */
- $"B7F9 D2C7 FFC1 CEFF BCE1 FABB AACD 84FF" /* ·ùÒÇÿÁÎÿ¼áú»ªÍ„ÿ */
- $"14FD BAC6 FFC5 D3FF B7DF F9B7 EBF2 B0F6" /* .ýºÆÿÅÓÿ·ßù·ëò°ö */
- $"E6B9 FDDA A7EB 82FF 0FBD AAE6 F8B0 EBF1" /* æ¹ýÚ§ë‚ÿ.½ªæø°ëñ */
- $"B5F7 E3B4 FED9 C5D5 AF94 B403 B3A7 8B7B" /* µ÷ã´þÙÅÕ¯”´.³§‹{ */
- $"817C 0100 0081 7C02 7794 B195 B30E B1B9" /* |...|.w”±•³.±¹ */
- $"FFD2 C7FF D3DE FFBA E3FF BDAA F984 FF14" /* ÿÒÇÿÓÞÿºãÿ½ªù„ÿ. */
- $"DBA2 DAFF C4D4 FFCA EBFE B4EF FBC4 FEE9" /* Û¢ÚÿÄÔÿÊëþ´ïûÄþé */
- $"B6FF EAAB C082 FF0F E4A3 ECFF C5F6 F5B2" /* ¶ÿê«À‚ÿ.ä£ìÿÅöõ² */
- $"FBEF C8FF DAC4 DAAE 94B3 03B2 A589 7B81" /* ûïÈÿÚÄÚ®”³.²¥‰{ */
- $"7C01 0000 807C 037D 7690 AE95 B104 AFB7" /* |...€|.}v®•±.¯· */
- $"FFE0 D681 FF04 CDEC FCAE D884 FF06 F7AC" /* ÿàÖÿ.Íìü®Ø„ÿ.÷¬ */
- $"E0FF FFD4 E180 FF02 FDC9 F380 FF06 EFCA" /* àÿÿÔá€ÿ.ýÉó€ÿ.ïÊ */
- $"FFFF FAAE E582 FF01 B6DA 80FF 02F7 C7FB" /* ÿÿú®å‚ÿ.¶Ú€ÿ.÷Çû */
- $"80FF 03E5 D6D9 AC94 B103 B0A2 877B 817C" /* €ÿ.åÖÙ¬”±.°¢‡{| */
- $"0100 0081 7C02 768D AC95 B002 AEB7 FB85" /* ...|.v¬•°.®·û… */
- $"FF01 CDB1 85FF 01C9 B890 FF01 D5B8 82FF" /* ÿ.ͱ…ÿ.ɸÿ.Õ¸‚ÿ */
- $"02E0 B3FC 87FF 01D5 AA94 B003 AE9F 857B" /* .à³ü‡ÿ.Õª”°.®Ÿ…{ */
- $"817C 0100 0081 7C02 788A AB95 AF02 ADB6" /* |...|.xŠ«•¯.­¶ */
- $"FB84 FF02 F0A5 E584 FF02 EEA6 EC90 FF02" /* û„ÿ.ð¥å„ÿ.î¦ìÿ. */
- $"FCAE E281 FF02 FCB4 DB87 FF01 D5A9 94AF" /* ü®âÿ.ü´Û‡ÿ.Õ©”¯ */
- $"03AC 9D83 7B81 7C01 0000 817C 0278 86A9" /* .¬ƒ{|...|.x†© */
- $"95AD 02AB B4FB 84FF 01BE BD85 FF01 BAC3" /* •­.«´û„ÿ.¾½…ÿ.ºÃ */
- $"92FF 01D6 B480 FF04 FCD8 A4B3 FB86 FF01" /* ’ÿ.Ö´€ÿ.üؤ³û†ÿ. */
- $"D4A7 94AD 03AB 9A81 7B81 7C01 0000 817C" /* Ô§”­.«š{|...| */
- $"0278 83A7 95AC 02AA B3FB 83FF 02E5 A3F2" /* .xƒ§•¬.ª³ûƒÿ.å£ò */
- $"84FF 02E1 A5F6 92FF 09FD AEDC FBDE B595" /* „ÿ.á¥ö’ÿÆý®ÜûÞµ• */
- $"B6A9 D886 FF01 D3A6 94AC 03A9 9880 7B81" /* ¶©Ø†ÿ.Ó¦”¬.©˜€{ */
- $"7C01 0000 817C 0278 80A5 95AC 02AA B3FB" /* |...|.x€¥•¬.ª³û */
- $"82FF 02FE B0CB 84FF 02FC ADD0 94FF 09DB" /* ‚ÿ.þ°Ë„ÿ.ü­Ð”ÿÆÛ */
- $"A1A8 95A2 D6FF D1AA FA85 FF01 D3A6 94AC" /* ¡¨•¢ÖÿѪú…ÿ.Ó¦”¬ */
- $"03A8 967F 7B81 7C01 0000 817C 0279 7FA3" /* .¨–.{|...|.y.£ */
- $"95AB 02A9 B2FB 82FF 02D7 A7FB 84FF 02D2" /* •«.©²û‚ÿ.×§û„ÿ.Ò */
- $"AAFD 95FF 08AD B4DD FCFF FFFA A5D3 85FF" /* ªý•ÿ.­´Ýüÿÿú¥Ó…ÿ */
- $"01D3 A594 AB03 A694 7E7B 817C 0100 0081" /* .Ó¥”«.¦”~{|... */
- $"7C02 7A7D A095 A902 A7B1 FB81 FF02 F8A5" /* |.z} •©.§±ûÿ.ø¥ */
- $"DA84 FF02 F4A4 E096 FF01 DCC2 82FF 02D3" /* Ú„ÿ.ô¤à–ÿ.Ü‚ÿ.Ó */
- $"A5F8 84FF 01D2 A394 A902 A491 7D82 7C01" /* ¥ø„ÿ.Ò£”©.¤‘}‚|. */
- $"0000 817C 027A 7A9E 95A8 08A6 B1EF F3F2" /* ..|.zzž•¨.¦±ïóò */
- $"F2F6 C6B0 85FF 02C5 B4F5 95F2 03F3 F2B5" /* òöư…ÿ.Å´õ•ò.óòµ */
- $"E881 FF03 FCA7 CCF6 82F2 02F7 CDA3 94A8" /* èÿ.ü§Ìö‚ò.÷Í£”¨ */
- $"01A3 8F83 7C01 0000 817C 027B 779C 96A7" /* .£ƒ|...|.{wœ–§ */
- $"00A8 82AB 019C E984 FF03 E9A6 AAAC 96AB" /* .¨‚«.œé„ÿ.馪¬–« */
- $"02AC A6C1 82FF 02D8 A0AC 83AB 00A9 95A7" /* .¬¦Á‚ÿ.Ø ¬ƒ«.©•§ */
- $"01A1 8D83 7C01 0000 817C 037B 7699 A595" /* .¡ƒ|...|.{v™¥• */
- $"A600 A580 A402 A599 C085 FF02 BCA1 A599" /* ¦.¥€¤.¥™À…ÿ.¼¡¥™ */
- $"A401 A5E9 81FF 02CB 96A3 83A4 00A5 95A6" /* ¤.¥éÿ.Ë–£ƒ¤.¥•¦ */
- $"029F 8A7B 827C 0100 0082 7C02 7596 A399" /* .ŸŠ{‚|...‚|.u–£™ */
- $"A402 A29F F584 FF01 DDA0 9BA4 09A0 BFFF" /* ¤.¢Ÿõ„ÿ.Ý ›¤Æ ¿ÿ */
- $"FFE6 ADAB D299 A59B A402 9D88 7B82 7C01" /* ÿæ­«Ò™¥›¤.ˆ{‚|. */
- $"0000 827C 0276 94A2 98A3 02A4 98D1 84FF" /* ..‚|.v”¢˜£.¤˜Ñ„ÿ */
- $"02F9 AFA0 9CA3 09A4 B9A9 A0CB FCFF B599" /* .ù¯ œ£Æ¤¹© Ëüÿµ™ */
- $"A49A A302 9C87 7B82 7C01 0000 827C 0275" /* ¤š£.œ‡{‚|...‚|.u */
- $"92A2 98A3 02A1 A4F5 84FF 01CF 9E9D A303" /* ’¢˜£.¡¤õ„ÿ.Ïž£. */
- $"A0A9 DEFB 80FF 02F3 9CA0 9AA3 029B 867B" /*  ©Þû€ÿ.󜠚£.›†{ */
- $"827C 0100 0081 7C03 7D74 8FA1 97A2 05A3" /* ‚|...|.}t¡—¢.£ */
- $"9FA0 9ED6 FE81 FF02 F0A6 A09D A202 A0A9" /* Ÿ žÖþÿ.𦠢. © */
- $"F382 FF01 D893 9AA2 0299 837B 827C 0100" /* ó‚ÿ.Ø“š¢.™ƒ{‚|.. */
- $"0081 7C03 7D73 8D9F 97A0 069F 9FF1 D697" /* .|.}sŸ— .ŸŸñÖ— */
- $"A6E6 80FF 01C1 9B9F A001 9BD2 83FF 02BB" /* ¦æ€ÿ.Á›Ÿ .›Òƒÿ.» */
- $"94A1 98A0 0297 827B 827C 0100 0081 7C03" /* ”¡˜ .—‚{‚|...|. */
- $"7D72 8A9E 979F 0B9D A6FB FFF9 BF91 B6F6" /* }rŠž—Ÿ.¦ûÿù¿‘¶ö */
- $"E69E 9E9F 9F01 9BB4 83FF 03FA A199 A096" /* æžžŸŸ.›´ƒÿ.ú¡™ – */
- $"9F03 9E95 807B 827C 0100 0081 7C03 7D72" /* Ÿ.ž•€{‚|...|.}r */
- $"889D 979E 0199 B281 FF04 EFAD 9EA9 9CA0" /* ˆ—ž.™²ÿ.ï­ž©œ  */
- $"9E02 9D9F EE83 FF01 E492 979E 039D 9480" /* ž.Ÿîƒÿ.ä’—ž.”€ */
- $"7B82 7C01 0000 817C 037D 7487 9B97 9D01" /* {‚|...|.}t‡›—. */
- $"96BF 82FF 02FE B697 A29D 0198 D184 FF02" /* –¿‚ÿ.þ¶—¢.˜Ñ„ÿ. */
- $"C191 9E95 9D03 9C92 7F7B 827C 0100 0081" /* Á‘ž•.œ’.{‚|... */
- $"7C03 7D75 849A 979C 0194 CE81 FF02 F8BD" /* |.}u„š—œ.”Îÿ.ø½ */
- $"9BA3 9C01 98B4 84FF 02F8 9D99 959C 039B" /* ›£œ.˜´„ÿ.ø™•œ.› */
- $"907E 7B82 7C01 0000 817C 037D 7482 9997" /* ~{‚|...|.}t‚™— */
- $"9B01 94DF 80FF 03EE AD95 9AA3 9B02 9A9D" /* ›.”߀ÿ.î­•š£›.š */
- $"EF84 FF02 CC91 9C94 9B03 9A8F 7C7B 827C" /* ï„ÿ.Ì‘œ”›.š|{‚| */
- $"0100 0081 7C03 7D74 8098 979A 0697 ECFF" /* ...|.}t€˜—š.—ìÿ */
- $"FFE0 A195 A69A 0195 D084 FF02 F098 9994" /* ÿà¡•¦š.•Єÿ.𘙔 */
- $"9A02 998D 7B83 7C01 0000 817C 037D 737E" /* š.™{ƒ|...|.}s~ */
- $"9896 9A06 989F F9FF D099 97A7 9A02 96AD" /* ˜–š.˜ŸùÿЙ—§š.–­ */
- $"FD83 FF02 FCA6 9794 9A02 998D 7B83 7C01" /* ýƒÿ.ü¦—”š.™{ƒ|. */
- $"0000 817C 037D 737D 9796 9905 95AD FCBE" /* ..|.}s}—–™.•­ü¾ */
- $"9498 A999 0196 DD83 FF02 F7A3 9794 9902" /* ”˜©™.–݃ÿ.÷£—”™. */
- $"988C 7A83 7C01 0000 817C 037D 737B 9696" /* ˜Œzƒ|...|.}s{–– */
- $"9803 95B0 B392 AB98 0294 AAF9 82FF 01CF" /* ˜.•°³’«˜.”ªù‚ÿ.Ï */
- $"9595 9802 978A 7A83 7C01 0000 817C 037D" /* ••˜.—Šzƒ|...|.} */
- $"747B 9498 9700 94AD 9708 93B9 F9FF FFF6" /* t{”˜—.”­—.“¹ùÿÿö */
- $"C797 9695 9702 9688 7983 7C01 0000 817C" /* Ç—–•—.–ˆyƒ|...| */
- $"037D 7479 93CA 9606 92A4 BEB8 9F91 9596" /* .}ty“Ê–.’¤¾¸Ÿ‘•– */
- $"9602 9588 7983 7C01 0000 817C 037D 7478" /* –.•ˆyƒ|...|.}tx */
- $"93CB 9603 9390 9193 9896 0294 8779 837C" /* “Ë–.“‘“˜–.”‡yƒ| */
- $"0100 0081 7C03 7D75 7892 EA95 0293 8679" /* ...|.}ux’ê•.“†y */
- $"837C 0100 0081 7C03 7D75 7892 EA95 0293" /* ƒ|...|.}ux’ê•.“ */
- $"8679 837C 0100 0081 7C03 7D76 7792 EA95" /* †yƒ|...|.}vw’ê• */
- $"0293 8679 837C 0100 0081 7C03 7D76 7792" /* .“†yƒ|...|.}vw’ */
- $"EA95 0293 8579 837C 0000 827C 037D 7776" /* ê•.“…yƒ|..‚|.}wv */
- $"8FEA 9402 9182 7883 7C00 0083 7C03 7A70" /* ê”.‘‚xƒ|..ƒ|.zp */
- $"8288 E989 0285 7A79 837C 0100 0082 7C02" /* ‚ˆé‰.…zyƒ|...‚|. */
- $"7D78 76EA 7901 7779 847C 0100 00FB 7C01" /* }xvêy.wy„|...û|. */
- $"0000 FB7C 0100 00FB 7C01 0000 FB7C 0100" /* ..û|...û|...û|.. */
- $"00FA 7C81 00F9 7C82 00F7 7C83 00F6 7C86" /* .ú|.ù|‚.÷|ƒ.ö|† */
- $"00F3 7CFF 00FF 0000 00FF 00FF 00FF 00FF" /* .ó|ÿ.ÿ...ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 74D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.Ÿt× */
- $"00A6 74D3 0001 7474 8000 9D73 8474 D000" /* .¦tÓ..tt€.s„tÐ. */
- $"0374 7400 749E 7702 7673 7283 74D0 0003" /* .tt.tžw.vsrƒtÐ.. */
- $"7381 9FAB 9DAC 03A8 977A 7383 74CD 0004" /* sŸ«¬.¨—zsƒtÍ.. */
- $"7400 79AF CC9E CF03 CCBF 9B73 8374 CD00" /* t.y¯ÌžÏ.Ì¿›sƒtÍ. */
- $"0474 0088 C6D2 9FD3 03CA AF7C 7282 74CD" /* .t.ˆÆÒŸÓ.ʯ|r‚tÍ */
- $"0003 7400 8EC9 A0D3 03CC B27D 7282 74CC" /* ..t.ŽÉ Ó.̲}r‚tÌ */
- $"0004 7474 7094 CBA0 D203 CCB3 7C72 8374" /* ..ttp”Ë Ò.̳|rƒt */
- $"CB00 0474 7471 A1CE A0D1 03CC B67F 72B8" /* Ë..ttq¡Î Ñ.̶.r¸ */
- $"7495 0005 7474 0078 B7D0 A0D1 03CE BE8B" /* t•..tt.x·Ð Ñ.ξ‹ */
- $"70BA 7492 0006 7474 0070 96C9 CFA0 D004" /* pºt’..tt.p–ÉÏ Ð. */
- $"CFC6 A675 71BA 7490 0006 7474 0072 8FC0" /* ÏÆ¦uqºt..tt.rÀ */
- $"CDA2 CF03 CBBF 9D7A B672 0473 0073 7474" /* Í¢Ï.Ë¿z¶r.s.stt */
- $"8E00 0674 7400 799D C3CD A3CF 04CE CAC3" /* Ž..tt.yÃÍ£Ï.ÎÊà */
- $"B2A0 B598 0496 8D79 0074 8D00 0774 7400" /* ² µ˜.–y.t..tt. */
- $"79A8 C8CE CEA4 CF03 CECD CBC9 B5C7 03C3" /* y¨ÈÎΤÏ.ÎÍËɵÇ.à */
- $"B58F 0080 7489 0081 7403 7192 C1C8 E2C9" /* µ.€t‰.t.q’ÁÈâÉ */
- $"03C7 B995 7282 7486 0001 7474 8000 026E" /* .ǹ•r‚t†..tt€..n */
- $"91AC E3AF 04AE A58A 6F71 8000 0174 7484" /* ‘¬ã¯.®¥Šoq€..tt„ */
- $"0008 7400 7075 8085 8487 8E80 8FAA 9000" /* ..t.pu€…„‡Ž€ª. */
- $"8FB0 9080 8F09 8B87 8584 847F 7600 7474" /* °€Æ‹‡…„„.v.tt */
- $"8200 0774 0070 8BAF BCBF C0E7 C109 C0BF" /* ‚..t.p‹¯¼¿ÀçÁÆÀ¿ */
- $"BEBE B8A6 8572 7474 8200 0370 8DC0 C9EE" /* ¾¾¸¦…rtt‚..pÀÉî */
- $"CA05 C9C4 B185 0074 8000 0474 0078 B4C8" /* Ê.Éı….t€..t.x´È */
- $"F0CA 0CC9 BFA1 7600 7400 0074 0088 BFC8" /* ðÊ.É¿¡v.t..t.ˆ¿È */
- $"B3C9 03CA C7C9 CAB7 C90A C3AD 7F00 7400" /* ³É.ÊÇÉÊ·ÉÂí..t. */
- $"0074 708C C0B3 C805 C9C3 B8B3 C4C9 B6C8" /* .tpŒÀ³È.Éø³ÄÉ¶È */
- $"0AC3 AE7F 0074 0074 7400 88BD B4C7 05C2" /* Âî..t.tt.ˆ½´Ç. */
- $"F1EC B2C4 C8B5 C70B C1AB 7C00 7400 7474" /* ñì²ÄȵÇ.Á«|.t.tt */
- $"0082 BAC6 B3C7 04C6 F2FF E6B3 B6C7 0BC0" /* .‚ºÆ³Ç.Æòÿæ³¶Ç.À */
- $"A67A 7374 0074 7400 7DB5 C5B3 C606 C3E7" /* ¦zst.tt.}µÅ³Æ.Ãç */
- $"FFFF D5B6 C8B4 C60B BDA1 7573 7400 7474" /* ÿÿÕ¶È´Æ.½¡ust.tt */
- $"0079 B0C4 B3C5 01C2 D880 FF02 C0BD C6B2" /* .y°Ä³Å.ÂØ€ÿ.À½Æ² */
- $"C50C C4BB 9D75 7374 0074 7473 75AA C2B3" /* Å.Ä»ust.ttsuªÂ³ */
- $"C406 C3C9 FAFF FFF0 B3B3 C403 C3B8 9673" /* Ä.ÃÉúÿÿð³³Ä.ø–s */
- $"8474 01A5 C1B4 C301 C1EB 80FF 02D6 B4C5" /* „t.¥Á´Ã.Áë€ÿ.Ö´Å */
- $"B1C3 03C2 B591 7283 7402 719E BFB4 C201" /* ±Ã.µ‘rƒt.qž¿´Â. */
- $"BFD5 80FF 03FD BBBD C3B0 C203 C0B2 8E72" /* ¿Õ€ÿ.ý»½Ã°Â.À²Žr */
- $"8374 0270 99BD B4C1 02C0 C4F6 80FF 02E6" /* ƒt.p™½´Á.ÀÄö€ÿ.æ */
- $"B1C2 B0C1 03BE AF87 7283 7402 7193 BBB5" /* ±Â°Á.¾¯‡rƒt.q“»µ */
- $"C001 BCE1 81FF 02C6 B7C1 AFC0 06BD AC84" /* À.¼áÿ.Æ·Á¯À.½¬„ */
- $"7274 7400 8074 0270 8CB9 B1BF 00C0 80C1" /* rtt.€t.pŒ¹±¿.À€Á */
- $"02BD CAFD 80FF 01F1 B1B0 BF06 BBA9 8172" /* .½Êý€ÿ.ñ±°¿.»©r */
- $"7474 0080 7402 7088 B7B0 BF07 C1B9 ACAB" /* tt.€t.pˆ·°¿.Á¹¬« */
- $"AEBC BEEB 81FF 02D1 B3C0 AEBF 06BA A67C" /* ®¼¾ëÿ.ѳÀ®¿.º¦| */
- $"7274 7400 8074 0271 83B4 AFBE 08BF AFB4" /* rtt.€t.qƒ´¯¾.¿¯´ */
- $"D9E3 D2AD B1D3 81FF 02F8 B4BC AEBE 06B8" /* ÙãÒ­±Óÿ.ø´¼®¾.¸ */
- $"A27A 7374 7400 8074 0372 7DB1 BCAE BD01" /* ¢zstt.€t.r}±¼®½. */
- $"B9CA 81FF 03F6 B4B9 F381 FF02 D8AF BEAD" /* ¹Êÿ.ö´¹óÿ.د¾­ */
- $"BD0D B69F 7973 7474 0000 7474 727A ADBB" /* ½.¶Ÿystt..ttrz­» */
- $"ADBC 03BB ABB7 E681 FF02 E6AE D881 FF02" /* ­¼.»«·æÿ.æ®Øÿ. */
- $"FDB7 B8AD BC0D B49A 7673 7474 0000 7474" /* ý·¸­¼.´švstt..tt */
- $"7378 A9BA ACBB 0CBC ACDB D7A6 BDF0 FFFF" /* sx©º¬».¼¬Ûצ½ðÿÿ */
- $"FABA BEF7 81FF 02DF ACBC ACBB 01B2 9781" /* úº¾÷ÿ.߬¼¬».²— */
- $"7407 0000 7474 7374 A4B8 ABB9 0DBA B3BB" /* t...ttst¤¸«¹.º³» */
- $"FFFF F7C2 A4CB FAFC C0B4 DC82 FF02 BAB4" /* ÿÿ÷¤ËúüÀ´Ü‚ÿ.º´ */
- $"BAAB B901 B093 8174 0100 0080 7402 729F" /* º«¹.°“t...€t.rŸ */
- $"B6AB B902 BAAA E981 FF07 ECB3 ABD1 BBB6" /* ¶«¹.ºªéÿ.쳫ѻ¶ */
- $"C0FA 81FF 02E4 AABA AAB9 03B8 AD8E 7380" /* Àúÿ.䪺ª¹.¸­Žs€ */
- $"7401 0000 8074 0272 9BB6 AAB8 02B9 ADC6" /* t...€t.r›¶ª¸.¹­Æ */
- $"84FF 05DC AFB7 B8B4 E082 FF02 BCB1 B9A9" /* „ÿ.ܯ·¸´à‚ÿ.¼±¹© */
- $"B803 B6AB 8A72 8074 0100 0080 7402 7095" /* ¸.¶«Šr€t...€t.p• */
- $"B4AA B602 B5AB F484 FF06 E9B6 B5B6 B4C2" /* ´ª¶.µ«ô„ÿ.é¶µ¶´Â */
- $"FC81 FF02 E6A9 B7A9 B603 B5A8 8872 8074" /* üÿ.æ©·©¶.µ¨ˆr€t */
- $"0100 0080 7402 6F91 B3A9 B602 B7AD D684" /* ...€t.o‘³©¶.·­Ö„ */
- $"FF02 FAC0 B480 B601 B3E4 82FF 02BD AFB7" /* ÿ.úÀ´€¶.³ä‚ÿ.½¯· */
- $"A8B6 03B4 A584 7280 7401 0000 8074 0270" /* ¨¶.´¥„r€t...€t.p */
- $"8DB2 A9B6 02B4 ACE7 84FF 01D9 B181 B602" /* ²©¶.´¬ç„ÿ.Ù±¶. */
- $"B3C5 FE81 FF02 E8A8 B7A8 B603 B3A3 8172" /* ³Åþÿ.訷¨¶.³£r */
- $"8074 0100 0080 7402 7087 B0A8 B505 B6AA" /* €t...€t.p‡°¨µ.¶ª */
- $"BDA4 C1F5 81FF 02F3 B8B4 82B5 01B2 E782" /* ½¤Áõÿ.ó¸´‚µ.²ç‚ */
- $"FF02 BFAD B6A7 B503 B2A1 7F72 8074 0100" /* ÿ.¿­¶§µ.²¡.r€t.. */
- $"0080 7402 7083 ADA7 B40C B5AC BBFF F2B8" /* .€t.pƒ­§´.µ¬»ÿò¸ */
- $"A2D0 FBFF FFCE B083 B401 B1C5 82FF 02EA" /* ¢Ðûÿÿΰƒ´.±Å‚ÿ.ê */
- $"A7B5 A7B4 03B0 9E7C 7380 7401 0000 8074" /* §µ§´.°ž|s€t...€t */
- $"0271 80AB A8B3 01A5 EC80 FF06 E4AA A9E2" /* .q€«¨³.¥ì€ÿ.䪩â */
- $"EAB2 B284 B301 B1E8 82FF 02BF ABB4 A6B3" /* ê²²„³.±è‚ÿ.¿«´¦³ */
- $"03AE 9B79 7380 7401 0000 8074 0272 7DA8" /* .®›ys€t...€t.r}¨ */
- $"A6B2 02B3 A6C8 82FF 04FE D3A8 B2B1 85B2" /* ¦².³¦È‚ÿ.þÓ¨²±…² */
- $"01AE C582 FF02 EAA6 B3A6 B203 AC98 7873" /* .®Å‚ÿ.꦳¦².¬˜xs */
- $"8074 0100 0080 7403 7278 A5B0 A5B1 02AF" /* €t...€t.rx¥°¥±.¯ */
- $"A9F7 84FF 01DA AB86 B102 B0AF E982 FF02" /* ©÷„ÿ.Ú«†±.°¯é‚ÿ. */
- $"BEA9 B2A5 B103 AB95 7773 8074 0100 0080" /* ¾©²¥±.«•ws€t...€ */
- $"7403 7276 A2AF A4B0 02B1 A2D5 84FF 02F8" /* t.rv¢¯¤°.±¢Õ„ÿ.ø */
- $"BAAE 87B0 01AC C682 FF02 EAA4 B1A5 B003" /* º®‡°.¬Æ‚ÿ.ꤱ¥°. */
- $"A991 7573 8074 0100 0080 7402 7375 9FA4" /* ©‘us€t...€t.suŸ¤ */
- $"AE03 AFA9 B0FE 84FF 01D3 AA88 AE02 ADAD" /* ®.¯©°þ„ÿ.Óªˆ®.­­ */
- $"E982 FF02 BCA7 AFA4 AE01 A78E 8274 0100" /* é‚ÿ.¼§¯¤®.§Ž‚t.. */
- $"0081 7402 729B ADA3 AE02 AFA0 E384 FF02" /* .t.r›­£®.¯ ã„ÿ. */
- $"F0B0 AD89 AE01 AAC4 82FF 02E9 A2AF A4AE" /* ð°­‰®.ªÄ‚ÿ.颯¤® */
- $"01A5 8C82 7401 0000 8174 0270 98AC 97AD" /* .¥Œ‚t...t.p˜¬—­ */
- $"0DAC ADAE ACAE ADAC AEAD ACAE AEA4 BB85" /* .¬­®¬®­¬®­¬®®¤»… */
- $"FF11 C7A7 AEAD ACAE ADAC AEAC ACAE ACAD" /* ÿ.ǧ®­¬®­¬®¬¬®¬­ */
- $"AEAB ABE9 82FF 0EBB A6AE ADAC AEAC ACAE" /* ®««é‚ÿ.»¦®­¬®¬¬® */
- $"ACAD AEAC ADAE 97AD 01A3 8982 7401 0000" /* ¬­®¬­®—­.£‰‚t... */
- $"8174 0270 94AA 95AC 0FAD A79F A1A2 9FA2" /* t.p”ª•¬.­§Ÿ¡¢Ÿ¢ */
- $"A29F A2A1 9FA4 A9A1 EF84 FF12 E6A2 9FA2" /* ¢Ÿ¢¡Ÿ¤©¡ï„ÿ.梟¢ */
- $"A1A0 A3A1 A0A2 A0A0 A3A0 A0A2 9F9D C282" /* ¡ £¡ ¢  £  ¢ŸÂ‚ */
- $"FF10 E6A0 A9A0 A0A2 A0A0 A2A0 A1A3 A0A1" /* ÿ.æ ©  ¢  ¢ ¡£ ¡ */
- $"A2A2 AB94 AC03 ABA1 8673 8174 0100 0081" /* ¢¢«”¬.«¡†st... */
- $"7402 7091 A995 AB0E A9AF FACE C2FF BCCA" /* t.p‘©•«.©¯úÎÂÿ¼Ê */
- $"FFB6 DEFA B4A1 C884 FF14 FDB2 C0FF BFCF" /* ÿ¶Þú´¡È„ÿ.ý²Àÿ¿Ï */
- $"FFAF DCFA AFEA F1A8 F5E4 B2FE D79D E982" /* ÿ¯Üú¯êñ¨õä²þ×é‚ */
- $"FF0F B8A1 E4F8 A9EA F0AE F7E0 ACFF D5C0" /* ÿ.¸¡äø©êð®÷à¬ÿÕÀ */
- $"D1A5 94AB 03AA 9F84 7381 7401 0000 8174" /* Ñ¥”«.ªŸ„st...t */
- $"026F 8CA8 95A9 0EA7 B1FF CEC2 FFD0 DBFF" /* .oŒ¨•©.§±ÿÎÂÿÐÛÿ */
- $"B3E0 FFB6 A2F9 84FF 14D7 99D8 FFBE D0FF" /* ³àÿ¶¢ù„ÿ.×™Øÿ¾Ðÿ */
- $"C5E9 FFAC EEFA C0FE E7B0 FFE8 A3B9 82FF" /* Åéÿ¬îúÀþç°ÿ裹‚ÿ */
- $"0FE2 99EA FFC1 F5F4 ABFB EDC4 FFD7 BED6" /* .â™êÿÁõô«ûíÄÿ×¾Ö */
- $"A394 A903 A89C 8173 8174 0100 0080 7403" /* £”©.¨œst...€t. */
- $"756E 88A6 95A8 04A6 B0FF DDD3 81FF 04C9" /* unˆ¦•¨.¦°ÿÝÓÿ.É */
- $"EBFB A6D5 84FF 06F6 A3DE FFFF D1DE 80FF" /* ëû¦Õ„ÿ.ö£ÞÿÿÑÞ€ÿ */
- $"02FD C4F2 80FF 06EE C6FF FFFA A7E2 82FF" /* .ýÄò€ÿ.îÆÿÿú§â‚ÿ */
- $"01B0 D780 FF02 F6C3 FB80 FF03 E3D3 D5A2" /* .°×€ÿ.öÃû€ÿ.ãÓÕ¢ */
- $"94A8 03A7 9A7F 7381 7401 0000 8074 0375" /* ”¨.§š.st...€t.u */
- $"6E85 A495 A702 A5AF FA85 FF01 C7AB 85FF" /* n…¤•§.¥¯ú…ÿ.Ç«…ÿ */
- $"01C4 B290 FF01 D1B1 82FF 02DD ACFB 87FF" /* .IJÿ.ѱ‚ÿ.ݬû‡ÿ */
- $"01D1 A194 A703 A598 7D73 8174 0100 0081" /* .Ñ¡”§.¥˜}st... */
- $"7402 7082 A295 A602 A4AE FB84 FF02 EF9C" /* t.p‚¢•¦.¤®û„ÿ.ïœ */
- $"E484 FF02 EC9E EB90 FF02 FCA7 DF81 FF02" /* ä„ÿ.ìžëÿ.ü§ßÿ. */
- $"FCAD D787 FF01 D0A0 94A6 03A3 957B 7381" /* ü­×‡ÿ.Р”¦.£•{s */
- $"7401 0000 8174 0270 7EA1 95A6 02A4 AEFB" /* t...t.p~¡•¦.¤®û */
- $"84FF 01B8 B885 FF01 B4BF 92FF 01D4 AD80" /* „ÿ.¸¸…ÿ.´¿’ÿ.Ô­€ */
- $"FF04 FCD4 9CAC FA86 FF01 D0A0 94A6 03A3" /* ÿ.üÔœ¬ú†ÿ.Р”¦.£ */
- $"937A 7381 7401 0000 8174 0270 7B9F 95A4" /* “zst...t.p{Ÿ•¤ */
- $"02A2 ACFA 83FF 02E3 9BF1 84FF 02DE 9EF5" /* .¢¬úƒÿ.ã›ñ„ÿ.Þžõ */
- $"92FF 09FD A8D9 FADB AD8B B1A1 D486 FF01" /* ’ÿÆý¨ÙúÛ­‹±¡Ô†ÿ. */
- $"CF9E 94A4 03A1 9178 7381 7401 0000 8174" /* Ïž”¤.¡‘xst...t */
- $"0270 779D 95A3 02A1 ACFA 82FF 02FD A9C7" /* .pw•£.¡¬ú‚ÿ.ý©Ç */
- $"84FF 02FC A5CD 94FF 09D9 989F 8B9B D3FF" /* „ÿ.ü¥Í”ÿÆÙ˜Ÿ‹›Óÿ */
- $"CDA1 F985 FF01 CF9D 94A3 03A0 8E77 7381" /* Í¡ù…ÿ.Ï”£. Žws */
- $"7401 0000 8174 0271 779A 95A2 02A0 ABFA" /* t...t.qwš•¢. «ú */
- $"82FF 02D4 A0FB 84FF 02CE A2FD 95FF 08A6" /* ‚ÿ.Ô û„ÿ.΢ý•ÿ.¦ */
- $"AEDB FCFF FFFA 9ECF 85FF 01CE 9C94 A203" /* ®ÛüÿÿúžÏ…ÿ.Μ”¢. */
- $"9E8C 7673 8174 0100 0081 7402 7275 9895" /* žŒvst...t.ru˜• */
- $"A102 9FAA FA81 FF02 F79D D784 FF02 F29C" /* ¡.Ÿªúÿ.÷ׄÿ.òœ */
- $"DE96 FF01 DABD 82FF 02D0 9DF8 84FF 01CE" /* Þ–ÿ.Ú½‚ÿ.Ðø„ÿ.Î */
- $"9A94 A102 9C8A 7582 7401 0000 8174 0272" /* š”¡.œŠu‚t...t.r */
- $"7196 959F 089D A9EE F2F1 F1F6 C0AA 85FF" /* q–•Ÿ.©îòññöÀª…ÿ */
- $"02C0 ADF5 95F1 03F2 F1AE E681 FF03 FCA0" /* .À­õ•ñ.òñ®æÿ.ü  */
- $"C7F5 82F1 02F6 C89A 949F 029A 8775 8274" /* Çõ‚ñ.öÈš”Ÿ.š‡u‚t */
- $"0100 0081 7402 736F 9396 9E00 9F82 A201" /* ...t.so“–ž.Ÿ‚¢. */
- $"93E8 84FF 03E8 9EA2 A396 A202 A39D BB82" /* “è„ÿ.螢£–¢.£»‚ */
- $"FF02 D597 A383 A200 A195 9E01 9985 8374" /* ÿ.Õ—£ƒ¢.¡•ž.™…ƒt */
- $"0100 0081 7403 736E 929D 959E 009D 809C" /* ...t.sn’•ž.€œ */
- $"029D 91BC 84FF 03FE B599 9D99 9C01 9DE7" /* .‘¼„ÿ.þµ™™œ.ç */
- $"81FF 02C7 8D9B 839C 009D 959E 0198 8383" /* ÿ.Ç›ƒœ.•ž.˜ƒƒ */
- $"7401 0000 8274 016E 8F9A 9C02 9A98 F484" /* t...‚t.nšœ.š˜ô„ */
- $"FF01 DA99 9B9C 0997 B9FF FFE4 A7A6 CF91" /* ÿ.Ú™›œÆ—¹ÿÿ䧦ϑ */
- $"9D9B 9C02 9681 7382 7401 0000 8274 026F" /* ›œ.–s‚t...‚t.o */
- $"8C9A 989B 029C 90CF 84FF 02F8 A998 9D9B" /* Œš˜›.œÏ„ÿ.ø©˜› */
- $"08B3 A39A C8FC FFB0 919C 9A9B 0294 8073" /* .³£šÈüÿ°‘œš›.”€s */
- $"8274 0100 0082 7402 6D8A 9998 9A02 989C" /* ‚t...‚t.mŠ™˜š.˜œ */
- $"F484 FF01 CB94 9D9A 0397 A2DD FB80 FF02" /* ô„ÿ.Ë”š.—¢Ýû€ÿ. */
- $"F294 979A 9A02 927E 7382 7401 0000 8174" /* ò”—šš.’~s‚t...t */
- $"0375 6B87 9898 9904 969A 96D2 FE81 FF02" /* .uk‡˜˜™.–š–Òþÿ. */
- $"EF9E 979D 9902 97A1 F382 FF02 D68A 9A99" /* ïž—™.—¡ó‚ÿ.ÖŠš™ */
- $"9902 917C 7382 7401 0000 8174 0375 6A85" /* ™.‘|s‚t...t.uj… */
- $"9797 9806 9798 F1D3 8F9F E480 FF01 BB92" /* ——˜.—˜ñÓŸä€ÿ.»’ */
- $"9F98 0192 CF83 FF02 B68A 9998 9802 8F7B" /* Ÿ˜.’σÿ.¶Š™˜˜.{ */
- $"7382 7401 0000 8174 0375 6A82 9597 960B" /* s‚t...t.uj‚•—–. */
- $"939F FBFF F9BB 89B0 F5E4 9595 9F96 0192" /* “Ÿûÿù»‰°õä••Ÿ–.’ */
- $"AD83 FF03 FA9B 9097 9796 028D 7973 8274" /* ­ƒÿ.ú›——–.ys‚t */
- $"0100 0081 7403 756A 8195 9796 0191 AC81" /* ...t.uj•—–.‘¬ */
- $"FF04 EEA8 97A2 94A0 9602 9597 EC83 FF01" /* ÿ.¢” –.•—ìƒÿ. */
- $"E28A 9796 0395 8C78 7382 7401 0000 8174" /* ⊗–.•Œxs‚t...t */
- $"0375 6C7F 9497 9501 8EBB 82FF 02FE B28E" /* .ul.”—•.Ž»‚ÿ.þ²Ž */
- $"A295 018F CE84 FF02 BD89 9695 9503 948B" /* ¢•.΄ÿ.½‰–••.”‹ */
- $"7873 8274 0100 0081 7403 756D 7D92 9794" /* xs‚t...t.um}’—” */
- $"018C CB81 FF02 F8B8 93A3 9401 90AE 84FF" /* .ŒËÿ.ø¸“£”.®„ÿ */
- $"02F7 9691 9594 0393 8A77 7382 7401 0000" /* .÷–‘•”.“Šws‚t... */
- $"8174 0375 6C7B 9197 9301 8CDD 80FF 02ED" /* t.ul{‘—“.ŒÝ€ÿ.í */
- $"A78D A493 0292 96EE 84FF 02C8 8894 9493" /* §¤“.’–î„ÿ.Ȉ””“ */
- $"0392 8875 7382 7401 0000 8174 0375 6C79" /* .’ˆus‚t...t.uly */
- $"9096 9207 9190 EBFF FFDE 9A8D A692 018C" /* –’.‘ëÿÿÞš¦’.Œ */
- $"CC84 FF02 EF91 9194 9201 9186 8474 0100" /* Ì„ÿ.ï‘‘”’.‘†„t.. */
- $"0081 7403 756B 7790 9692 0690 97F8 FFCC" /* .t.ukw–’.—øÿÌ */
- $"918E A792 028E A6FD 83FF 02FC 9F8F 9492" /* ‘ާ’.ަýƒÿ.üŸ”’ */
- $"0191 8584 7401 0000 8174 0375 6B75 8E96" /* .‘…„t...t.ukuŽ– */
- $"9005 8BA7 FCBA 8B8E A990 018D DB83 FF02" /* .‹§üº‹Ž©.Ûƒÿ. */
- $"F79B 8D94 9002 8F83 7383 7401 0000 8174" /* ÷›”.ƒsƒt...t */
- $"0375 6C74 8E96 9004 8CAA AD89 8FAA 9002" /* .ultŽ–.Œª­‰ª. */
- $"8CA3 F982 FF01 CB8C 9590 028F 8373 8374" /* Œ£ù‚ÿ.ËŒ•.ƒsƒt */
- $"0100 0081 7403 756B 728D 988F 008B AD8F" /* ...t.ukr˜.‹­ */
- $"088A B4F9 FFFF F6C3 8E8E 958F 028E 8172" /* .Š´ùÿÿöÃŽŽ•.Žr */
- $"8374 0100 0081 7403 756C 718C CA8E 068A" /* ƒt...t.ulqŒÊŽ.Š */
- $"9DBA B398 898D 968E 028D 8072 8374 0100" /* º³˜‰–Ž.€rƒt.. */
- $"0081 7403 756C 718B CB8E 038B 8888 8B98" /* .t.ulq‹ËŽ.‹ˆˆ‹˜ */
- $"8E02 8C80 7283 7401 0000 8174 0375 6D71" /* Ž.Œ€rƒt...t.umq */
- $"8BEA 8E02 8C80 7283 7401 0000 8174 0375" /* ‹êŽ.Œ€rƒt...t.u */
- $"6D70 8AEA 8D02 8B7F 7283 7401 0000 8174" /* mpŠê.‹.rƒt...t */
- $"0375 6E70 8AEA 8D02 8B7E 7283 7401 0000" /* .unpŠê.‹~rƒt... */
- $"8174 0375 6E70 8AEA 8D02 8B7E 7283 7400" /* t.unpŠê.‹~rƒt. */
- $"0082 7403 756F 6E88 EA8C 0289 7B71 8374" /* .‚t.uonˆêŒ.‰{qƒt */
- $"0000 8374 0372 697B 81E9 8202 7E73 7283" /* ..ƒt.ri{é‚.~srƒ */
- $"7401 0000 8274 0475 706E 7172 E671 0372" /* t...‚t.upnqræq.r */
- $"7270 7284 7401 0000 FB74 0100 00FB 7401" /* rpr„t...ût...ût. */
- $"0000 FB74 0100 00FB 7401 0000 FA74 8100" /* ..ût...ût...út. */
- $"F974 8200 F774 8300 F674 8600 F374 FF00" /* ùt‚.÷tƒ.öt†.ótÿ. */
- $"FF00 0000 7438 6D6B 0000 4008 0000 0000" /* ÿ...t8mk..@..... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0101 0101 0202 0202 0202 0202 0202 0202" /* ................ */
- $"0202 0202 0202 0202 0202 0202 0202 0101" /* ................ */
- $"0101 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0102 0202" /* ................ */
- $"0304 0505 0606 0606 0606 0606 0606 0606" /* ................ */
- $"0606 0606 0606 0606 0606 0606 0606 0505" /* ................ */
- $"0503 0302 0100 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0001 0100 0000" /* ................ */
- $"0204 0506 0707 0707 0707 0707 0707 0707" /* ................ */
- $"0707 0707 0707 0707 0707 0707 0707 0606" /* ................ */
- $"090A 0805 0302 0100 0000 0000 0000 0000" /* ÆÂ.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0101 001C 2F31" /* ............../1 */
- $"3436 383A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A" /* 468::::::::::::: */
- $"3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A34" /* :::::::::::::::4 */
- $"120B 0F0B 0704 0201 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0004 8FF3 FAF9" /* ............óúù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA" /* ùùùùùùùùùùùùùùúú */
- $"C433 1112 0C07 0402 0100 0000 0000 0000" /* Ä3.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 0067 FFFF FFFF" /* ...........gÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFC3 201A 130C 0703 0100 0000 0000 0000" /* ÿÃ ............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 00A9 FFFF FFFF" /* ...........©ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFF8 4A20 1B11 0A05 0200 0000 0000 0000" /* ÿøJ ..Â......... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0002 00B6 FFFF FFFF" /* ...........¶ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFB 5928 2216 0D07 0200 0000 0000 0000" /* ÿûY("........... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0103 07CC FFFF FFFF" /* ...........Ìÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFD 6231 291B 1109 0401 0000 0000 0000" /* ÿýb1)..Æ........ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0201 21F0 FFFF FFFF" /* ..........!ðÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 7337 2F21 160D 0704 0303 0303 0303" /* ÿÿs7/!.......... */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0302 0201 0100" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0001 0500 69FF FFFF FFFF" /* ..........iÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 9A38 3628 1C14 0E0A 0909 0909 0909" /* ÿÿš86(...ÂÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0807 0604 0302" /* ÆÆÆÆÆÆÆÆÆÆ...... */
- $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0203 0021 DFFF FFFF FFFF" /* .........!ßÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF E653 312D 231B 1512 1011 1010 1010" /* ÿÿæS1-#......... */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 0E0C 0A08 0504" /* ............Â... */
- $"0301 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0002 0200 34D3 FFFF FFFF FFFF" /* ........4Óÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFD6 6E40 312A 2522 2121 2121 2121" /* ÿÿÿÖn@1*%"!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2120 1E1B 1814 0D00" /* !!!!!!!!! ...... */
- $"0203 0100 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0102 006C F4FF FFFF FFFF FFFF" /* .......lôÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FEE8 DAD9 D9D8 D8D8 D8D8 D8D8" /* ÿÿÿÿþèÚÙÙØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D7D7 D6D5 D5A9" /* ØØØØØØØØØØ××ÖÕÕ© */
- $"1E00 0200 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0001 0300 71FF FFFF FFFF FFFF FFFF" /* ......qÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"8500 0402 0100 0000 0000 0000 0000 0000" /* …............... */
- $"0001 0203 0317 E1FF FFFF FFFF FFFF FFFF" /* ......áÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"9E03 0905 0302 0100 0000 0000 0000 0000" /* ž.Æ............. */
- $"0201 0000 002C E4E8 E8E9 EAEB ECEC EDED" /* .....,äèèéêëììíí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED ECEC ECEC ECEC ECEC ECEC ECEC" /* ííííìììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEB EAE9 E8F4" /* ìììììììììììëêéèô */
- $"8E02 0400 0000 0202 0000 0000 0000 0002" /* Ž............... */
- $"0012 6297 A3A9 BBBD C0C4 C7CA CCCD CECE" /* ..b—£©»½ÀÄÇÊÌÍÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CDCD CCCC CCCC CBCB CBCB CBCB" /* ÎÎÎÎÍÍÌÌÌÌËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBC9 C8C5 C2C0" /* ËËËËËËËËËËËÉÈÅÂÀ */
- $"B5A6 A5A1 8236 0002 0100 0000 0000 0100" /* µ¦¥¡‚6.......... */
- $"35DC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 5Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFE 8901 0101 0000 0000 001B" /* ÿÿÿÿÿþ‰......... */
- $"DFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF73 0002 0000 0001 0082" /* ÿÿÿÿÿÿÿs.......‚ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE4 1800 0100 0001 00C0" /* ÿÿÿÿÿÿÿä.......À */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4500 0200 0002 02C6" /* ÿÿÿÿÿÿÿÿE......Æ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4C00 0200 0103 00B3" /* ÿÿÿÿÿÿÿÿL......³ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFE 3D00 0300 0104 009C" /* ÿÿÿÿÿÿÿþ=......œ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFF4 2C04 0400 0105 0087" /* ÿÿÿÿÿÿÿô,......‡ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE8 2007 0400 0105 0073" /* ÿÿÿÿÿÿÿè ......s */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFD9 1808 0400 0105 015C" /* ÿÿÿÿÿÿÿÙ.......\ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFC7 0E0A 0401 0105 034A" /* ÿÿÿÿÿÿÿÇ.Â.....J */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFB5 0A0A 0402 0105 043C" /* ÿÿÿÿÿÿÿµÂÂ.....< */
- $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFA1 080A 0402 0105 062B" /* ÿÿÿÿÿÿÿ¡.Â.....+ */
- $"F2FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF8E 050A 0402 0104 0720" /* ÿÿÿÿÿÿÿŽ.Â..... */
- $"E7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF7C 0609 0300 0104 0817" /* ÿÿÿÿÿÿÿ|.Æ...... */
- $"D8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF68 0709 0300 0104 0A0E" /* ÿÿÿÿÿÿÿh.Æ....Â. */
- $"C8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF55 0809 0300 0104 0A0A" /* ÿÿÿÿÿÿÿU.Æ....ÂÂ */
- $"B7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF47 0909 0300 0104 0A07" /* ÿÿÿÿÿÿÿGÆÆ....Â. */
- $"A4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF F638 0B08 0300 0004 0A05" /* ÿÿÿÿÿÿö8......Â. */
- $"91FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF EE2B 0C08 0300 0004 0905" /* ÿÿÿÿÿÿî+......Æ. */
- $"81FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF E224 0D08 0300 0003 0906" /* ÿÿÿÿÿÿâ$......Æ. */
- $"71FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF D51C 0E08 0300 0003 0907" /* ÿÿÿÿÿÿÕ.......Æ. */
- $"5EFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF C714 0F07 0200 0003 0908" /* ÿÿÿÿÿÿÇ.......Æ. */
- $"4FFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF B811 0E07 0200 0003 090A" /* ÿÿÿÿÿÿ¸.......ÆÂ */
- $"43FD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Cýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF A70E 0F07 0200 0003 080B" /* ÿÿÿÿÿÿ§......... */
- $"34F5 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 4õÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 960C 0E06 0200 0002 080D" /* ÿÿÿÿÿÿ–......... */
- $"29EB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* )ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 850C 0E07 0200 0003 080E" /* ÿÿÿÿÿÿ…......... */
- $"22E0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* "àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 760D 0E06 0200 0003 080F" /* ÿÿÿÿÿÿv......... */
- $"1BD3 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 650E 0E06 0200 0002 080F" /* ÿÿÿÿÿÿe......... */
- $"14C7 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 580E 0D06 0200 0002 070F" /* ÿÿÿÿÿÿX......... */
- $"11B9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 4E10 0D06 0100 0002 070F" /* ÿÿÿÿÿÿN......... */
- $"10AB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 4211 0D06 0200 0002 070F" /* ÿÿÿÿÿøB......... */
- $"0D9B FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF1 3513 0D06 0200 0002 080F" /* ÿÿÿÿÿñ5......... */
- $"0C8D FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE9 2E13 0D05 0100 0002 070F" /* ÿÿÿÿÿé.......... */
- $"0D81 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFDF 2914 0D06 0100 0002 070F" /* ÿÿÿÿÿß)......... */
- $"0E73 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD4 2215 0C06 0100 0002 070F" /* ÿÿÿÿÿÔ"......... */
- $"0F64 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC9 1C16 0C05 0100 0002 070F" /* ÿÿÿÿÿÉ.......... */
- $"1058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFBD 1A15 0C05 0100 0002 070F" /* ÿÿÿÿÿ½.......... */
- $"114F FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB2 1815 0C05 0100 0002 070E" /* ÿÿÿÿÿ².......... */
- $"1246 FAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Fúÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 1615 0C05 0100 0002 070E" /* ÿÿÿÿÿ¥.......... */
- $"133B F4FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .;ôÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF98 1515 0C05 0100 0002 060E" /* ÿÿÿÿÿ˜.......... */
- $"1533 EEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .3îÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF8D 1515 0B05 0100 0002 070E" /* ÿÿÿÿÿ.......... */
- $"152F E6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ./æÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF82 1615 0B05 0100 0002 070E" /* ÿÿÿÿÿ‚.......... */
- $"1629 DDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .)Ýÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF77 1615 0B05 0100 0002 060E" /* ÿÿÿÿÿw.......... */
- $"1624 D5FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Õÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6B 1715 0B05 0100 0002 060E" /* ÿÿÿÿÿk.......... */
- $"1720 CCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* . Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF61 1815 0B05 0100 0002 060E" /* ÿÿÿÿÿa.......... */
- $"181D C3FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5B 1914 0B05 0100 0002 060E" /* ÿÿÿÿÿ[.......... */
- $"181C BAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ºÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FE54 1A14 0B05 0100 0002 070E" /* ÿÿÿÿþT.......... */
- $"181B B0FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..°ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F94C 1B15 0B04 0100 0002 060E" /* ÿÿÿÿùL.......... */
- $"181A A6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F544 1C15 0B05 0100 0002 070E" /* ÿÿÿÿõD.......... */
- $"1819 9DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F13D 1D14 0B04 0100 0002 060E" /* ÿÿÿÿñ=.......... */
- $"1819 95FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..•ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF EB3A 1D14 0B05 0100 0002 070E" /* ÿÿÿÿë:.......... */
- $"1819 8EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Žÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF E537 1E14 0B05 0100 0002 070E" /* ÿÿÿÿå7.......... */
- $"181A 86FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..†ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF DF34 1E14 0B05 0100 0002 070E" /* ÿÿÿÿß4.......... */
- $"181B 7EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..~ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D930 1F15 0B05 0100 0002 070E" /* ÿÿÿÿÙ0.......... */
- $"181B 78FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..xÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D32D 1F15 0B05 0100 0002 070F" /* ÿÿÿÿÓ-.......... */
- $"191C 71FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..qÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF CE29 2015 0B05 0100 0002 070F" /* ÿÿÿÿÎ) ......... */
- $"191D 6AFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..jÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C828 2015 0B05 0100 0002 070F" /* ÿÿÿÿÈ( ......... */
- $"191D 65FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..eÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C328 2015 0B05 0100 0002 070F" /* ÿÿÿÿÃ( ......... */
- $"191E 61FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..aÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF BE28 2115 0B05 0100 0002 070F" /* ÿÿÿÿ¾(!......... */
- $"191F 5DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..]ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B827 2115 0C05 0100 0002 070F" /* ÿÿÿÿ¸'!......... */
- $"1920 5AFE FFFF FFFF FFFF FFFF FFFF FFFF" /* . Zþÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B427 2115 0C05 0100 0003 0710" /* ÿÿÿÿ´'!......... */
- $"1A21 58FD FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Xýÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B026 2115 0C05 0100 0003 0810" /* ÿÿÿÿ°&!......... */
- $"1A21 55FB FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Uûÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF AC26 2116 0C05 0200 0003 0810" /* ÿÿÿÿ¬&!......... */
- $"1A22 52F9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ."Rùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A826 2215 0C05 0100 0003 0810" /* ÿÿÿÿ¨&"......... */
- $"1A23 4FF7 FFFF FFFF FFFF FFFF FFFF FFFF" /* .#O÷ÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A426 2316 0D06 0200 0003 0811" /* ÿÿÿÿ¤&#......... */
- $"1B24 4DF6 FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Möÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A126 2316 0D06 0200 0003 0911" /* ÿÿÿÿ¡&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9F26 2317 0D06 0200 0003 0912" /* ÿÿÿÿŸ&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9E26 2317 0D06 0200 0003 0912" /* ÿÿÿÿž&#.......Æ. */
- $"1C26 4BF4 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Kôÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9D27 2317 0D06 0200 0004 0912" /* ÿÿÿÿ'#.......Æ. */
- $"1C26 4AF3 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Jóÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9C27 2417 0D06 0200 0104 0912" /* ÿÿÿÿœ'$.......Æ. */
- $"1C26 47F2 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Gòÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9A27 2417 0D06 0200 0103 0911" /* ÿÿÿÿš'$.......Æ. */
- $"1B27 37D1 FFFF FFFF FFFF FFFF FFFF FFFF" /* .'7Ñÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 7329 2316 0D06 0200 0003 0810" /* ÿÿÿÿs)#......... */
- $"1A27 2F59 B7C6 C6C7 C7C7 C7C7 C7C7 C7C7" /* .'/Y·ÆÆÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C5 C689 372D 2015 0C06 0200 0003 070E" /* ÇÅÆ‰7- ......... */
- $"1723 3037 3C46 4C4F 5050 5050 5050 5050" /* .#07<FLOPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"4D49 4138 352A 1D13 0A05 0100 0003 060C" /* MIA85*..Â....... */
- $"141E 2934 3D44 494C 4D4E 4E4E 4E4E 4E4E" /* ..)4=DILMNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4D" /* NNNNNNNNNNNNNNNM */
- $"4B46 4039 2F24 1910 0904 0100 0002 050A" /* KF@9/$..Æ...... */
- $"1018 212B 3339 3D40 4142 4242 4242 4242" /* ..!+39=@ABBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4140" /* BBBBBBBBBBBBBBA@ */
- $"3F3B 352F 261D 140D 0703 0100 0002 0407" /* ?;5/&........... */
- $"0C12 1920 272C 2F32 3233 3333 3333 3333" /* ... ',/223333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3332" /* 3333333333333332 */
- $"302D 2924 1D16 0F09 0502 0100 0001 0305" /* 0-)$...Æ........ */
- $"080D 1217 1C1F 2223 2425 2525 2525 2525" /* ......"#$%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2524" /* %%%%%%%%%%%%%%%$ */
- $"2221 1E19 1510 0B07 0402 0000 0000 0103" /* "!.............. */
- $"0609 0C10 1315 1718 1919 1919 1919 1919" /* .Æ.............. */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1918" /* ................ */
- $"1716 1411 0E0A 0704 0201 0000 0000 0002" /* .....Â.......... */
- $"0305 0709 0B0D 0E0F 0F0F 0F0F 0F0F 0F0F" /* ...Æ............ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0D 0C0A 0806 0402 0100 0000 0000 0001" /* ...Â............ */
- $"0103 0304 0607 0708 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0707 0605 0403 0201 0000 0000 0000 0000" /* ................ */
- $"0001 0102 0202 0203 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0202 0202 0201 0100 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 6963 3038" /* ............ic08 */
- $"0000 5CBD 0000 000C 6A50 2020 0D0A 870A" /* ..\½....jP .‡ */
- $"0000 0014 6674 7970 6A70 3220 0000 0000" /* ....ftypjp2 .... */
- $"6A70 3220 0000 004F 6A70 3268 0000 0016" /* jp2 ...Ojp2h.... */
- $"6968 6472 0000 0100 0000 0100 0004 0707" /* ihdr............ */
- $"0100 0000 000F 636F 6C72 0100 0000 0000" /* ......colr...... */
- $"1000 0000 2263 6465 6600 0400 0000 0000" /* ...."cdef....... */
- $"0100 0300 0100 0000 0100 0000 0200 0200" /* ................ */
- $"0000 0300 0000 006A 7032 63FF 4FFF 5100" /* .......jp2cÿOÿQ. */
- $"3200 0000 0001 0000 0001 0000 0000 0000" /* 2............... */
- $"0000 0000 0001 0000 0001 0000 0000 0000" /* ................ */
- $"0000 0000 0407 0101 0701 0107 0101 0701" /* ................ */
- $"01FF 5200 0C00 0000 0101 0504 0400 01FF" /* .ÿR............ÿ */
- $"5C00 1320 5058 5860 5858 6058 5860 5858" /* \.. PXX`XX`XX`XX */
- $"5850 5058 FF64 0011 0001 4B61 6B61 6475" /* XPPXÿd....Kakadu */
- $"2D76 352E 322E 31FF 9000 0A00 0000 005B" /* -v5.2.1ÿ.Â....[ */
- $"D000 01FF 93CF C100 1507 F18D 1991 E793" /* Ð..ÿ“ÏÁ...ñ.‘ç“ */
- $"D8B4 6B7C 459C 4F68 E4BF E0FF 0D3D C2DF" /* Ø´k|EœOhä¿àÿ.=Âß */
- $"FC16 8F7F 6C3A 7FEA ACD5 8632 D1AD 37A6" /* ü..l:.ê¬Õ†2Ñ­7¦ */
- $"22E3 4753 734F 3BFA 0372 1596 A8F1 7183" /* "ãGSsO;ú.r.–¨ñqƒ */
- $"2F17 0A65 C5C2 6A8E C0F9 1000 39CE 9180" /* /.ÂeÅÂjŽÀù..9Α€ */
- $"AE4A F551 B521 2839 FEE4 4D31 9F98 9F17" /* ®JõQµ!(9þäM1Ÿ˜Ÿ. */
- $"29F2 C91D 3B35 397E 15A1 8246 C3EA 3107" /* )òÉ.;59~.¡‚FÃê1. */
- $"5630 A744 5105 404A C843 0AE4 304B 4FE9" /* V0§DQ.@JÈCÂä0KOé */
- $"81E4 4C91 DF64 6885 8D23 6517 B254 DE23" /* äL‘ßdh…#e.²TÞ# */
- $"6101 3C94 9245 923D 4F4C 0F02 784C F319" /* a.<”’E’=OL..xLó. */
- $"CFC0 FC11 7EC2 D9C4 3907 5FDC 553A F1E1" /* ÏÀü.~ÂÙÄ9._ÜU:ñá */
- $"F2BC 6420 59D8 7D25 F42A 5BA5 8E8E 7166" /* ò¼d YØ}%ô*[¥ŽŽqf */
- $"AD5D 5C91 CC75 1452 ACDA 64CA 3249 CCE3" /* ­]\‘Ìu.R¬ÚdÊ2IÌã */
- $"6874 83E2 633E 64E7 8159 4AA2 FD3C 638D" /* htƒâc>dçYJ¢ý<c */
- $"F978 C3ED 328F C0F2 1F81 A80C BB81 9421" /* ùxÃí2Àò.¨.»”! */
- $"980D F457 0EA7 7782 676F 2AB3 EE8F 99C2" /* ˜.ôW.§w‚go*³î™Â */
- $"2221 9D95 8C80 C3A8 91F3 4C08 6A03 DE45" /* "!•Œ€Ã¨‘óL.j.ÞE */
- $"A985 9B7B 9ED3 A9A4 D929 A97F A125 FE22" /* ©…›{žÓ©¤Ù)©.¡%þ" */
- $"A893 77F3 EF0F C15C 3969 A153 3A7C 3110" /* ¨“wóï.Á\9i¡S:|1. */
- $"7A9C 9227 D2F6 BCA8 1A04 0219 8F36 21B7" /* zœ’'Òö¼¨....6!· */
- $"B37C 2AB6 678A 1675 BA9E 03B4 53BA 33B9" /* ³|*¶gŠ.uºž.´Sº3¹ */
- $"06AD 96D8 BDBC BFC8 5134 C040 7EBA B756" /* .­–ؽ¼¿ÈQ4À@~º·V */
- $"E619 DC67 BC83 BB39 AA42 65E1 5BBC 45B4" /* æ.Üg¼ƒ»9ªBeá[¼E´ */
- $"ECB6 E6ED D098 3C9F E17B 876D A039 553E" /* ì¶æíИ<Ÿá{‡m 9U> */
- $"5CF9 2D3F 6F47 4854 7085 62C1 C65D C07C" /* \ù-?oGHTp…bÁÆ]À| */
- $"86A0 3E43 500F 90D0 4787 8CE8 726C 5109" /* † >CP.ÐG‡ŒèrlQÆ */
- $"FD68 8099 E8FE 2A66 2F02 78F5 C78B 6A34" /* ýh€™èþ*f/.xõÇ‹j4 */
- $"0A9E 25FE 0DE3 E3C8 BD7B 3530 98D5 CF03" /* ž%þ.ããȽ{50˜ÕÏ. */
- $"CE64 A57D 620C 87C5 65B4 7BE1 34BC 3058" /* Îd¥}b.‡Åe´{á4¼0X */
- $"572A 9EBF 5E0C 5A01 80A3 B334 DF5A E1B8" /* W*ž¿^.Z.€£³4ßZḠ*/
- $"08C3 5C30 2CC4 C1F5 1341 F516 40FA 8A00" /* .Ã\0,ÄÁõ.Aõ.@úŠ. */
- $"477D B516 AD2F 4DD3 BE8C 58F0 7C77 A236" /* G}µ.­/MÓ¾ŒXð|w¢6 */
- $"DD43 6611 D582 F050 DC31 59D0 194D A6FD" /* ÝCf.Õ‚ðPÜ1YÐ.M¦ý */
- $"652E FA16 4BA7 25FE 0DE3 E3D9 B950 06E2" /* e.ú.K§%þ.ããÙ¹P.â */
- $"3A8A DA86 827A 4C68 5798 55FC FD46 A583" /* :ŠÚ†‚zLhW˜UüýF¥ƒ */
- $"064D 8FB0 29D9 8DAD 53CC 5229 B675 ACAB" /* .M°)Ù­SÌR)¶u¬« */
- $"8EED 34BC 2F12 142E 446C 0DF7 0BC3 D6E7" /* Ží4¼/...Dl.÷.ÃÖç */
- $"A086 8D72 6AE7 9270 B97C D981 C7F1 C38A" /*  †rjç’p¹|ÙÇñÊ */
- $"47EE E585 FC19 FCE3 668C C7E0 471F 813C" /* Gîå…ü.üãfŒÇàG.< */
- $"3F02 0005 B422 0345 FC66 9A91 446D DDCA" /* ?...´".Eüfš‘DmÝÊ */
- $"449B CCDB 8E8F A0B8 3942 A8FC 6409 F7F3" /* D›ÌÛŽ ¸9B¨üdÆ÷ó */
- $"ED01 353A 2B01 1B0C 2939 619B 9890 94E7" /* í.5:+...)9a›˜”ç */
- $"5FDA 75F2 7323 BF3A 7AED 757E 42D6 C336" /* _Úuòs#¿:zíu~BÖÃ6 */
- $"E74E 6B5F 2D43 4780 CA1C C462 6507 4801" /* çNk_-CG€Ê.Äbe.H. */
- $"EDEF 5B2A 7297 8FC6 1E13 E7FA 56B5 4279" /* íï[*r—Æ..çúVµBy */
- $"5BB4 B307 F4DE E273 4FC3 E9B1 72C3 EDA2" /* [´³.ôÞâsOÃé±rÃí¢ */
- $"A3F0 A9E0 FB5D C018 B35C 8B45 CD63 99FE" /* £ð©àû]À.³\‹EÍc™þ */
- $"11FB 8993 21D1 BA8B 69EB 5CB9 F258 468F" /* .û‰“!Ѻ‹ië\¹òXF */
- $"73D4 6804 C6E6 045E AE54 954C D0E5 D836" /* sÔh.Ææ.^®T•LÐåØ6 */
- $"EA0D DB9A 2806 36FA B3E9 5973 789D 6591" /* ê.Ûš(.6ú³éYsxe‘ */
- $"1EC2 F271 E9E2 5681 C542 A2FC F4EF 8111" /* .ÂòqéâVÅB¢üôï. */
- $"59D5 FC91 9749 52A3 EA37 B239 4939 8625" /* YÕü‘—IR£ê7²9I9†% */
- $"F248 18D2 075A 80A1 8005 9ED2 437F C705" /* òH.Ò.Z€¡€.žÒC.Ç. */
- $"2BFD 308C F1F0 E1BC 8FDA F5D5 50D9 9770" /* +ý0Œñðá¼ÚõÕPÙ—p */
- $"7EF5 213F 91F6 5B8B 189D EE67 70EF F40A" /* ~õ!?‘ö[‹.îgpïôÂ */
- $"2E24 C54B F37D 4941 FCD2 7779 5C8B 59CC" /* .$ÅKó}IAüÒwy\‹YÌ */
- $"F284 3377 A496 0399 6F17 47AC B5EA 3A84" /* ò„3w¤–.™o.G¬µê:„ */
- $"844E DC13 D058 BE9F 1BBE 8CE0 E615 D2E1" /* „NÜ.ÐX¾Ÿ.¾Œàæ.Òá */
- $"88A5 9DA6 9FB4 4EDE B804 ED14 A7EA 54E0" /* ˆ¥¦Ÿ´NÞ¸.í.§êTà */
- $"5A87 311B 5E69 70F5 EDA3 2E78 8862 7603" /* Z‡1.^ipõí£.xˆbv. */
- $"7761 094D 4A69 5AB0 A9BB 3F4F 92BE 205B" /* waÆMJiZ°©»?O’¾ [ */
- $"A226 24D5 C8B2 CCF7 E064 31C7 E727 6E2C" /* ¢&$ÕȲÌ÷àd1Çç'n, */
- $"D6A1 347F 41CD 5F70 E1C0 1AFC 4FBC 81A9" /* Ö¡4.AÍ_páÀ.üO¼© */
- $"A884 F03A CD84 B581 1F03 A523 838B 8038" /* ¨„ð:Í„µ..¥#ƒ‹€8 */
- $"02F4 6DE8 98FC EDD6 B331 21F7 4AC5 A31E" /* .ômè˜üíÖ³1!÷JÅ£. */
- $"9EB4 E770 D465 386E 18A6 D1BE EF6D B008" /* ž´çpÔe8n.¦Ñ¾ïm°. */
- $"63E6 1066 1374 4D10 3270 8C7F F297 F91D" /* cæ.f.tM.2pŒ.ò—ù. */
- $"DA61 677B 29FD A878 B122 E33C 17E3 8ED1" /* Úag{)ý¨x±"ã<.ãŽÑ */
- $"FB8E 4407 8B82 32AD 1B50 09DF BDA8 C80E" /* ûŽD.‹‚2­.PÆß½¨È. */
- $"7E28 ED9D A005 4297 B9C1 8D66 CA77 C41D" /* ~(í .B—¹ÁfÊwÄ. */
- $"41C5 E3B3 F94D 96E5 1308 7C59 1EB8 0871" /* AÅã³ùM–å..|Y.¸.q */
- $"C7A4 FED7 47F2 F800 6889 A21D 1FF4 9E93" /* Ǥþ×Gòø.h‰¢..ôž“ */
- $"1321 7377 D96E 86F5 A0CB EB17 C77A 81C0" /* .!swÙn†õ Ëë.ÇzÀ */
- $"7C8D A01F 0E91 00F9 1D00 94FD 4D32 E5DB" /* | ..‘.ù..”ýM2åÛ */
- $"0482 DEB8 CF1C 792A EA3B DECA 4470 4898" /* .‚Þ¸Ï.y*ê;ÞÊDpH˜ */
- $"81C0 5457 FE66 63DD CAF3 0B98 08E1 DC3F" /* ÀTWþfcÝÊó.˜.áÜ? */
- $"CF68 7F31 9BEE 73EF A3A5 8D57 8969 EEC3" /* Ïh.1›îsW‰iîà */
- $"0F13 3ED9 390D FC4C B37F C4F7 01E4 B115" /* ..>Ù9.üL³.Ä÷.ä±. */
- $"E9F9 9526 00FA 10D0 0D64 4CC5 8481 D231" /* éù•&.ú.Ð.dLÅ„Ò1 */
- $"DE6D 483E 8046 7F58 5BD3 1FFC CF82 297A" /* ÞmH>€F.X[Ó.üÏ‚)z */
- $"88A1 7E78 0668 3222 9E8B A287 30A3 DB10" /* ˆ¡~x.h2"ž‹¢‡0£Û. */
- $"A77F A842 87FC 164E 92B8 96DF 4920 EEC2" /* §.¨B‡ü.N’¸–ßI î */
- $"47B6 83F1 F68F 9309 63CE FAAC 3C8F 9FCF" /* G¶ƒñö“ÆcÎú¬<ŸÏ */
- $"A166 9621 ADC0 0ABB 7F1A 7E3C A4AD 3755" /* ¡f–!­À»..~<¤­7U */
- $"E2D8 E26D CAD1 6F24 F808 BC0D E94B EEBC" /* âØâmÊÑo$ø.¼.éKî¼ */
- $"D601 C1F5 30C1 F53B C0FA 97C0 90E6 901B" /* Ö.Áõ0Áõ;Àú—Àæ. */
- $"71C2 1EAB 8A4C 52A4 4431 058C DFB9 4148" /* qÂ.«ŠLR¤D1.Œß¹AH */
- $"185C 1E93 01C6 82D3 C81B 6398 8173 189D" /* .\.“.Æ‚ÓÈ.c˜s. */
- $"F73C 4887 5155 0C95 0088 4C69 0A27 3F39" /* ÷<H‡QU.•.ˆLiÂ'?9 */
- $"8CCA 32D8 1FD7 A3F4 CDD8 6275 5E7E 3619" /* ŒÊ2Ø.×£ôÍØbu^~6. */
- $"8D18 68C9 D2C7 0FCB 18EA FB01 5A68 4A52" /* .hÉÒÇ.Ë.êû.ZhJR */
- $"3C08 5313 5ED2 9B7D 31B5 953C 2F92 22F7" /* <.S.^Ò›}1µ•</’"÷ */
- $"3764 04E8 A9A6 C747 8DFD 9730 01DD 82E1" /* 7d.試ÇGý—0.Ý‚á */
- $"B08A FD72 7C33 A9BF AFEA 7188 AC4B 2B45" /* °Šýr|3©¿¯êqˆ¬K+E */
- $"BBB2 7826 6704 5864 9BAF 91FC 6BD3 E9D7" /* »²x&g.Xd›¯‘ükÓé× */
- $"0E30 E428 0FB2 4836 F94F 7CB9 3723 72A2" /* .0ä(.²H6ùO|¹7#r¢ */
- $"AB4C C0EB ED8F 823B B8D6 C4A6 E4B5 B41C" /* «LÀëí‚;¸ÖĦ䵴. */
- $"B0FC 0171 880F E77C 1EF8 9645 A8B4 969A" /* °ü.qˆ.ç|.ø–E¨´–š */
- $"5420 86B9 71CE 0DE5 7A40 B41A DD85 6B30" /* T †¹qÎ.åz@´.Ý…k0 */
- $"F02A 3B61 92B4 7A95 269E BF9F DDB3 9FB7" /* ð*;a’´z•&ž¿ŸÝ³Ÿ· */
- $"746B 1514 C89D 391B F835 73B8 0F1C 2567" /* tk..È9.ø5s¸..%g */
- $"A0C2 6B37 DFCE 5F4C 1DCD FD79 5CDA A8FF" /*  Âk7ßÎ_L.Íýy\Ú¨ÿ */
- $"0603 9014 308F AEB3 EDB7 D721 1709 3897" /* ...0®³í·×!.Æ8— */
- $"D3AB 181E 53BE 4025 3492 41C2 5EC7 BFC0" /* Ó«..S¾@%4’AÂ^Ç¿À */
- $"EA12 19D0 6158 530B A57B 8A2B 8DFF 18AF" /* ê..ÐaXS.¥{Š+ÿ.¯ */
- $"7651 65CF CD26 3F05 987E 0760 9C3C E3A6" /* vQeÏÍ&?.˜~.`œ<㦠*/
- $"86C0 DAB4 C6ED 7F19 8034 85FE DA7E 7963" /* †ÀÚ´Æí..€4…þÚ~yc */
- $"AFF2 9CBE 6AAA B6BB B2D3 6F41 BB45 B1EB" /* ¯òœ¾jª¶»²ÓoA»E±ë */
- $"9CC2 8803 907A 5CE1 F2D9 AF69 FF22 7DE8" /* œÂˆ.z\áòÙ¯iÿ"}è */
- $"D328 C2A1 0F97 2EE2 9575 E0E6 A665 B85A" /* Ó(¡.—.â•uàæ¦e¸Z */
- $"C5D7 6FA0 FE24 BC68 9D74 6CEB C4F9 615C" /* Å×o þ$¼htlëÄùa\ */
- $"4F34 48B3 7A64 2540 B64F EFBE 8D0F E427" /* O4H³zd%@¶Oï¾.ä' */
- $"4CCA 6DB3 83AC C5F6 EE52 7A43 8172 41E4" /* LÊm³ƒ¬ÅöîRzCrAä */
- $"2CE3 DF2F 1496 97DE 6AD1 2FFF 7E52 D993" /* ,ãß/.–—ÞjÑ/ÿ~RÙ“ */
- $"8AF9 AAA3 B192 0991 BFAE 4829 001E 963B" /* Šùª£±’Æ‘¿®H)..–; */
- $"019C 8A5D 78E8 6A56 F78C B81A F4D0 6312" /* .œŠ]xèjV÷Œ¸.ôÐc. */
- $"C0C4 A9BF 7CA5 75D9 9C23 F3EA 4F39 B325" /* ÀÄ©¿|¥uÙœ#óêO9³% */
- $"F6DE 6EF4 7D48 A279 8EA9 5395 0FBC C63F" /* öÞnô}H¢yŽ©S•.¼Æ? */
- $"679F CE93 2206 ECA9 079C 2BB7 D094 6A7B" /* gŸÎ“".ì©.œ+·Ð”j{ */
- $"1077 277F 88A6 21AE 84C3 EDD4 38FC 36B2" /* .w'.ˆ¦!®„ÃíÔ8ü6² */
- $"1F86 8F00 8F56 8825 7713 9061 800A A4CD" /* .†.Vˆ%w.a€Â¤Í */
- $"E3D3 0F3C B0AC 0C87 E368 8544 F251 5C39" /* ãÓ.<°¬.‡ãh…DòQ\9 */
- $"7D90 1BEF 7805 D624 7380 0A19 E093 3058" /* }.ïx.Ö$s€Â.à“0X */
- $"1C90 467F 5C70 4932 3947 4A95 A450 36C8" /* .F.\pI29GJ•¤P6È */
- $"D4D5 CA85 9922 FA12 D0D8 96CA 9A2F 40A2" /* ÔÕÊ…™"ú.ÐØ–Êš/@¢ */
- $"F105 054F 8C56 C164 85B5 C4E6 3EAB D76A" /* ñ..OŒVÁd…µÄæ>«×j */
- $"A227 4F09 072C 4682 9B0F 995C 7551 94E7" /* ¢'OÆ.,F‚›.™\uQ”ç */
- $"419A 0098 0283 19E8 0489 687B 4F66 B74C" /* Aš.˜.ƒ.è.‰h{Of·L */
- $"7F59 C07A A552 B04D 628F E401 E55C A4ED" /* .YÀz¥R°Mbä.å\¤í */
- $"390F C34D 81BB 9F88 0C50 F50F 9FBD A377" /* 9.ÃM»Ÿˆ.Põ.Ÿ½£w */
- $"F538 3F9C E243 FF47 D346 87F2 444B C479" /* õ8?œâCÿGÓF‡òDKÄy */
- $"F6B3 1C76 5125 F487 0FAF 294A DA20 EC56" /* ö³.vQ%ô‡.¯)JÚ ìV */
- $"07AB DE07 14C2 1721 F3E0 D687 1F67 039D" /* .«Þ..Â.!óàÖ‡.g. */
- $"461F 0D82 9CAA B2D4 DFC6 6AA5 D31E 4D01" /* F..‚œª²Ô߯j¥Ó.M. */
- $"5AC2 B2BD FD97 7D6E 00D1 7ADF 377C 15A7" /* Z²½ý—}n.Ñzß7|.§ */
- $"9681 C7B2 8168 D706 425B 35EF 7298 C053" /* –Dzh×.B[5ïr˜ÀS */
- $"E198 B5E2 B835 712B 1AD8 BA77 CF86 83A3" /* ᘵâ¸5q+.غwφƒ£ */
- $"B0B9 C5E6 F37A A3DE D93B 8EC8 132F A52A" /* °¹Åæóz£ÞÙ;ŽÈ./¥* */
- $"AB20 E166 F719 7130 6482 5BE2 605B D78E" /* « áf÷.q0d‚[â`[׎ */
- $"672D 7AE6 3906 DA75 0E3D 1962 8A60 9294" /* g-zæ9.Úu.=.bŠ`’” */
- $"1FC8 C0F3 216D 815D 4DDE 5DDE D8AB 3F9C" /* .ÈÀó!m]MÞ]ÞØ«?œ */
- $"7F9F 24B3 7BBF CCB9 2F80 19B6 70AE 1B3D" /* .Ÿ$³{¿Ì¹/€.¶p®.= */
- $"C71A 1F7C 81D2 639F 0D03 24EA D4B1 D351" /* Ç..|ÒcŸ..$êÔ±ÓQ */
- $"DD10 FBD5 EA3F 4957 A7ED 04C6 384D C10F" /* Ý.ûÕê?IW§í.Æ8MÁ. */
- $"8A55 0C03 694F 0D18 70D8 0AC3 33C0 17D1" /* ŠU..iO..pØÂÃ3À.Ñ */
- $"73BB E85F 5204 090F FDFE 8AC5 9AD6 22D5" /* s»è_R.Æ.ýþŠÅšÖ"Õ */
- $"CA31 A6DE EF44 D910 B34A 0E59 7866 536F" /* Ê1¦ÞïDÙ.³J.YxfSo */
- $"9B0B A341 3AB8 C06C C64F 3F86 8160 DFB9" /* ›.£A:¸ÀlÆO?†`ß¹ */
- $"A709 59D8 88C3 3316 9FFA F83F 5120 E40E" /* §ÆY؈Ã3.Ÿúø?Q ä. */
- $"4DEA C88F C418 37F6 4C0B 7606 9632 EEC5" /* MêÈÄ.7öL.v.–2îÅ */
- $"6380 FB25 A69F AAE2 0888 B722 008F 35CB" /* c€û%¦Ÿªâ.ˆ·".5Ë */
- $"F6A7 90BF D0DB 6367 A14B 5A86 EE98 FD18" /* ö§¿ÐÛcg¡KZ†î˜ý. */
- $"A629 1BAB 3BE2 920D E99D BEC2 88B4 F909" /* ¦).«;â’.é¾Âˆ´ùÆ */
- $"66B1 535D 3940 AF78 8200 0C46 142A EA2A" /* f±S]9@¯x‚..F.*ê* */
- $"A991 95E8 FD2B D30B 0E4A 76E2 A97B FAA7" /* ©‘•èý+Ó..Jvâ©{ú§ */
- $"97E2 9B30 54FA 5E97 962A 7E83 5711 A707" /* —â›0Tú^—–*~ƒW.§. */
- $"2A21 3729 2046 9C41 8282 A161 E5F6 AB24" /* *!7) FœA‚‚¡aåö«$ */
- $"3324 74CF 1AF6 C935 D884 0008 DC18 663C" /* 3$tÏ.öÉ5Ø„..Ü.f< */
- $"3A00 25E4 92D7 8F23 4C07 3C63 DB6E 4924" /* :.%ä’×#L.<cÛnI$ */
- $"7362 34C9 2F1D 105B 97E2 03BF 648F C21C" /* sb4É/..[—â.¿dÂ. */
- $"C6AC 3657 2C72 ADAA 2889 0623 6A5D ACEC" /* Ƭ6W,r­ª(‰.#j]¬ì */
- $"3210 738F 51F5 CC65 9EA9 7AD3 95CB B265" /* 2.sQõÌež©zӕ˲e */
- $"D54E 6E1D E2A7 2673 E6C2 C247 2FFD C10E" /* ÕNn.â§&sæÂÂG/ýÁ. */
- $"5FC5 C1E1 2511 5C8F 6063 92AB E4B9 8212" /* _ÅÁá%.\`c’«ä¹‚. */
- $"3643 6D53 2492 3E58 3E71 15E3 A3B7 AB2A" /* 6CmS$’>X>q.㣷«* */
- $"A998 FE5A 74DB 537A CE3D CD46 49B6 DB6D" /* ©˜þZtÛSzÎ=ÍFI¶Ûm */
- $"B6DB 6DB2 8EE9 1D6F 6480 8613 D8D2 7D8F" /* ¶Ûm²Žé.od€†.ØÒ} */
- $"5615 3EAB B25B 722D ECB8 ED12 70F2 BA06" /* V.>«²[r-ì¸í.pòº. */
- $"E5A2 45C1 547C F861 A7D5 8E1C 08BC 346B" /* å¢EÁT|øa§ÕŽ..¼4k */
- $"2730 C670 2FD8 F159 6ABE 2092 ED98 AC34" /* '0Æp/ØñYj¾ ’혬4 */
- $"B4CA 8565 90CF 0034 6E68 F777 9672 F29D" /* ´Ê…eÏ.4nh÷w–rò */
- $"4621 6E73 9C90 5C3D A8DB F5B0 CACF A63E" /* F!nsœ\=¨Ûõ°ÊϦ> */
- $"861E 8B9E F490 8E15 69BC A01D EF59 E898" /* †.‹žôŽ.i¼ .ïYè˜ */
- $"7040 B817 5AA9 BFB1 09A0 FE74 D2F7 BEA8" /* p@¸.Z©¿±Æ þtÒ÷¾¨ */
- $"A4F3 FEAC 38A4 409E B504 9CC9 EAA3 533B" /* ¤óþ¬8¤@žµ.œÉê£S; */
- $"153D F710 FC9E 2055 A395 C374 2AF9 E7C5" /* .=÷.üž U£•Ãt*ùçÅ */
- $"E1E8 7F74 3CDB D568 B606 A9D5 B7AE E207" /* áè.t<ÛÕh¶.©Õ·®â. */
- $"947E 2E65 1C27 336D 927A 4F86 5422 0E04" /* ”~.e.'3m’zO†T".. */
- $"42C7 668A 9403 EAB7 21A3 C9F1 18BC 5380" /* BÇfŠ”.ê·!£Éñ.¼S€ */
- $"BED7 07B5 F9B1 B798 8727 D54A 7A6E E493" /* ¾×.µù±·˜‡'ÕJznä“ */
- $"5271 F27D 7C35 DCEE D0BC CB31 C1FB 879F" /* Rqò}|5ÜîмË1Áû‡Ÿ */
- $"E074 9EB9 D7BE C9ED D2C8 BD00 C7FC D05B" /* àtž¹×¾ÉíÒȽ.ÇüÐ[ */
- $"2B2C 9647 A924 9F22 A06D 62B4 A946 77B7" /* +,–G©$Ÿ" mb´©Fw· */
- $"AD6D 60EE C841 997D A7E8 7AD2 AFA8 EEC4" /* ­m`îÈA™}§èzÒ¯¨îÄ */
- $"D61F FC06 FD7A E761 AA33 0F74 A08F 8E5B" /* Ö.ü.ýzçaª3.t Ž[ */
- $"B7C0 7C9A 1201 F0F5 6403 E4D0 60D8 92D9" /* ·À|š..ðõd.äÐ`Ø’Ù */
- $"84ED 064F 1B29 D7A7 1D77 F4B3 61D6 2651" /* „í.O.)×§.wô³aÖ&Q */
- $"329E 2CA5 53B4 956D 1061 3A3A A73B FC8E" /* 2ž,¥S´•m.a::§;üŽ */
- $"DD3C 60C9 F855 32FB 3C04 6287 50F7 6BB3" /* Ý<`ÉøU2û<.b‡P÷k³ */
- $"B84A 05A6 3145 A832 3BBC CA56 115B 9D7F" /* ¸J.¦1E¨2;¼ÊV.[. */
- $"8ADB 5660 429D 1FF6 4E6D 4899 EFDA 592F" /* ŠÛV`B.öNmH™ïÚY/ */
- $"19DC 9790 802A 1C17 2250 ADEC 0312 2C23" /* .Ü—€*.."P­ì..,# */
- $"223B 1EC8 482C 6E26 DD67 528F 7CDC 1841" /* ";.ÈH,n&ÝgR|Ü.A */
- $"DBCB CF9E 6D26 B564 4FD4 0AB5 DA0B ADE2" /* ÛËÏžm&µdOÔµÚ.­â */
- $"C129 D895 00FF 105B 0D0B F4DB 286A B347" /* Á)Ø•.ÿ.[..ôÛ(j³G */
- $"A261 30A9 0A9B 7A0D 585B 3991 3217 6FF7" /* ¢a0©Â›z.X[9‘2.o÷ */
- $"A368 D6A8 E862 161A 3584 613E 04D9 DBCB" /* £hÖ¨èb..5„a>.ÙÛË */
- $"4D96 66A3 B736 F802 D67A 309F 04E6 AFD8" /* M–f£·6ø.Öz0Ÿ.æ¯Ø */
- $"888E A8A5 4461 F1F0 1B6B 2DC4 0DFE C676" /* ˆŽ¨¥Dañð.k-Ä.þÆv */
- $"8D4E 3750 C3E6 C233 EFC5 368B 6113 5B53" /* N7PÃæÂ3ïÅ6‹a.[S */
- $"08E0 C259 1B88 AA0C 74B0 862E 1024 BB3F" /* .àÂY.ˆª.t°†..$»? */
- $"2816 B320 715C 5DFA 9FF0 CBC3 6A85 777A" /* (.³ q\]úŸðËÃj…wz */
- $"23CB F89B D813 6706 313E 2CF5 A163 0848" /* #Ëø›Ø.g.1>,õ¡c.H */
- $"94C9 3288 B556 53DD 2A45 2302 F28E 7ED1" /* ”É2ˆµVSÝ*E#.òŽ~Ñ */
- $"B5A0 67C8 53BB 4CE4 45D9 317F 92AB B13B" /* µ gÈS»LäEÙ1.’«±; */
- $"7246 F6DE 5348 49C9 42A1 CA62 64B0 209E" /* rFöÞSHIÉB¡Êbd° ž */
- $"43F2 DF7C 9BBC 097F C94A EA52 8D01 ADEF" /* Còß|›¼Æ.ÉJêR.­ï */
- $"5241 7C9B 2876 75F4 D748 AF9D 6FBB 3306" /* RA|›(vuô×H¯o»3. */
- $"0AD1 3953 6C99 5BB7 F1F5 1C1F BCE7 CA83" /* ÂÑ9Sl™[·ñõ..¼çʃ */
- $"08C1 6811 FBC5 AE18 343C C6F5 E515 F9CF" /* .Áh.ûÅ®.4<Æõå.ùÏ */
- $"FE48 C6E9 956E 6712 DDCA D62C 7F37 6DFE" /* þHÆé•ng.ÝÊÖ,.7mþ */
- $"2465 A8EE 1BAF E106 CA62 101F 0144 31DC" /* $e¨î.¯á.Êb...D1Ü */
- $"029E ED0F 9E47 F22E 0C17 0D31 E60B 1662" /* .ží.žGò....1æ..b */
- $"C1F5 5C90 7D5A 6D03 EAB6 C0C8 1653 E821" /* Áõ\}Zm.ê¶ÀÈ.Sè! */
- $"5860 ED0B C711 39E5 E5C8 268D 2246 E3FB" /* X`í.Ç.9ååÈ&"Fãû */
- $"68A4 3B12 A487 350D FE94 3722 65AC 949B" /* h¤;.¤‡5.þ”7"e¬”› */
- $"2526 7CD5 0E28 E093 CFE8 314C BE18 5B60" /* %&|Õ.(à“Ïè1L¾.[` */
- $"827E 154B 9609 2536 F890 A361 BA29 8211" /* ‚~.K–Æ%6ø£aº)‚. */
- $"AF42 BEC6 1BCB CE6D 2910 8083 C890 D7FF" /* ¯B¾Æ.ËÎm).€ƒÈ×ÿ */
- $"6F04 CEF4 F47C 0D92 00BD D90F 4095 0A48" /* o.Îôô|.’.½Ù.@•ÂH */
- $"4DC6 210C 351D 34A5 5FDA E576 1E1B 1684" /* MÆ!.5.4¥_Úåv...„ */
- $"F2A0 B30A 589C 1DBC 4831 E906 0D67 0CDD" /* ò ³ÂXœ.¼H1é..g.Ý */
- $"876B 994F 6D66 47DD AF40 7158 4385 738E" /* ‡k™OmfGݯ@qXC…sŽ */
- $"82F8 E637 9B5C 7389 0AA5 2A04 D105 5E88" /* ‚øæ7›\s‰Â¥*.Ñ.^ˆ */
- $"C2A2 2943 E125 6C2F 0AD1 1E5C AF1F CFF6" /* ¢)Cá%l/ÂÑ.\¯.Ïö */
- $"B39B C799 0F39 6151 6625 BB66 C3C3 418B" /* ³›Ç™.9aQf%»fÃÃA‹ */
- $"90A4 F6F7 BD30 7A04 88E6 0F8A 3F0B FF2C" /* ¤ö÷½0z.ˆæ.Š?.ÿ, */
- $"D18B 1D88 1442 EB54 A6FC D226 251A 015D" /* Ñ‹.ˆ.BëT¦üÒ&%..] */
- $"4DA8 32CA 371B 86EB 4E89 1415 9A41 6AD2" /* M¨2Ê7.†ëN‰..šAjÒ */
- $"1F0F 7656 41E5 B874 72E7 5F88 ABDA 28D7" /* ..vVAå¸trç_ˆ«Ú(× */
- $"37D5 EE40 567F F751 2591 01A3 03B9 EFCD" /* 7Õî@V.÷Q%‘.£.¹ïÍ */
- $"E0A8 8CC8 8C8E 0945 3036 453A 1787 59C4" /* à¨ŒÈŒŽÆE06E:.‡YÄ */
- $"B99C 02D2 D5F6 1B5E E34C 551E 8C43 9A20" /* ¹œ.ÒÕö.^ãLU.ŒCš */
- $"981D 0B44 C6D1 E6AA 2B92 5F33 8016 C4F1" /* ˜..DÆÑæª+’_3€.Äñ */
- $"7AA6 E605 4676 A533 1D38 6ADA 9BC6 2C13" /* z¦æ.Fv¥3.8jÚ›Æ,. */
- $"385A 3DCE 7E2E B9A1 81BB 27C6 AFF8 FF5D" /* 8Z=Î~.¹¡»'Ưøÿ] */
- $"A511 4C25 DC70 082C B597 3EC4 004C D4B8" /* ¥.L%Üp.,µ—>Ä.LÔ¸ */
- $"BE6A B79D EF70 2610 B57B FEFE 6ACC 9EEE" /* ¾j·ïp&.µ{þþjÌžî */
- $"B94A 73A8 4B30 C207 7391 789E C0FE 6992" /* ¹Js¨K0Â.s‘xžÀþi’ */
- $"AB13 E2AA FF53 4B22 A338 0EA3 B476 D732" /* «.âªÿSK"£8.£´v×2 */
- $"EDA3 2009 3422 B4AA 64DE 26C3 5894 D6DD" /* í£ Æ4"´ªdÞ&ÃX”ÖÝ */
- $"F7A9 5A3B 6F31 5D2C EC22 1FAC 928B 647F" /* ÷©Z;o1],ì".¬’‹d. */
- $"1600 A961 11C3 FD11 E594 81F9 E0AC 20D4" /* ..©a.Ãý.å”ùà¬ Ô */
- $"0DCA 9CE0 FF14 3BE3 3010 00E1 9DFE F0C8" /* .Êœàÿ.;ã0..áþðÈ */
- $"70E7 D3A5 A7F9 884E 6941 CBCB FEBE 0C27" /* pçÓ¥§ùˆNiAËËþ¾.' */
- $"B3F5 BAA4 3068 BFC1 DB20 1E5F 9E83 BF7D" /* ³õº¤0h¿ÁÛ ._žƒ¿} */
- $"8EA3 8FB0 F355 FF02 DED2 5CC8 2B4D 4DA5" /* Ž£°óUÿ.ÞÒ\È+MM¥ */
- $"8122 C96A CDAB B130 2D35 B73E 2EE9 0AA9" /* "ÉjÍ«±0-5·>.é© */
- $"7DB8 B81D 7B0A 776B DFF3 2B02 1F6A EF5B" /* }¸¸.{Âwkßó+..jï[ */
- $"E6A6 177F D8C0 1C3B A88C 2154 18F3 BFB3" /* æ¦..ØÀ.;¨Œ!T.ó¿³ */
- $"F7EF 1249 860B F87F 60D6 AE06 B5B2 7824" /* ÷ï.I†.ø.`Ö®.µ²x$ */
- $"E601 91D7 1436 80CF 054C 9691 1321 B299" /* æ.‘×.6€Ï.L–‘.!²™ */
- $"11F3 2BA3 51F6 447E 1BC0 28CB 666B 9BA0" /* .ó+£QöD~.À(Ëfk›  */
- $"425A E39B 066C 1B7C 340B 950A BDCC E05D" /* BZã›.l.|4.•½Ìà] */
- $"C8DC 568C BDC6 54E9 0AA2 2D89 6E22 37E4" /* ÈÜVŒ½ÆTé¢-‰n"7ä */
- $"3508 39CC EE8F 8EE6 F926 626B E33F 4A06" /* 5.9ÌîŽæù&bkã?J. */
- $"4CD1 AE16 9063 3119 5554 58CA BB53 4A73" /* LѮ.c1.UTXʻSJs */
- $"AA2B 2A71 B86B 3E95 BED6 D9D2 9D59 3E60" /* ª+*q¸k>•¾ÖÙÒY>` */
- $"C5D1 FA4C E6A7 880F 30D8 A679 6467 697E" /* ÅÑúL槈.0ئydgi~ */
- $"F327 EAA4 E0D1 01F9 9B74 AAA1 6CDD 7DA7" /* ó'ê¤àÑ.ù›tª¡lÝ}§ */
- $"D2AB C9CB 63D6 D3DF C778 C6ED 71A5 0571" /* Ò«ÉËcÖÓßÇxÆíq¥.q */
- $"C7E1 4EC7 E16C 43F0 75B1 3C9E 91EA AAAC" /* ÇáNÇálCðu±<ž‘ꪬ */
- $"9A2E A47E 8DF0 873E 2275 3F71 F986 DF3D" /* š.¤~ð‡>"u?qù†ß= */
- $"DBE5 1F4C 0D83 C3F5 F2D4 5A7C 0BFB E4FC" /* Ûå.L.ƒÃõòÔZ|.ûäü */
- $"C83E D8A4 FAF4 F589 09F2 4909 40AA 2AA8" /* È>ؤúôõ‰ÆòIÆ@ª*¨ */
- $"C190 BE4D D484 1408 6EAD 722F 6BA6 7502" /* Á¾MÔ„..n­r/k¦u. */
- $"A53F 1B9A BE86 841A FC60 53F3 8AE9 2E4C" /* ¥?.𾆄.ü`SóŠé.L */
- $"4B8E 1D09 F47C 3BAA CFB7 80DE 6A41 F007" /* KŽ.Æô|;ªÏ·€ÞjAð. */
- $"80A3 413A C568 5C02 6166 E8AF 9B6C EF86" /* €£A:Åh\.af诛lï† */
- $"F178 273B A803 89E9 520A ACFC 0E98 6198" /* ñx';¨.‰éR¬ü.˜a˜ */
- $"6ECE D094 76D1 8AF8 1035 D0C8 B9E5 ECC9" /* nÎДvÑŠø.5ÐȹåìÉ */
- $"08E6 748A F28B B0E0 F9AB 71B4 7971 9626" /* .ætŠò‹°àù«q´yq–& */
- $"5397 5D5A 31CB 5F9E 7C98 8300 72B1 2C67" /* S—]Z1Ë_ž|˜ƒ.r±,g */
- $"A38D 0C02 C603 C0C2 2000 E528 0CAA 9472" /* £..Æ.À .å(.ª”r */
- $"3115 8C05 0EE6 3F33 3F6D B6DB 64C7 AAB2" /* 1.Œ..æ?3?m¶ÛdǪ² */
- $"94EA DD85 D3DF F14E FF3F D3A2 778B 3749" /* ”êÝ…ÓßñNÿ?Ó¢w‹7I */
- $"B31B 6DB6 C5B6 5311 C782 3FCF 2880 6695" /* ³.m¶Å¶S.Ç‚?Ï(€f• */
- $"085A 35C2 3938 420E 8705 50BD 51C3 BD21" /* .Z5Â98B.‡.P½Qý! */
- $"41B9 C3ED 3A76 367F 40F5 DA53 3618 DF7A" /* A¹Ãí:v6.@õÚS6.ßz */
- $"EE11 B2D6 D9AD 4351 7D8F BC5A 7217 9352" /* î.²ÖÙ­CQ}¼Zr.“R */
- $"D43F 54B9 F618 3E0E 5FF8 1599 CD00 5489" /* Ô?T¹ö.>._ø.™Í.T‰ */
- $"459D 1B65 0538 7A92 D8EC 6AD5 E756 776E" /* E.e.8z’ØìjÕçVwn */
- $"5B66 A07C 36D6 A4B0 2E00 21E0 ABFC 2AB8" /* [f |6Ö¤°..!à«ü*¸ */
- $"F387 5784 0DB9 1978 67FE DEFF 0CCC CCCC" /* ó‡W„.¹.xgþÞÿ.ÌÌÌ */
- $"CCCC CCCC CCCC CCD3 5F84 850A F245 C370" /* ÌÌÌÌÌÌÌÓ_„…ÂòEÃp */
- $"786E 76C5 56A5 8C9B FC7F 6869 3085 EB26" /* xnvÅV¥Œ›ü.hi0…ë& */
- $"6162 A234 8BF4 868D 0BA5 77FA 56D2 31FD" /* ab¢4‹ô†.¥wúVÒ1ý */
- $"7436 0147 944C 2AAE C8C1 DE46 2A3A 2449" /* t6.G”L*®ÈÁÞF*:$I */
- $"EAD0 8E9E FF0B 129F 7F9C 1436 A6BC 10E6" /* êÐŽžÿ..Ÿ.œ.6¦¼.æ */
- $"3116 7A98 5FF6 97E9 FC84 7136 FEA5 C122" /* 1.z˜_ö—éü„q6þ¥Á" */
- $"E58F 44D6 D7A4 0AD3 E9B4 7C91 B833 1F91" /* åDÖפÂÓé´|‘¸3.‘ */
- $"5F0F D8F7 8A80 6560 B332 081A C68D 0FF9" /* _.Ø÷Š€e`³2..Æ.ù */
- $"899F 2CC7 E1D6 FC7E 1DEB C3ED EA04 F55D" /* ‰Ÿ,ÇáÖü~.ëÃíê.õ] */
- $"017D B775 48A1 A844 EAB2 8E3A 5FF2 20AF" /* .}·uH¡¨D겎:_ò ¯ */
- $"6231 D1B0 D4D9 D308 999B 09F2 95B1 7071" /* b1ѰÔÙÓ.™›Æò•±pq */
- $"F57C 1F1E 7960 4639 6A62 5BC6 9E5A D45D" /* õ|..y`F9jb[ÆžZÔ] */
- $"F339 9597 BF1B 62EB D128 B3D8 9BD3 52BF" /* ó9•—¿.bëÑ(³Ø›ÓR¿ */
- $"0703 43F9 E1C7 940E EA41 F4B1 75E4 891F" /* ..CùáÇ”.êAô±uä‰. */
- $"09A4 D439 7DFF 6AB7 EB4F 1253 A9C0 8BBE" /* ƤÔ9}ÿj·ëO.S©À‹¾ */
- $"40A0 3CE6 965D F886 A9EF 7E69 712D 41C2" /* @ <æ–]ø†©ï~iq-A */
- $"0062 6917 5D06 6548 9FD6 1470 4A0C 8545" /* .bi.].eHŸÖ.pJ.…E */
- $"8417 6C73 0C2D DF44 0E4A D5F9 7443 D629" /* „.ls.-ßD.JÕùtCÖ) */
- $"E62D DE53 CCFA EAEA E08A F0E1 9D37 9616" /* æ-ÞSÌúêêàŠðá7–. */
- $"C0DA 1FD4 6A42 6CE6 1D10 AB6A 911A 19D2" /* ÀÚ.ÔjBlæ..«j‘..Ò */
- $"47A0 4AC5 6A3C 12FF 0FE8 3AFB 7DFD 3D27" /* G JÅj<.ÿ.è:û}ý=' */
- $"42C6 E2BA 6DDE D1ED 21CE 1EA0 F444 055B" /* BÆâºmÞÑí!Î. ôD.[ */
- $"122A 41EE D8C1 144C B39C 0EEA 014E 7448" /* .*AîØÁ.L³œ.ê.NtH */
- $"0B72 7C2C 92B6 0CAC 3CB5 ADA7 8BF8 0C56" /* .r|,’¶.¬<µ­§‹ø.V */
- $"1DD5 B763 907F 6B60 8A85 ED4A F87D FBDC" /* .Õ·c.k`Š…íJø}ûÜ */
- $"391D 822B CBF5 7266 0E6B B2D4 32DE 606C" /* 9.‚+Ëõrf.k²Ô2Þ`l */
- $"014E 64BF F969 E3A5 C8E4 09EC B205 6391" /* .Nd¿ùiã¥ÈäÆì².c‘ */
- $"3081 96F5 9A80 0599 50D2 38FF 635B 9C35" /* 0–õš€.™PÒ8ÿc[œ5 */
- $"97CF A325 D94F B8E1 A794 EABC DA8A 7CC3" /* —Ï£%ÙO¸á§”ê¼ÚŠ|à */
- $"8713 2EBB 1EA6 69B0 9A72 A93D 874A 1F30" /* ‡..».¦i°šr©=‡J.0 */
- $"4C7B B341 B8CF F61E 7CEE 60CC E9B0 6D85" /* L{³A¸Ïö.|î`Ìé°m… */
- $"4F96 977D F85D F85A 08AF 46EF F259 FD70" /* O–—}ø]øZ.¯FïòYýp */
- $"E364 C54D 1F3D C951 B1DD 2CB4 8B94 9350" /* ãdÅM.=ÉQ±Ý,´‹”“P */
- $"8FFC CD4E D39E 2FF5 DC65 9DB7 2133 6E97" /* üÍNÓž/õÜe·!3n— */
- $"9705 2AA6 2625 534E B2A2 D775 FCFA 60E0" /* —.*¦&%SN²¢×uüú`à */
- $"4929 3681 2E72 5087 F3CD FB3A 6386 36A2" /* I)6.rP‡óÍû:c†6¢ */
- $"5E62 8705 57E4 8441 1986 1487 E88F C834" /* ^b‡.Wä„A.†.‡èÈ4 */
- $"C59D D57C CCA2 D56F 3889 44AC 0E4D 0E88" /* ÅÕ|Ì¢Õo8‰D¬.M.ˆ */
- $"2592 A50A F98D DF1D 17F2 78BD D4AB FDB4" /* %’¥Âùß..òx½Ô«ý´ */
- $"4249 FBDE 3E56 BE58 B587 88B4 8D75 299F" /* BIûÞ>V¾Xµ‡ˆ´u)Ÿ */
- $"4C92 6D9A 6B17 6153 9A65 4770 E0EC BBEF" /* L’mšk.aSšeGpàì»ï */
- $"2F91 8C35 8FFA 04AF 880C D9B6 204A D65E" /* /‘Œ5ú.¯ˆ.Ù¶ JÖ^ */
- $"68DD DBE7 63BC E1C5 CCDD E994 3796 10EF" /* hÝÛçc¼áÅÌÝé”7–.ï */
- $"354D C0E7 7A72 E57E EFAC 7C75 E4CE F47F" /* 5MÀçzrå~ï¬|uäÎô. */
- $"2E82 A8D0 6401 3CC4 1ACC 4513 1211 DCC9" /* .‚¨Ðd.<Ä.ÌE...ÜÉ */
- $"BD7A 47CA F093 83C7 38EB 866D 1ED5 AC6C" /* ½zGÊð“ƒÇ8ë†m.Õ¬l */
- $"FF01 C348 CFA1 2532 DAD5 2BDD 8CCC 71C1" /* ÿ.ÃHÏ¡%2ÚÕ+ÝŒÌqÁ */
- $"1208 75AA 308B 4796 A89E 0EAF AB67 422A" /* ..uª0‹G–¨ž.¯«gB* */
- $"AA43 8162 68BC 9878 8578 419C AB2E 9518" /* ªCbh¼˜x…xAœ«.•. */
- $"A9E0 4298 DB46 36D7 ADD0 DE21 DC41 AEA7" /* ©àB˜ÛF6×­ÐÞ!ÜA®§ */
- $"A05D 795D AB14 E247 6750 3EA8 0A31 5A06" /*  ]y]«.âGgP>¨Â1Z. */
- $"FAEC AD07 ECF7 C636 A068 22AA E179 7613" /* úì­.ì÷Æ6 h"ªáyv. */
- $"30F9 831C 0AFA 38C0 E20B 96A9 464E B57A" /* 0ùƒ.Âú8Àâ.–©FNµz */
- $"5AF3 D612 DC70 2A8D 1D09 C7C9 967F 7F7B" /* ZóÖ.Üp*.ÆÇÉ–..{ */
- $"F47F 4017 A722 9853 37C2 DE55 34CF 104E" /* ô.@.§"˜S7ÂÞU4Ï.N */
- $"9DD3 35DF DEE2 589C FAF1 07DE 1803 86B1" /* Ó5ßÞâXœúñ.Þ..†± */
- $"2DE6 6B46 FC45 F24E 8718 3B6E D557 8008" /* -ækFüEòN‡.;nÕW€. */
- $"FF3B 8EC2 28BD 6146 3EF6 A0FB 0BCA 37C1" /* ÿ;ŽÂ(½aF>ö û.Ê7Á */
- $"749B 49F2 F419 9EC5 DC0A A6DE 0CFC 1BD2" /* t›Iòô.žÅܦÞ.ü.Ò */
- $"AAF5 4920 1AB3 842A 1813 606E 97CD 0EC2" /* ªõI .³„*..`n—Í. */
- $"50D4 84CD F427 569F 776D 940A A6F7 68D7" /* PÔ„Íô'VŸwm”¦÷h× */
- $"2A18 4C6D 2056 D254 1226 7F3C 1ED0 7AB8" /* *.Lm VÒT.&.<.Ðz¸ */
- $"BEFE 2050 50E6 C5FB 173C 1857 FF7F 86D9" /* ¾þ PPæÅû.<.Wÿ.†Ù */
- $"6CE3 E235 1AFA CBB4 D2BE 4E64 9713 B880" /* lãâ5.úË´Ò¾Nd—.¸€ */
- $"0C41 2E14 401B D14F 5BA4 AD20 7060 C05E" /* .A..@.ÑO[¤­ p`À^ */
- $"2011 000E C557 2951 009C A584 6178 50E8" /* ...ÅW)Q.œ¥„axPè */
- $"6E0D 922F BFF7 EC41 A907 0D2B EF09 3CE0" /* n.’/¿÷ìA©..+ïÆ<à */
- $"6344 B3D6 742A 0448 042D 44C3 390B 089B" /* cD³Öt*.H.-DÃ9..› */
- $"B0FF 2877 1C62 BE1E AC48 09B0 4667 19BC" /* °ÿ(w.b¾.¬HưFg.¼ */
- $"319D 1FEA ABB5 1EE9 02D8 C845 A20C 2E3F" /* 1.ꫵ.é.ØÈE¢..? */
- $"7010 FA38 E2A0 1F01 2933 0557 19BD 9DCD" /* p.ú8â ..)3.W.½Í */
- $"5486 F044 5838 C953 CC32 2DF8 6A04 30ED" /* T†ðDX8ÉSÌ2-øj.0í */
- $"2C42 0A7D 1B38 7F94 4936 5908 39F1 424F" /* ,BÂ}.8.”I6Y.9ñBO */
- $"2BFF 7F46 F53E 11D3 DA1E 41B4 67AB 296E" /* +ÿ.Fõ>.ÓÚ.A´g«)n */
- $"0B59 6213 9E16 1568 8787 ED75 8822 A102" /* .Yb.ž..h‡‡íuˆ"¡. */
- $"DAAC D7D6 FA63 ED91 52D2 E98C 6EEB ABBB" /* Ú¬×Öúcí‘RÒéŒnë«» */
- $"5465 7C7C 0CEB 3016 0CC6 5793 D7FF 7FFB" /* Te||.ë0..ÆW“×ÿ.û */
- $"34E7 7BDE 794E 6D8C 392D 051A 478B 4AD7" /* 4ç{ÞyNmŒ9-..G‹J× */
- $"028C 3119 EDCA 833C 2F1B A23A 5C69 908F" /* .Œ1.íʃ</.¢:\i */
- $"6F17 C143 83FF 31A8 709D 7BFA B0E4 A884" /* o.ÁCƒÿ1¨p{ú°ä¨„ */
- $"E3DC 88CC DF54 C132 6671 A0D0 B4C3 7721" /* ã܈ÌßTÁ2fq Ð´Ãw! */
- $"B5F0 84FF 0FDA 1588 5865 1B6B 94E3 9B46" /* µð„ÿ.Ú.ˆXe.k”ã›F */
- $"5CA1 7767 09F4 3448 2242 114C 2705 2C38" /* \¡wgÆô4H"B.L'.,8 */
- $"4565 F286 ABC2 AFF5 809D 0C5B BB5E 009C" /* Eeò†«Â¯õ€.[»^.œ */
- $"FCBA BC4C 84FF 45EF F42B 3F8E DEE0 A531" /* üº¼L„ÿEïô+?ŽÞà¥1 */
- $"DBBB 2113 7C30 8BB7 76FF 7E55 E6BC 012B" /* Û»!.|0‹·vÿ~Uæ¼.+ */
- $"EBDE EF62 0981 DCE1 AC6E 5AD7 D8AD 0560" /* ëÞïbÆÜá¬nZר­.` */
- $"5B36 3A62 5B57 3E03 75AC 25FB B396 1086" /* [6:b[W>.u¬%û³–.† */
- $"5EF0 4C11 ACE0 90D2 6568 EB55 75AB FF24" /* ^ðL.¬àÒehëUu«ÿ$ */
- $"54B8 0E77 3110 5C67 3138 8369 5BEA 3458" /* T¸.w1.\g18ƒi[ê4X */
- $"7FFE 6000 9940 0044 18C6 1A34 14B6 9CD2" /* .þ`.™@.D.Æ.4.¶œÒ */
- $"C039 2A00 00CC 8F27 9EFE FF80 1CAA 8000" /* À9*..Ì'žþÿ€.ª€. */
- $"0000 0000 D9B1 C1D0 BFE1 D01D 2DD4 E3DF" /* ....Ù±ÁпáÐ.-Ôãß */
- $"949B 6DB6 DB6D B83D 6B98 82BC 446D 0CB3" /* ”›m¶Ûm¸=k˜‚¼Dm.³ */
- $"55A5 C140 D9E5 5E98 37AF 0E38 4474 B8DC" /* U¥Á@Ùå^˜7¯.8Dt¸Ü */
- $"FCFA B14E BD14 730B DAA0 4B18 1B4D 81E7" /* üú±N½.s.Ú K..Mç */
- $"B8A8 26E7 EFB0 8272 4619 2A00 0000 0000" /* ¸¨&çï°‚rF.*..... */
- $"0000 0000 0000 060D CD91 05BE 3A07 80DE" /* ........Í‘.¾:.€Þ */
- $"29D6 2680 7867 5359 9411 F430 48D9 A22D" /* )Ö&€xgSY”.ô0HÙ¢- */
- $"DF74 0855 C0C4 C5AA D3F4 FC40 5815 C5FC" /* ßt.UÀÄŪÓôü@X.Åü */
- $"B741 3001 FF7F FDC6 00B8 F1BA FEC9 B662" /* ·A0.ÿ.ýÆ.¸ñºþɶb */
- $"4973 2EE9 5029 E237 296D D4A4 04DE 4DB9" /* Is.éP)â7)mÔ¤.ÞM¹ */
- $"5305 FD42 9A82 6842 EF09 9DA2 201D C6EF" /* S.ýBš‚hBïÆ¢ .Æï */
- $"4078 4FC3 038C B201 A1C0 0791 7B09 CF18" /* @xOÃ.Œ².¡À.‘{ÆÏ. */
- $"D61B DABD 0409 372B F69D 3CF8 E2E1 31A1" /* Ö.Ú½.Æ7+ö<øâá1¡ */
- $"023B B0FD 60B3 3933 16F2 C716 9259 82F8" /* .;°ý`³93.òÇ.’Y‚ø */
- $"77BB 3A47 46D2 D998 7AA1 01E1 DF78 8000" /* w»:GFÒÙ˜z¡.áßx€. */
- $"0000 0001 D8FD 4FB2 C620 0000 005A CD78" /* ....ØýO²Æ ...ZÍx */
- $"B755 53CD E910 3B50 96A8 4000 0000 0003" /* ·USÍé.;P–¨@..... */
- $"FD6F 5DD1 31D8 A087 6BC5 09F3 E81E B49F" /* ýo]Ñ1Ø ‡kÅÆóè.´Ÿ */
- $"5A88 0DB9 2492 4924 9234 EE49 0E46 EE5B" /* Zˆ.¹$’I$’4îI.Fî[ */
- $"8D2A E866 7AD0 1F3C 936D 50EF 6EF5 FDE7" /* *èfzÐ.<“mPïnõýç */
- $"BFFE 6EFF 82AD 0EDF 556D B01D C573 CA68" /* ¿þnÿ‚­.ßUm°.ÅsÊh */
- $"985A F307 82C5 D933 4C26 B9EE EEF7 D4C6" /* ˜Zó.‚ÅÙ3L&¹îî÷ÔÆ */
- $"BFB5 4130 F610 4AFE 602E 3723 0C95 0000" /* ¿µA0ö.Jþ`.7#.•.. */
- $"0000 0000 0000 0000 0002 7F7E DE44 DDEB" /* ...........~ÞDÝë */
- $"B8B1 0AB8 BA80 7F79 D59C 851A 0244 B8D1" /* ¸±Â¸º€.yÕœ…..D¸Ñ */
- $"6B92 AB1A 4997 5556 C0C7 5935 05AD B380" /* k’«.I—UVÀÇY5.­³€ */
- $"318D A387 1E5F 1523 0170 B5DB D9FA 0E80" /* 1£‡._.#.pµÛÙú.€ */
- $"7342 6634 1E36 FB10 615A 1862 FF53 1545" /* sBf4.6û.aZ.bÿS.E */
- $"C795 B42C 8282 534C 3AFD D370 7621 820E" /* Ç•´,‚‚SL:ýÓpv!‚. */
- $"9EDA AF3A 476B 3537 E327 52DE 4A99 73D1" /* žÚ¯:Gk57ã'RÞJ™sÑ */
- $"0718 7C16 82D5 99A5 32DD 0E83 9C4F 60F8" /* ..|.‚Õ™¥2Ý.ƒœO`ø */
- $"0743 325D 2056 84FF 06BC C6BB 338C 64CF" /* .C2] V„ÿ.¼Æ»3ŒdÏ */
- $"B7B9 C4C7 9800 E4DA EE0A 6636 DEE8 B8F8" /* ·¹Äǘ.äÚîÂf6Þè¸ø */
- $"739E 1EBD 408C C620 9790 A337 E987 2E54" /* sž.½@ŒÆ —£7é‡.T */
- $"DD4A E501 C0BF 44E6 E8EF ACCF 028F 253C" /* ÝJå.À¿Dæèï¬Ï.%< */
- $"F466 FA92 BEE6 A066 F4B6 5B41 CA80 3567" /* ôfú’¾æ fô¶[AÊ€5g */
- $"A079 E31D CEE9 CD64 0AED 265D E591 B98C" /*  yã.ÎéÍdÂí&]呹Œ */
- $"DF22 C203 3C43 E1D8 5D64 CA99 E6C7 EF30" /* ß"Â.<CáØ]dÊ™æÇï0 */
- $"68AF F4C9 97D5 F961 48CF 954C 2832 33A3" /* h¯ôÉ—ÕùaHÏ•L(23£ */
- $"0088 1417 0D84 DDE1 23FA C81D 487D C9AB" /* .ˆ...„Ýá#úÈ.H}É« */
- $"F239 ABB4 24E0 6694 291C 885C 23CE F212" /* ò9«´$àf”).ˆ\#Îò. */
- $"29F4 5656 7DD1 182A 2C11 AAEF 7534 24EE" /* )ôVV}Ñ.*,.ªïu4$î */
- $"9886 347F 28AD 6952 0A82 E9A4 6AA9 9390" /* ˜†4.(­iR‚é¤j©“ */
- $"06A8 EF47 527A EDF2 894B 5234 A900 82B1" /* .¨ïGRzíò‰KR4©.‚± */
- $"724D 791B 676C BC97 B3A5 94F7 137E FE8D" /* rMy.gl¼—³¥”÷.~þ */
- $"50F5 C1EE 0C5B 1F3D CEF4 DD64 709C 095B" /* PõÁî.[.=ÎôÝdpœÆ[ */
- $"A51A B239 3EC3 C9BA 39EC DBE2 FB9A 3C6F" /* ¥.²9>Ãɺ9ìÛâûš<o */
- $"BBC4 DE3E C5AF 0043 DC2D AE64 C0A7 2039" /* »ÄÞ>ů.CÜ-®dÀ§ 9 */
- $"A6C9 6079 72D6 0BC7 C501 A3A4 5EF4 A060" /* ¦É`yrÖ.ÇÅ.£¤^ô ` */
- $"C46E FCB9 1958 AD83 1176 0776 81C2 13C2" /* Änü¹.X­ƒ.v.vÂ. */
- $"DF08 4A76 137F DC5C 4867 0493 EE96 8373" /* ß.Jv..Ü\Hg.“î–ƒs */
- $"4644 13A4 F789 39FF 813B D226 575A 5A18" /* FD.¤÷‰9ÿ;Ò&WZZ. */
- $"3AF5 4B88 2747 3D47 681F 9670 0069 DD02" /* :õKˆ'G=Gh.–p.iÝ. */
- $"4252 ADB0 D6FB F1F1 1432 C24B D920 7290" /* BR­°Öûññ.2ÂKÙ r */
- $"3709 3D60 15D9 0C49 23EC 77F8 F791 F132" /* 7Æ=`.Ù.I#ìwø÷‘ñ2 */
- $"046E 0D05 9AFA 210A 9992 29D9 7AA6 F18E" /* .n..šú!™’)Ùz¦ñŽ */
- $"E245 75E0 018F BCEB 8D1B C2D0 083E 985F" /* âEuà.¼ë.ÂÐ.>˜_ */
- $"B791 554D F5F5 AD71 E064 75E6 1F3A D463" /* ·‘UMõõ­qàduæ.:Ôc */
- $"9A59 0A43 3457 BD7C 44A7 5C5E 9D19 C5D8" /* šYÂC4W½|D§\^.ÅØ */
- $"5880 C2CC 5DF0 2964 C0FD ABA1 004B 008D" /* X€ÂÌ]ð)dÀý«¡.K. */
- $"5205 7F2E 0843 E484 2D37 9C34 2425 7AFF" /* R....Cä„-7œ4$%zÿ */
- $"7021 D907 B6E1 F5E5 02C3 F3DD 44C8 2252" /* p!Ù.¶áõå.ÃóÝDÈ"R */
- $"0649 3C1A 1A80 449A 64D1 1720 76D6 4987" /* .I<..€DšdÑ. vÖI‡ */
- $"B4B1 E749 E899 BF69 5B35 F925 2EE6 6CE6" /* ´±çI虿i[5ù%.ælæ */
- $"B4FD CEB3 54C0 7C9D 4380 F93B 5701 F274" /* ´ýγTÀ|C€ù;W.òt */
- $"C4F3 CC20 F972 1FD1 56B3 911D 2995 5FC9" /* ÄóÌ ùr.ÑV³‘.)•_É */
- $"1F35 BAE0 9AC7 3082 1372 C1D5 4B23 D79E" /* .5ºàšÇ0‚.rÁÕK#מ */
- $"EF63 A93F 8E74 26FB AC68 CDBE BD3E 9720" /* ïc©?Žt&û¬h;½>— */
- $"DF71 956D 5D26 559E 2795 2F1B F798 7821" /* ßq•m]&Už'•/.÷˜x! */
- $"F3CB 1E6F 2351 11BD 0EFF 19B2 40A2 1C7F" /* óË.o#Q.½.ÿ.²@¢.. */
- $"267D D302 F6AE 5410 1E96 40DC 386E CB7B" /* &}Ó.ö®T..–@Ü8nË{ */
- $"7EA3 5CF7 46BA 8758 D0EE 12B3 34DF 46FE" /* ~£\÷Fº‡XÐî.³4ßFþ */
- $"517B E0F8 7E28 83A5 E93A C06D 7C3F 254B" /* Q{àø~(ƒ¥é:Àm|?%K */
- $"53DF 91ED F6AB FD0A 53A0 5257 F9B8 E8B7" /* Sß‘íö«ýÂS RWù¸è· */
- $"5A14 6036 C6DA E3FE C29D 799F 8B43 46D6" /* Z.`6ÆÚãþÂyŸ‹CFÖ */
- $"94DF 1954 073C 7C30 40F4 A00D 93D4 AADF" /* ”ß.T.<|0@ô .“ﻧ */
- $"4839 EF36 F92A 3758 97CE 955A 3521 3CB5" /* H9ï6ù*7X—ΕZ5!<µ */
- $"8269 30A7 2A93 6A40 07BE DCC3 50B6 C86B" /* ‚i0§*“j@.¾ÜÃP¶Èk */
- $"CE9A AF28 3B80 4FE6 873C DB8E A29C 15DC" /* Κ¯(;€Oæ‡<ÛŽ¢œ.Ü */
- $"81A8 F841 4F77 6237 7267 55C4 1289 2DA1" /* ¨øAOwb7rgUÄ.‰-¡ */
- $"8392 424A 398F 9FA7 8DBE 2CC6 44E9 A005" /* ƒ’BJ9Ÿ§¾,ÆDé . */
- $"0E57 6638 ADDD 9F15 D32E 13A9 F752 67BA" /* .Wf8­ÝŸ.Ó..©÷Rgº */
- $"9F1D 753C 0023 2BC1 2C48 19AF FF28 66E6" /* Ÿ.u<.#+Á,H.¯ÿ(fæ */
- $"0A05 1D62 536F C372 7DEC 5069 B44D AFD4" /* Â..bSoÃr}ìPi´M¯Ô */
- $"BE3C 9C16 161E 95B4 89E7 B034 4524 E373" /* ¾<œ...•´‰ç°4E$ãs */
- $"D4A2 2F82 F1BB 8F20 7861 0F95 7CDF C184" /* Ô¢/‚ñ» xa.•|ßÁ„ */
- $"5B65 6015 001B F6BD 5D52 D4BC 3A42 FD56" /* [e`...ö½]RÔ¼:BýV */
- $"D48F 3358 7432 09BD FF19 625D 3A11 13DA" /* Ô3Xt2ƽÿ.b]:..Ú */
- $"F222 12E8 5A1B 12BF 9B3B A234 A367 8FB6" /* ò".èZ..¿›;¢4£g¶ */
- $"4BF2 EE99 DB11 5D13 7021 71B4 2280 A1BC" /* Kòî™Û.].p!q´"€¡¼ */
- $"2AEF ECB5 D7EC 047C 0860 9676 78B1 CA76" /* *ïìµ×ì.|.`–vx±Êv */
- $"9AFB C995 D4EB 900A AD98 6423 E572 B68C" /* šûÉ•Ôë­˜d#år¶Œ */
- $"A271 A30B D157 8E95 8250 29BB 0323 E26C" /* ¢q£.ÑWŽ•‚P)».#âl */
- $"9223 91C7 0CD4 F0B0 442E 1BD3 1473 C699" /* ’#‘Ç.Ôð°D..Ó.sÆ™ */
- $"2D1C 8791 C699 920E 72C0 0D3E F6E9 9E2B" /* -.‡‘Æ™’.rÀ.>öéž+ */
- $"60B6 A87F 6CBE 146C 1224 90FC BF7B C6A9" /* `¶¨.l¾.l.$ü¿{Æ© */
- $"090E 3EAD C89D 5065 414B 3A1C F271 9327" /* Æ.>­ÈPeAK:.òq“' */
- $"D490 CD2B FBB3 BEFF 768D 4601 635B A746" /* ÔÍ+û³¾ÿvF.c[§F */
- $"8A4B 0981 8B8F EA85 D255 2113 8792 CC76" /* ŠKÆ‹ê…ÒU!.‡’Ìv */
- $"DE84 B950 C5F4 A4C1 D4EF 7D52 CC74 CCEE" /* Þ„¹PÅô¤ÁÔï}RÌtÌî */
- $"B40E B94F 9467 15CA 1DE0 3557 BF09 D787" /* ´.¹O”g.Ê.à5W¿Æ×‡ */
- $"ED66 345A E153 B4DC EF7C 2952 3161 5A99" /* íf4ZáS´Üï|)R1aZ™ */
- $"A193 D5EB 40F5 1300 65FA 8DFD 621A AE94" /* ¡“Õë@õ..eúýb.®” */
- $"30CD 6D25 A0FC 942E 37AC 52C8 CEAD 2D1F" /* 0Ím% ü”.7¬RÈέ-. */
- $"87D5 D078 F173 F5AD 7A56 DD1B 10C3 F9BF" /* ‡ÕÐxñsõ­zVÝ..Ãù¿ */
- $"69C1 9E6B E021 A0C7 84BF D87A 8AA8 327C" /* iÁžkà! Ç„¿ØzЍ2| */
- $"7D48 0D97 E584 FF7F AE07 2001 BF6C 2691" /* }H.—å„ÿ.®. .¿l&‘ */
- $"3032 E118 8741 42AD 7709 3086 8488 F9D3" /* 02á.‡AB­wÆ0†„ˆùÓ */
- $"0353 D79E 2E21 8F21 46CC 005C DA8A 0229" /* .Sמ.!!FÌ.\ÚŠ.) */
- $"A56B A72A C69E FCF7 7558 5D72 0050 2BDE" /* ¥k§*Æžü÷uX]r.P+Þ */
- $"0F36 E4F0 C744 89FC 37F0 7ECA F488 FE8C" /* .6äðÇD‰ü7ð~ÊôˆþŒ */
- $"1B6B 0158 B34D 1EA6 9B1F 154E FF79 01D4" /* .k.X³M.¦›..Nÿy.Ô */
- $"725F D9CF D9BF CCFF 439D 8F5C A92D D20D" /* r_ÙÏÙ¿ÌÿC\©-Ò. */
- $"0613 88F8 5C1C B6BD 07B9 9078 151D 8353" /* ..ˆø\.¶½.¹x..ƒS */
- $"0E68 8495 D521 92D8 E92D CF9B 10E6 ABDC" /* .h„•Õ!’Øé-Ï›.æ«Ü */
- $"53D9 DFB2 F2AF F964 14E3 74D6 3D64 01E2" /* SÙß²ò¯ùd.ãtÖ=d.â */
- $"FAFB 2D0B D303 DCF7 7718 E6CF 30DB 3FAE" /* úû-.Ó.Ü÷w.æÏ0Û?® */
- $"2873 3339 54A3 1E48 04D2 FDF2 E863 6201" /* (s39T£.H.Òýòècb. */
- $"01D1 182C 4C2A D85D AE26 DE15 9796 494C" /* .Ñ.,L*Ø]®&Þ.—–IL */
- $"82EA B4C0 2D3C 3D3E 1732 2ACA AC27 B7DB" /* ‚ê´À-<=>.2*ʬ'·Û */
- $"5CED 6F9D 3EDB FF04 5E83 BE60 1636 AE2C" /* \ío>Ûÿ.^ƒ¾`.6®, */
- $"754D 2928 7128 ACFD 15E8 C1A0 30A5 1063" /* uM)(q(¬ý.èÁ 0¥.c */
- $"1E6F 10F7 A946 B9B4 D921 5DB3 113F 332E" /* .o.÷©F¹´Ù!]³.?3. */
- $"61B8 AB3D 2F87 E081 C9D9 32B7 1060 785A" /* a¸«=/‡àÉÙ2·.`xZ */
- $"EFDD F472 0283 E235 4D42 E903 A06B 51CB" /* ïÝôr.ƒâ5MBé. kQË */
- $"39DC A412 A492 918E 235E F57C E4CE 4E0F" /* 9ܤ.¤’‘Ž#^õ|äÎN. */
- $"6BE6 7036 FA8A 7B2C 21FE 60B1 6FCA 7654" /* kæp6úŠ{,!þ`±oÊvT */
- $"C9FD DCDF E497 B2A6 D6D5 87ED 9D3B 5B86" /* ÉýÜßä—²¦ÖÕ‡í;[† */
- $"DA51 6B5B AE3E 520B 1DB3 5A6B 2B4D A777" /* ÚQk[®>R..³Zk+M§w */
- $"4F13 A04C 7D4F 819B 1FEB 086D 5F34 6643" /* O. L}O›.ë.m_4fC */
- $"0208 693A D70C 55B2 7A07 BC27 3A41 B739" /* ..i:×.U²z.¼':A·9 */
- $"C1F5 7425 07D5 D74C 1F56 F680 F1C4 B0CB" /* Áõt%.Õ×L.Vö€ñÄ°Ë */
- $"F3E0 DE80 53FC 256D EFD0 6B64 028C EC70" /* óàÞ€Sü%mïÐkd.Œìp */
- $"4973 06D4 242C DAAA 8373 DFAC B0C9 14A1" /* Is.Ô$,Úªƒs߬°É.¡ */
- $"BFBC 0BB4 E250 919E 3D2B B388 3A89 FB02" /* ¿¼.´âP‘ž=+³ˆ:‰û. */
- $"9796 86E6 20F8 C26C 8120 349C 757A 6875" /* —–†æ øÂl 4œuzhu */
- $"F63E AE68 84C3 03A3 6F64 F9EE F892 2CF8" /* ö>®h„Ã.£odùîø’,ø */
- $"61C1 B13A E941 0D67 DA36 4C05 9565 DC85" /* aÁ±:éA.gÚ6L.•eÜ… */
- $"D7F8 6EB9 D903 D428 F59A 3EBF C73E 5E95" /* ×øn¹Ù.Ô(õš>¿Ç>^• */
- $"764D 15FB 98F2 BECE 0FC8 EA3C 4E51 E1DD" /* vM.û˜ò¾Î.Èê<NQáÝ */
- $"5253 CE7A 2D16 8527 AF8E 9A17 757A A42F" /* RSÎz-.…'¯Žš.uz¤/ */
- $"6CA9 6BB3 7787 D84F 8E20 EA1F FB2D 15E3" /* l©k³w‡ØOŽ ê.û-.ã */
- $"0D2C 45A8 8C80 7DA1 89DB 5F46 F3FB 2871" /* .,E¨Œ€}¡‰Û_Fóû(q */
- $"539E 8CCA 5C03 EF20 B6B5 4956 EB82 172C" /* SžŒÊ\.ï ¶µIVë‚., */
- $"AB28 0D6D 4DF9 1F61 6F8D 61FE E962 778D" /* «(.mMù.aoaþébw */
- $"0C8E EC55 3BDC EC81 C9D1 E7D5 A811 C69A" /* .ŽìU;ÜìÉÑçÕ¨.Æš */
- $"6186 BC2C 75B4 DD3D C207 1151 4C3B 4175" /* a†¼,u´Ý=Â..QL;Au */
- $"942E 2ACF D3C7 7122 9D89 31B3 0918 EDC0" /* ”.*ÏÓÇq"‰1³Æ.íÀ */
- $"9D45 75D8 DE61 5036 6D9F 3373 4827 7ADE" /* EuØÞaP6mŸ3sH'zÞ */
- $"1BD1 16E8 8905 37D4 D811 1077 B359 0FF6" /* .Ñ.è‰.7ÔØ..w³Y.ö */
- $"0460 F360 20A5 B532 3418 142A B432 C2E9" /* .`ó` ¥µ24..*´2Âé */
- $"A0D6 DB04 317D 28F3 C893 AAE3 19B1 5742" /*  ÖÛ.1}(óÈ“ªã.±WB */
- $"7BF6 615C 0EAC F35E 0CD4 B142 A289 5458" /* {öa\.¬ó^.Ô±B¢‰TX */
- $"D699 1584 46FF 7174 758F B1F8 F540 F427" /* Ö™.„Fÿqtu±øõ@ô' */
- $"A496 8795 E66B 3DDC FB80 D0B8 9411 7240" /* ¤–‡•æk=Üû€Ð¸”.r@ */
- $"0374 54DC B2CA C982 BD5E FD06 4B02 5E8D" /* .tTܲÊÉ‚½^ý.K.^ */
- $"A958 79AA 5BE6 B5A2 76C3 7C23 0D45 6768" /* ©Xyª[æµ¢vÃ|#.Egh */
- $"D726 8259 FD2E E5CE 9B70 0600 22E7 82A3" /* ×&‚Yý.åΛp.."ç‚£ */
- $"8E14 9626 C4EC EED9 E7D8 13C9 623F 3DEB" /* Ž.–&ÄìîÙçØ.Éb?=ë */
- $"357B E617 A43A C9D4 328A C30A FF45 71BA" /* 5{æ.¤:ÉÔ2ŠÃÂÿEqº */
- $"1F8B 3945 8E06 0CF0 4749 0840 6F5A EDDB" /* .‹9EŽ..ðGI.@oZíÛ */
- $"29AC E877 27BD 6C8C A131 8A1C 9228 0FC5" /* )¬èw'½lŒ¡1Š.’(.Å */
- $"A029 D1A1 324D EFCE EB3F 2B92 150D FB8C" /*  )Ñ¡2MïÎë?+’..ûŒ */
- $"5399 1ABD D375 08BF 8F3F E788 684D 3064" /* S™.½Óu.¿?çˆhM0d */
- $"70B4 A733 4AB6 239A DC03 724F C8B8 F1BB" /* p´§3J¶#šÜ.rOȸñ» */
- $"8F1F A795 FF18 8256 0050 FF74 EDF1 3D05" /* .§•ÿ.‚V.Pÿtíñ=. */
- $"6CB0 E566 9272 E493 C085 3D06 3116 4ECE" /* l°åf’rä“À…=.1.NÎ */
- $"402D 329F 4BBB 2598 A7CF BEE1 333D 9019" /* @-2ŸK»%˜§Ï¾á3=. */
- $"61BB 1A29 2616 E907 2CD6 F64C 456F 9881" /* a».)&.é.,ÖöLEo˜ */
- $"725B 5C38 A40D 60D3 6B4F FDF1 87D7 4786" /* r[\8¤.`ÓkOýñ‡×G† */
- $"29BF CAEB 223A 044D 0F61 FDE6 0A3E 7727" /* )¿Êë":.M.aýæÂ>w' */
- $"DDEE 0A95 231F 04AC B6EF D134 C09D 1540" /* Ýî•#..¬¶ïÑ4À.@ */
- $"0E94 57E2 8418 C208 1F26 7396 96A0 D08F" /* .”Wâ„.Â..&s–– Ð */
- $"0CC0 40C8 C596 39BA 0CAE A6ED F8E8 7D6B" /* .À@ÈÅ–9º.®¦íøè}k */
- $"A76C 391B 6113 555F 62E0 6E14 5D27 E7BC" /* §l9.a.U_bàn.]'ç¼ */
- $"EDB7 D038 DED2 7BEE FC9D 6211 241E 0795" /* í·Ð8ÞÒ{îüb.$..• */
- $"9CDE 1607 B4C7 828E 24D2 4E9F FCA0 36EA" /* œÞ..´Ç‚Ž$ÒNŸü 6ê */
- $"004C C960 1680 01CE 7FF6 A201 EDAB 1ADF" /* .LÉ`.€.Î.ö¢.í«.ß */
- $"80D8 4524 390C 23DD EA8E 062C 5DDB 3C57" /* €ØE$9.#ÝêŽ.,]Û<W */
- $"BAEC 18E5 1ECE 91D7 A40E 08ED 23EA 55B6" /* ºì.å.Αפ..í#êU¶ */
- $"AA2C F48A 7B0E 8CAE 90DD 5840 41FF 7F4C" /* ª,ôŠ{.Œ®ÝX@Aÿ.L */
- $"47AD E774 87C4 9AB1 9CAD E633 DECD 3E36" /* G­çt‡Äš±œ­æ3ÞÍ>6 */
- $"00C2 0E05 134F 4802 3846 3575 1902 676D" /* .Â...OH.8F5u..gm */
- $"1006 D8AE 0D5F 1934 78F6 0721 F3C4 1000" /* ..Ø®._.4xö.!óÄ.. */
- $"8991 FA85 45B5 37A9 5A0C 54EE 014B 297B" /* ‰‘ú…Eµ7©Z.Tî.K){ */
- $"52F2 5ADD 7422 C97B EAA9 D291 45A7 A44A" /* RòZÝt"É{ê©Ò‘E§¤J */
- $"40FE AE73 5086 C7D3 85FD D734 67F2 8909" /* @þ®sP†ÇÓ…ý×4gò‰Æ */
- $"506D 36D8 2361 990C 802F A59E B603 9C94" /* Pm6Ø#a™.€/¥ž¶.œ” */
- $"F7BD AED9 8518 8651 DFFE 3D0E E920 E874" /* ÷½®Ù….†Qßþ=.é èt */
- $"FEB0 EE3C 3242 C249 4704 EEA8 9EFA DC61" /* þ°î<2BÂIG.úÜa */
- $"49C6 929E 2A9D 51CD FE0A FF02 3DDB 01EC" /* IÆ’ž*QÍþÂÿ.=Û.ì */
- $"80E8 630A B0C8 C9FC 7693 C60B 07E8 5D2F" /* €èc°ÈÉüv“Æ..è]/ */
- $"B97A 9F04 444E C836 DD68 FF12 EC9C 7E4F" /* ¹zŸ.DNÈ6Ýhÿ.ìœ~O */
- $"3CE9 83A8 191A 1E61 05F8 90FF 67E8 011A" /* <部...a.øÿgè.. */
- $"71EA 3EE8 AFBD 6328 ED84 9807 788D F3BC" /* qê>诽c(턘.xó¼ */
- $"2FA0 A210 7FFF 1D02 2519 4EC7 2A80 7FD0" /* / ¢..ÿ..%.NÇ*€.Ð */
- $"2064 A8F4 CC78 5EC8 88AF F1AB 868B 9F8D" /* d¨ôÌx^Ȉ¯ñ«†‹Ÿ */
- $"883E 3FDA D188 FBB7 3AFC 0C72 E01A CEF3" /* ˆ>?Úшû·:ü.rà.Îó */
- $"21E1 1718 4FDB 9A43 3767 424A 639B DFFE" /* !á..OÛšC7gBJc›ßþ */
- $"CA5F 7BA9 8F82 3EA6 6D4E 6986 6945 80DE" /* Ê_{©‚>¦mNi†iE€Þ */
- $"8274 4927 166A 6062 DF1D 0A72 F23B FA5A" /* ‚tI'.j`bß.Ârò;úZ */
- $"4DE4 5D19 54FC 488B 5237 FF5F 7B81 62C5" /* Mä].TüH‹R7ÿ_{bÅ */
- $"F6B7 B580 3016 11B6 22CF 63B8 428A D39A" /* ö·µ€0..¶"Ïc¸BŠÓš */
- $"5AC3 80FF 7310 8386 FF54 F361 304F 3BB5" /* ZÀÿs.ƒ†ÿTóa0O;µ */
- $"A7EB 0419 7DFB 6E56 20A8 3670 9018 9CB3" /* §ë..}ûnV ¨6p.œ³ */
- $"4B35 7082 32A7 E917 9CF8 FF7F FF80 0A6C" /* K5p‚2§é.œøÿ.ÿ€Âl */
- $"A48C 447E 3ECF 411D 89E4 F923 373B DCBE" /* ¤ŒD~>ÏA.‰äù#7;ܾ */
- $"2CE8 6580 0F87 1A23 1D93 62AE 48EF DEB8" /* ,èe€.‡.#.“b®HïÞ¸ */
- $"5DE8 DB68 1CA3 8D4B D3FE A476 7B3D ACAA" /* ]èÛh.£KÓþ¤v{=¬ª */
- $"284F 83EB 428F A201 D122 CB1A CCB2 C1FE" /* (OƒëB¢.Ñ"Ë.̲Áþ */
- $"367F 60D3 155D 8C00 22D8 ED33 D56B 1DE2" /* 6.`Ó.]Œ."Øí3Õk.â */
- $"98B0 A4A9 E041 2BF1 AA58 E78D 47E5 929F" /* ˜°¤©àA+ñªXçGå’Ÿ */
- $"85DA 699E C45A 0064 B931 CF2B 4169 44F0" /* …ÚižÄZ.d¹1Ï+AiDð */
- $"4B4F 083B 3D7C B2B2 D87B 785E 91A8 C614" /* KO.;=|²²Ø{x^‘¨Æ. */
- $"6EE6 A63C C8A7 B9E3 839D E245 4128 3BF9" /* næ¦<ȧ¹ãƒâEA(;ù */
- $"98CD 0C23 72EB E3A9 D21F 1BC2 4E13 274B" /* ˜Í.#rëã©Ò..ÂN.'K */
- $"19C8 CB39 5E7A D218 FBDB 0C42 51A1 1203" /* .ÈË9^zÒ.ûÛ.BQ¡.. */
- $"C0EB CDC2 9249 E461 1DE4 3DB6 FDFE 1334" /* ÀëÍÂ’Iäa.ä=¶ýþ.4 */
- $"1952 8231 CD71 A170 C55B 1FD0 6706 57F0" /* .R‚1Íq¡pÅ[.Ðg.Wð */
- $"282D 09A2 0893 A5BA 0314 43DD 32AF 3478" /* (-Æ¢.“¥º..CÝ2¯4x */
- $"EF6C 15F0 55C9 6A47 ECFE 3F3F 4DB4 5ED8" /* ïl.ðUÉjGìþ??M´^Ø */
- $"EFF8 8CA5 71F9 6669 078C 550C 943A 7046" /* ïøŒ¥qùfi.ŒU.”:pF */
- $"C031 6CE2 4681 4177 2913 CFE7 D857 C62A" /* À1lâFAw).ÏçØWÆ* */
- $"4652 88E2 8830 DF42 9C3D 2D76 E710 A8F1" /* FRˆâˆ0ßBœ=-vç.¨ñ */
- $"3626 45F2 55CC 008C EAB8 B891 A5F3 1AD2" /* 6&EòUÌ.Œê¸¸‘¥ó.Ò */
- $"AB11 6C48 3F18 40C0 51F0 DB88 0BD1 168C" /* «.lH?.@ÀQðÛˆ.Ñ.Œ */
- $"2E54 2DA6 CC60 BB05 4700 2C4E 179B 271B" /* .T-¦Ì`».G.,N.›'. */
- $"688C 1EE9 4D9A C781 8108 296B FE4F 028A" /* hŒ.éMšÇ.)kþO.Š */
- $"63D6 6EDF 6FEB FC17 BDFE 7A70 B48E D94E" /* cÖnßoëü.½þzp´ŽÙN */
- $"D985 3384 1BD2 B4C9 5213 B0D1 041B 876C" /* Ù…3„.Ò´ÉR.°Ñ..‡l */
- $"131C 4A9C 947B A79C A466 9779 E7C9 D2E1" /* ..Jœ”{§œ¤f—yçÉÒá */
- $"4E9F 0509 30E0 1115 E5C7 CAED 197B 818A" /* NŸ.Æ0à..åÇÊí.{Š */
- $"324D 8F8E ED44 BF44 5340 D647 1776 B983" /* 2MŽíD¿DS@ÖG.v¹ƒ */
- $"6D8C 88B1 6976 F7EB AFDB 6638 CAD3 F275" /* mŒˆ±iv÷ë¯Ûf8ÊÓòu */
- $"D93A 6CD3 9D6E C617 3969 D8E5 3059 947B" /* Ù:lÓnÆ.9iØå0Y”{ */
- $"6AFA 0E9B A19C 24C9 E1DC 089D 3545 89E4" /* jú.›¡œ$ÉáÜ.5E‰ä */
- $"E860 FB54 068C B464 EE9B 66B7 F267 34CF" /* è`ûT.Œ´dî›f·òg4Ï */
- $"1276 C6B2 47E6 8284 300B D1A9 1409 0C93" /* .vƲGæ‚„0.Ñ©.Æ.“ */
- $"E36A 8095 409A 7352 FF7A 0F50 A5E2 E678" /* ãj€•@šsRÿz.P¥âæx */
- $"C195 0898 E51E EB15 8D7A E918 29A6 D5CE" /* Á•.˜å.ë.zé.)¦ÕÎ */
- $"4DBC 978B 2CAA 9BA7 8727 EA1C 1C7A 6CC2" /* M¼—‹,ª›§‡'ê..zl */
- $"D172 DDF5 4BD4 9C69 607B 609F AEC8 FD84" /* ÑrÝõKÔœi`{`Ÿ®Èý„ */
- $"1DDA A076 C7E1 A7B1 F86C BC7E 1720 EB83" /* .Ú vÇá§±øl¼~. ëƒ */
- $"095B F1C8 7239 10FD 6A26 D10E 534B E257" /* Æ[ñÈr9.ýj&Ñ.SKâW */
- $"B691 5D92 6949 E7D8 7470 AA8C 421F F945" /* ¶‘]’iIçØtpªŒB.ùE */
- $"99F6 9492 B806 E264 47B0 4EF5 6206 734E" /* ™ö”’¸.âdG°Nõb.sN */
- $"944B 102F A688 23A4 EAB0 CCEA 0017 0156" /* ”K./¦ˆ#¤ê°Ìê...V */
- $"A8C9 2A3F FF49 4137 E23A 09D0 97BB 0E5F" /* ¨É*?ÿIA7â:ÆÐ—»._ */
- $"E2A2 2247 4980 6A20 B443 3E0B 0465 B9EF" /* â¢"GI€j ´C>..e¹ï */
- $"C490 B954 3AEA ABB7 3D53 111D 8897 551C" /* ĹT:ê«·=S..ˆ—U. */
- $"B865 1EA2 33F2 AD50 D488 1D6D 9733 27F3" /* ¸e.¢3ò­PÔˆ.m—3'ó */
- $"78AC C946 FB3C 4D2F 6580 1B3A 3368 3D54" /* x¬ÉFû<M/e€.:3h=T */
- $"55DF 6B52 1A54 9010 C4D2 12C8 D497 9CDB" /* UßkR.T.ÄÒ.ÈÔ—œÛ */
- $"173A 0609 66F1 C6C0 FD02 47A0 B2E2 D2E6" /* .:.ÆfñÆÀý.G ²âÒæ */
- $"096E F870 0776 4898 2F2B 84CF BA83 D656" /* Ænøp.vH˜/+„ϺƒÖV */
- $"7F77 79FF 0F1D 2A6E 03C6 4D0F E3EF D23B" /* .wyÿ..*n.ÆM.ãïÒ; */
- $"6F82 5F72 6701 98DF 5A63 DA7B 0ABC 75E2" /* o‚_rg.˜ßZcÚ{¼uâ */
- $"382D 0D93 3C8C 5308 19EA EF8D 7922 CD36" /* 8-.“<ŒS..êïy"Í6 */
- $"ED21 EB4D 3D77 5A8A 1380 E238 22E5 84AA" /* í!ëM=wZŠ.€â8"優 */
- $"4488 7DCE 91A0 CB4B 67FA 74AF EA3D 1C8E" /* Dˆ}Α ËKgút¯ê=.Ž */
- $"9279 611D FD02 D08F D952 B05D 2C11 B545" /* ’ya.ý.ÐÙR°],.µE */
- $"5F17 FF5C 1E9C 6A77 DA2F A474 B20C F5A2" /* _.ÿ\.œjwÚ/¤t².õ¢ */
- $"B2D4 176F 97E4 CE9E B576 C3E0 0F3D ECB9" /* ²Ô.o—äΞµvÃà.=ì¹ */
- $"7B35 DEBB 5ABA 9738 36F8 524D 74D8 08FF" /* {5Þ»Zº—86øRMtØ.ÿ */
- $"29A7 9B08 5B43 7C17 FB53 234E 4806 B0C3" /* )§›.[C|.ûS#NH.°Ã */
- $"AF3A FF38 CCAF FEAA C60F D103 32AC 7D7F" /* ¯:ÿ8̯þªÆ.Ñ.2¬}. */
- $"D2B8 51C1 7B7D 56FD 7CFB D2B5 C55B 7C7D" /* Ò¸QÁ{}Vý|ûÒµÅ[|} */
- $"7D30 10C2 4181 3358 5DD6 4625 4FFC EA30" /* }0.ÂA3X]ÖF%Oüê0 */
- $"3402 194F 6D0B 53D8 3C64 54AE E8DA 7874" /* 4..Om.SØ<dT®èÚxt */
- $"7FF1 DE25 3147 0AF0 D5B6 7BF7 88DD 5199" /* .ñÞ%1GÂðÕ¶{÷ˆÝQ™ */
- $"611E 526D B6DB 6DB6 DB69 9C6E 7A40 821D" /* a.Rm¶Ûm¶Ûiœnz@‚. */
- $"4416 6952 04BB 9C0A F19B 2C62 E698 A4F5" /* D.iR.»œÂñ›,b昤õ */
- $"9B83 3C59 8217 0000 0034 8080 DB92 4924" /* ›ƒ<Y‚....4€€Û’I$ */
- $"9249 247D 32D0 9B20 73FF 7E44 A49A 44BB" /* ’I$}2Л sÿ~D¤šD» */
- $"EB45 3E31 A4A0 C0CC BBC0 B29E 7771 4FDE" /* ëE>1¤ ÀÌ»À²žwqOÞ */
- $"1679 23F1 DE12 5574 68E3 60A1 9C00 CBEC" /* .y#ñÞ.Uthã`¡œ.Ëì */
- $"9C44 9009 0000 08DE 28C3 2776 AAA2 829A" /* œDÆ...Þ(Ã'vª¢‚š */
- $"05E0 47E9 0001 48A9 672C 0775 EE58 F075" /* .àGé..H©g,.uîXðu */
- $"7458 B48A 5455 DB33 3524 BE73 1D7C E223" /* tX´ŠTUÛ35$¾s.|â# */
- $"4EC4 732C EC4B 128D 341C 790C 00A2 1309" /* NÄs,ìK.4.y..¢.Æ */
- $"2D0B 5EA7 B07B C82C 976B 68C2 642A F095" /* -.^§°{È,—khÂd*ð• */
- $"A1C4 010E C94E D8A9 34BB FD3E 2B2F 92EC" /* ¡Ä..ÉNØ©4»ý>+/’ì */
- $"30E1 A7B3 040B C920 3FFF 7FA1 317B 90F7" /* 0á§³..É ?ÿ.¡1{÷ */
- $"C744 40B8 8325 4036 82FB 0C6C D800 19C4" /* ÇD@¸ƒ%@6‚û.lØ..Ä */
- $"2631 C4B8 3160 8649 2492 4924 9248 A747" /* &1ĸ1`†I$’I$’H§G */
- $"3D41 A17D 23A6 9AC7 9000 0000 0000 0000" /* =A¡}#¦šÇ....... */
- $"0000 0019 1A70 8823 BB21 7C62 4556 F257" /* .....pˆ#»!|bEVòW */
- $"62C0 CF0B 72EE F37E 64EC 43C2 AE04 9F58" /* bÀÏ.rîó~dìC®.ŸX */
- $"94DC E128 91EC BAA2 DADD 57A7 D5F7 1972" /* ”Üá(‘캢ÚÝW§Õ÷.r */
- $"7543 9A9A 0DB3 C3FD 42E0 19A3 8F45 7FDF" /* uCšš.³ÃýBà.£E.ß */
- $"CEB1 A7E5 8A09 5B4A F9E6 294B C5DC 80C9" /* α§åŠÆ[Jùæ)KÅÜ€É */
- $"9AEE 0729 374F 04FD 79D6 7170 D940 14F0" /* šî.)7O.ýyÖqpÙ@.ð */
- $"830F 0B71 50E7 3C76 97AF 0F71 A32D DC5A" /* ƒ..qPç<v—¯.q£-ÜZ */
- $"28A9 FE90 6CC0 9484 30D1 FCCD 4991 0758" /* (©þlÀ”„0ÑüÍI‘.X */
- $"BE36 B1DE 3A2E B6F8 2756 C568 2A7F D038" /* ¾6±Þ:.¶ø'VÅh*.Ð8 */
- $"2397 6E8F 32E0 C1AC 3736 32A3 C18E 13C4" /* #—n2àÁ¬762£ÁŽ.Ä */
- $"D298 8703 F9AF E24B A630 0627 6E63 ED70" /* Ò˜‡.ù¯âK¦0.'ncíp */
- $"0662 A833 6515 7225 C79D 8C1F 7410 45BF" /* .b¨3e.r%ÇŒ.t.E¿ */
- $"5019 F088 7C6C 43FC AE88 B794 5847 505F" /* P.ðˆ|lCü®ˆ·”XGP_ */
- $"2B73 6E58 E20E 18A2 01B4 DF7F F5BD D4BC" /* +snXâ..¢.´ß.õ½Ô¼ */
- $"B259 706B 754E 9740 BBF2 54FC FCB8 B293" /* ²YpkuN—@»òTüü¸²“ */
- $"4CEA 3670 D04B 8C42 B7C2 314D 1F53 956B" /* Lê6pÐKŒB·Â1M.S•k */
- $"CB14 9D05 8288 E7F0 D4FF 70AE EFB7 A10B" /* Ë..‚ˆçðÔÿp®ï·¡. */
- $"EDDE 3CFE 1B9D 7DBA 7B7D BD13 DF6F 45B8" /* íÞ<þ.}º{}½.ßoE¸ */
- $"FE1A 077D B444 FAB6 46FB 75FC E8AB DECC" /* þ..}´Dú¶Fûuüè«ÞÌ */
- $"AF0D 6C8A C695 8734 8A7A 5A21 F65D 05F6" /* ¯.lŠÆ•‡4ŠzZ!ö].ö */
- $"A417 27AC 998E 3646 07A8 0055 19DC B524" /* ¤.'¬™Ž6F.¨.U.ܵ$ */
- $"D2F2 842C DF9F BECA C26B C9C9 D0FD CA3B" /* Òò„,ߟ¾ÊÂkÉÉÐýÊ; */
- $"DB1B 3F81 F6A7 4465 001E 5552 4D0D 3BF3" /* Û.?ö§De..URM.;ó */
- $"0140 A2E9 7D63 8456 F9C7 665D F7FC 2DBF" /* .@¢é}c„VùÇf]÷ü-¿ */
- $"1B41 0667 7939 1B16 4997 5584 3CFE 81B9" /* .A.gy9..I—U„<þ¹ */
- $"C4A8 B346 EC6D E726 2560 5CB8 8B84 7699" /* Ĩ³Fìmç&%`\¸‹„v™ */
- $"3999 2CA0 91D9 A05A C96C 660C 267B 74A0" /* 9™, ‘Ù ZÉlf.&{t  */
- $"B935 73EB D464 D860 2694 7584 A4D4 DC52" /* ¹5sëÔdØ`&”u„¤ÔÜR */
- $"D136 D49A 1BEA 53F5 AE2F C19E 44E9 BA0A" /* Ñ6Ôš.êSõ®/ÁžDéºÂ */
- $"5D83 6587 7792 3DCB 449A B33E 4632 A395" /* ]ƒe‡w’=ËDš³>F2£• */
- $"57A3 0EC0 B3A3 969D 9DF0 6ACC 859F FF7F" /* W£.À³£–ðjÌ…Ÿÿ. */
- $"FF27 DAA0 AF8E 216C E5D8 874A 530F 555E" /* ÿ'Ú ¯Ž!l娇JS.U^ */
- $"AF3F E231 5BAF F7B6 8E73 5742 2717 4031" /* ¯?â1[¯÷¶ŽsWB'.@1 */
- $"175D 5FDA F402 B756 AEAE 7E7E BFEE CE68" /* .]_Úô.·V®®~~¿îÎh */
- $"7878 870D 01C2 C2A4 61D5 64E3 E195 B914" /* xx‡..¤aÕdãᕹ. */
- $"A45F FF52 DC14 F5E9 E037 65E3 5477 62A5" /* ¤_ÿRÜ.õéà7eãTwb¥ */
- $"3EEC CA32 6558 5965 8B6E 3F13 9DB2 1361" /* >ìÊ2eXYe‹n?.².a */
- $"8426 9FD7 B329 4E75 FF1D 9B78 9735 4B1B" /* „&Ÿ×³)Nuÿ.›x—5K. */
- $"D80E 1781 192F 6777 8F94 F6A2 5016 726D" /* Ø.../gw”ö¢P.rm */
- $"1E0D D2CB 6F87 B3C6 09A2 1FE3 915E 8943" /* ..ÒËo‡³ÆÆ¢.ã‘^‰C */
- $"FE6C 6743 4733 D5BC A9DD 5338 C9E1 AF50" /* þlgCG3Õ¼©ÝS8Éá¯P */
- $"3634 C26C 0C1F 94E7 50B2 4310 DD62 4F09" /* 64Âl..”çP²C.ÝbOÆ */
- $"ABCD 7821 8B7B 7B87 2EEA 25A1 9D3C 55CC" /* «Íx!‹{{‡.ê%¡<UÌ */
- $"0644 1B14 3456 2E32 C013 815C 66C7 0526" /* .D..4V.2À.\fÇ.& */
- $"E24D CE15 B8FB 5D8B 0506 E30A 1D6A E2ED" /* âMÎ.¸û]‹..ãÂ.jâí */
- $"6145 D124 0EC9 1FAB 4E50 06C2 9DA5 8F6C" /* aEÑ$.É.«NP.Â¥l */
- $"C072 D11E BFEE DFE6 F6C7 12F4 E89C 35B7" /* ÀrÑ.¿îßæöÇ.ôèœ5· */
- $"097E 2E25 393F CEA3 03C6 D3C7 DED5 3882" /* Æ~.%9?Σ.ÆÓÇÞÕ8‚ */
- $"ED26 A3FD 9130 95B5 F3FA D31A 691F 8E09" /* í&£ý‘0•µóúÓ.i.ŽÆ */
- $"BFA8 7D7B 85BD B179 5C20 2855 1268 F9AF" /* ¿¨}{…½±y\ (U.hù¯ */
- $"553D 939E 6FC6 C67E 4611 F88C BBD4 773C" /* U=“žoÆÆ~F.øŒ»Ôw< */
- $"5F16 D598 D5C5 E649 B66E FD8D A2D7 9807" /* _.Õ˜ÕÅæI¶ný¢×˜. */
- $"EDA2 4621 2CF5 DDE3 C078 6455 1C29 3A07" /* í¢F!,õÝãÀxdU.):. */
- $"E992 C5DE 8D33 041B 83C6 56F6 7C95 168E" /* é’ÅÞ3..ƒÆVö|•.Ž */
- $"6127 40D2 DE11 CFF2 3379 DC22 20E3 5E1B" /* a'@ÒÞ.Ïò3yÜ" ã^. */
- $"DE83 DBB5 5B8A 8572 3DF2 2890 DC56 BE6E" /* ÞƒÛµ[Š…r=ò(ÜV¾n */
- $"D15F 9396 ECD4 725F 2E18 7616 394A 64C3" /* Ñ_“–ìÔr_..v.9Jdà */
- $"FDAA E6F2 3D6D 46BC B270 5B8F ACB4 9CAE" /* ýªæò=mF¼²p[¬´œ® */
- $"0D0D 3F29 6A02 1E92 347A E406 A52D 111A" /* ..?)j..’4zä.¥-.. */
- $"2E79 0340 1D82 C861 0C40 1963 3397 A4FD" /* .y.@.‚Èa.@.c3—¤ý */
- $"A998 0B63 E30A 7AA3 A5BC 8A8E 9CD0 4795" /* ©˜.cãÂz£¥¼ŠŽœÐG• */
- $"7538 7FB2 EC9A 952C CE29 C80F 369C 4E8D" /* u8.²ìš•,Î)È.6œN */
- $"8000 1C55 D5F3 E2AD 812E 4FAA AC2C D9BB" /* €..UÕóâ­.Oª¬,Ù» */
- $"F4CD 5568 5643 826F 3A38 91BD 6F70 92D3" /* ôÍUhVC‚o:8‘½op’Ó */
- $"23EC DB91 0FC4 C3BB 7542 023B 85F0 36C3" /* #ìÛ‘.ÄûuB.;…ð6à */
- $"8BF6 F6F8 4E77 EEE5 851F 219A CF99 7D9E" /* ‹ööøNwîå….!šÏ™}ž */
- $"856D A687 BC63 8E39 0407 B007 D184 10BD" /* …m¦‡¼cŽ9..°.Ñ„.½ */
- $"D9EF ACB1 B75A 46FA F95E 42DF 377B E2F7" /* Ùבּ·ZFúù^Bß7{â÷ */
- $"BEF2 357A 861C F486 B3F7 57E1 D39B 095B" /* ¾ò5z†.ô†³÷WáÓ›Æ[ */
- $"40C0 925C 0CA1 7885 CFEA 48B7 33E9 E8DE" /* @À’\.¡x…ÏêH·3éèÞ */
- $"D178 1E15 91D1 F6C5 BC87 CB7E CCC6 DEDE" /* Ñx..‘Ñöż‡Ë~ÌÆÞÞ */
- $"B017 A4C1 0B0F DD17 660E CB97 C098 C773" /* °.¤Á..Ý.f.Ë—À˜Çs */
- $"8A0A F4DB 59BD A218 055E 5348 05D8 B304" /* ŠÂôÛY½¢..^SH.س. */
- $"9F23 E1B1 0754 6DA2 FF33 34CB 2B12 7114" /* Ÿ#á±.Tm¢ÿ34Ë+.q. */
- $"62D2 4CA8 8091 CD34 8467 2752 B77A AA5B" /* bÒL¨€‘Í4„g'R·zª[ */
- $"15FC 2E56 7A29 9351 B6A4 AEE5 B56D 354D" /* .ü.Vz)“Q¶¤®åµm5M */
- $"3ED2 FA71 25E9 F887 B187 BADB B11B 2E01" /* >Òúq%éø‡±‡ºÛ±... */
- $"93B3 4206 45ED 7238 3F80 1441 50CA CCBA" /* “³B.Eír8?€.APÊ̺ */
- $"EF59 3BC5 4236 2ABF 9150 7335 49C5 0216" /* ïY;ÅB6*¿‘Ps5IÅ.. */
- $"F97B D5A5 1EF5 A69D 8B34 C25B 73E1 DA52" /* ù{Õ¥.õ¦‹4Â[sáÚR */
- $"79E5 9EB1 9CB1 0952 B3F5 E221 D426 4759" /* yåž±œ±ÆR³õâ!Ô&GY */
- $"D5CF 2D18 CC2A 270A 859D F10C 8108 52FF" /* ÕÏ-.Ì*'Â…ñ..Rÿ */
- $"2A7D D39E EFFD 568C 2DB3 7BD5 62D0 2403" /* *}ÓžïýVŒ-³{ÕbÐ$. */
- $"69D1 A4B6 2D24 E485 973D F6A5 E6DC 1DB5" /* iѤ¶-$ä…—=ö¥æÜ.µ */
- $"BF0B E185 5592 E3A0 6046 E050 5151 9546" /* ¿.á…U’ã `FàPQQ•F */
- $"17F7 0CF6 222F 17E0 40E5 3EF5 74EE BAB6" /* .÷.ö"/.à@å>õt */
- $"55BD 76C1 DD80 39C8 BAE0 37B8 398A B370" /* U½vÁÝ€9Ⱥà7¸9гp */
- $"D400 0C29 5DC9 94FF 069B 36E2 CD79 195F" /* Ô..)]É”ÿ.›6âÍy._ */
- $"5B9B 1237 1F18 C560 C901 F9A4 184B 7570" /* [›.7..Å`É.ù¤.Kup */
- $"433E 75BE 0297 C641 7D9B 7092 8D64 96F5" /* C>u¾.—ÆA}›p’d–õ */
- $"D70C 9B66 71D3 09B1 F635 0FC3 0B49 7D6E" /* ×.›fqÓÆ±ö5.Ã.I}n */
- $"660C 8E1D 0257 672B 97EE C2A5 7B84 729E" /* f.Ž..Wg+—îÂ¥{„rž */
- $"6516 585E 354F 2E22 88A7 A515 B945 3745" /* e.X^5O."ˆ§¥.¹E7E */
- $"F6A5 5CB2 E212 10AD AB6F 07F5 FDA3 09EB" /* ö¥\²â..­«o.õý£Æë */
- $"A053 313B 9A8E 757D E132 D483 DC78 0882" /*  S1;šŽu}á2ÔƒÜx.‚ */
- $"A63C 95E0 036C 4626 F66B 5F6C 39A1 9401" /* ¦<•à.lF&ök_l9¡”. */
- $"7276 4DCE 4487 7D8C 12A3 B713 9139 AC0A" /* rvMÎD‡}Œ.£·.‘9¬Â */
- $"18AD 4DFD 2A3D 69E7 E76E 593C 8DAB FD56" /* .­Mý*=iççnY<«ýV */
- $"F959 BA6B FBA3 2853 D610 4DB0 7A30 3A09" /* ùYºkû£(SÖ.M°z0:Æ */
- $"916B DFF7 B3B4 F8D3 9619 0FD9 8FBC FC6B" /* ‘kß÷³´øÓ–..Ù¼ük */
- $"D73D ABD2 4C41 6AD0 6584 AF19 3074 AF6E" /* ×=«ÒLAjÐe„¯.0t¯n */
- $"369C BEB1 76D5 D311 6172 F157 D522 DDED" /* 6œ¾±vÕÓ.arñWÕ"Ýí */
- $"D4ED 0230 0BB5 E881 0E6B 9C4F 111F 4F6E" /* Ôí.0.µè.kœO..On */
- $"7CAD 4745 7BBF DA70 A9C4 051E FDEA 206C" /* |­GE{¿Úp©Ä..ýê l */
- $"9983 0E2D 4A4A A4DE 82E9 DAAF 5748 37AE" /* ™ƒ.-JJ¤Þ‚éÚ¯WH7® */
- $"4046 DCCB 0D1A 80DA 1804 20E2 F7CF AD69" /* @FÜË..€Ú.. â÷Ï­i */
- $"F9D8 5106 D02D 16E9 4437 9560 B618 1126" /* ùØQ.Ð-.éD7•`¶..& */
- $"95A2 4B23 89C4 78EE 898E D80C 8E49 5201" /* •¢K#‰ÄxØ.ŽIR. */
- $"2095 ABAF 9CA5 0F8E CB22 00D4 4289 59B3" /* •«¯œ¥.ŽË".ÔB‰Y³ */
- $"1835 1395 8AE5 3A88 7185 E7DD 57F3 4CE4" /* .5.•Šå:ˆq…çÝWóLä */
- $"1465 C878 6B72 7146 2AF1 F053 5B31 7697" /* .eÈxkrqF*ñðS[1v— */
- $"7300 A777 3919 099E BD1C 79C3 24C4 A355" /* s.§w9.Æž½.yÃ$Ä£U */
- $"0C88 C727 1831 D498 E513 47A5 F25F DDBE" /* .ˆÇ'.1Ô˜å.G¥ò_ݾ */
- $"46E7 40B5 EBCC 080F 6915 3FDF EDB9 A9B1" /* Fç@µëÌ..i.?ßí¹©± */
- $"39ED D794 60E1 A5A2 0EEC 7A09 46BF 201E" /* 9í×”`ᥢ.ìzÆF¿ . */
- $"311F EEEE 88EF C6C1 C10D E238 50C9 7F01" /* 1.îîˆïÆÁÁ.â8PÉ.. */
- $"DFF1 17BA D8F4 0017 47E7 75F2 4D82 679E" /* ßñ.ºØô..GçuòM‚gž */
- $"6867 60A4 6222 77B9 319B 186D FCB3 168A" /* hg`¤b"w¹1›.mü³.Š */
- $"EAF3 C227 1082 D7ED 2C70 E619 8676 0186" /* êóÂ'.‚×í,pæ.†v.† */
- $"8C23 5DE5 D4A0 61CB CDE4 AED5 E008 6F3C" /* Œ#]åÔ aËÍä®Õà.o< */
- $"D894 AC14 6FEC 5D4C C2FF 3A6C 512F E475" /* Ø”¬.oì]LÂÿ:lQ/äu */
- $"FCB8 DFA4 EB46 2DF4 E133 5858 364B 54E1" /* ü¸ß¤ëF-ôá3XX6KTá */
- $"A6E1 5D0C 157E D987 DF95 B1FB 3723 4F2F" /* ¦á]..~هߕ±û7#O/ */
- $"C9BF C6D4 D979 412E D0EB B285 8DFF 7CAC" /* É¿ÆÔÙyA.Ðë²…ÿ|¬ */
- $"F1BF 1825 8B89 9992 3848 C666 4184 4906" /* ñ¿.%‹‰™’8HÆfA„I. */
- $"0D61 6B58 9355 A5D9 C940 B6F2 6918 82E1" /* .akX“U¥ÙÉ@¶òi.‚á */
- $"FF7D 4F5F FE94 5208 650B B780 0D2B DD4F" /* ÿ}O_þ”R.e.·€.+ÝO */
- $"5874 3627 2353 6328 06B9 908C 6C95 D898" /* Xt6'#Sc(.¹Œl•ؘ */
- $"8C24 1D0F 641B 7763 CFBE E88A BB05 8639" /* Œ$..d.wcϾ芻.†9 */
- $"D91C 4A38 3A3F 75C6 61BD BFED CA10 2A73" /* Ù.J8:?uÆa½¿íÊ.*s */
- $"E3C5 E85C BF5B 0346 2105 4286 300D D812" /* ãÅè\¿[.F!.B†0.Ø. */
- $"8BE4 DAE4 292B A765 338E 7E42 50F1 8046" /* ‹äÚä)+§e3Ž~BPñ€F */
- $"3FDC 1A85 4616 61E5 7321 18D9 5AB9 8903" /* ?Ü.…F.aås!.ÙZ¹‰. */
- $"90BD 6F89 E7D0 35D1 0AA3 BBAE 3CF8 A7B7" /* ½o‰çÐ5Ñ£»®<ø§· */
- $"73C8 8B94 B409 16EC 60A6 E819 BCA7 BA66" /* sÈ‹”´Æ.ì`¦è.¼§ºf */
- $"2245 524C 718C 635D E4F7 ACA0 02C3 E0A7" /* "ERLqŒc]ä÷¬ .Ãà§ */
- $"B542 0FF5 7029 FF4D 1D88 E3B3 D657 802B" /* µB.õp)ÿM.ˆã³ÖW€+ */
- $"8068 9BD4 B17F 9A6B CC1C 4B53 246F 81E5" /* €h›Ô±.škÌ.KS$oå */
- $"9168 48EC 4B44 3FFF 7B8B 5777 5677 134E" /* ‘hHìKD?ÿ{‹WwVw.N */
- $"1B8E 8C91 429F CE85 86EF 62B4 71AF EAE7" /* .ŽŒ‘BŸÎ…†ïb´q¯êç */
- $"E333 7BD3 2825 7230 C950 0000 1B8D 8BA6" /* ã3{Ó(%r0ÉP...‹¦ */
- $"04C1 56DC 30F0 619E DD6C D196 C91E 1ED4" /* .ÁVÜ0ðažÝlÑ–É..Ô */
- $"1285 94A8 F775 05A9 3440 78FF 7E52 8833" /* .…”¨÷u.©4@xÿ~Rˆ3 */
- $"E8A1 A4E4 4580 38DD ADE1 3BD5 AD19 74E6" /* 衤äE€8Ý­á;Õ­.tæ */
- $"EEA1 B4B1 0B0B 9BE9 08EC DB78 E6AA 37E5" /* î¡´±..›é.ìÛxæª7å */
- $"AD06 72A6 51FC 0004 4737 BF1A 89FF 7E11" /* ­.r¦Qü..G7¿.‰ÿ~. */
- $"0A68 EAD7 BDA5 4D5B 2C8D 0C7A 952E 2190" /* Âhê×½¥M[,.z•.! */
- $"8451 1B38 CEFD 2835 5ADD BDA2 01C2 A3D6" /* „Q.8Îý(5Zݽ¢.壅 */
- $"6046 4BD8 41DF D8B6 D9B1 1F96 5FF8 CC56" /* `FKØAߨ¶Ù±.–_øÌV */
- $"A63B 6E14 5035 26D6 946D 1F59 4D17 5507" /* ¦;n.P5&Ö”m.YM.U. */
- $"85F7 2DAF A737 4E30 9097 2E2E DAF8 37D1" /* …÷-¯§7N0—..Úø7Ñ */
- $"D987 4E59 ABFD CDF3 AAC3 30D1 8616 FAB3" /* Ù‡NY«ýÍóªÃ0ц.ú³ */
- $"2914 92AA 6913 C36F 66DA 4B0B 18FE DD55" /* ).’ªi.ÃofÚK..þÝU */
- $"1D2A 3F00 D80C 2423 D923 95C6 E11D 0069" /* .*?.Ø.$#Ù#•Æá..i */
- $"B5C9 0803 0907 B950 13DF 48EC F794 3D36" /* µÉ..Æ.¹P.ßHì÷”=6 */
- $"5249 2492 4924 9249 2489 9EF6 DC36 9A6B" /* RI$’I$’I$‰žöÜ6šk */
- $"1751 415E A37F 47EC A4EA 67AC A222 733C" /* .QA^£.Gì¤êg¬¢"s< */
- $"467D 1FFE C727 E6AA 6E99 C584 A87E DFFF" /* F}.þÇ'æªn™Å„¨~ßÿ */
- $"7FC3 7592 8204 71A2 6088 C38B 6E65 868E" /* .Ãu’‚.q¢`ˆÃ‹ne†Ž */
- $"5A3F FF7F F919 4069 CF10 A302 5125 525C" /* Z?ÿ.ù.@iÏ.£.Q%R\ */
- $"A443 88AF 4104 7807 1410 84BA E955 76E8" /* ¤Cˆ¯A.x...„ºéUvè */
- $"5F35 B612 A668 5694 9249 2492 4924 9249" /* _5¶.¦hV”’I$’I$’I */
- $"2492 4924 4C25 1941 A4EB 1996 7A28 19C1" /* $’I$L%.A¤ë.–z(.Á */
- $"A1B0 01D7 ACB2 3F83 42DC D154 27C9 F11F" /* ¡°.׬²?ƒBÜÑT'Éñ. */
- $"FC46 90B1 89C4 F78A 4C6F 5C2A 833D 8425" /* üF±‰Ä÷ŠLo\*ƒ=„% */
- $"D837 CA14 E4C7 7F8A 9833 99B7 E589 1376" /* Ø7Ê.äÇ.Š˜3™·å‰.v */
- $"C867 FF1D 200A 4C9B 624E 68E3 11AE C8AF" /* Ègÿ. ÂL›bNhã.®È¯ */
- $"1723 C741 CEAC 16CE C548 72FF 15CD 3E67" /* .#ÇAά.ÎÅHrÿ.Í>g */
- $"AF2C 323F 0FD0 6752 4973 55BD CC10 05B4" /* ¯,2?.ÐgRIsU½Ì..´ */
- $"AB3F 9302 00C3 EE70 1BA4 B650 FAB2 5821" /* «?“..Ãîp.¤¶Pú²X! */
- $"3856 3872 1B02 7D70 F1F9 0B28 A9DC CAE7" /* 8V8r..}pñù.(©ÜÊç */
- $"D9E7 6252 A768 A7DE 0FB1 FCB1 F54B 98C4" /* ÙçbR§h§Þ.±ü±õK˜Ä */
- $"7B6E 5E24 BC53 F945 741F 66A0 A51E EE5A" /* {n^$¼SùEt.f ¥.îZ */
- $"2A0D B951 4EEE A88B 4F2F C326 F326 1D12" /* *.¹QNO/Ã&ó&.. */
- $"524A 9E48 CC53 44EF C54F 1737 8505 46CF" /* RJžHÌSDïÅO.7….FÏ */
- $"351E 4354 05C7 C832 2A7D 8899 D009 E617" /* 5.CT.ÇÈ2*}ˆ™ÐÆæ. */
- $"0334 305D 9497 D845 E6D3 2CD2 178F 1316" /* .40]”—ØEæÓ,Ò... */
- $"65AD 239E 2ED5 ECCB 402A E728 09B5 E847" /* e­#ž.ÕìË@*ç(ƵèG */
- $"65BD 3F31 CAC5 F9D8 6606 B8AF 4F84 89FE" /* e½?1ÊÅùØf.¸¯O„‰þ */
- $"9004 4730 30BC E58F 5FB3 38CF 36B9 38FC" /* .G00¼å_³8Ï6¹8ü */
- $"FB9D 07EA D13F 9DB9 7185 0E88 0E3B 06E5" /* û.êÑ?¹q….ˆ.;.å */
- $"D476 CFCA 1587 3067 9257 B5DF 1E83 E7FF" /* ÔvÏÊ.‡0g’Wµß.ƒçÿ */
- $"7FFF 7FFF 0E68 E181 AC15 B980 2AFB 1D80" /* .ÿ.ÿ.há¬.¹€*û.€ */
- $"C5BB A88D E36A 4DC5 94CF 6DB2 0694 F977" /* Å»¨ãjMÅ”Ïm².”ùw */
- $"D708 02D1 F380 6773 016A CA84 3B1C 6A33" /* ×..Ñó€gs.jÊ„;.j3 */
- $"5AAC BA2D FEC5 7542 51FC 68D0 CDDD EA44" /* Z¬º-þÅuBQühÐÍÝêD */
- $"788E 2F96 D80C F159 FF45 3316 1494 A7F5" /* xŽ/–Ø.ñYÿE3..”§õ */
- $"98B4 FC39 0062 D59B 52A6 32CB F97C ABD6" /* ˜´ü9.bÕ›R¦2Ëù|«Ö */
- $"42AE AE46 6AA7 D986 0A4E DCDD 717E 8B7C" /* B®®Fj§Ù†ÂNÜÝq~‹| */
- $"8FB8 B396 65A6 83FF 6A4A A5C1 597F 70AF" /* ¸³–e¦ƒÿjJ¥ÁY.p¯ */
- $"DC96 E2EC 0C1D 7A00 3428 2C60 DE32 8DB8" /* Ü–âì..z.4(,`Þ2¸ */
- $"1604 C249 5E82 1F5B 6C23 E562 B2D4 754E" /* ..ÂI^‚.[l#åb²ÔuN */
- $"7F73 442A 25D3 C42A 6A6D 5D09 0E8C 2E67" /* .sD*%ÓÄ*jm]Æ.Œ.g */
- $"95EC 08FE B505 8B5A A4A8 0000 0000 0000" /* •ì.þµ.‹Z¤¨...... */
- $"0000 0000 6121 26B3 27C3 AEC0 FF52 2FEE" /* ....a!&³'îÀÿR/î */
- $"D4F3 92BB 06E2 ABE4 35DC A278 9084 B2F0" /* Ôó’».â«ä5Ü¢x„²ð */
- $"EE1A ADB2 F770 3D4E 120A FD01 B042 CD00" /* î.­²÷p=N.Âý.°BÍ. */
- $"B9C2 B661 40B0 E5FC DC59 59F0 61C5 53A7" /* ¹Â¶a@°åüÜYYðaÅS§ */
- $"7AC1 7EDC 77B7 1C84 0F9A E321 389C E693" /* zÁ~Üw·.„.šã!8œæ“ */
- $"AC98 5160 DDD0 C9A9 BE17 ED52 A10A 300C" /* ¬˜Q`ÝÐÉ©¾.íR¡Â0. */
- $"88ED BB5A 80DA C23B 1196 0C7C 6BA8 D4EA" /* ˆí»Z€ÚÂ;.–.|k¨Ôê */
- $"4FAB 08A9 EBE3 1CC9 6782 F6A9 85A4 1829" /* O«.©ëã.Ég‚ö©…¤.) */
- $"48BB D188 41E8 65BA 28BB 8AC1 8368 DC2F" /* H»ÑˆAèeº(»ŠÁƒhÜ/ */
- $"B2DE 61FE 95C0 BD88 C027 9CD9 3819 8A81" /* ²Þaþ•À½ˆÀ'œÙ8.Š */
- $"20FF 616C DEAE C6EA 15A3 D12F 764A B4E2" /* ÿalÞ®Æê.£Ñ/vJ´â */
- $"ECA3 AF32 36FF 29B0 E3CD 5046 527E 39B7" /* 죯26ÿ)°ãÍPFR~9· */
- $"921A ABF8 F0CB 7040 5FCD A182 4C57 986D" /* ’.«øðËp@_Í¡‚LW˜m */
- $"1115 DD94 687C 3663 7CFB 6C40 642D C8CA" /* ..Ý”h|6c|ûl@d-ÈÊ */
- $"1117 B5A9 8025 123D 9406 58F9 96B5 321E" /* ..µ©€%.=”.Xù–µ2. */
- $"7646 4BFD 48DE 0B9B DBEF B79F B6C7 031E" /* vFKýHÞ.›Ûï·Ÿ¶Ç.. */
- $"1D3B 1D18 B35D 2813 5601 3924 6AE1 FC21" /* .;..³](.V.9$jáü! */
- $"60B9 0B9F 6B4B AFB9 15D8 C57A 5345 7461" /* `¹.ŸkK¯¹.ØÅzSEta */
- $"0EF9 4B6B 88D1 7833 02DF 4FB8 DBEC 836A" /* .ùKkˆÑx3.ßO¸Ûìƒj */
- $"BEA7 3972 93C0 F973 37B5 C84F 1655 031C" /* ¾§9r“Àùs7µÈO.U.. */
- $"674D 741E 308E E3BA 6684 5BB0 4506 AB40" /* gMt.0Žãºf„[°E.«@ */
- $"14DE BFF2 9B38 4026 C5C2 3A44 FDFF 25CB" /* .Þ¿ò›8@&ÅÂ:Dýÿ%Ë */
- $"072E 1D99 62E3 22B8 DE8D 9CF1 79FA 1D38" /* ...™bã"¸Þœñyú.8 */
- $"8900 17CB A72B 8124 7EAF CF2F FC8D 34D6" /* ‰..˧+$~¯Ï/ü4Ö */
- $"E0AC 58ED 8BC1 0DAA 7964 FB91 BF08 EFA6" /* à¬Xí‹Á.ªydû‘¿.ï¦ */
- $"42FF 7FFF 7FE3 AF13 7C4B 1CF4 D643 3CD3" /* Bÿ.ÿ.ã¯.|K.ôÖC<Ó */
- $"5F1A 08BB 7C56 5CFB 6D27 04DE C66A 9AF1" /* _..»|V\ûm'.ÞÆjšñ */
- $"2053 D4B2 EE60 44FF 2A89 1FFC DFCC 57C1" /* SÔ²î`Dÿ*‰.üßÌWÁ */
- $"3800 1290 7854 7902 FF7A 9A36 D71E F8D1" /* 8..xTy.ÿzš6×.øÑ */
- $"D439 471B D02F 4A39 E5BC D25F FDF0 8B54" /* Ô9G.Ð/J9å¼Ò_ýð‹T */
- $"AE0A 3677 2625 B286 7DEC 8FF7 2457 2B25" /* ®Â6w&%²†}ì÷$W+% */
- $"C066 2A4E A605 EE16 7244 CCFD D3D3 FDA1" /* Àf*N¦.î.rDÌýÓÓý¡ */
- $"F3B8 76C3 1C5F 491C 0165 8735 D71D 19AD" /* ó¸vÃ._I..e‡5×..­ */
- $"9BB1 A40D E5BA 9D1C E34B B71C 9CF0 EC7A" /* ›±¤.åº.ãK·.œðìz */
- $"5E87 C4F0 A326 0913 9E2C 6517 50A3 E72B" /* ^‡Äð£&Æ.ž,e.P£ç+ */
- $"87FE D348 2E5D 0A00 0000 0000 0000 0000" /* ‡þÓH.]Â......... */
- $"0002 2C86 A73D 4030 2FE4 D32C 2B56 C74C" /* ..,†§=@0/äÓ,+VÇL */
- $"0869 A5C9 151A 69B9 9390 DA50 4411 8FFF" /* .i¥É..i¹“ÚPD.ÿ */
- $"4938 4E36 F9DD 09FB E4A0 C339 2431 ED8B" /* I8N6ùÝÆûä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FF4F E2A2 F01A C90F 02E3 51CD B477" /* #fÿOâ¢ð.É..ãQÍ´w */
- $"2230 690A B47C E28B 463C 2E88 7579 7943" /* "0i´|â‹F<.ˆuyyC */
- $"5055 6D0A EEC5 F3BF 2404 37D8 EFE1 71AC" /* PUmÂîÅó¿$.7Øïáq¬ */
- $"6AFE A3E4 A7EB 28BF BFFE 4373 E5FF 7E4A" /* jþ£ä§ë(¿¿þCsåÿ~J */
- $"2D5D 1ED3 6D78 1657 9914 A061 7958 972C" /* -].Ómx.W™. ayX—, */
- $"56FB D5B0 1FFD A18B 7A29 0C81 295B DF7C" /* VûÕ°.ý¡‹z).)[ß| */
- $"83E3 CD36 0E66 7E2B D8FA 3096 AA44 7F9B" /* ƒãÍ6.f~+Øú0–ªD.› */
- $"F0B9 EA48 8CC7 0FFF 7E1C F394 CC5B 6A25" /* ð¹êHŒÇ.ÿ~.ó”Ì[j% */
- $"FD4C CECC 630B 38B7 D621 F081 73EE 9D40" /* ýLÎÌc.8·Ö!ðsî@ */
- $"7FAD FADD 8111 6492 599E DD2C 3600 FF6C" /* .­úÝ.d’YžÝ,6.ÿl */
- $"5A8D B0B8 2AE7 668D C5A0 826B FA0D C5B1" /* Z°¸*çfÅ ‚kú.ű */
- $"6873 D749 B533 9627 C2F6 4922 63F7 8944" /* hs×Iµ3–'ÂöI"c÷‰D */
- $"15C5 A1F9 8539 A21A 1CEB 1C2D 7D1B 0516" /* .Å¡ù…9¢..ë.-}... */
- $"FD6C 5D4F 92A3 14D9 126F C5FC 4116 B499" /* ýl]O’£.Ù.oÅüA.´™ */
- $"D878 D889 9123 D3C8 4637 36E3 8644 6F0B" /* Øx؉‘#ÓÈF76ã†Do. */
- $"D2C6 A599 B793 1367 B548 23BD 8836 11E5" /* ÒÆ¥™·“.gµH#½ˆ6.å */
- $"C323 7AD5 0534 3D05 A4E6 70B3 0376 2B0C" /* Ã#zÕ.4=.¤æp³.v+. */
- $"A964 173B F0BC 2A52 7FE4 2A53 85C2 22B2" /* ©d.;ð¼*R.ä*S…Â"² */
- $"B83F 7185 FB4C 3769 5B3E 4A24 E7E1 D0FD" /* ¸?q…ûL7i[>J$çáÐý */
- $"9B17 8737 FE8B E4C7 9FC1 0E30 D904 D0C5" /* ›.‡7þ‹äÇŸÁ.0Ù.ÐÅ */
- $"D2F5 05E4 3CD6 5FA7 B9AF FB98 755E 0BAF" /* Òõ.ä<Ö_§¹¯û˜u^.¯ */
- $"E4EE 408D A8BE 5E58 07A6 059D 1B33 37F3" /* äî@¨¾^X.¦..37ó */
- $"8D14 871A 7FC6 43ED 6A6F 8F41 9681 095E" /* .‡..ÆCíjoA–Æ^ */
- $"EE46 5BA4 1E15 F5F2 3063 E524 A62A 7C7F" /* îF[¤..õò0cå$¦*|. */
- $"0E38 5D00 A378 8F6D 3861 2088 EDD7 AC24" /* .8].£xm8a ˆí׬$ */
- $"D3B6 B052 DE10 357D B65A 1414 4596 8E3D" /* Ó¶°RÞ.5}¶Z..E–Ž= */
- $"97E3 D838 9ACC 3C84 AF82 EA8D 8BD3 0180" /* —ãØ8šÌ<„¯‚ê‹Ó.€ */
- $"1582 0654 BB61 1047 ACA1 29D3 7CFA 00C8" /* .‚.T»a.G¬¡)Ó|ú.È */
- $"BABC 146B 250C 8D19 8A4E A8B3 50D6 B986" /* º¼.k%..ŠN¨³PÖ¹† */
- $"2AD6 CEFA 02D6 AE11 FF7C B0A2 E6E0 30E9" /* *ÖÎú.Ö®.ÿ|°¢æà0é */
- $"D904 4C03 3BC1 8B68 5892 30B8 7D69 C2D6" /* Ù.L.;Á‹hX’0¸}iÂÖ */
- $"A9F8 56A2 7417 1E31 186F 09A1 4C11 6DCA" /* ©øV¢t..1.oÆ¡L.mÊ */
- $"A62E 5FCC F59A CCE8 6A29 B0DF E2BC E8BF" /* ¦._ÌõšÌèj)°ßâ¼è¿ */
- $"92DF 70C1 8B09 21DF 1440 1684 4413 2A60" /* ’ßpÁ‹Æ!ß.@.„D.*` */
- $"E033 6D92 8573 E63C 2746 6F40 D8F0 D0C9" /* à3m’…sæ<'Fo@ØðÐÉ */
- $"10AF 85A2 CFBF 373B B250 85E4 C1D3 85D2" /* .¯…¢Ï¿7;²P…äÁÓ…Ò */
- $"E167 1222 DF4A 67D9 B3D6 55B4 B047 8675" /* ág."ßJgÙ³ÖU´°G†u */
- $"C803 6AE5 E5AE AF92 C4B7 591A A040 98AC" /* È.jå宯’Ä·Y. @˜¬ */
- $"4412 45F8 BBC8 6482 F7BD 81B2 98FE 9D0B" /* D.Eø»Èd‚÷½²˜þ. */
- $"DAB1 2959 952C 9115 3504 9A24 BBA4 A04C" /* Ú±)Y•,‘.5.š$»¤ L */
- $"4125 5810 54F5 C268 63C2 1DB9 11CF 85BB" /* A%X.TõÂhcÂ.¹.Ï…» */
- $"D941 F5A1 0239 DED3 856D BBE5 7CF3 49C3" /* ÙAõ¡.9ÞÓ…m»å|óIà */
- $"C9CF 1BD1 A953 F58A F9AF E704 E70E 43B7" /* ÉÏ.Ñ©SõŠù¯ç.ç.C· */
- $"2B51 BE14 4FF3 262C 914B 90AF F2A9 E060" /* +Q¾.Oó&,‘K¯ò©à` */
- $"6A24 6553 B776 C48D 19AD ECD3 2DD3 8ECF" /* j$eS·vÄ.­ìÓ-ÓŽÏ */
- $"9EC7 8A0D 97F4 3C69 6E56 0881 1136 C147" /* žÇŠ.—ô<inV..6ÁG */
- $"E7D3 6FE5 A0C6 D7DC BCB0 76AC C4F8 DD65" /* çÓoå Æ×ܼ°v¬ÄøÝe */
- $"A5F9 02BF 2BFD 9A2C 354D 24C2 E088 6B63" /* ¥ù.¿+ýš,5M$Âàˆkc */
- $"E514 C014 E8F4 F5C2 B529 74FB EC02 032B" /* å.À.èôõµ)tûì..+ */
- $"A54B 696E B602 7D58 4542 824D BD8C 40FA" /* ¥Kin¶.}XEB‚M½Œ@ú */
- $"F675 5CD4 71C9 058E 7062 0E1B 10CC 72A9" /* öu\ÔqÉ.Žpb...Ìr© */
- $"95B8 C5FD 7EAF 995C 62ED DDE4 6579 3181" /* •¸Åý~¯™\bíÝäey1 */
- $"8BA1 A02B 1559 F5BC E9C9 914D 8CEB D7D8" /* ‹¡ +.Yõ¼éÉ‘MŒëר */
- $"7D81 20C0 A609 18D2 B679 7C08 FB00 E4C6" /* } À¦Æ.Ò¶y|.û.äÆ */
- $"2797 518E 32CE 67CE 3C8E 6796 A832 F712" /* '—QŽ2ÎgÎ<Žg–¨2÷. */
- $"0037 059C 96CD 85A0 98E6 5D20 05F2 EC61" /* .7.œ–Í… ˜æ] .òìa */
- $"335D AFFF 14BC 3EF9 0779 7A53 BAA4 F47A" /* 3]¯ÿ.¼>ù.yzSº¤ôz */
- $"6926 DAD2 72F9 5D4B 1014 8BD5 A4FA 68EA" /* i&ÚÒrù]K..‹Õ¤úhê */
- $"D9F9 F684 BFD5 F2ED FB9E 4C18 91C3 FF17" /* Ùùö„¿ÕòíûžL.‘Ãÿ. */
- $"2D17 D99A DE29 FE6E 63A4 C901 8642 9357" /* -.ÙšÞ)þnc¤É.†B“W */
- $"3120 4386 1938 E7D2 572D 0C59 E3C9 7FED" /* 1 C†.8çÒW-.YãÉ.í */
- $"30FA E54A CEF8 A94C F92D AF19 76EA 3372" /* 0úåJÎø©Lù-¯.vê3r */
- $"B4E1 E7C5 8239 A4AC A247 4838 55E8 EB9B" /* ´áçÅ‚9¤¬¢GH8Uèë› */
- $"DE7D 94E9 DBD7 07FB D488 1672 E61D 9E4C" /* Þ}”éÛ×.ûÔˆ.ræ.žL */
- $"6DF2 97D5 4936 F89A 5CBC D37A 8C2C F7ED" /* mò—ÕI6øš\¼ÓzŒ,÷í */
- $"9755 19F2 0350 AB2E D851 F0B7 78B5 9770" /* —U.ò.P«.ØQð·xµ—p */
- $"4DF3 4212 9C9C CA3B 403A BA7B D497 9410" /* MóB.œœÊ;@:º{Ô—”. */
- $"04C6 288B 5058 5DC9 EB79 AB85 622C 9A55" /* .Æ(‹PX]Éëy«…b,šU */
- $"2DA7 C113 9315 7CAE D84E 6B50 4062 AE94" /* -§Á.“.|®ØNkP@b®” */
- $"8F5E 7969 4BA5 56B2 E881 8C02 ED3B 5259" /* ^yiK¥V²èŒ.í;RY */
- $"24CE C98A 4348 12B1 314F E3E3 B6A3 4E61" /* $ÎÉŠCH.±1Oãã¶£Na */
- $"A426 6350 E380 B0B5 DEFF 64CF 72D6 D4B9" /* ¤&cP〰µÞÿdÏrÖÔ¹ */
- $"907C 9BE0 7E4D 39F9 2BB7 C3DE D7C3 DCD8" /* |›à~M9ù+·ÃÞ×ÃÜØ */
- $"1F93 775F 0F44 DF0F A717 C3E9 D603 F269" /* .“w_.Dß.§.ÃéÖ.òi */
- $"FBE1 D36F 87B3 6F87 B280 E8AB DECC AF0D" /* ûáÓo‡³o‡²€è«Þ̯. */
- $"6C8A C695 8734 87EB A75F 5130 05EC 9BA8" /* lŠÆ•‡4‡ë§_Q0.웨 */
- $"78DB 85A2 680C 75A0 EDD1 4AA2 7E1B BAFF" /* xÛ…¢h.u íÑJ¢~.ºÿ */
- $"5AFC FD6C 3E36 A6D9 923A 2DCE 24BC 35EF" /* Züýl>6¦Ù’:-Î$¼5ï */
- $"27F4 8813 7CC4 0141 3CD9 9568 BFE6 BBB3" /* 'ôˆ.|Ä.A<Ù•h¿æ»³ */
- $"219B 0442 5227 3796 635D 0DE7 499A A701" /* !›.BR'7–c].çIš§. */
- $"7F74 FB13 F9DF E737 08AB 0A91 3D9E B77D" /* .tû.ùßç7.«Â‘=ž·} */
- $"E616 57BB 8BAF 7A0D 1B28 42E6 D653 6BD3" /* æ.W»‹¯z..(BæÖSkÓ */
- $"D7A8 9A2B 0905 6198 8809 E5D0 D0A4 F589" /* רš+Æ.a˜ˆÆåÐФõ‰ */
- $"3D04 8161 C4CB 7BC9 96E2 9DA4 1C59 C982" /* =.aÄË{É–â¤.YÉ‚ */
- $"4705 B1BE 1E05 E391 5E89 43FE 6C67 4342" /* G.±¾..ã‘^‰CþlgCB */
- $"636F 80C5 6A98 16E6 6B80 27C8 D0D9 B28C" /* co€Åj˜.æk€'ÈÐÙ²Œ */
- $"6FD4 E109 61AB 8FCB D4CB 19ED 2BE7 B510" /* oÔáÆa«ËÔË.í+çµ. */
- $"C0E8 5883 0642 92A1 6094 7E45 5D3F 819A" /* ÀèXƒ.B’¡`”~E]?š */
- $"4B6F AE8E ED0B 4B30 ABB1 2789 5C58 EEFD" /* Ko®Ží.K0«±'‰\Xîý */
- $"06C9 EF2B 2A12 1731 7581 4428 C72D 2501" /* .Éï+*..1uD(Ç-%. */
- $"2C14 0DA4 2C98 035F FEA8 51A2 0E61 4C50" /* ,..¤,˜._þ¨Q¢.aLP */
- $"4A65 60DE FA1C F36C 62D9 A3FA 93A6 4CAC" /* Je`Þú.ólbÙ£ú“¦L¬ */
- $"C1D0 079D 912F A133 724B 13CC AFF4 1382" /* ÁÐ.‘/¡3rK.̯ô.‚ */
- $"D61F 8AF2 A48B CCA6 5D66 4F61 E6BE 657B" /* Ö.Šò¤‹Ì¦]fOaæ¾e{ */
- $"7F5B 6F20 397A BBC2 3F23 86DF 2355 4A18" /* .[o 9z»Â?#†ß#UJ. */
- $"15DB CB3E 201F FF7C 4AC9 C764 B098 CA46" /* .ÛË> .ÿ|JÉÇd°˜ÊF */
- $"C2CF 44C6 42E7 D30A FD05 380F 6BD3 24C1" /* ÂÏDÆBçÓÂý.8.kÓ$Á */
- $"3998 C5C1 E7D5 0E2C 8D50 7FBB 7A11 6CB7" /* 9˜ÅÁçÕ.,P.»z.l· */
- $"B80F 5A84 44BE E746 C43C 6B5D F055 7A3B" /* ¸.Z„D¾çFÄ<k]ðUz; */
- $"77CB BFA9 2B73 06AF 9C8B AF37 F600 E568" /* wË¿©+s.¯œ‹¯7ö.åh */
- $"EE70 09D2 B0A7 C201 94D9 AC58 E9A2 9D53" /* îpÆÒ°§Â.”Ù¬Xé¢S */
- $"94C0 D1C9 E379 E453 E4C7 27C5 C3F8 1161" /* ”ÀÑÉãyäSäÇ'ÅÃø.a */
- $"D631 3F3C 0CFE 13A3 F6EB 3048 F049 CF11" /* Ö1?<.þ.£öë0HðIÏ. */
- $"5962 65AE 5D8E F911 A2E2 7787 6C78 F63C" /* Ybe®]Žù.¢âw‡lxö< */
- $"E24C ED5B F634 B2B9 9DDF 51B0 94B9 1ABF" /* âLí[ö4²¹ßQ°”¹.¿ */
- $"BE93 4236 35A6 613E 3D1B C8FD 0587 27C7" /* ¾“B65¦a>=.Èý.‡'Ç */
- $"F936 55E0 D0CE BF1A 50D8 51CE 6253 0293" /* ù6UàÐο.PØQÎbS.“ */
- $"1958 3FA2 BF6C 54A5 B158 4236 7F88 7DE4" /* .X?¢¿lT¥±XB6.ˆ}ä */
- $"C231 6D0B 62F1 2C6C 1A1D F8AA 0317 C52D" /* Â1m.bñ,l..øª..Å- */
- $"D9D5 0B61 312B A074 B2B8 1905 FCF9 A102" /* ÙÕ.a1+ t²¸..üù¡. */
- $"6188 616D 74E6 8232 245D 9C8A 4FD8 E2FD" /* aˆamtæ‚2$]œŠOØâý */
- $"0C6C 8F2E 5C82 5724 C542 3AE5 BA0A EE0B" /* .l.\‚W$ÅB:åºÂî. */
- $"2A14 BCDE 8005 4446 25B1 CF8A 6744 9F5C" /* *.¼Þ€.DF%±ÏŠgDŸ\ */
- $"9B09 6571 3003 9F52 A42A 7669 CCAA 7A75" /* ›Æeq0.ŸR¤*vi̪zu */
- $"F807 2530 7BA9 1474 F318 5A7B E64A 5DD7" /* ø.%0{©.tó.Z{æJ]× */
- $"A6F2 13B0 AFA5 7BF8 46DC CABF 4D80 CC26" /* ¦ò.°¯¥{øFÜÊ¿M€Ì& */
- $"5838 4016 3C05 4550 C62F 1504 5B79 0816" /* X8@.<.EPÆ/..[y.. */
- $"556C 8524 5DDA E914 92F1 3124 5C5B 3213" /* Ul…$]Úé.’ñ1$\[2. */
- $"7851 D9B8 EE79 46CF 3F06 1EAB 662A FD9E" /* xQÙ¸îyFÏ?..«f*ýž */
- $"E7D8 2E8C 938F 43FA B1B1 34B0 9207 34EC" /* çØ.Œ“Cú±±4°’.4ì */
- $"7A09 46BF 201E 311F EEEE 88EF C6C1 C10D" /* zÆF¿ .1.îîˆïÆÁÁ. */
- $"E238 50C9 7F01 DFF0 2170 EDD1 7471 8C14" /* â8PÉ..ßð!píÑtqŒ. */
- $"FB17 6678 A8B9 6611 9713 D8BB 8840 427C" /* û.fx¨¹f.—.Ø»ˆ@B| */
- $"8E5E 1608 D5E6 79B6 0BD7 3592 5D97 3864" /* Ž^..Õæy¶.×5’]—8d */
- $"71DF 6137 C0E6 2EB0 F71D 466C CFFF 50EF" /* qßa7Àæ.°÷.FlÏÿPï */
- $"FE99 2E4D 0DBB 537F 32F1 DECB D5D4 39DF" /* þ™.M.»S.2ñÞËÕÔ9ß */
- $"4FCC 2FC2 C399 8EB9 FC8B 2806 3FB7 F227" /* OÌ/ÂÃ™Ž¹ü‹(.?·ò' */
- $"BA12 A288 9858 9159 B6ED 0DBF 3DCC 8FA1" /* º.¢ˆ˜X‘Y¶í.¿=Ì¡ */
- $"9CF5 836D 499F B9E7 DB4E 497F D3A4 57BF" /* œõƒmIŸ¹çÛNI.Ó¤W¿ */
- $"9F0A EECE 8E29 127A 82FF 4222 75AC 32D4" /* ŸÂîÎŽ).z‚ÿB"u¬2Ô */
- $"6540 8040 4137 9EB4 EFFF 7FEC 9D37 60B4" /* e@€@A7ž´ïÿ.ì7`´ */
- $"184A 9567 71E4 F5FE 1C55 BB95 9FD8 BE6D" /* .J•gqäõþ.U»•ŸØ¾m */
- $"037F 052C 035B 91D7 903B 6EEC 1642 3D18" /* ...,.[‘×;nì.B=. */
- $"0B05 FEC5 4C0C 9ED3 BFA5 94AF CBB1 E725" /* ..þÅL.žÓ¿¥”¯Ë±ç% */
- $"DFC3 AF74 2485 D5A2 7F79 1275 C7DD ADE1" /* ßït$…Õ¢.y.uÇÝ­á */
- $"3BD5 AD19 74E6 EE9F 6846 7900 C09D 090B" /* ;Õ­.tæîŸhFy.ÀÆ. */
- $"C17C FB0F 2C9F 4DEB B9FE 7152 A47E B1CB" /* Á|û.,ŸMë¹þqR¤~±Ë */
- $"FB0E 7108 21C7 EFAB 8FA3 8AF0 2FDC 17A9" /* û.q.!Çï«£Šð/Ü.© */
- $"2565 5082 BEBF 4DDD 0699 3265 82AE D421" /* %eP‚¾¿MÝ.™2e‚®Ô! */
- $"3776 341F C56C ECDA B302 0306 AE5F 37FF" /* 7v4.ÅlìÚ³...®_7ÿ */
- $"7FB7 1192 8D68 5475 EE0B 4D80 6149 DEBB" /* .·.’hTuî.M€aIÞ» */
- $"F9A7 D7E7 A35D 9515 8000 4F04 C4D6 670C" /* ù§×ç£]•.€.O.ÄÖg. */
- $"54B7 93BB D264 43E0 E8D4 2D4D D3E2 AEB0" /* T·“»ÒdCàèÔ-MÓâ®° */
- $"FBAE F5BD A155 A8F2 07B4 AAA6 CE0A 84CC" /* û®õ½¡U¨ò.´ª¦ÎÂ„Ì */
- $"907F D5C4 9900 8FE2 0E0D F385 55A0 CDFF" /* .ÕÄ™.â..ó…U Íÿ */
- $"7FFE D776 193F A5C4 0334 DD15 7A6A 0890" /* .þ×v.?¥Ä.4Ý.zj. */
- $"DE98 5707 7799 9A5B D638 31B9 982B 5623" /* Þ˜W.w™š[Ö81¹˜+V# */
- $"3AFA A84A 20E7 417C F56E 7776 0C54 0765" /* :ú¨J çA|õnwv.T.e */
- $"91DE A19E 3DD2 4D8B F9F9 0D61 6343 0746" /* ‘Þ¡ž=ÒM‹ùù.acC.F */
- $"7D72 600B 4E15 FC8F 60FA A273 4348 A86E" /* }r`.N.ü`ú¢sCH¨n */
- $"E11A CD6B 3FFF 7ED1 E486 AAAA A380 045A" /* á.Ík?ÿ~Ñ䆪ª£€.Z */
- $"70E5 3753 4FFF 7FC6 ADBE 8E71 66FF 8165" /* på7SOÿ.Æ­¾Žqfÿe */
- $"D782 24E8 7399 0C15 03BF 29B5 5685 FDA1" /* ׂ$ès™...¿)µV…ý¡ */
- $"5BAD 5751 6D53 799A A7C6 572E 6A37 B46A" /* [­WQmSyš§ÆW.j7´j */
- $"B9BF 05BF 3131 F7DB E3B8 8F11 EE2F 13D6" /* ¹¿.¿11÷Ûã¸.î/.Ö */
- $"7DE9 D552 0B25 FEAF AEFE F0A7 FBE9 487F" /* }éÕR.%þ¯®þð§ûéH. */
- $"9085 0FFA 23FE A9DB 0494 B0E1 FEFD 1D50" /* ….ú#þ©Û.”°áþý.P */
- $"15B4 6548 AAA0 0182 C5FF 7D24 05C8 B15E" /* .´eHª .‚Åÿ}$.ȱ^ */
- $"E45F A508 3C68 CA73 3A57 A35E 462D 9213" /* ä_¥.<hÊs:W£^F-’. */
- $"9D19 A4FE F266 C323 64FF 7B71 19F7 0BC3" /* .¤þòfÃ#dÿ{q.÷.Ã */
- $"062C 20C4 9745 F075 6FFF 31F0 A3AD 4C84" /* ., Ä—Eðuoÿ1ð£­L„ */
- $"00F3 104C 0064 3899 0DB9 8128 CB5F FF46" /* .ó.L.d8™.¹(Ë_ÿF */
- $"7184 41CB 7E58 4C0B ADD5 CBB2 1A61 E3D6" /* q„AË~XL.­Õ˲.aãÖ */
- $"B45F 489E 7FE9 D915 2B77 0776 98BD B3A6" /* ´_Hž.éÙ.+w.v˜½³¦ */
- $"230E B817 1D5A D937 3251 2449 6B0A 5A13" /* #.¸..ZÙ72Q$IkÂZ. */
- $"C4E0 BB45 CB72 9758 9E56 158D B1E6 9590" /* Äà»EËr—XžV.±æ• */
- $"4FC4 0611 EDBC 426F 6D2B D932 D595 A74E" /* OÄ..í¼Bom+Ù2Õ•§N */
- $"8728 58CD BD02 9746 DBA2 7EAB 0F07 363C" /* ‡(Xͽ.—FÛ¢~«..6< */
- $"BAB3 1228 E02A BDB4 373F F3FB FF7D 8D0D" /* º³.(à*½´7?óûÿ}. */
- $"2193 09F4 7603 A017 98B1 421E 7A47 D126" /* !“Æôv. .˜±B.zGÑ& */
- $"82FD 5449 B97F F864 5CD5 19F6 A8A4 F216" /* ‚ýTI¹.ød\Õ.ö¨¤ò. */
- $"A4B3 FF7F E820 4C58 DE4B 944B 6FD4 F4DA" /* ¤³ÿ.è LXÞK”KoÔôÚ */
- $"596E A688 456C 3F0D 7844 1596 2BED 0D5D" /* Yn¦ˆEl?.xD.–+í.] */
- $"FAFB 8D2E D7D0 ABCB B2BE 8D80 E74D 9EDC" /* úû.×Ы˲¾€çMžÜ */
- $"7FFF 7FC9 2FB9 3BDA F47A B9C2 E1B8 5CC8" /* .ÿ.É/¹;Úôz¹Âá¸\È */
- $"14AB D534 7208 32FE 73D2 EF23 862E 10F8" /* .«Õ4r.2þsÒï#†..ø */
- $"C16F 1FFF 6FBB FA97 5167 CDAD 4886 8FC2" /* Áo.ÿo»ú—QgÍ­H†Â */
- $"BFFF 7FFE 2B73 126E 1EC8 C82A 3F6D 6CC3" /* ¿ÿ.þ+s.n.ÈÈ*?mlà */
- $"D98A D501 1DC2 82FD FF57 9731 B866 2A7D" /* ÙŠÕ..‚ýÿW—1¸f*} */
- $"C983 5F41 893F 2D09 F81C E373 42C2 5963" /* Ƀ_A‰?-Æø.ãsBÂYc */
- $"7E9F C269 2B8B C21A 8247 D433 0DF7 491E" /* ~ŸÂi+‹Â.‚GÔ3.÷I. */
- $"D1BF 3D9E F4BD 1B50 8034 4EE9 4A69 B155" /* Ñ¿=žô½.P€4NéJi±U */
- $"849A B0F7 8CEA 3FD0 E4A0 C339 2431 ED8B" /* „š°÷Œê?Ðä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FD9F 7F36 9703 7BCA 1455 6A98 F02E" /* #fýŸ.6—.{Ê.Uj˜ð. */
- $"1EDC 4707 C9A6 B325 A6E4 637D 612B B3DD" /* .ÜG.ɦ³%¦äc}a+³Ý */
- $"1E5A 3660 EEB0 BEFA 2C50 307B 5887 6D39" /* .Z6`î°¾ú,P0{X‡m9 */
- $"0EC7 2D81 C32E 6B72 8546 30E4 133F 3D3B" /* .Ç-Ã.kr…F0ä.?=; */
- $"0A76 21AA 4387 8F29 03C8 1C32 755C F553" /* Âv!ªC‡).È.2u\õS */
- $"5CA1 C16A 02EC 4654 97C8 6F10 BA2A 16E0" /* \¡Áj.ìFT—Èo.º*.à */
- $"DB18 605E 8A18 8A6E 4F35 1EF7 8C57 F8B2" /* Û.`^Š.ŠnO5.÷ŒWø² */
- $"0020 4D0A 1739 2287 ADE2 B0C2 D816 17D2" /* . MÂ.9"‡­â°ÂØ..Ò */
- $"21F8 3104 FEA8 38E3 8644 6F0B D2C6 A599" /* !ø1.þ¨8ã†Do.ÒÆ¥™ */
- $"B793 1367 B548 23BD 8836 1143 D5DB 2720" /* ·“.gµH#½ˆ6.CÕÛ' */
- $"73BB 1485 DEAF C96F 24E8 AA26 56B9 89D3" /* s».…Þ¯Éo$èª&V¹‰Ó */
- $"8F8D 2F3E 5EA5 466C BE3C 6879 6C0A 5891" /* />^¥Fl¾<hylÂX‘ */
- $"974E 6F22 0E47 66D4 BD1F 6A7D 1885 42CC" /* —No".GfÔ½.j}.…BÌ */
- $"7E13 126E AC98 74B7 B093 BDFF 37DB E527" /* ~..n¬˜t·°“½ÿ7Ûå' */
- $"E6D0 CF2A D7E6 E7EB 1095 05AF 6407 BB9B" /* æÐÏ*׿çë.•.¯d.»› */
- $"0227 D5EB 260A C844 340F B249 E84F 58A7" /* .'Õë&ÂÈD4.²IèOX§ */
- $"FA14 9D34 7614 73A6 BE73 ED76 B2CD 4515" /* ú.4v.s¦¾sív²ÍE. */
- $"F26C 3AD7 7C32 5480 5A3A C4DF 123A EA95" /* òl:×|2T€Z:Äß.:ê• */
- $"D2B4 A3D8 F88D E685 6505 A999 DD9E C8D1" /* Ò´£Øøæ…e.©™ÝžÈÑ */
- $"A073 3702 5A8F 3598 F7DC A36F 0058 065E" /*  s7.Z5˜÷Ü£o.X.^ */
- $"65E6 B5AC 2A85 0F1C 43BF 8A10 43A0 BB10" /* e浬*…..C¿Š.C ». */
- $"4C3A 8F4F 95AD 253D EEE9 FBE8 4023 4647" /* L:O•­%=îéûè@#FG */
- $"7A75 8F1C 9245 3C51 3FF5 BD2B DFD3 57EF" /* zu.’E<Q?õ½+ßÓWï */
- $"1FB4 900F 4546 6EFA A7AE 45EB EAE9 7B9D" /* .´.EFnú§®Eëêé{ */
- $"6408 1DCB F7AC BE44 7D08 1482 2257 A9CF" /* d..Ë÷¬¾D}..‚"W©Ï */
- $"8B78 3610 9816 9518 A64C 215A 4569 6C5F" /* ‹x6.˜.•.¦L!ZEil_ */
- $"57E0 4F89 F77C 88D6 ADFC 8E42 9299 A2C9" /* WàO‰÷|ˆÖ­üŽB’™¢É */
- $"0F7C EA0A 7E98 B7AF 70ED 09A8 0759 B1A7" /* .|êÂ~˜·¯píÆ¨.Y±§ */
- $"C18E 2CC9 883F A788 A2F1 57B9 7A0E F384" /* ÁŽ,Ɉ?§ˆ¢ñW¹z.ó„ */
- $"F0CE 46F0 E10A ED6F CE17 2BE1 25D5 3A36" /* ðÎFðáÂíoÎ.+á%Õ:6 */
- $"5C6A F3AA F2D1 7225 6C5C 514F 8F1F 64A5" /* \jóªòÑr%l\QO.d¥ */
- $"B08E D05D 3E2E B3E4 DE48 12A9 7DC6 6E03" /* °ŽÐ]>.³äÞH.©}Æn. */
- $"05B3 2AD0 EF87 EFB1 6D03 06E4 85AB 36C6" /* .³*Ðï‡ï±m..ä…«6Æ */
- $"9BF6 8382 74F2 F321 62DF 269C 8D95 8FBD" /* ›öƒ‚tòó!bß&œ•½ */
- $"C4CA 7278 FDBA C51B A4FC C224 BD43 5F76" /* ÄÊrxýºÅ.¤üÂ$½C_v */
- $"F9D9 0970 5EAA 5F05 FDCB 50DE 35E7 A82E" /* ùÙÆp^ª_.ýËPÞ5ç¨. */
- $"1E7E 584D 33D8 EF90 B221 622F 778E 460D" /* .~XM3Øï²!b/wŽF. */
- $"6DC9 383F CF41 7B89 7414 97EF EFE2 CC75" /* mÉ8?ÏA{‰t.—ïïâÌu */
- $"8895 6AFD C6E8 610E 5E29 7AE1 FAAF 9FD5" /* ˆ•jýÆèa.^)záú¯ŸÕ */
- $"435F 3F61 6F9F AC78 7EAD 62BE 7DF7 7CFD" /* C_?aoŸ¬x~­b¾}÷|ý */
- $"D3FD 5BAF 83F5 5B37 CF6D BE7E 9DDF 3F4D" /* Óý[¯ƒõ[7Ïm¾~ß?M */
- $"80E8 ABDE CCAF 0D6C 8AC6 9587 348A 7A5A" /* €è«Þ̯.lŠÆ•‡4ŠzZ */
- $"21F6 5D05 F6A4 1727 AC99 8E36 4607 A805" /* !ö].ö¤.'¬™Ž6F.¨. */
- $"1CA8 FB12 6979 4216 6FCF DF65 6135 AFF9" /* .¨û.iyB.oÏßea5¯ù */
- $"5A1E 01C1 15A0 4F38 E547 6F65 858D 0788" /* Z..Á. O8åGoe….ˆ */
- $"49E3 07A2 D476 B767 EC21 FF65 559D 3B3F" /* Iã.¢Ôv·gì!ÿeU;? */
- $"B8A5 C1A8 6496 5183 24E6 93A6 DF2F 52F1" /* ¸¥Á¨d–Qƒ$擦ß/Rñ */
- $"19CA BFD7 1479 8040 2F9C 0DB9 00F0 49C5" /* .Ê¿×.y€@/œ.¹.ðIÅ */
- $"3D32 5B0C 9453 8D1F 452F D9E7 75FD CD61" /* =2[.”S.E/ÙçuýÍa */
- $"44A9 62C3 F0C8 BAF0 6A66 A4D4 AA8B 73B0" /* D©bÃðȺðjf¤Ôª‹s° */
- $"C942 686A 4A1E E3A7 2343 A0ED D595 9AFC" /* ÉBhjJ.ã§#C íÕ•šü */
- $"5546 0ACB FD23 6F2E DCEE ABBD 70E7 FA93" /* UFÂËý#o.Üpçú“ */
- $"3FFF 7FC5 7D31 FA1C D910 1C70 6CDC 3362" /* ?ÿ.Å}1ú.Ù..plÜ3b */
- $"B0A1 C6F3 16D1 BE51 73D2 4697 37CA 8197" /* °¡Æó.ѾQsÒF—7Ê— */
- $"A8C6 89C1 FF78 99EB 31B8 5F88 7B08 C557" /* ¨Æ‰Áÿx™ë1¸_ˆ{.ÅW */
- $"5483 A35C 0713 94D5 D2DF B84C 36CA D9EC" /* Tƒ£\..”ÕÒ߸L6ÊÙì */
- $"8FC7 A305 814F 8B04 07D2 E391 5E89 43FE" /* Ç£.O‹..Òã‘^‰Cþ */
- $"6C67 4343 91DB DD56 C1D2 FEA6 9F1F 346F" /* lgCC‘ÛÝVÁÒþ¦Ÿ.4o */
- $"714B 79E1 7AC7 53A1 9934 69F4 E886 5A9C" /* qKyázÇS¡™4iôè†Zœ */
- $"6F9A D26F DD48 5F60 A72A 7E20 77F8 1BE8" /* ošÒoÝH_`§*~ wø.è */
- $"91B9 9018 8124 7694 3664 4202 7B94 1007" /* ‘¹.$v”6dB.{”.. */
- $"4234 15FC 04A2 6DE0 DC6B 5EDE 4332 F592" /* B4.ü.¢màÜk^ÞC2õ’ */
- $"779A A3BD 8E84 5464 DE08 6BAE AE2F 6EEF" /* wš£½Ž„TdÞ.k®®/nï */
- $"CB75 5862 59D8 1362 5D60 79D2 137C 7606" /* ËuXbYØ.b]`yÒ.|v. */
- $"F2B1 06DE 8A2F B76A A7D9 84DB 8F52 1107" /* ò±.ÞŠ/·j§Ù„ÛR.. */
- $"A42C 9803 2476 0448 42C9 A9E5 D0F5 9110" /* ¤,˜.$v.HBÉ©åÐõ‘. */
- $"2FAB AAF4 0752 81C9 6064 B8F7 6CEB 438E" /* /«ªô.RÉ`d¸÷lëCŽ */
- $"DC4B 916C 21F0 1C8F 2A6A 1919 9E26 2B36" /* ÜK‘l!ð.*j..ž&+6 */
- $"3E51 F543 F7C5 2549 66D0 2F14 D18F 42F1" /* >QõC÷Å%IfÐ/.ÑBñ */
- $"397B BA52 99ED 853C E07D 629B 92A1 2589" /* 9{ºR™í…<à}b›’¡%‰ */
- $"B3A9 B812 DC8D A368 3204 F8AA 7549 AF2B" /* ³©¸.Ü£h2.øªuI¯+ */
- $"2DE7 529C 1ECB 9747 A4B8 F6EC 8DDC 0AC4" /* -çRœ.Ë—G¤¸öìÜÂÄ */
- $"2C31 F042 C407 3F18 FD32 9280 60E4 60D8" /* ,1ðBÄ.?.ý2’€`ä`Ø */
- $"77B5 C019 A5FF 6E0D 8E35 A78E C7AA E95B" /* wµÀ.¥ÿn.Ž5§ŽÇªé[ */
- $"D37C D883 5DD2 756B 385A 08BB 7708 AA5E" /* Ó|؃]Òuk8Z.»w.ª^ */
- $"5B89 0628 F831 7775 3555 A523 BF2F 721A" /* [‰.(ø1wu5U¥#¿/r. */
- $"099B E6B4 5128 9EA6 41E1 9B8B 18C1 928C" /* Æ›æ´Q(ž¦Aᛋ.Á’Œ */
- $"72A0 BD1E 84D6 836A C947 0982 284A 9238" /* r ½.„ÖƒjÉGÆ‚(J’8 */
- $"A06F E390 1BD5 BBFD 323F BA86 2091 BAD5" /*  oã.Õ»ý2?º† ‘ºÕ */
- $"351D 16C5 1D44 E8C7 66C7 D469 047D 5548" /* 5..Å.DèÇfÇÔi.}UH */
- $"7049 7B42 B682 DF4C 68DE B5D2 2EDC C105" /* pI{B¶‚ßLhÞµÒ.ÜÁ. */
- $"4047 9A7E 0403 F48B 6215 C3ED 8DBA 12E9" /* @Gš~..ô‹b.Ãíº.é */
- $"EEFB B61B 906E F6F6 DDFD D030 CD1C 47FD" /* îû¶.nööÝýÐ0Í.Gý */
- $"7C37 E7C7 DC08 213E 3C33 08E6 74A0 F400" /* |7çÇÜ.!><3.æt ô. */
- $"7CFC 3B85 1A2E 5ACA 573F F24C 7D2C 0E3B" /* |ü;…..ZÊW?òL},.; */
- $"2A6D CEDC 6C9C 6E97 A572 915F A892 3833" /* *mÎÜlœn—¥r‘_¨’83 */
- $"A08F 0070 A602 FB49 0EA6 62FC 4237 C568" /*  .p¦.ûI.¦büB7Åh */
- $"E937 1DC1 1FC2 C3F1 AA30 AC4D DDB8 E747" /* é7.Á.ÂÃñª0¬MݸçG */
- $"5EE4 FD73 8124 56EB ADBE 6DB3 F27B 80C0" /* ^äýs$Vë­¾m³ò{€À */
- $"E536 971B 511B C76B AB20 8BA4 4DCD BFCB" /* å6—.Q.Çk« ‹¤MÍ¿Ë */
- $"4A0C 34DC 3DDC 9BEF 5122 89D0 99D1 9BE7" /* J.4Ü=Ü›ïQ"‰Ð™Ñ›ç */
- $"8840 002A A77A 25E2 9C2C F9BC 78F9 FB0E" /* ˆ@.*§z%âœ,ù¼xùû. */
- $"0DB7 4F14 B07A 12F6 65D3 ABE1 660D A84A" /* .·O.°z.öeÓ«áf.¨J */
- $"EFF9 A799 1852 8ED0 9582 B79A D812 1BE6" /* ïù§™.RŽÐ•‚·šØ..æ */
- $"F3D0 D5FA 9C76 5EBD DBFD 42A9 F7B3 885E" /* óÐÕúœv^½ÛýB©÷³ˆ^ */
- $"4A68 DBE7 9663 FB7F 1AC4 5004 197F 97F0" /* JhÛç–cû..ÄP...—ð */
- $"F57B 135D 19ED E0E0 1C84 139C BA3B 2493" /* õ{.].íàà.„.œº;$“ */
- $"D997 333D B6A7 9E83 619C FCE9 9875 134D" /* Ù—3=¶§žƒaœüé˜u.M */
- $"4B31 FCB3 5808 B917 C8BB 0B67 4564 488E" /* K1ü³X.¹.È».gEdHŽ */
- $"3554 8125 C3A4 DB4A 0BB2 E501 244C 1F49" /* 5T%äÛJ.²å.$L.I */
- $"C6A7 51E4 6C51 A134 3DF4 CE21 2993 FF3B" /* ƧQälQ¡4=ôÎ!)“ÿ; */
- $"80F6 AE0B B9F8 D1D5 8853 4531 6806 4F3E" /* €ö®.¹øÑÕˆSE1h.O> */
- $"D2B6 5F62 796A 683C D3C9 A22B 6D56 C497" /* Ò¶_byjh<ÓÉ¢+mVÄ— */
- $"D854 2E14 C281 0F94 0220 BEE7 3754 D077" /* ØT..Â.”. ¾ç7TÐw */
- $"EDB0 0F0E 95C1 A40B 55C9 B5AE 4DA8 A8A6" /* í°..•Á¤.Uɵ®M¨¨¦ */
- $"ADD6 4A11 DE81 B148 70D3 FA4F 795C 9171" /* ­ÖJ.Þ±HpÓúOy\‘q */
- $"C72E 7EF2 454C 0336 BE4A EE68 960E 25BA" /* Ç.~òEL.6¾Jîh–.%º */
- $"E686 01F4 6FF5 3C7C 8B33 60D8 24D3 70A1" /* æ†.ôoõ<|‹3`Ø$Óp¡ */
- $"06C6 E616 29D4 63D6 3334 379F 743E 745D" /* .Ææ.)ÔcÖ347Ÿt>t] */
- $"4EF5 ECB5 072E 9F62 0750 F7BA 6FDE B6B0" /* Nõìµ..Ÿb.P÷ºoÞ¶° */
- $"0BD0 4FCC 8F59 9B13 0C77 0A30 9BAE DF36" /* .ÐOÌY›..wÂ0›®ß6 */
- $"B13D D861 E92A 12C7 EC7A 0946 BF20 1E31" /* ±=Øaé*.ÇìzÆF¿ .1 */
- $"1FEE EE88 EFC6 C1C1 0DE2 3850 C97F 01DF" /* .îîˆïÆÁÁ.â8PÉ..ß */
- $"F021 605A D52A 570D 7089 0C1B B3FE 8B4D" /* ð!`ZÕ*W.p‰..³þ‹M */
- $"E441 70AC 5F71 3FCE 527F EBF4 048A A307" /* äAp¬_q?ÎR.ëô.Š£. */
- $"CEFD 4EB0 87ED BFE2 A36C 51B9 EAD3 37C6" /* ÎýN°‡í¿â£lQ¹êÓ7Æ */
- $"E8F0 9A3D 8F78 8747 81D4 33F0 9EEB 5EA0" /* èðš=x‡GÔ3ðžë^  */
- $"6FE0 A580 6B6B C126 1CE3 F1B2 DC9C CFCE" /* oीkkÁ&.ãñ²ÜœÏÎ */
- $"42EE 7E91 EF2F 0DDF CFDE 75EB 554D 6941" /* Bî~‘ï/.ßÏÞuëUMiA */
- $"07A5 21BE AD52 7CC1 49B5 FE74 AE40 F70F" /* .¥!¾­R|ÁIµþt®@÷. */
- $"AB3B 0C16 98F5 7742 3DCE 842D 0B2B 2FEB" /* «;..˜õwB=΄-.+/ë */
- $"5E90 DEBC 8BA9 81AC 40CC 0030 2853 FE9C" /* ^Þ¼‹©¬@Ì.0(Sþœ */
- $"6FC2 569B 2CD1 6200 2881 802D 7697 8442" /* oÂV›,Ñb.(€-v—„B */
- $"92C8 666B BC90 3252 F4D3 9BD2 AD14 0027" /* ’Èfk¼2RôÓ›Ò­..' */
- $"CE11 F5A4 437B 3F80 B250 AA4C 23B6 AD83" /* Î.õ¤C{?€²PªL#¶­ƒ */
- $"277E 5EF0 8132 6331 9325 D1A3 CFB6 6F73" /* '~^ð2c1“%ѣ϶os */
- $"D37D 780F 91CC CD40 6234 2FE2 F097 1681" /* Ó}x.‘ÌÍ@b4/âð—. */
- $"6097 88BD BFFF 18F5 2CBB FF67 FDBC 2F07" /* `—ˆ½¿ÿ.õ,»ÿgý¼/. */
- $"67FF 7FFF 1946 84C7 A551 03FF 7F52 A7C2" /* gÿ.ÿ.F„Ç¥Q.ÿ.R§Â */
- $"8AC8 1080 56FF 0C48 1804 A884 A5A2 08FF" /* ŠÈ.€Vÿ.H..¨„¥¢.ÿ */
- $"7FF5 3220 8043 9005 C25D DE15 02FB 7F2B" /* .õ2 €C.Â]Þ..û.+ */
- $"8205 5CA8 40BE EFB1 78F0 2656 2AD4 14FF" /* ‚.\¨@¾ï±xð&V*Ô.ÿ */
- $"7505 20CD 8BE2 8B15 47BB 9E26 105E 15DD" /* u. Í‹â‹.G»ž&.^.Ý */
- $"21A7 82AE E19D FE27 5D8B DDAD E13B D5AD" /* !§‚®áþ']‹Ý­á;Õ­ */
- $"1974 E6EE 9F68 4679 00C0 9D09 0BC1 7CFB" /* .tæîŸhFy.ÀÆ.Á|û */
- $"0F2C 9F4E 082C 2CB4 569B A7B0 0009 E098" /* .,ŸN.,,´V›§°.Æà˜ */
- $"9AB0 9892 B1FF 6957 1D78 2613 4289 24C6" /* š°˜’±ÿiW.x&.B‰$Æ */
- $"12BC E2EF C9AE E6D9 784F C157 77AB 3470" /* .¼âïÉ®æÙxOÁWw«4p */
- $"D8C7 C746 1978 322D D4E9 FA24 B8B2 5054" /* ØÇÇF.x2-Ôéú$¸²PT */
- $"D643 8270 9090 D6D8 0C24 16E5 1146 421C" /* ÖC‚pÖØ.$.å.FB. */
- $"D6A2 40D9 1864 A800 0000 0000 0001 4554" /* Ö¢@Ù.d¨.......ET */
- $"031E 793B 33D3 FD4A CE0A 3D8A 9D46 37B0" /* ..y;3ÓýJÎÂ=ŠF7° */
- $"4D2C 6F04 2BFF 071C 023F E153 6688 1815" /* M,o.+ÿ...?áSfˆ.. */
- $"BA20 BF61 DDDF 2979 84E3 3348 50F6 E9B8" /* º ¿aÝß)y„ã3HPöé¸ */
- $"634A 8937 FF7F F1AE E84B C95A 771F 4C9C" /* cJ‰7ÿ.ñ®èKÉZw.Lœ */
- $"3FFE 0734 7D7F 6E35 4A2E 21E0 E52F FF7E" /* ?þ.4}.n5J.!àå/ÿ~ */
- $"8532 8513 7869 A6E6 495D 3E58 F349 1EF5" /* …2….xi¦æI]>XóI.õ */
- $"886C 6441 9091 82E8 0C24 1507 0E02 A105" /* ˆldA‘‚è.$....¡. */
- $"95C5 1409 096C 9A37 F758 F13A 5ABF 149E" /* •Å.ÆÆlš7÷Xñ:Z¿.ž */
- $"DA31 52E9 0DA9 0BFF 45EB 20C7 1A1C E54C" /* Ú1Ré.©.ÿEë Ç..åL */
- $"29D1 6C8E D1EC 9D59 F945 4303 373F FF7F" /* )ÑlŽÑìYùEC.7?ÿ. */
- $"CE95 B027 88F7 AB06 28B9 92E7 D540 BC2B" /* Ε°'ˆ÷«.(¹’çÕ@¼+ */
- $"7167 8C6C C87E 32B0 C904 7D7D 278E E519" /* qgŒlÈ~2°É.}}'Žå. */
- $"707D 2C42 1714 C425 F9D0 DC01 D910 23DB" /* p},B..Ä%ùÐÜ.Ù.#Û */
- $"E7F3 391C A4E6 FAE1 C850 5A1F 456A 6690" /* çó9.¤æúáÈPZ.Ejf */
- $"3F37 F970 3841 73D3 1095 39CF 10A3 40F8" /* ?7ùp8AsÓ.•9Ï.£@ø */
- $"4CCC 4985 E3D5 127F 7CF4 92BC DCE9 2335" /* LÌI…ãÕ..|ô’¼Üé#5 */
- $"43FB 7460 8D5C C121 CFF2 1165 1CCE BBB2" /* Cût`\Á!Ïò.e.λ² */
- $"5EA8 0279 2C97 E45B A43D 328C 7A6C 5EBC" /* ^¨.y,—ä[¤=2Œzl^¼ */
- $"61DD BB2C E34E 25E4 1725 3C6B EC12 BFEF" /* aÝ»,ãN%ä.%<kì.¿ï */
- $"3E5E 0ACF 766D 9D4E 8978 2AC5 F138 755A" /* >^ÂÏvmN‰x*Åñ8uZ */
- $"CBDD 8421 F74E 9A07 A070 16ED 100C 769A" /* ËÝ„!÷Nš. p.í..vš */
- $"6571 1FA0 4D62 8ADC A3F1 0AAA 2253 1A39" /* eq. MbŠÜ£ñª"S.9 */
- $"0006 DF51 B09A 2267 BA13 3AD9 0120 8520" /* ..ßQ°š"gº.:Ù. … */
- $"7375 BB11 0715 9FFF 7FFF 276F 9A44 4D02" /* su»...Ÿÿ.ÿ'ošDM. */
- $"9DF2 BE32 729A 8C71 FBC9 4C73 FA4B 1D24" /* ò¾2ršŒqûÉLsúK.$ */
- $"4115 B69E 4FFF 7FFF 45B5 7091 9925 CEBD" /* A.¶žOÿ.ÿEµp‘™%ν */
- $"6A4E 1AA3 BFFF 7FFD AA3B 4043 EE5A 76B0" /* jN.£¿ÿ.ýª;@CîZv° */
- $"A073 CF17 7A58 3A06 649C B972 3CB8 897B" /*  sÏ.zX:.dœ¹r<¸‰{ */
- $"31E2 637A 05AC 83FA B94C 0F75 7113 FF7B" /* 1âcz.¬ƒú¹L.uq.ÿ{ */
- $"E690 225A FB16 A961 626A B7FE 22EF 864B" /* æ"Zû.©abj·þ"ï†K */
- $"F464 1D62 4127 02B3 DB08 1C01 3ECE 1326" /* ôd.bA'.³Û...>Î.& */
- $"CF03 BF05 5771 4992 75FE 29FC 5FFF 60D5" /* Ï.¿.WqI’uþ)ü_ÿ`Õ */
- $"DCC3 1B1F 40FF 6990 DC69 3E47 D09A 6E6A" /* ÜÃ..@ÿiÜi>GКnj */
- $"2866 9BA8 D74C BAAA 204E 05F9 DBFE E679" /* (f›¨×Lºª N.ùÛþæy */
- $"E76C 383D 9F92 BB32 1E14 2CA1 CBD5 E93C" /* çl8=Ÿ’»2..,¡ËÕé< */
- $"6C00 DFA2 B04F D650 3F14 60FF 7F73 29C3" /* l.ߢ°OÖP?.`ÿ.s)à */
- $"E20E 5672 C31B 6D72 FDCF 8097 B8B0 1482" /* â.VrÃ.mrýÏ€—¸°.‚ */
- $"C37E 4C4A 28FA 6E67 F061 E00C 371B 8655" /* Ã~LJ(úngðaà.7.†U */
- $"BDCB 2942 6AB1 0E31 38D3 6948 0D3F 6FEF" /* ½Ë)Bj±.18ÓiH.?oï */
- $"C2AB 669A E502 2490 C158 FC07 05F0 348A" /* «fšå.$ÁXü..ð4Š */
- $"0505 F0B2 E7E3 F934 19DA 2DB9 9686 603E" /* ..ð²çãù4.Ú-¹–†`> */
- $"C2C3 4B2F EB95 FB4E 62D2 F085 4364 9DCA" /* ÂÃK/ë•ûNbÒð…CdÊ */
- $"A6E8 94F8 CC41 2603 5BFC 4E90 C05F 068D" /* ¦è”øÌA&.[üNÀ_. */
- $"414C 618C 8860 58B1 7059 0B4C 39E8 FB58" /* ALaŒˆ`X±pY.L9èûX */
- $"C413 43C6 BF39 CC12 6E5B F65C F671 DD29" /* Ä.CÆ¿9Ì.n[ö\öqÝ) */
- $"8A03 BC15 FF06 2028 49E4 BF04 E6FC D4FD" /* Š.¼.ÿ. (Iä¿.æüÔý */
- $"401A CB9C 5F7F EFE7 8F41 E707 7803 9F1A" /* @.Ëœ_.ïçAç.x.Ÿ. */
- $"715F 951E E63A 9B4C 1404 32AA B5B7 98B0" /* q_•.æ:›L..2ªµ·˜° */
- $"D5F4 CD69 DD15 9E81 D2FD 09F7 462D AF3E" /* ÕôÍiÝ.žÒýÆ÷F-¯> */
- $"31DA 85C4 5053 8460 C06C 7018 908C 4821" /* 1Ú…ÄPS„`Àlp.ŒH! */
- $"D8AB AC44 7666 44D1 EA04 8979 3A4A A0FE" /* Ø«¬DvfDÑê.‰y:J þ */
- $"27D7 B0C3 DBAA 5233 F376 3CA8 4968 DF8A" /* '×°ÃÛªR3óv<¨Ihߊ */
- $"874C 2117 6A15 4664 03FF 7FFF 7F7C 2D12" /* ‡L!.j.Fd.ÿ.ÿ.|-. */
- $"B28B 8A4C 6D72 1106 16E0 BF7F 9822 2424" /* ²‹ŠLmr...à¿.˜"$$ */
- $"3C1B CBC8 2F76 1AC7 FF7F FF7F EB42 22AA" /* <.ËÈ/v.Çÿ.ÿ.ëB"ª */
- $"F30A 0C9D 6086 E561 E1BC C1D9 4E7F FADF" /* óÂ.`†åaá¼ÁÙN.úß */
- $"A85C B34C E2D4 FCF6 1A29 34F3 3B42 1DFC" /* ¨\³LâÔüö.)4ó;B.ü */
- $"C6BD 370B D203 B0C4 1C7D C348 1EE7 EAD9" /* ƽ7.Ò.°Ä.}ÃH.çêÙ */
- $"3145 E7FB 36CC 8E64 AB70 81DC 65E1 2C1D" /* 1Eçû6ÌŽd«pÜeá,. */
- $"9CB5 18A0 1C95 7DE2 96DF C185 7A40 50C7" /* œµ. .•}â–ßÁ…z@PÇ */
- $"E32C FCC1 FF6B 14F5 05FE 0E1C 8757 8D82" /* ã,üÁÿk.õ.þ..‡W‚ */
- $"3A41 284E 2906 8316 564F F479 4DCF FF7E" /* :A(N).ƒ.VOôyMÏÿ~ */
- $"5F11 3745 AC7F ED8D BC93 4205 7E12 E036" /* _.7E¬.í¼“B.~.à6 */
- $"0BE4 4B4F F99C F369 6B38 263E 63EC 6311" /* .äKOùœóik8&>cìc. */
- $"D577 8B5D 7957 D24D 7D64 A2B5 1107 4625" /* Õw‹]yWÒM}d¢µ..F% */
- $"E1EB 2460 41A2 E878 5967 CEAE AE16 D8D5" /* áë$`A¢èxYgή®.ØÕ */
- $"F960 B484 0B49 7253 26F2 714E 6A13 03E4" /* ù`´„.IrS&òqNj..ä */
- $"A0C3 3924 31ED 8B79 3D63 5412 C097 F9C3" /*  Ã9$1í‹y=cT.À—ùà */
- $"79AD A97D EEE5 EF23 66FF 15BD C854 5DFB" /* y­©}îåï#fÿ.½ÈT]û */
- $"5921 E05C 6A39 B68E 6444 6D55 3B7D 6DDA" /* Y!à\j9¶ŽdDmU;}mÚ */
- $"9003 8F53 5C49 D978 31CD 41C5 DD62 7DE4" /* .S\IÙx1ÍAÅÝb}ä */
- $"2F24 5932 A14F 9C9C 97B6 2652 5988 7970" /* /$Y2¡Oœœ—¶&RYˆyp */
- $"F890 8A5C 9614 EBF4 DAC8 15D1 6F3C 07E4" /* øŠ\–.ëôÚÈ.Ño<.ä */
- $"7B8B F763 6803 394F 2291 8D88 EB1B 3136" /* {‹÷ch.9O"‘ˆë.16 */
- $"10C9 5077 060A 7DB0 A890 CB7B 947F AD8B" /* .ÉPw.Â}°¨Ë{”.­‹ */
- $"0AAF 67FF 5D78 615A E459 013B 6923 5E0E" /* ¯gÿ]xaZäY.;i#^. */
- $"900D BA9C DFF2 37D0 0508 B5F3 EA48 FADE" /* .ºœßò7Ð..µóêHúÞ */
- $"D348 3F2F 8E71 E6CD B6BE 8941 8773 0E17" /* ÓH?/ŽqæÍ¶¾‰A‡s.. */
- $"E97A B699 5A4F 21C1 0766 538B B29A B8CA" /* éz¶™ZO!Á.fS‹²š¸Ê */
- $"FBAE 21FA 76A0 B197 C613 E523 B127 1FE4" /* û®!úv ±—Æ.å#±'.ä */
- $"0AA8 798D 688E 8F27 E386 446F 0BD2 C6A5" /* ¨yhŽ'ã†Do.ÒÆ¥ */
- $"99B7 9313 67B5 4823 BD88 3611 E5A8 8054" /* ™·“.gµH#½ˆ6.娀T */
- $"3C15 C120 1B02 5B2A 2195 DD25 F90A 48A6" /* <.Á ..[*!•Ý%ùÂH¦ */
- $"BF92 56B9 4639 F2BD AC5F 3350 9699 14A7" /* ¿’V¹F9ò½¬_3P–™.§ */
- $"30A2 4B91 C33D 3175 F806 15AA 4B01 558F" /* 0¢K‘Ã=1uø..ªK.U */
- $"400B 8148 DAF5 29FD 0561 1CA8 7239 51F4" /* @.HÚõ)ý.a.¨r9Qô */
- $"A169 A92B EE2F 4F3D 2F96 029B 186B 7219" /* ¡i©+î/O=/–.›.kr. */
- $"C673 0E85 6FAC 9889 C64A 90AE DBAF E8E3" /* Æs.…o¬˜‰ÆJ®Û¯èã */
- $"6607 DF2A C332 C690 840A 817A ABFF 3302" /* f.ß*Ã2Æ„Âz«ÿ3. */
- $"1464 A65F E1B3 04B0 90C6 51E5 6A2E 7EA2" /* .d¦_á³.°ÆQåj.~¢ */
- $"9222 EABA 0632 2F13 B1A3 2337 85B4 E390" /* ’"êº.2/.±£#7…´ã */
- $"766A 98DB BDDD 9813 F7BD 8AEA 1AB2 BEEC" /* vj˜Û½Ý˜.÷½Šê.²¾ì */
- $"BEE3 F4B7 EE35 6BB8 ADE1 E772 AEB0 7E66" /* ¾ãô·î5k¸­áçr®°~f */
- $"3F99 05C1 3339 69B2 C1D5 4CC7 DB0B 3C67" /* ?™.Á39i²ÁÕLÇÛ.<g */
- $"7F80 43C8 7B29 FA49 8C64 3FEB 6406 35FE" /* .€CÈ{)úIŒd?ëd.5þ */
- $"FAEB 4922 9410 5352 D4C0 00CB 72EA 56CE" /* úëI"”.SRÔÀ.ËrêVÎ */
- $"22F8 673A D3E8 AAFA E992 5B7F 827C A83D" /* "øg:Óèªúé’[.‚|¨= */
- $"586F 54B4 69F8 C6B7 FF14 CFD4 4069 C50F" /* XoT´iøÆ·ÿ.ÏÔ@iÅ. */
- $"9E23 797E DE78 5B86 FCAE BDE5 B920 9551" /* ž#y~Þx[†ü®½å¹ •Q */
- $"22EC 4155 0582 10F4 BF8C 144A 3251 97F3" /* "ìAU.‚.ô¿Œ.J2Q—ó */
- $"2E7D 1E04 969B 4C15 8BDB FAC1 9743 2B6C" /* .}..–›L.‹ÛúÁ—C+l */
- $"6EF5 C95E 47CB A380 A635 C17D AD97 42EA" /* nõÉ^GË£€¦5Á}­—Bê */
- $"88A1 A63E FC76 A19C AE08 C868 115F 098D" /* ˆ¡¦>üv¡œ®.Èh._Æ */
- $"A1BE 16D4 3BF4 91C9 6CF1 DBE0 E0CA 0DAA" /* ¡¾.Ô;ô‘ÉlñÛààÊ.ª */
- $"EFCB 2A06 908B 7BAC CCF3 4CF8 179A 615E" /* ïË*.‹{¬ÌóLø.ša^ */
- $"590D AB18 CB49 E032 B8ED 2A8E 584A ACDC" /* Y.«.ËIà2¸í*ŽXJ¬Ü */
- $"4797 F732 B8C9 24A4 0E5C 85A0 FED8 E30A" /* G—÷2¸É$¤.\… þØã */
- $"ECBF 08FB CDC1 E09D 9556 837A E086 95AC" /* ì¿.ûÍÁà•Vƒzà†•¬ */
- $"BA2C E411 756E F132 9CE6 EDC4 6C90 B09E" /* º,ä.unñ2œæíÄl°ž */
- $"3C59 DE78 44D0 E445 BCA0 3AE0 05D9 7440" /* <YÞxDÐäE¼ :à.Ùt@ */
- $"F09F 10EA E0BA 4596 84F5 81A2 550E 57A7" /* ðŸ.êàºE–„õ¢U.W§ */
- $"F2A8 B2DD D612 A18F D74A 671D B70C 994A" /* ò¨²ÝÖ.¡×Jg.·.™J */
- $"9441 8E10 12B8 80F0 6249 2075 CD39 3667" /* ”AŽ..¸€ðbI uÍ96g */
- $"6632 AFDD 5E48 6B22 15CC 179A C6FA 47AE" /* f2¯Ý^Hk".Ì.šÆúG® */
- $"66AF 7AFB 033D 03F1 B829 B852 F1BF 55DB" /* f¯zû.=.ñ¸)¸Rñ¿UÛ */
- $"17F6 E1EF A955 F266 ACFE 75F4 34FC 38B0" /* .öáï©Uòf¬þuô4ü8° */
- $"0068 7DD6 016E 98D4 57DB 6220 D269 4BE9" /* .h}Ö.n˜ÔWÛb ÒiKé */
- $"8007 22E8 9D82 8FCE EB41 317B D0FA 323B" /* €."è‚ÎëA1{Ðú2; */
- $"B2C0 06D3 99E3 ED9A 2423 78CD AE34 CF5B" /* ²À.Ó™ãíš$#xÍ®4Ï[ */
- $"58DA 8F69 9604 4804 8682 B58C C1DA 1E21" /* XÚi–.H.†‚µŒÁÚ.! */
- $"0E4E F709 83E1 B335 F208 6565 C882 70A0" /* .N÷ƃá³5ò.eeÈ‚p  */
- $"2F58 5379 3999 7F2E E63D 81E4 C2EB 58E3" /* /XSy9™..æ=äÂëXã */
- $"4605 35E7 76D7 C7D0 AEDA 26C5 8BB6 0F99" /* F.5çv×ÇЮÚ&Å‹¶.™ */
- $"77C0 D3D6 9870 8279 4C2E 29C6 518F 13E6" /* wÀÓÖ˜p‚yL.)ÆQ.æ */
- $"1373 FCB8 FD55 3D8F 8322 F8F4 CD80 3C09" /* .sü¸ýU=ƒ"øôÍ€<Æ */
- $"1496 931A E1BF 0AE6 2842 6FF7 6986 6AEE" /* .–“.á¿Âæ(Bo÷i†jî */
- $"1AE9 FF0A 947D E3F6 D93F B59B F6D5 5FB6" /* .éÿ”}ãöÙ?µ›öÕ_¶ */
- $"AAC7 EDD1 1FDB 5A5F 5549 7D55 2E1F B6A4" /* ªÇíÑ.ÛZ_UI}U..¶¤ */
- $"FDAA F7D4 DF7D 4E80 F173 72EC 2AD6 46CC" /* ýª÷Ôß}N€ñsrì*ÖFÌ */
- $"6653 9F8A F548 8CD9 F7CC 0758 DFBD 1976" /* fSŸŠõHŒÙ÷Ì.Xß½.v */
- $"0832 03BE 1A6C 242F 4978 025D 37A6 D46A" /* .2.¾.l$/Ix.]7¦Ôj */
- $"B859 037D 5250 D0D6 8FC0 4C05 AAAB 7F38" /* ¸Y.}RPÐÖÀL.ª«.8 */
- $"799B 43F9 E370 D367 B412 8CC2 F941 E270" /* y›CùãpÓg´.ŒÂùAâp */
- $"A967 1978 577B 7A22 541A 7DDD A593 75E5" /* ©g.xW{z"T.}Ý¥“uå */
- $"6B05 D950 D953 DA5E 7EBF D5D3 4314 5006" /* k.ÙPÙSÚ^~¿ÕÓC.P. */
- $"8EC3 8474 6B41 83B3 7B16 9C95 721B 5405" /* ŽÃ„tkAƒ³{.œ•r.T. */
- $"F4AE A41F 92D8 56DA F2C9 4BF8 5B0A EBC6" /* ô®¤.’ØVÚòÉKø[ÂëÆ */
- $"29D5 F4F3 36B9 A6D7 3BC4 75D7 972C 7465" /* )Õôó6¹¦×;Äu×—,te */
- $"CCBE 21FA 6EAF 6B26 465B 4676 356D E640" /* ̾!ún¯k&F[Fv5mæ@ */
- $"04C3 0E39 C431 FBA5 2B53 E001 8F9D 37F5" /* .Ã.9Ä1û¥+Sà.7õ */
- $"F289 EC84 85B8 5FC3 F74A 734B E0B1 ED8C" /* ò‰ì„…¸_Ã÷JsKà±íŒ */
- $"5DF4 6678 22E4 887C A45B 1478 DFC3 A9E9" /* ]ôfx"äˆ|¤[.xßéé */
- $"F234 5723 01B3 2685 2754 8133 8699 21C8" /* ò4W#.³&…'T3†™!È */
- $"180A 27F8 174C FED5 8F71 4082 C4E8 DB83" /* .Â'ø.LþÕq@‚ÄèÛƒ */
- $"BDA4 4506 3FA4 5286 5D63 00F7 905D A740" /* ½¤E.?¤R†]c.÷]§@ */
- $"5251 07FA 22F8 1334 FBA6 5640 7199 FA41" /* RQ.ú"ø.4û¦V@q™úA */
- $"A3C7 3CC1 ECF5 7F43 A9AE FBD5 C1F0 18B3" /* £Ç<Áìõ.C©®ûÕÁð.³ */
- $"7072 4809 0A4C 8127 6E10 5F7C 335C CC28" /* prHÆÂL'n._|3\Ì( */
- $"B723 3D12 724D 3DE5 37B3 1C2A 136D 2258" /* ·#=.rM=å7³.*.m"X */
- $"DCE6 BFA4 0DAD FB6E 72C1 70F7 6D71 785D" /* Üæ¿¤.­ûnrÁp÷mqx] */
- $"BC75 69CE CE3B CF7A 170E 8343 CBA9 DE66" /* ¼uiÎÎ;Ïz..ƒCË©Þf */
- $"06ED 779C AA9F F28D 943D 5E3E DEDE 4769" /* .íwœªŸò”=^>ÞÞGi */
- $"289C 5523 9792 EFAC 19A6 A945 B504 9446" /* (œU#—’ï¬.¦©Eµ.”F */
- $"A4DF BAA6 B5EB BAEF 7B92 3E08 6D17 870F" /* ¤ßº¦µëºï{’>.m.‡. */
- $"9E0A 487E 8A60 90B5 E555 CD4F D2F1 FE67" /* žÂH~Š`µåUÍOÒñþg */
- $"88DE BB6A E653 A2B6 F9C7 B226 2544 A167" /* ˆÞ»jæS¢¶ùDz&%D¡g */
- $"5DF7 5F35 F38B DB99 30F8 C210 AF41 C7A4" /* ]÷_5ó‹Û™0øÂ.¯AǤ */
- $"167B 30B4 8B8D 0821 4ADB EFC6 5728 A86D" /* .{0´‹.!JÛïÆW(¨m */
- $"99A8 2A1D 51E2 4CE5 AEA5 7ECC 23CB 628B" /* ™¨*.QâL宥~Ì#Ëb‹ */
- $"E438 F41A A280 CF2E 8E51 5004 A9BA 64AB" /* ä8ô.¢€Ï.ŽQP.©ºd« */
- $"B0AA 608C 8C19 38F7 567B 0C45 B7C5 0E2D" /* °ª`ŒŒ.8÷V{.E·Å.- */
- $"0F3D A192 B0F5 A567 4EE1 9FF5 F085 979A" /* .=¡’°õ¥gNáŸõð…—š */
- $"13DA 6FC3 89D0 0370 C986 5F44 AADD CAB9" /* .ÚoÉÐ.pɆ_DªÝʹ */
- $"FBD0 8CDE 18D9 8FED 715E 264F 0D69 2CEF" /* ûÐŒÞ.Ùíq^&O.i,ï */
- $"63F0 7A64 D65B 094A 6976 E6D4 E3DC 1583" /* cðzdÖ[ÆJivæÔãÜ.ƒ */
- $"FE8C BD22 992E 3FDB AF18 03A7 0A74 8333" /* þŒ½"™.?Û¯..§Âtƒ3 */
- $"76E3 5195 C7FA A180 5123 7E0C 544B 9C8C" /* vãQ•Çú¡€Q#~.TKœŒ */
- $"928D 3DF6 F330 4D6E 8049 11AF 064E 4E3B" /* ’=öó0Mn€I.¯.NN; */
- $"B937 EE03 A4D2 F530 4513 47F0 5E98 E060" /* ¹7î.¤Òõ0E.Gð^˜à` */
- $"72C6 46EC B761 FAB4 B0FA 9A80 FF78 5408" /* rÆFì·aú´°úš€ÿxT. */
- $"9152 452E 0111 2383 5E5F 6C4F FC53 0EDE" /* ‘RE...#ƒ^_lOüS.Þ */
- $"1092 66D3 5F38 1AC8 1412 561A 4017 9110" /* .’fÓ_8.È..V.@.‘. */
- $"CA19 3E6F 8803 0908 5F57 A2E2 4744 E3C4" /* Ê.>oˆ.Æ._W¢âGDãÄ */
- $"F1BF 49F6 836F E294 610B 4098 2761 1502" /* ñ¿Iöƒoâ”a.@˜'a.. */
- $"CCB2 0C11 81DD 05B4 ACD8 8F28 C5DD 1DD8" /* ̲..Ý.´¬Ø(ÅÝ.Ø */
- $"58E0 C1E1 70A8 42BF 456F FE20 1261 1F81" /* XàÁáp¨B¿Eoþ .a. */
- $"08AC FEB1 F89C 3576 EF94 A20C 255F 3B3F" /* .¬þ±øœ5v.%_;? */
- $"5E6B B0C0 4B3F EADC 8536 55E9 8144 C946" /* ^k°ÀK?êÜ…6UéDÉF */
- $"7613 8662 DCB1 C761 2BDA 412D C7D6 2D5C" /* v.†bܱÇa+ÚA-ÇÖ-\ */
- $"BCC0 F84E 54E4 9B0B BDF7 4F45 FCA6 D6AE" /* ¼ÀøNTä›.½÷OEü¦Ö® */
- $"1754 31D1 E6CB 94F4 D163 2B1D 017D 4171" /* .T1ÑæË”ôÑc+..}Aq */
- $"ABE0 0285 395D 3D23 42D7 E641 348A 0C2E" /* «à.…9]=#B׿A4Š.. */
- $"9C16 42C9 8E99 B654 8046 C365 EA71 CE64" /* œ.BÉŽ™¶T€FÃeêqÎd */
- $"B762 0E4D 7C48 617B CDB9 6264 2C81 4A9F" /* ·b.M|Ha{͹bd,JŸ */
- $"8600 50B2 B985 EB73 DB96 82EA FF7D 1E50" /* †.P²¹…ësÛ–‚êÿ}.P */
- $"6A49 AEA3 78E3 2DFD 0D59 3013 F257 AAA9" /* jI®£xã-ý.Y0.òWª© */
- $"0E5D 81DA E983 8D48 41BE DF0B FB34 AEA5" /* .]ÚéƒHA¾ß.û4®¥ */
- $"07B6 B0AA 1E53 1D9F B9C7 4CE5 8D46 6151" /* .¶°ª.S.Ÿ¹ÇLåFaQ */
- $"8000 0C24 1D66 1946 1073 4456 2361 E486" /* €..$.f.F.sDV#aä† */
- $"120F 29F0 6121 2D6A AF51 0C82 F68C B571" /* ..)ða!-j¯Q.‚öŒµq */
- $"77AD BE59 9145 D105 DE8C 9500 0000 0000" /* w­¾Y‘EÑ.ÞŒ•..... */
- $"0000 0032 BC9A BD52 00B4 6C6F 3753 1A96" /* ...2¼š½R.´lo7S.– */
- $"9B00 FCD3 F055 A11A AFB1 FB95 1610 88D0" /* ›.üÓðU¡.¯±û•..ˆÐ */
- $"8D32 9653 FC10 55FD B965 C1A9 B6BD 2245" /* 2–Sü.Uý¹eÁ©¶½"E */
- $"D48B 8230 2EF5 56F1 6618 9F91 FEC4 4106" /* Ô‹‚0.õVñf.Ÿ‘þÄA. */
- $"F23B 7C8A 0320 79EA D7A0 D75F 09BD B985" /* ò;|Š. yê× ×_ƽ¹… */
- $"C22B E2F0 0508 64BA AA2F 2414 19D7 311D" /* Â+âð..dºª/$..×1. */
- $"F709 E05C 809B 9E62 83F8 FF13 2DE3 01D6" /* ÷Æà\€›žbƒøÿ.-ã.Ö */
- $"8ADC F118 5A80 77C8 DABC 2FB5 CEF6 FCFB" /* ŠÜñ.Z€wÈÚ¼/µÎöüû */
- $"7A94 2773 6CEC FAE2 7865 753C E612 E4AF" /* z”'slìúâxeu<æ.ä¯ */
- $"657C 5C67 8FB3 1E56 A319 1ED1 FE48 0D8D" /* e|\g³.V£..ÑþH. */
- $"2431 B10B 8E15 0A4B FF7F 7EB8 D068 5015" /* $1±.Ž.ÂKÿ.~¸ÐhP. */
- $"151E C37C 0390 F6CC 64A8 0000 0000 0000" /* ..Ã|.öÌd¨...... */
- $"0000 0002 5991 79E8 2B17 082C ABCB DA90" /* ....Y‘yè+..,«ËÚ */
- $"CE92 8CB0 E992 0710 2B8F CAAB D217 C4E9" /* Î’Œ°é’..+Ê«Ò.Äé */
- $"E55E 11D2 6200 B530 5EF4 6932 1CBF EA6C" /* å^.Òb.µ0^ôi2.¿êl */
- $"E58D 2AA9 68C2 89FF 7903 A6ED D674 F1FC" /* å*©h‰ÿy.¦íÖtñü */
- $"A256 3564 F7E0 4DDF CDA1 2729 F7FF 6EB2" /* ¢V5d÷àMßÍ¡')÷ÿn² */
- $"9D35 70A9 5447 924B B8E1 71D3 4A8A DECB" /* 5p©TG’K¸áqÓJŠÞË */
- $"93E1 8FA0 140E C9B7 6124 8020 D660 3D22" /* “á ..É·a$€ Ö`=" */
- $"C708 222E 7289 B890 0002 00E1 2BC6 84B9" /* Ç.".r‰¸...á+Æ„¹ */
- $"25DF 442F 97FF 7FEF 68EC 7325 B92C A150" /* %ßD/—ÿ.ïhìs%¹,¡P */
- $"EE19 48C3 2540 0000 0000 0000 0000 0749" /* î.HÃ%@.........I */
- $"DD4A 9891 375B B0E0 C176 A698 672E F295" /* ÝJ˜‘7[°àÁv¦˜g.ò• */
- $"0311 7B3E 2B87 B4B8 7FB3 5DF7 9C67 CBEA" /* ..{>+‡´¸.³]÷œgËê */
- $"6A19 4107 C9F4 2B19 6829 179A 3FFF 7E8C" /* j.A.Éô+.h).š?ÿ~Œ */
- $"44A2 15E8 8E37 B422 F825 1862 58FF 7FFE" /* D¢.èŽ7´"ø%.bXÿ.þ */
- $"8EA1 D38C 727A 3071 1FF0 541F 6AB4 EA83" /* Ž¡ÓŒrz0q.ðT.j´êƒ */
- $"44A0 086A BAD7 6966 FC5D 0E72 A66C C301" /* D .jº×ifü].r¦lÃ. */
- $"3E1F B82C 9192 20D5 0322 858F 224C 87F5" /* >.¸,‘’ Õ."…"L‡õ */
- $"E940 85ED 7B36 EC96 D05C 21FF 7B10 59E1" /* é@…í{6ì–Ð\!ÿ{.Yá */
- $"E125 6C79 7852 2031 F3BA 34FB 6E57 BC3B" /* á%lyxR 1óº4ûnW¼; */
- $"69F0 C303 3A2A A573 D1E0 9836 C703 D02C" /* iðÃ.:*¥sÑà˜6Ç.Ð, */
- $"58CC 3DA7 FF0D 4301 F607 07C1 31FA 7F66" /* XÌ=§ÿ.C.ö..Á1ú.f */
- $"89BD A759 90CD 107A E5BD 6398 D7BE F7BB" /* ‰½§YÍ.zå½c˜×¾÷» */
- $"E273 D09A F8EE D21B 1015 A513 18F5 5C7D" /* âsКøîÒ...¥..õ\} */
- $"FD20 E7C9 C6BE 3105 7A4B 831D 251B 4C36" /* ý çÉÆ¾1.zKƒ.%.L6 */
- $"2A49 3EAC 1A86 9F87 09CC 0B00 2CF4 643C" /* *I>¬.†Ÿ‡ÆÌ..,ôd< */
- $"7012 8574 D28F 952D E959 1093 FE7E F021" /* p.…tÒ•-éY.“þ~ð! */
- $"028C 74ED 0E90 8DCD 5F06 B4BE EA1A 4C53" /* .Œtí.Í_.´¾ê.LS */
- $"A47F 3706 93CB 8FAB 7864 D123 4A39 B6BA" /* ¤.7.“Ë«xdÑ#J9¶º */
- $"CDCB 8AA9 2128 54FA CFB5 C4E1 F470 AD6E" /* ÍËŠ©!(TúϵÄáôp­n */
- $"6A05 07C9 72AA 562E F22F C922 BCF9 7DDF" /* j..ÉrªV.ò/É"¼ù}ß */
- $"3565 1AD4 F707 7DC0 1038 129E 4EA0 297E" /* 5e.Ô÷.}À.8.žN )~ */
- $"1037 3516 64BB FF75 539A 5C03 F7A3 C14D" /* .75.d»ÿuSš\.÷£ÁM */
- $"C617 50C8 14F1 7C95 0372 1443 C3F0 7ED4" /* Æ.PÈ.ñ|•.r.CÃð~Ô */
- $"EFDA FA88 BDD2 E947 7A43 A4A3 2339 CD58" /* ïÚúˆ½ÒéGzC¤£#9ÍX */
- $"526C 8407 8211 1949 6431 DB89 390B EB27" /* Rl„.‚..Id1Û‰9.ë' */
- $"9975 F04F D507 AC80 5D51 95B0 992A 1AC6" /* ™uðOÕ.¬€]Q•°™*.Æ */
- $"8699 86CC E64E 441C 2EFD 4F8C 70C1 DB2A" /* †™†ÌæND..ýOŒpÁÛ* */
- $"5395 8DF7 E279 AA65 BA32 2FD1 48C9 F400" /* S•÷âyªeº2/ÑHÉô. */
- $"D0EA 663D 92FF 053E 130C A1A9 491B E583" /* Ðêf=’ÿ.>..¡©I.åƒ */
- $"6133 2EE1 AFBE 86B8 D218 B698 906D A5B9" /* a3.᯾†¸Ò.¶˜m¥¹ */
- $"ACD3 9DC7 8720 C668 E134 1A1C 9C71 EA49" /* ¬ÓLJ Æhá4..œqêI */
- $"7AE9 9276 56E9 78BB 5679 18E2 6044 2763" /* zé’vVéx»Vy.â`D'c */
- $"2342 64F4 3952 2712 F704 B2E8 C1D2 35CC" /* #Bdô9R'.÷.²èÁÒ5Ì */
- $"F0AB 5ABD 61A0 1CD5 5316 0E78 22E6 B807" /* ð«Z½a .ÕS..x"æ¸. */
- $"8774 CA36 91EF 0BFF D969 6330 3900 00D1" /* ‡tÊ6‘ï.ÿÙic09..Ñ */
- $"2300 0000 0C6A 5020 200D 0A87 0A00 0000" /* #....jP .‡Â... */
- $"1466 7479 706A 7032 2000 0000 006A 7032" /* .ftypjp2 ....jp2 */
- $"2000 0000 4F6A 7032 6800 0000 1669 6864" /* ...Ojp2h....ihd */
- $"7200 0002 0000 0002 0000 0407 0701 0000" /* r............... */
- $"0000 0F63 6F6C 7201 0000 0000 0010 0000" /* ...colr......... */
- $"0022 6364 6566 0004 0000 0000 0001 0003" /* ."cdef.......... */
- $"0001 0000 0001 0000 0002 0002 0000 0003" /* ................ */
- $"0000 0000 6A70 3263 FF4F FF51 0032 0000" /* ....jp2cÿOÿQ.2.. */
- $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */
- $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */
- $"0004 0701 0107 0101 0701 0107 0101 FF52" /* ..............ÿR */
- $"000C 0000 0001 0105 0404 0001 FF5C 0013" /* ............ÿ\.. */
- $"2050 5858 6058 5860 5858 6058 5858 5050" /* PXX`XX`XX`XXXPP */
- $"58FF 6400 1100 014B 616B 6164 752D 7635" /* Xÿd....Kakadu-v5 */
- $"2E32 2E31 FF90 000A 0000 0000 D036 0001" /* .2.1ÿ.Â....Ð6.. */
- $"FF93 CFC2 DC03 54F9 36EC A8DC 2A8C 3701" /* ÿ“ÏÂÜ.Tù6ì¨Ü*Œ7. */
- $"118B 95C3 F2B2 5A7A 0428 C30A 2C64 B704" /* .‹•Ãò²Zz.(ÃÂ,d·. */
- $"5C3C 6DED 8696 4890 6404 5638 430C 59C5" /* \<m톖Hd.V8C.YŠ*/
- $"D913 B06B 0B08 E00E 1802 6D82 7225 E695" /* Ù.°k..à...m‚r%æ• */
- $"9F1E E7B0 D1DF 323C 61DC 1F25 E3FF 83E2" /* Ÿ.ç°Ñß2<aÜ.%ãÿƒâ */
- $"A49A DED4 4495 A948 5B70 9E5A 01F1 2431" /* ¤šÞÔD•©H[pžZ.ñ$1 */
- $"8EE5 2B54 2863 9041 FAE9 9E9F 1B85 E206" /* Žå+T(cAú鞟.…â. */
- $"4104 106C 5027 632A 8716 C3A5 F047 B3D5" /* A..lP'c*‡.Ã¥ðG³Õ */
- $"EE2B 19CD 2B75 17D8 DFB6 E2BF 491E A41F" /* î+.Í+u.Øß¶â¿I.¤. */
- $"BC48 3493 DEFB 453D 64DE DEA0 68DB EF5B" /* ¼H4“ÞûE=dÞÞ hÛï[ */
- $"1E69 8F3F C55C 1FF6 1823 1543 F483 DF20" /* .i?Å\.ö.#.Côƒß */
- $"F5B4 08F4 5D20 4DF0 7D7D 2007 2ACA 5B5E" /* õ´.ô] Mð}} .*Ê[^ */
- $"159F EF4A 505D 811D A8A3 5476 5539 B45B" /* .ŸïJP].¨£TvU9´[ */
- $"3113 1AC7 00F3 F1A7 E9E3 9E88 5D91 6CD5" /* 1..Ç.óñ§é㞈]‘lÕ */
- $"2CC0 F92B 2063 FF29 4B0E 775A 06EE 75CC" /* ,Àù+ cÿ)K.wZ.îuÌ */
- $"DA54 AC2F B72D 1C25 1E46 A4F8 C3E1 7D8D" /* ÚT¬/·-.%.F¤øÃá} */
- $"85AE BBE6 3DBE EC4A 35F7 3B36 1FBF BC38" /* …®»æ=¾ìJ5÷;6.¿¼8 */
- $"2DC1 785C D644 2BED AB51 1950 2643 8730" /* -Áx\ÖD+í«Q.P&C‡0 */
- $"2AE9 E4EB 1B8E 8F90 BA0C FF2F 6F65 5F28" /* *éäë.Žº.ÿ/oe_( */
- $"1A3F 9398 FF20 01A2 69A0 02C9 8D1B C3EA" /* .?“˜ÿ .¢i .É.Ãê */
- $"A600 6417 3CA3 9E84 93EF 063D 59DC 702C" /* ¦.d.<£ž„“ï.=YÜp, */
- $"959D C3A6 B1ED DEF1 F321 5BA6 FCCD 7762" /* •æ±íÞñó![¦üÍwb */
- $"6C23 7398 AA59 4BBA 0052 B8A7 0608 1AAC" /* l#s˜ªYKº.R¸§...¬ */
- $"5B2E AF60 17F4 278E 6433 6F75 7839 CED2" /* [.¯`.ô'Žd3oux9ÎÒ */
- $"F32E 5D7D 9D40 B145 4CFB A25C D8D7 4BCB" /* ó.]}@±ELû¢\Ø×KË */
- $"956D 88DD 4B92 64BF 4CD4 AFD5 6E56 9859" /* •mˆÝK’d¿LÔ¯ÕnV˜Y */
- $"ABEF BB40 AD0E 6E1F 9B3B 16A3 D9D3 58DF" /* «ï»@­.n.›;.£ÙÓXß */
- $"584E C303 1DAD D18B 6082 9C29 88EB 5163" /* XNÃ..­Ñ‹`‚œ)ˆëQc */
- $"A42D 061A 1570 64A9 0F1C E00D 56D9 E0CB" /* ¤-...pd©..à.VÙàË */
- $"7C66 799C 8EB4 BFCA CF5C CFC2 B611 4F0C" /* |fyœŽ´¿ÊÏ\϶.O. */
- $"AFDE 008C 3580 A270 0C1A 3737 50A1 9A89" /* ¯Þ.Œ5€¢p..77P¡š‰ */
- $"2546 BB2C 62A0 57BE 59CB C00A 1EE9 0F1D" /* %F»,b W¾YËÀÂ.é.. */
- $"C528 40D4 EA69 D281 AED4 B078 F27A 0B42" /* Å(@ÔêiÒ®Ô°xòz.B */
- $"7AD2 DADD 146B 7FFF 223D 6A74 2041 4FCF" /* zÒÚÝ.k.ÿ"=jt AOÏ */
- $"46E1 60C8 9ABE 841E E18D 1712 DB6D 902B" /* Fá`Èš¾„.á..Ûm+ */
- $"7BE6 56DA 7E4B 1704 A373 2802 B120 0184" /* {æVÚ~K..£s(.± .„ */
- $"0681 4499 2739 CE73 9CE8 99D8 C352 337C" /* .D™'9Îsœè™ØÃR3| */
- $"06AB BB71 6257 16EF B535 4972 8C2F 2EE0" /* .«»qbW.ïµ5IrŒ/.à */
- $"85CC 8431 D867 47EE CC43 6E87 A485 2316" /* …Ì„1ØgGîÌCn‡¤…#. */
- $"4927 AE22 C12D 49CE 739C E61C 97D0 99CC" /* I'®"Á-IÎsœæ.—Ð™Ì */
- $"3DC5 F26B 1A31 E742 3E56 464B 2944 108E" /* =Åòk.1çB>VFK)D.Ž */
- $"CB0C F4C7 E144 47E1 47C1 F6BD 8089 21DB" /* Ë.ôÇáDGáGÁö½€‰!Û */
- $"8279 4533 01BF B9CC C444 AD53 5F75 D706" /* ‚yE3.¿¹ÌÄD­S_u×. */
- $"3FDD CA27 5D6C 9F54 1CCF F838 38E4 B2E4" /* ?ÝÊ']lŸT.Ïø88ä²ä */
- $"F9FF 429F 59FE D27B 4A5E A69F 2C21 38F6" /* ùÿBŸYþÒ{J^¦Ÿ,!8ö */
- $"5A74 D405 2FEE 50B8 E5F1 C489 2693 5B33" /* ZtÔ./îP¸åñĉ&“[3 */
- $"D2C2 9DEC 68ED F55C 1FAC 1401 8D66 795A" /* ÒÂìhíõ\.¬..fyZ */
- $"F5F3 27A3 5874 6681 9AC6 F41D A4E6 40DA" /* õó'£XtfšÆô.¤æ@Ú */
- $"3EE5 CCEE 340C AF72 87FD 6B2A EB94 88EC" /* >åÌî4.¯r‡ýk*딈ì */
- $"A61D A536 7AC2 C6B8 85D9 CEBD 146C 83B5" /* ¦.¥6zÂÆ¸…Ùν.lƒµ */
- $"F5E0 A3C7 B524 BC64 B6B5 91A6 BF91 C547" /* õà£Çµ$¼d¶µ‘¦¿‘ÅG */
- $"BD87 811F D58E 8E51 BB89 FA6C 5257 33D9" /* ½‡.ÕŽŽQ»‰úlRW3Ù */
- $"A964 A4AB 3BB9 9608 BECC 0D9C D6B9 3D3A" /* ©d¤«;¹–.¾Ì.œÖ¹=: */
- $"CB64 28BE 3B07 6318 DF9D C134 9F16 567A" /* Ëd(¾;.c.ßÁ4Ÿ.Vz */
- $"8127 5FFD F396 BA0C B86F AA17 2301 022A" /* '_ýó–º.¸oª.#..* */
- $"3742 CE95 B1AF F858 C503 8156 35E0 8F2C" /* 7BΕ±¯øXÅ.V5à, */
- $"67D7 2D41 1F0B 5284 1535 AF16 6540 FB65" /* g×-A..R„.5¯.e@ûe */
- $"65BC 5F6B 136D 73A5 1C5D 3D92 FF5F 8494" /* e¼_k.ms¥.]=’ÿ_„” */
- $"FDBF E0C5 821F 072A 0EEB B855 6B42 CEE8" /* ý¿àÅ‚..*.ë¸UkBÎè */
- $"ABEE 381E 894E DF1E 29DD 4B78 3F0A F5EB" /* «î8.‰Nß.)ÝKx?Âõë */
- $"B9F8 61B8 8266 3BD8 A2AC 5BC1 38F4 5098" /* ¹øa¸‚f;Ø¢¬[Á8ôP˜ */
- $"3951 2437 1798 7BF9 EA00 12BF CF3E 9166" /* 9Q$7.˜{ùê..¿Ï>‘f */
- $"8253 6FF0 B942 70D7 C729 0866 33F7 3484" /* ‚Soð¹Bp×Ç).f3÷4„ */
- $"ADF8 C3D2 4EF6 1DF4 0E6F 8E64 B470 1D5E" /* ­øÃÒNö.ô.oŽd´p.^ */
- $"F311 9BD1 EDE1 BA5D 7601 2053 D70A FDCD" /* ó.›Ñíáº]v. S×ÂýÍ */
- $"82C0 1BDA A35C FAD2 67AD E569 7851 10A7" /* ‚À.Ú£\úÒg­åixQ.§ */
- $"EF9A 3533 EC03 E813 08B6 D984 1A1D 3DC0" /* ïš53ì.è..¶Ù„..=À */
- $"7C8E E03E 4A44 03E4 7894 FF1F 080E 2BFD" /* |Žà>JD.äx”ÿ...+ý */
- $"EEB4 E64A C757 389B 5780 3AF8 248C 580D" /* î´æJÇW8›W€:ø$ŒX. */
- $"461B D417 66BA CEB2 2042 3C84 DAF9 C127" /* F.Ô.fºÎ² B<„ÚùÁ' */
- $"63E9 168C A9E3 D418 61E8 C46C CF01 F59B" /* cé.Œ©ãÔ.aèÄlÏ.õ› */
- $"4518 8833 3E62 5B14 BFD1 41A8 45D6 D311" /* E.ˆ3>b[.¿ÑA¨EÖÓ. */
- $"8431 80DB 1FD5 5839 DE81 BCD9 EAFB EE26" /* „1€Û.ÕX9Þ¼Ùêûî& */
- $"33DD 9E73 0B6F F957 26EE E7BA E0DA FF22" /* 3Ýžs.oùW&îçºàÚÿ" */
- $"EA50 24BF A182 089D 749A 6AAF BFF2 224D" /* êP$¿¡‚.tšj¯¿ò"M */
- $"30D4 11D0 E07A A012 587A 0633 92B4 CBFC" /* 0Ô.Ðàz .Xz.3’´Ëü */
- $"8E1B E5AC 9025 A74D 2819 3F9D 8132 B795" /* Ž.å¬%§M(.?2·• */
- $"458E 4651 1589 158D D24C A5B0 CBFA 359E" /* EŽFQ.‰.ÒL¥°Ëú5ž */
- $"BDB0 E4FB BFE3 5854 3E88 A646 71B1 9CB2" /* ½°äû¿ãXT>ˆ¦Fq±œ² */
- $"BB4E BA8E E170 8CBF C1F5 3141 F537 C0FA" /* »NºŽápŒ¿Áõ1Aõ7Àú */
- $"9780 6448 BA3B 94D6 3E8B 7AF0 0B5A C7A2" /* —€dHº;”Ö>‹zð.ZÇ¢ */
- $"4D05 C6BB 7F47 7102 F66E E4E8 3681 1C97" /* M.Æ».Gq.önäè6.— */
- $"0996 4491 F713 2A24 3756 2715 4B55 762F" /* Æ–D‘÷.*$7V'.KUv/ */
- $"78CB 2608 0563 73F7 5626 9F35 0C54 6822" /* xË&..cs÷V&Ÿ5.Th" */
- $"F061 792A 4AFC 163A 9F83 8F82 638B 524D" /* ðay*Jü.:Ÿƒ‚c‹RM */
- $"C21C 3735 DB76 6F4B 01F2 3E7E 5755 5945" /* Â.75ÛvoK.ò>~WUYE */
- $"6149 AAEE 1A88 7748 DC47 79E4 0660 318C" /* aIªî.ˆwHÜGyä.`1Œ */
- $"AA94 E92D 9879 C9C1 AC17 C828 7BBB 997A" /* ª”é-˜yÉÁ¬.È({»™z */
- $"315E 858F F31D 3522 A6D2 B3BD E548 DBA2" /* 1^…ó.5"¦Ò³½åHÛ¢ */
- $"3274 749B 11C1 9570 D715 0350 4CC4 6820" /* 2tt›.Á•p×..PLÄh */
- $"560A 8542 A38D 913B 3863 FF5C 97F2 9BA5" /* VÂ…B£‘;8cÿ\—ò›¥ */
- $"893F 6C9B 15A2 EE40 BCD6 2676 80A9 AC89" /* ‰?l›.¢î@¼Ö&v€©¬‰ */
- $"9054 849D 859C 8DCD 181B 64F4 6D7B 71B4" /* T„…œÍ..dôm{q´ */
- $"FBD3 0C84 21D4 CC6C CF84 F40A A3CD C958" /* ûÓ.„!ÔÌlÏ„ô£ÍÉX */
- $"928E 97E5 346C 6497 2888 7903 5B0B 3277" /* ’Ž—å4ld—(ˆy.[.2w */
- $"B4D6 9AA4 86C3 C691 CA1A 3C92 FCFB 02DE" /* ´Öš¤†ÃÆ‘Ê.<’üû.Þ */
- $"A25E 5C5C C6A8 1CE2 F5B5 88AB 3673 F912" /* ¢^\\ƨ.âõµˆ«6sù. */
- $"96AF E6BC 67FF 40CC 068D C6E3 8435 48AF" /* –¯æ¼gÿ@Ì.Æã„5H¯ */
- $"B929 F509 0F59 3410 A9A6 1087 8352 11EC" /* ¹)õÆ.Y4.©¦.‡ƒR.ì */
- $"23CF CD2E 3F05 487E 0740 9BE7 236F 56FB" /* #ÏÍ.?.H~.@›ç#oVû */
- $"D0F4 677F 9514 C6E9 50BB A61A 6135 73FB" /* Ðôg.•.ÆéP»¦.a5sû */
- $"37AA FA5C 0967 671C 8485 5326 6EB5 4955" /* 7ªú\Ægg.„…S&nµIU */
- $"1AAE 5FCE C271 D992 9E8C B0DF 7795 E0F2" /* .®_ÎÂqÙ’žŒ°ßw•àò */
- $"A17A B50F E53A FE12 756F D1A1 5CE1 7C9B" /* ¡zµ.å:þ.uoÑ¡\á|› */
- $"D185 2C1A 9224 BC62 5C98 FA35 1649 6EA7" /* Ñ…,.’$¼b\˜ú5.In§ */
- $"4C7C C191 DF92 9D7A 6FE9 71D9 9A11 5A19" /* L|Á‘ß’zoéqÙš.Z. */
- $"214D F951 38FA C459 E39A 6DAE 1253 31DF" /* !MùQ8úÄYãšm®.S1ß */
- $"B335 3337 39D2 7591 BFC1 31E6 887A 8BAB" /* ³5379Òu‘¿Á1æˆz‹« */
- $"ECCD 7A58 8E4A AD65 A7E1 5FC6 8EB0 DA82" /* ìÍzXŽJ­e§á_ÆŽ°Ú‚ */
- $"0F81 6849 5CE5 AB32 B763 1227 3F4C 5691" /* .hI\å«2·c.'?LV‘ */
- $"43C7 DD24 E8D9 C4F3 7BB0 4666 7A24 1C5B" /* CÇÝ$èÙÄó{°Ffz$.[ */
- $"F57D 719F 2BDB 3794 66BA BBB6 9D8D A662" /* õ}qŸ+Û7”fº»¶¦b */
- $"CF99 4DDC E533 96D6 EEE0 3FC7 BFB8 B1B7" /* Ï™MÜå3–Öîà?Ç¿¸±· */
- $"9AE3 57C7 E1A8 B1F8 6C5C 3F0D 19C1 812D" /* šãWÇᨱøl\?..Á- */
- $"8D31 C88B C396 B5E7 3CE0 4E2C AE73 7876" /* 1ȋÖµç<àN,®sxv */
- $"0436 A295 BEC6 BDF1 C604 C41C 94E6 E7C1" /* .6¢•¾Æ½ñÆ.Ä.”æçÁ */
- $"AC78 356A B92A DB37 3360 3372 6638 0C5C" /* ¬x5j¹*Û73`3rf8.\ */
- $"F388 7CDE 4045 060F E713 C4C3 321E E08B" /* óˆ|Þ@E..ç.ÄÃ2.à‹ */
- $"0810 71EE A6AB C032 2B85 C34C 2671 8143" /* ..qÀ2+…ÃL&qC */
- $"AFDE 07D1 A40C D86A ADBE B961 EAA3 54BD" /* ¯Þ.Ѥ.Øj­¾¹aê£T½ */
- $"804D 6FA9 AA3F 7FBE BCD9 E785 A230 EA4E" /* €Mo©ª?.¾¼Ùç…¢0êN */
- $"1C08 1DF6 8373 7754 5039 7854 1192 1512" /* ...öƒswTP9xT.’.. */
- $"B956 E9A7 575E E3DB F5F9 4B02 F739 F2BB" /* ¹Vé§W^ãÛõùK.÷9ò» */
- $"91B2 73E1 3D19 EBB6 AD2F 291C 5BAC 5EEA" /* ‘²sá=.ë¶­/).[¬^ê */
- $"EEDF 8DA7 5FCA 8E8C 952D 8FD0 441C 5BA4" /* îß§_ÊŽŒ•-ÐD.[¤ */
- $"8AF6 21BE 1FAF DAE3 DADD EA91 EF73 58A0" /* Šö!¾.¯ÚãÚÝê‘ïsX  */
- $"29E6 89B2 E279 B02A D092 DD08 6187 9095" /* )扲ây°*Ð’Ý.a‡• */
- $"5C85 C903 0DD2 9ED3 538B D9BB E936 8ABB" /* \…É..ÒžÓS‹Ù»é6Š» */
- $"E203 DD03 2944 5317 7BC3 0297 2125 F198" /* â.Ý.)DS.{Ã.—!%ñ˜ */
- $"D117 8DDB E382 71F8 D0A7 14B1 6D7A A0EB" /* Ñ.Ûã‚qøÐ§.±mz ë */
- $"7C6F 7651 D2EC ECA7 F670 D09F 6CF6 30DB" /* |ovQÒìì§öpПlö0Û */
- $"0830 39B5 BC45 3915 4054 4490 A7BA 5CEC" /* .09µ¼E9.@TD§º\ì */
- $"D37B FBC2 7890 B18F DEEA 4966 D46D 5FD2" /* Ó{ûÂx±ÞêIfÔm_Ò */
- $"7811 AAD0 8EBF FB40 0F30 D8A4 2B71 5A03" /* x.ªÐŽ¿û@.0ؤ+qZ. */
- $"636A C360 C889 891D D420 A828 E337 41CC" /* cjÃ`ȉ‰.Ô ¨(ã7AÌ */
- $"3314 5473 B91F 7B78 2B3B AC7A 1127 F2DE" /* 3.Ts¹.{x+;¬z.'òÞ */
- $"E997 2101 6008 26AE 43D5 7CE7 8532 B9CE" /* é—!.`.&®CÕ|ç…2¹Î */
- $"A81A 710E 5D87 49D7 3EF6 65A3 D533 977E" /* ¨.q.]‡I×>öe£Õ3—~ */
- $"7BE9 0CA7 8B28 9ADA AF4F 45A5 99BD E21D" /* {é.§‹(šÚ¯OE¥™½â. */
- $"D4B1 BB33 2508 C8D1 31E5 E9FB F917 A8E1" /* Ô±»3%.ÈÑ1åéûù.¨á */
- $"2955 9008 F531 9010 575A 3AFB 59F4 CD63" /* )U.õ1.WZ:ûYôÍc */
- $"3EEE 2409 BCD4 E5F1 1418 6155 B6D7 A94B" /* >î$ƼÔåñ..aU¶×©K */
- $"1D48 79A8 2F32 0770 476B CE28 023A DC86" /* .Hy¨/2.pGkÎ(.:܆ */
- $"E008 813B E64A 39F5 58CE 3E75 DAA6 BD7A" /* à.;æJ9õXÎ>uÚ¦½z */
- $"1528 FF50 0738 C132 5569 3C99 C4BC A20F" /* .(ÿP.8Á2Ui<™Ä¼¢. */
- $"6DED 9310 6FE1 8BE4 BF4D D0B1 993E 0FD3" /* mí“.oá‹ä¿Mб™>.Ó */
- $"4938 1302 E4A8 FDA2 A7D2 4615 CD89 1E52" /* I8..ä¨ý¢§ÒF.͉.R */
- $"4160 51F8 BABB FEED 4281 0E0C 31CD 91D7" /* A`Qøº»þíB..1Í‘× */
- $"C7CF E302 E155 4188 0F06 097F 6906 2EC9" /* ÇÏã.áUAˆ..Æ.i..É */
- $"BE00 A1FB 0D99 8FB1 3B3D E3D3 70B8 4296" /* ¾.¡û.™±;=ãÓp¸B– */
- $"F199 E066 15B5 920C 38A2 695F F2E8 81E1" /* ñ™àf.µ’.8¢i_òèá */
- $"E0EC 34E5 97B3 9580 459F A2D9 E267 B847" /* àì4å—³•€EŸ¢Ùâg¸G */
- $"E302 3AA0 8631 8C61 5F8E 88DE 2FBB 394B" /* ã.: †1Œa_ŽˆÞ/»9K */
- $"B9EC 234B 6515 BDF3 BA80 AA30 3D50 2F90" /* ¹ì#Ke.½óº€ª0=P/ */
- $"C26A D743 2198 707A 2DC1 9C64 1647 1FA3" /* Âj×C!˜pz-Áœd.G.£ */
- $"43A2 B1C7 C95D 1E19 9650 E616 F24B C118" /* C¢±ÇÉ]..–Pæ.òKÁ. */
- $"FB68 CE23 485E BF50 ACF8 F669 B5A3 92AA" /* ûhÎ#H^¿P¬øöiµ£’ª */
- $"5625 BF48 8584 A6E7 DAC0 E203 2AF0 89A0" /* V%¿H…„¦çÚÀâ.*ð‰  */
- $"DB92 4924 9249 1BF5 D855 0470 51D0 AAE2" /* Û’I$’I.õØU.pQЪâ */
- $"A1E5 FBC9 CB80 1798 2EB3 EB1E 9FD4 46E7" /* ¡åûÉË€.˜.³ë.ŸÔFç */
- $"63DB F02E 204B D35F 54DE 0FD3 2F81 FB63" /* cÛð. KÓ_TÞ.Ó/ûc */
- $"9CEC 37F1 C9FF 5B63 B13D BFBD 1169 0415" /* œì7ñÉÿ[c±=¿½.i.. */
- $"0E97 DA89 25E3 92C7 01F5 50E6 2181 A536" /* .—Ú‰%ã’Ç.õPæ!¥6 */
- $"4020 C49B 1977 1BF5 5226 FD7D 668A D76F" /* @ Ä›.w.õR&ý}fŠ×o */
- $"2954 58F1 F44F 2935 F136 18BD C844 05FD" /* )TXñôO)5ñ6.½ÈD.ý */
- $"E325 9012 9E92 6EC3 E822 D06F A958 C54C" /* ã%.ž’nÃè"Ðo©XÅL */
- $"6A4D 0A98 093C 481D 1424 7964 E810 7A60" /* jM˜Æ<H..$ydè.z` */
- $"F2C0 8287 A7F4 B307 FBDF 2550 567E 01EA" /* òÀ‚‡§ô³.ûß%PV~.ê */
- $"2C45 4614 9A0A 04E8 397B 3DEC 6CDA CA95" /* ,EF.šÂ.è9{=ìlÚÊ• */
- $"B754 699A FF29 B46B D6E3 BB8C 153C AEC0" /* ·Tišÿ)´kÖ㻌.<®À */
- $"BEFF 46AD 744B B945 4C07 F7F7 178D 059E" /* ¾ÿF­tK¹EL.÷÷..ž */
- $"2E80 10C4 6DD6 F19E B649 73D6 8C57 7A6C" /* .€.ÄmÖñž¶IsÖŒWzl */
- $"45DE 3D43 22DE C54A DFCD 64EA 9D77 1AC6" /* EÞ=C"ÞÅJßÍdêw.Æ */
- $"E15E A9A7 0D83 D53C 100B EC25 2B93 1D27" /* á^©§.ƒÕ<..ì%+“.' */
- $"367A 864E D9C4 F0B9 DF5C 538D B2C0 24EE" /* 6z†NÙÄð¹ß\S²À$î */
- $"46E7 424C 2127 6BED B492 3354 86C9 D855" /* FçBL!'kí´’3T†ÉØU */
- $"317B 6BE2 8205 C07C 9A42 03E4 D6B0 0F93" /* 1{kâ‚.À|šB.äÖ°.“ */
- $"4400 AFF0 AE8C D6D6 6729 AEBE 9CDE 5C69" /* D.¯ð®ŒÖÖg)®¾œÞ\i */
- $"D95C 01A0 28AF 1E57 B12C CA6D F010 ED89" /* Ù\. (¯.W±,Êmð.í‰ */
- $"4C46 38AA BAFC D67E 9E98 C6CA 85E4 433E" /* LF8ªºüÖ~ž˜ÆÊ…äC> */
- $"C450 03B7 E8DE 17B3 9CE7 02E1 BE72 100B" /* ÄP.·èÞ.³œç.á¾r.. */
- $"2EF5 787D 0D12 FC3B 855A 3F97 1850 05EF" /* .õx}..ü;…Z?—.P.ï */
- $"A05D 7CC2 405B BA6D 9175 7C99 BE1C 2370" /*  ]|Â@[ºm‘u|™¾.#p */
- $"1F57 2085 13F8 B672 728D 1152 8232 1EE4" /* .W ….ø¶rr.R‚2.ä */
- $"A666 BFD0 06A8 6CFF 3D73 D895 5968 A54A" /* ¦f¿Ð.¨lÿ=sØ•Yh¥J */
- $"3219 63AB D4CD 8E7D 52F3 D260 CE4D E329" /* 2.c«ÔÍŽ}RóÒ`ÎMã) */
- $"F554 C837 34CC 2866 FA1E 1F34 B209 B8C3" /* õTÈ74Ì(fú..4²Æ¸Ã */
- $"097B 8DBC 8788 F621 2A57 5468 5FD8 852B" /* Æ{¼‡ˆö!*WTh_Ø…+ */
- $"08A9 45F3 71A8 A26B F63C 2DB1 750F A833" /* .©Eóq¨¢kö<-±u.¨3 */
- $"4767 6D8A B551 FF10 9E54 AD5D EE2E 2207" /* GgmеQÿ.žT­]î.". */
- $"44EA 0D21 75D4 779D E96D 49FF 47CE D775" /* Dê.!uÔwémIÿGÎ×u */
- $"D7B0 2380 5F1C 4185 EF0B BECB 1A55 9696" /* ×°#€_.A…ï.¾Ë.U–– */
- $"81B8 94F2 4F5B 07D8 D5EC 9E2A 049D 5E87" /* ¸”òO[.ØÕìž*.^‡ */
- $"2601 FB44 4AD5 C57B A7B0 8088 B723 134E" /* &.ûDJÕÅ{§°€ˆ·#.N */
- $"0B8A 375E B972 F34F F25A 2B68 3F15 4496" /* .Š7^¹róOòZ+h?.D– */
- $"5734 FE10 D742 67F9 9FFF 639C FAFD 23DB" /* W4þ.×BgùŸÿcœúý#Û */
- $"B90C F402 17F0 81C6 2656 EFD0 E011 C866" /* ¹.ô..ðÆ&VïÐà.Èf */
- $"15C8 4927 3415 BEC1 7876 E693 74CB DBEA" /* .ÈI'4.¾Áxvæ“tËÛê */
- $"7206 2246 23EC DCCA 51CD 72C1 8C41 1B85" /* r."F#ìÜÊQÍrÁŒA.… */
- $"AE9B 6FA5 4286 03FB 7000 D94F 5A8B 8A85" /* ®›o¥B†.ûp.ÙOZ‹Š… */
- $"2F34 7575 E7AB 08FF 3CBD 328D D95D BDF5" /* /4uuç«.ÿ<½2Ù]½õ */
- $"8070 0FAD B573 A91E 5F83 D32D 3337 A5B7" /* €p.­µs©._ƒÓ-37¥· */
- $"C6A7 3048 8D7C 3F01 F6BF 1BAB D684 0585" /* Ƨ0H|?.ö¿.«Ö„.… */
- $"798A A28D 68A6 4993 22BC F35C E3A7 BABE" /* yŠ¢h¦I“"¼ó\㧺¾ */
- $"0D5B 7E43 2B91 5DA6 6821 0495 4B22 33C0" /* .[~C+‘]¦h!.•K"3À */
- $"1217 1302 A7EB 1093 C8BD 3622 F0FD 14C3" /* ....§ë.“Ƚ6"ðý.à */
- $"EDBA 60FA B4C2 07D5 6D80 C177 9C23 24FE" /* íº`ú´Â.Õm€Áwœ#$þ */
- $"C9E7 77A7 1945 4C1A 8945 129A 2581 498D" /* Éçw§.EL.‰E.š%I */
- $"F2BD 5AD6 EF89 4D80 3EC2 DA29 E093 A726" /* ò½ZÖï‰M€>ÂÚ)à“§& */
- $"88F1 0796 E9F0 8F36 D342 7AD3 DEC2 2CCA" /* ˆñ.–éð6ÓBzÓÞÂ,Ê */
- $"45B9 35A0 DE31 D18B 2954 C38C 4B3A EEA2" /* E¹5 Þ1Ñ‹)TÃŒK:î¢ */
- $"5CD5 333D 6C59 23C7 17B3 C98C 65EE 8117" /* \Õ3=lY#Ç.³ÉŒeî. */
- $"22A2 574D D223 581B D09B 6473 3F85 6E2A" /* "¢WMÒ#X.Лds?…n* */
- $"81B5 F600 CAB6 1A02 3B24 D726 4344 536F" /* µö.ʶ..;$×&CDSo */
- $"99AB 09C8 96EA B41B 01C9 7AC8 9478 B8AB" /* ™«ÆÈ–ê´..ÉzÈ”x¸« */
- $"69E3 1BF1 1100 AFF3 C59C 01FB 8EF9 047D" /* iã.ñ..¯óÅœ.ûŽù.} */
- $"21EF 11DE D2CA BEE2 8372 5DDB C39C DE6E" /* !ï.ÞÒʾâƒr]ÛÜÞn */
- $"B652 35FE FDFB F1E8 2E91 778A 86C3 3117" /* ¶R5þýûñè.‘wІÃ1. */
- $"87D8 A7D5 7862 68B7 30C1 3B32 D209 0256" /* ‡Ø§Õxbh·0Á;2ÒÆ.V */
- $"2BF7 DFEF 17C3 FC30 EF1D 9327 7041 FC3C" /* +÷ßï.Ãü0ï.“'pAü< */
- $"674F 3069 DAB2 0EA5 BB48 DC2C DC66 F660" /* gO0iÚ².¥»HÜ,Üfö` */
- $"9C9B C7C8 3734 C68B 7D5A 60A1 DF3D D3A8" /* œ›ÇÈ74Æ‹}Z`¡ß=Ó¨ */
- $"E60C D15A 11C7 FB3B F75A 358E A7F7 16CB" /* æ.ÑZ.Çû;÷Z5ާ÷.Ë */
- $"67B5 097E E2A2 DE6C E40A FD52 8F75 43EF" /* gµÆ~â¢ÞläÂýRuCï */
- $"F5DF 5A51 BBF5 A074 791F F54F 9724 23C3" /* õßZQ»õ ty.õO—$#Ã */
- $"F5E6 C4A3 E22C 1E06 3B71 A9A2 1C17 0109" /* õæÄ£â,..;q©¢...Æ */
- $"1B59 2742 AB03 0497 3E5A AD73 7FD3 DA51" /* .Y'B«..—>Z­s.ÓÚQ */
- $"9F17 A10E B9CF 7503 3395 8788 9D9D 4A58" /* Ÿ.¡.¹Ïu.3•‡ˆJX */
- $"F9B8 4A61 3DDA 7489 8086 9EAC 4D7D 62DD" /* ù¸Ja=Út‰€†ž¬M}bÝ */
- $"BF8B 9462 1CC0 6912 69BE 3BFE FED7 3174" /* ¿‹”b.Ài.i¾;þþ×1t */
- $"CAA6 A806 FF59 B963 ABEE 508B F428 D15C" /* ʦ¨.ÿY¹c«îP‹ô(Ñ\ */
- $"82FC BA30 6907 C572 F2BD C0DB E9A2 44AF" /* ‚üº0i.Årò½ÀÛé¢D¯ */
- $"EED6 81F7 C602 F802 0374 CD1D 0F41 5E2E" /* îÖ÷Æ.ø..tÍ..A^. */
- $"F54F E7AB C492 54F8 C570 48A6 1603 35D3" /* õOç«Ä’TøÅpH¦..5Ó */
- $"EA1A 6A6D FD79 27E3 F928 4E16 3A2D 43FE" /* ê.jmýy'ãù(N.:-Cþ */
- $"6C3D AFC6 FA1C 578C 7BA9 7343 5B2C 7BB9" /* l=¯Æú.WŒ{©sC[,{¹ */
- $"0614 915A 24C4 CAC1 A2D3 0EAF EAE8 7257" /* ..‘Z$ÄÊÁ¢Ó.¯êèrW */
- $"EA2D 1ED2 3FFE 26A7 3E28 28D0 1AE1 D790" /* ê-.Ò?þ&§>((Ð.á× */
- $"A25D 1C6C BA20 E196 1EEC 9720 92EE 6E62" /* ¢].lº á–.ì— ’înb */
- $"E218 5609 944E 9A2E 9228 117A 6065 93FF" /* â.VÆ”Nš.’(.z`e“ÿ */
- $"2B32 B2C1 7876 E657 E39E 8641 F202 62B4" /* +2²ÁxvæW㞆Aò.b´ */
- $"20C5 99D9 F9E5 7D83 D807 EDB7 9A34 475B" /* Å™Ùùå}ƒØ.í·š4G[ */
- $"4F45 9AE8 ACD6 3098 A0C2 8D14 CBDB 9A2B" /* OEšè¬Ö0˜ Â.ËÛš+ */
- $"0EF7 CB30 8B49 169F 1ECD 6F33 F063 65DA" /* .÷Ë0‹I.Ÿ.Ío3ðceÚ */
- $"2A2F F0B0 EE29 91F7 CA11 748C 5E4E A447" /* *.ð°î)‘÷Ê.tŒ^N¤G */
- $"0F7F 4B32 DB7A 366C 27C4 F178 33B7 5E9B" /* ..K2Ûz6l'Äñx3·^› */
- $"BAAF 29CD A3EF 39BB 5FAD AD2B 5DCA 09E8" /* º¯)Í£ï9»_­­+]ÊÆè */
- $"DB9A DD07 84DD 870E 2A4C 850B BD04 7F9A" /* ÛšÝ.„݇.*L….½..š */
- $"1354 1DAA 0819 F583 1F47 5905 6597 5F07" /* .T.ª..õƒ.GY.e—_. */
- $"7ED6 DFFA BA65 FA6C D01D F65F F833 D479" /* ~ÖßúºeúlÐ.ö_ø3Ôy */
- $"BFD3 F3D8 57BB 3718 EBC8 5A2D 732E 464E" /* ¿ÓóØW»7.ëÈZ-s.FN */
- $"6B46 9512 778B 8066 D5DA D21A 819D 5384" /* kF•.w‹€fÕÚÒ.S„ */
- $"A84C AE56 92E2 2E9A 4D27 8A21 E02D 67FC" /* ¨L®V’â.šM'Š!à-gü */
- $"EAA4 B3D5 9306 1D06 CC9A 84C8 D6C4 C7E1" /* ꤳՓ...Ìš„ÈÖÄÇá */
- $"4F47 E168 43F0 6EB1 9276 ED11 2C29 F1CB" /* OGáhCðn±’ví.,)ñË */
- $"90AB 1975 3405 422B 78EC 7776 FA5C 0A2C" /* «.u4.B+xìwvú\Â, */
- $"F4B1 4F40 32CE D338 8911 EAB4 4CFC 7765" /* ô±O@2ÎÓ8‰.ê´Lüwe */
- $"D9ED C10E 114B 0909 1122 6832 A41E 3365" /* ÙíÁ..KÆÆ."h2¤.3e */
- $"96EF FC81 A398 2FE8 0464 5D18 0C9F C1AF" /* –ïü£˜/è.d]..ŸÁ¯ */
- $"8E6F 42CA BDC9 1DC4 770E 1C2E 01BD 62DB" /* ŽoBʽÉ.Äw....½bÛ */
- $"7798 4167 FC4F B27D D7E6 32CE 7F95 954F" /* w˜AgüO²}׿2Î.••O */
- $"653C 833E B4F1 C6C2 307E 0796 686E 6F5C" /* e<ƒ>´ñÆÂ0~.–hno\ */
- $"6EE2 6260 4C0B 5329 36D8 839E 5F08 319C" /* nâb`L.S)6؃ž_.1œ */
- $"4CAE 85DE 6B64 F427 1358 C9FF 57B9 AF78" /* L®…Þkdô'.XÉÿW¹¯x */
- $"332B 82A6 0EBF 0F83 7A3C 8004 1402 6A12" /* 3+‚¦.¿.ƒz<€...j. */
- $"FEE8 1612 2D8A 47FE 5BDE 2714 B393 E32F" /* þè..-ŠGþ[Þ'.³“ã/ */
- $"013E BD7E 14FA 285D BF61 7CDA 3A92 734A" /* .>½~.ú(]¿a|Ú:’sJ */
- $"520E 978D 8736 6AA9 847B 05C9 F28B 3D9A" /* R.—‡6j©„{.Éò‹=š */
- $"9B2E 721C 9082 3EC1 362C D516 D306 1EB9" /* ›.r.‚>Á6,Õ.Ó..¹ */
- $"A95C EC63 3111 4ED2 054A EFF8 F26A 0E36" /* ©\ìc1.NÒ.Jïøòj.6 */
- $"7445 26A0 464F CEDC 924D B183 FAEF 28F7" /* tE& FOÎÜ’M±ƒúï(÷ */
- $"AF76 2DBA F15C 4F45 4BFD E003 CDC1 A878" /* ¯v-ºñ\OEKýà.ÍÁ¨x */
- $"6FB4 207C 2A45 1ED9 CE49 2495 F6A9 77E8" /* o´ |*E.ÙÎI$•ö©wè */
- $"E7FF 7FFF 7FFF 7FFF 70EC F373 E872 28BA" /* çÿ.ÿ.ÿ.ÿpìósèr(º */
- $"A0BB 38E4 AC79 94DA 6562 832A 9A7B EEA8" /*  »8ä¬y”Úebƒ*š{î¨ */
- $"6B09 FEA7 9249 2005 E7D1 D721 4761 B6DB" /* kÆþ§’I .çÑ×!Ga¶Û */
- $"6DB6 DB6D 98C5 C208 FD98 41AA F430 3EAE" /* m¶Ûm˜ÅÂ.ý˜Aªô0>® */
- $"7118 7229 50B1 07D8 C5CA 010D 4AB4 DE82" /* q.r)P±.ØÅÊ..J´Þ‚ */
- $"53D3 E184 6561 DE5F 7236 BBF5 550D 4A83" /* SÓá„eaÞ_r6»õU.Jƒ */
- $"555B 5C0F 9C0E F052 0080 F4AC 3912 DD30" /* U[\.œ.ðR.€ô¬9.Ý0 */
- $"47C9 B77E C632 15D7 8EB6 CD51 0454 A805" /* GÉ·~Æ2.׎¶ÍQ.T¨. */
- $"2DAD F687 6CB7 B37F 2289 759F F7D5 8839" /* -­ö‡l·³."‰uŸ÷Õˆ9 */
- $"B3E6 BCA5 AA89 9D9D 599A 5BDD 54B9 7F7D" /* ³æ¼¥ª‰Yš[ÝT¹.} */
- $"2770 11ED 2217 C539 0204 16FF 728A C52A" /* 'p.í".Å9...ÿrŠÅ* */
- $"2D24 5FC7 E1D7 C47E 1DE8 C3F0 EA38 E730" /* -$_Çá×Ä~.èÃðê8ç0 */
- $"2D9D 0AC5 991A F5DD 38EC 007B A963 8B4D" /* -ÂÅ™.õÝ8ì.{©c‹M */
- $"51BA A9FC AE25 908A 1B70 9145 EBA2 38C4" /* Qº©ü®%Š.p‘Eë¢8Ä */
- $"168F 70BB 10A5 CAA5 A249 1974 03F3 AB57" /* .p».¥Ê¥¢I.t.ó«W */
- $"3611 30C5 1F14 529F 040A A8EC EBDF F2FF" /* 6.0Å..RŸ.¨ìëßòÿ */
- $"232B 83FE C2D0 59D9 93C2 2A8A F86A 997F" /* #+ƒþÂÐYÙ“Â*Šøj™. */
- $"3207 03A7 C406 E96C C96F 23F1 1490 95DF" /* 2..§Ä.élÉo#ñ.•ß */
- $"4024 67DC 3DE6 E1B1 EB60 1026 8786 531C" /* @$gÜ=æá±ë`.&‡†S. */
- $"9A51 378D EE86 881F 496C 8854 9459 7799" /* šQ7.IlˆT”Yw™ */
- $"11EC 4196 0C22 0F05 3762 D8F4 C348 7299" /* .ìA–."..7bØôÃHr™ */
- $"793E 0718 14D3 D09C C192 80E1 9F7C 5CFA" /* y>...ÓМÁ’€áŸ|\ú */
- $"429C 7960 2F8B 9063 C7E1 1447 7F52 D850" /* Bœy`/‹cÇá.G.RØP */
- $"B80A F1D8 BE98 DC3C 9C44 3AB7 3DA7 E08C" /* ¸Âñؾ˜Ü<œD:·=§àŒ */
- $"E7B6 07CE 2B69 C0E9 0C21 6133 1EC5 DAB5" /* ç¶.Î+iÀé.!a3.ÅÚµ */
- $"B079 413B FBA4 0259 78B8 DA3A E6D1 4AAC" /* °yA;û¤.Yx¸Ú:æÑJ¬ */
- $"2459 93C8 AD9A D69C AC40 5CF7 7385 1B18" /* $Y“È­šÖœ¬@\÷s….. */
- $"D67D 82BD 5E44 3DF8 5D2F E6D3 CE47 0191" /* Ö}‚½^D=ø]/æÓÎG.‘ */
- $"6E57 0F2F E8E8 9FF0 14BC 21F1 7720 6F34" /* nW./èèŸð.¼!ñw o4 */
- $"1EEE 5EF6 F8FD 5481 44E3 AB6B B06E 2556" /* .î^öøýTDã«k°n%V */
- $"6F07 AD65 FC95 7C32 7487 10A0 3C20 9CA7" /* o.­eü•|2t‡. < œ§ */
- $"B0EB F703 2D09 F0A6 D3FD 55F6 354B EDB0" /* °ë÷.-Æð¦ÓýUö5Kí° */
- $"179B B267 B9EB 8DA1 ED8E 7D0F 1AFF 4D50" /* .›²g¹ë¡íŽ}..ÿMP */
- $"C1C7 A686 586C 6A26 3B0B 4292 60A0 A804" /* ÁǦ†Xlj&;.B’` ¨. */
- $"04F6 5FDB 0F76 E2BC D680 20B5 46AE 399D" /* .ö_Û.vâ¼Ö€ µF®9 */
- $"CC54 82A4 1DCA 08E7 E2B4 6710 ABD8 FC18" /* ÌT‚¤.Ê.çâ´g.«Øü. */
- $"949B 7076 11CD 598E 2A8B 99FC CC28 EC17" /* ”›pv.ÍYŽ*‹™üÌ(ì. */
- $"451C DE31 F7F4 C47E 3ABB AF03 FDC6 D875" /* E.Þ1÷ôÄ~:»¯.ýÆØu */
- $"BD0C AB3E B78F F942 A53E E5F8 CA09 414D" /* ½.«>·ùB¥>åøÊÆAM */
- $"7544 D5B4 8367 3256 6D8C CB66 6DE7 E99C" /* uDÕ´ƒg2VmŒËfmçéœ */
- $"88E9 FCDC EB55 F67B 20E7 F44D 7616 6B29" /* ˆéüÜëUö{ çôMv.k) */
- $"124A C9AB 95C7 E9A8 209D EDA5 499F 2D2F" /* .JÉ«•Çé¨ í¥IŸ-/ */
- $"20E5 DE8C 2EEE 92AF 4BD6 484B 7E18 2D81" /* åÞŒ.î’¯KÖHK~.- */
- $"0502 F439 C742 BA21 693B 43C5 60DF 8BA0" /* ..ô9ÇBº!i;CÅ`ß‹  */
- $"9EAC 0A98 DFE4 DB4B 0BE1 E526 9B74 5982" /* ž¬Â˜ßäÛK.áå&›tY‚ */
- $"1817 EA6B 067A D3E4 8786 883D 26DB D361" /* ..êk.zÓ䇆ˆ=&ÛÓa */
- $"C40F 89F4 B31F 2AF3 1369 FDA9 889A 5620" /* Ä.‰ô³.*ó.iý©ˆšV */
- $"9AE7 4384 7184 9D7F 6C37 F79B 9422 ADF3" /* šçC„q„.l7÷›”"­ó */
- $"2BEA A620 14CF 0267 110E AB20 594B F1DA" /* +ê¦ .Ï.g..« YKñÚ */
- $"9D7F DB53 3723 1A4E 0DEC DF68 3A10 078F" /* .ÛS7#.N.ìßh:.. */
- $"8CA5 471B 4400 0975 92AA A351 8C66 5DDA" /* Œ¥G.D.Æu’ª£QŒf]Ú */
- $"0E4E C7B1 286F 2F7C E0EB 24CC 0A8B CAF8" /* .NDZ(o/|àë$ÌÂ‹Êø */
- $"4F0F 75E5 CACF 26F5 0FFE 86A8 1E77 5F03" /* O.uåÊÏ&õ.þ†¨.w_. */
- $"A8B5 A544 F04B A521 B3FA 854A 64FA 70CD" /* ¨µ¥DðK¥!³ú…JdúpÍ */
- $"526F 97AE 807A 05FC 3F67 2471 61E5 2715" /* Ro—®€z.ü?g$qaå'. */
- $"5774 E452 7E4A CDDA 6E48 0DA2 04B3 3A29" /* WtäR~JÍÚnH.¢.³:) */
- $"DE10 8F75 3A3A 559D A881 B948 74F3 AB92" /* Þ.u::U¨¹Htó«’ */
- $"B154 0F88 A11B A00B 25ED 9A59 B894 618E" /* ±T.ˆ¡. .%íšY¸”aŽ */
- $"AD45 3D59 9C08 49EA 076C CD63 8F49 B714" /* ­E=Yœ.Iê.lÍcI·. */
- $"32B3 8743 2506 F55A C011 CBEF C94A 8606" /* 2³‡C%.õZÀ.ËïÉJ†. */
- $"EDE4 BE7D 2DC9 8830 6C23 91E0 0209 440C" /* íä¾}-Ɉ0l#‘à.ÆD. */
- $"9409 1457 6CA0 2201 8FF4 7573 54F8 CCEC" /* ”Æ.Wl ".ôusTøÌì */
- $"D201 4A3A 66A6 B191 4E14 4CB1 08B4 2100" /* Ò.J:f¦±‘N.L±.´!. */
- $"BCF2 3A0D 696F 4582 F8B0 3A60 2D09 E9A7" /* ¼ò:.ioE‚ø°:`-Æé§ */
- $"8E83 CF44 A16A 6516 31C1 B51E 2DFE BDAC" /* ŽƒÏD¡je.1Áµ.-þ½¬ */
- $"356B F402 856C BEA0 109C A125 A759 E580" /* 5kô.…l¾ .œ¡%§Yå€ */
- $"3501 F500 F252 9533 F180 6E7D 30A8 FD62" /* 5.õ.òR•3ñ€n}0¨ýb */
- $"7FD6 B4EB 9120 8504 493A DD87 D79A 0CB1" /* .Ö´ë‘ ….I:݇ך.± */
- $"B674 7010 830D 8A38 5B44 B11D 3632 3FA5" /* ¶tp.ƒ.Š8[D±.62?¥ */
- $"CE31 CE9A 1670 AF20 16F6 BDA6 4980 002E" /* Î1Κ.p¯ .ö½¦I€.. */
- $"3E9E 8AB0 8B1F 63C5 28C3 7914 2833 137F" /* >žŠ°‹.cÅ(Ãy.(3.. */
- $"0915 DD39 7D38 49A3 6054 B5DC 2509 EE11" /* Æ.Ý9}8I£`TµÜ%Æî. */
- $"D68A 5C2A C75B 5B9F 7A9A FF3A D06F 3331" /* ÖŠ\*Ç[[Ÿzšÿ:Ðo31 */
- $"29E6 A9F4 8AD5 E0D9 7FB9 84B1 F403 8910" /* )æ©ôŠÕàÙ.¹„±ô.‰. */
- $"1168 1270 19E2 E385 0353 0FFF 697F 96BE" /* .h.p.âã….S.ÿi.–¾ */
- $"EF55 21CA 25A1 CE5E 0CD7 03A9 094F 51FE" /* ïU!Ê%¡Î^.×.©ÆOQþ */
- $"5314 E59F 90EB 907A E37A DD9D 182A E41C" /* S.åŸëzãzÝ.*ä. */
- $"CFFB 7262 0D9E B904 8D95 2DE3 E02B F5CB" /* Ïûrb.ž¹.•-ãà+õË */
- $"BF61 6012 924E 50D3 2D8D 6C25 FC60 8D19" /* ¿a`.’NPÓ-l%ü`. */
- $"9855 8BF2 5400 0000 04E3 7684 B40E 9EE7" /* ˜U‹òT....ãv„´.žç */
- $"21F8 CB76 250B 7CE0 2605 7C84 7E9F F226" /* !øËv%.|à&.|„~Ÿò& */
- $"6B94 0DB5 02AA 61E7 A9FF 5D9F A9F2 B546" /* k”.µ.ªaç©ÿ]Ÿ©òµF */
- $"2417 2E4D B238 ADDF 9233 5911 1D61 D35A" /* $..M²8­ß’3Y..aÓZ */
- $"8788 DF34 284A 9664 B91E 7A11 4568 B395" /* ‡ˆß4(J–d¹.z.Eh³• */
- $"7C74 C891 2A46 C056 EE92 0459 D81C A41F" /* |tÈ‘*FÀVî’.YØ.¤. */
- $"CA5E 4752 3ADE 89AB 995B 2BF2 D070 41B1" /* Ê^GR:Þ‰«™[+òÐpA± */
- $"EBFE 65BF FF61 55F5 5460 A4E0 33CF 7F1E" /* ëþe¿ÿaUõT`¤à3Ï.. */
- $"691A 0DA4 9372 4DCD 4A7C FF30 7DA5 4AD0" /* i..¤“rMÍJ|ÿ0}¥JÐ */
- $"1236 3C90 00C2 4517 FF78 771E DA05 952D" /* .6<.ÂE.ÿxw.Ú.•- */
- $"1085 D433 FD50 1E6F D583 2585 CBD6 5CFC" /* .…Ô3ýP.oÕƒ%…ËÖ\ü */
- $"9EF2 539B BE7A CCA1 ABF6 5AED 484B FF78" /* žòS›¾zÌ¡«öZíHKÿx */
- $"D6BD 435E E56E 5510 3047 49DE C511 72CF" /* Ö½C^ånU.0GIÞÅ.rÏ */
- $"72A0 B2CE 5E4D E2DA 0AFA FEDE BDFD 3167" /* r ²Î^MâÚÂúþÞ½ý1g */
- $"02FE 3FBE A1B9 7A5F 205B 7D60 1BA3 C975" /* .þ?¾¡¹z_ [}`.£Éu */
- $"5949 A641 5A3E 5AF2 F237 53BE FCAC 71F1" /* YI¦AZ>Zòò7S¾ü¬qñ */
- $"E3E3 6AEB 35B9 41BD C4B6 3400 DBA0 4B7F" /* ããjë5¹A½Ä¶4.Û K. */
- $"FF79 17FD 23F9 918D E532 F6BD F949 B633" /* ÿy.ý#ù‘å2ö½ùI¶3 */
- $"6A36 7600 17D8 C912 DB72 6F48 869C 0D66" /* j6v..ØÉ.ÛroH†œ.f */
- $"1410 074A 8F5B 629C 5B8B F293 6DB6 DB6D" /* ...J[bœ[‹ò“m¶Ûm */
- $"B6DB 6740 B8F8 BF85 2938 ECDA 6390 6537" /* ¶Ûg@¸ø¿…)8ìÚce7 */
- $"5986 A2A6 B52C A20D F057 C41F 660A C203" /* Y†¢¦µ,¢.ðWÄ.fÂÂ. */
- $"E5C1 68B0 9D56 DAD8 F20C 665C 5D04 4BA2" /* åÁh°VÚØò.f\].K¢ */
- $"46FF 7DB5 4880 6121 2EA3 5D2A 82F4 B18A" /* Fÿ}µH€a!.£]*‚ô±Š */
- $"50FC 2D12 DEFE 1F4D 01BF 3315 10D3 5D94" /* Pü-.Þþ.M.¿3..Ó]” */
- $"11B1 0221 28B8 56D9 4CED 012D D9C9 4005" /* .±.!(¸VÙLí.-ÙÉ@. */
- $"316F E887 29A8 3E83 9E25 FF1F A4C1 5D25" /* 1oè‡)¨>ƒž%ÿ.¤Á]% */
- $"8893 36E0 73BE DE25 456A 4678 B7C5 AD7A" /* ˆ“6às¾Þ%EjFx·Å­z */
- $"90C9 3950 942F 1459 C737 31EF 991F 241B" /* É9P”/.YÇ71ï™.$. */
- $"C294 7CFB 9461 B43A 8D37 8A6D BBC8 D7F6" /* ”|û”a´:7Šm»È×ö */
- $"A128 281D DF2B EAC5 A154 E6D9 FF53 984D" /* ¡((.ß+êÅ¡TæÙÿS˜M */
- $"550E 9C70 3F64 0E0E 0940 0AFC 5CC9 CF43" /* U.œp?d..Æ@Âü\ÉÏC */
- $"7184 3D0F 9FDE 08DF EC31 B86E 0D38 AF71" /* q„=.ŸÞ.ßì1¸n.8¯q */
- $"29F1 A21D 7847 7150 6DCA 9211 C778 F1A4" /* )ñ¢.xGqPmÊ’.Çxñ¤ */
- $"26AA B90D 1A39 DB92 4924 9249 2493 36D2" /* &ª¹..9Û’I$’I$“6Ò */
- $"4924 9249 2492 49FE 069C E7B9 CB0D 4E87" /* I$’I$’Iþ.œç¹Ë.N‡ */
- $"7D9E 9D29 FC64 8A6F 6185 2BD9 806F 760B" /* }ž)üdŠoa…+Ù€ov. */
- $"464D 4732 BD90 0E7D CABF 2B6F 2A78 8608" /* FMG2½.}Ê¿+o*x†. */
- $"DEF5 406F D401 3FD4 AE82 058D D6C8 B980" /* Þõ@oÔ.?Ô®‚.Öȹ€ */
- $"FECA D9B9 E7B6 3982 9FD3 81EA 544B 30BD" /* þÊÙ¹ç¶9‚ŸÓêTK0½ */
- $"7E56 FD78 66FD 5A41 D0BD 7714 5FAF 2A1E" /* ~VýxfýZAнw._¯*. */
- $"8FDA B705 EAAE F6F2 D69C 9812 7194 A56E" /* Ú·.ê®öòÖœ˜.q”¥n */
- $"DB55 BF75 C4E4 BDCD 9FC2 ACAD C428 829F" /* ÛU¿uÄä½ÍŸÂ¬­Ä(‚Ÿ */
- $"2409 3BB2 A894 8020 A8E7 FC16 F4FF 4E84" /* $Æ;²¨”€ ¨çü.ôÿN„ */
- $"C06E 889C 1C74 96AD 5420 F825 1A2B 015C" /* Ànˆœ.t–­T ø%.+.\ */
- $"6BC2 31EE 64AB 7A44 15E5 3458 8040 AEEF" /* kÂ1îd«zD.å4X€@®ï */
- $"F6BD 7D58 6478 8344 018F D3C6 2E33 69A4" /* ö½}XdxƒD.ÓÆ.3i¤ */
- $"E5E8 721A 5B2F 777B C0D8 0A05 2CE7 EEC8" /* åèr.[/w{ÀØÂ.,çîÈ */
- $"69EF 417B A960 D320 842E 84DE D442 AB2F" /* iïA{©`Ó „.„ÞÔB«/ */
- $"3B31 84FE DCFC A608 2E09 AA42 60F6 DB2E" /* ;1„þÜü¦..ƪB`öÛ. */
- $"DA5B C95D D10A 77BE AD48 B5FF 0557 A5AC" /* Ú[É]ÑÂw¾­Hµÿ.W¥¬ */
- $"327B F763 FDA1 32BF 7308 3EFC 0C2B 2D22" /* 2{÷cý¡2¿s.>ü.+-" */
- $"584A F9CA BFB4 78FF 6E67 42CC B491 492B" /* XJùÊ¿´xÿngBÌ´‘I+ */
- $"17C3 C746 9966 5780 BA6C 2798 472E 1CFF" /* .ÃÇF™fW€ºl'˜G..ÿ */
- $"6A32 69A0 86E0 44C6 1679 08F9 9928 48D9" /* j2i †àDÆ.y.ù™(HÙ */
- $"3DA0 CBA0 1E5E 2618 7162 51C9 DEF0 56A0" /* = Ë .^&.qbQÉÞðV  */
- $"1924 F126 CAAD F248 A1A4 2816 13A7 FE76" /* .$ñ&Ê­òH¡¤(..§þv */
- $"594E 647C 36C4 C014 CDC7 5C89 DBAB 9854" /* YNd|6ÄÀ.ÍÇ\‰Û«˜T */
- $"9094 FC96 5FED 7476 AA3C DF0B B47B C123" /* ”ü–_ítvª<ß.´{Á# */
- $"BE6D CD5A BA07 CC19 94FC DC37 B85C 0FD2" /* ¾mÍZº.Ì.”üÜ7¸\.Ò */
- $"9FED 62E6 F910 2F49 529E CE10 9738 D296" /* Ÿíbæù./IRžÎ.—8Ò– */
- $"A81C 1A0D 0FBF 7CAE DB93 40C0 3BC9 5A0C" /* ¨....¿|®Û“@À;ÉZ. */
- $"B23D FBD4 3863 C520 03A0 D966 5327 A0A2" /* ²=ûÔ8cÅ . ÙfS' ¢ */
- $"DD06 B7A1 942B 0A75 CB23 8664 4159 8647" /* Ý.·¡”+ÂuË#†dAY†G */
- $"2725 DAF6 693A 58D7 7A7D B34A 393D FE7A" /* '%Úöi:X×z}³J9=þz */
- $"C105 C374 193C 123C 130E 062C 8AB2 32FD" /* Á.Ãt.<.<...,в2ý */
- $"80E0 72E3 6AEA 2078 5D7C D3E5 4E20 D927" /* €àrãjê x]|ÓåN Ù' */
- $"157E 9DC5 1A29 2F0F C326 AFE3 3ACF C361" /* .~Å.)/.Ã&¯ã:ÏÃa */
- $"8C45 D79C EB27 7441 E4C7 8BFD 5832 DB93" /* ŒEלë'tAäÇ‹ýX2Û“ */
- $"78F5 B9DB BA4E 329E A262 C467 88DC C540" /* xõ¹ÛºN2ž¢bÄgˆÜÅ@ */
- $"78E0 4E55 34F3 806E 2DEA B371 E9B5 D8DF" /* xàNU4ó€n-ê³qéµØß */
- $"5EDA B5B9 1C48 5A11 ECAB E4F8 67B7 C76E" /* ^Úµ¹.HZ.ì«äøg·Çn */
- $"460F 8E6A C7BA B5F8 75F2 9105 1480 FD1A" /* F.ŽjǺµøuò‘..€ý. */
- $"80EB DB48 6115 AA6E 9AEA A07C 57B0 1A7F" /* €ëÛHa.ªnšê |W°.. */
- $"0CBF D5DE 47A7 89BE 4CAE 19FE 7B79 5839" /* .¿ÕÞG§‰¾L®.þ{yX9 */
- $"232D 495E 476C E267 D9D2 5257 F0E6 3EB5" /* #-I^GlâgÙÒRWðæ>µ */
- $"F140 AAAF 1E36 BA04 086A EEC5 3232 7958" /* ñ@ª¯.6º..jîÅ22yX */
- $"72E3 FCC3 9488 B44C 0C15 EF6B 811B CF97" /* rãüÔˆ´L..ïk.Ï— */
- $"0532 2B88 663D 8675 6050 AB94 A435 C0FC" /* .2+ˆf=†u`P«”¤5Àü */
- $"9E08 9873 92AF 6859 F7F5 64B0 0BA5 FA68" /* ž.˜s’¯hY÷õd°.¥úh */
- $"3557 0898 9E0D 5795 BF67 2866 5FB6 63C6" /* 5W.˜ž.W•¿g(f_¶cÆ */
- $"4F82 42CE A682 DC8D CB18 D4FE 6252 95D1" /* O‚BΦ‚ÜË.ÔþbR•Ñ */
- $"C85C 6B2C 0FC0 7C9D 5A80 F93B 8900 F93A" /* È\k,.À|Z€ù;‰.ù: */
- $"8EE6 7513 4AFA 1609 3CEE D5EB B420 A1CE" /* Žæu.Jú.Æ<îÕë´ ¡Î */
- $"318D 6F67 720A 7F84 4127 C0F2 9193 35CE" /* 1ogrÂ.„A'Àò‘“5Î */
- $"6D97 9682 5E5D B9FC 5A97 3B71 AB1F 64AA" /* m—–‚^]¹üZ—;q«.dª */
- $"3383 1F0E C0E9 26BE E6EB 24CD 499F F2BA" /* 3ƒ..Àé&¾æë$ÍIŸòº */
- $"997D E886 6FF8 C6B5 0607 1259 7715 7539" /* ™}è†oøÆµ...Yw.u9 */
- $"4B57 F7A9 56A7 A04B 031F 0786 6C02 E7BC" /* KW÷©V§ K...†l.ç¼ */
- $"8256 7F27 A39A B66D 6B95 6C11 CDE4 C580" /* ‚V.'£š¶mk•l.ÍäÅ€ */
- $"54DE 7E26 129C EB67 ABC8 455E 6CC3 453E" /* TÞ~&.œëg«ÈE^lÃE> */
- $"F9A8 3ED5 9B43 4EB8 384E 0F7B 28E0 16FF" /* ù¨>Õ›CN¸8N.{(à.ÿ */
- $"1342 18B1 31B6 EAEF 4C40 36F7 0CFF 6AFF" /* .B.±1¶êïL@6÷.ÿjÿ */
- $"8059 5D1C 275B 4F7D B392 4DB0 5E5D 4304" /* €Y].'[O}³’M°^]C. */
- $"4848 2A3A C93F BAD6 638D 315A 8771 1150" /* HH*:É?ºÖc1Z‡q.P */
- $"1D41 B6A7 C9B8 782E 19D8 F8E7 07EB ED20" /* .A¶§É¸x..Øøç.ëí */
- $"7D4E AFFF 5FD2 4FA0 2B48 B549 6A50 AD81" /* }N¯ÿ_ÒO +HµIjP­ */
- $"F11D 357F 7CB2 4B8B F28B 6C97 2C23 58A3" /* ñ.5.|²K‹ò‹l—,#X£ */
- $"92E8 2BFB 77F2 1ECE 7A2A C437 47E3 A833" /* ’è+ûwò.Îz*Ä7Gã¨3 */
- $"D60C C3CA 168A 85B8 620C 109C 4134 35BF" /* Ö.ÃÊ.Š…¸b..œA45¿ */
- $"ECCB 3629 944F AD29 444A C4B6 F019 F19B" /* ìË6)”O­)DJĶð.ñ› */
- $"4189 B1D3 8F28 65B9 85D8 C715 2E1A 267D" /* A‰±Ó(e¹…ØÇ...&} */
- $"A7DB 4C90 9829 BC86 E14C 9F44 757D 5436" /* §ÛL˜)¼†áLŸDu}T6 */
- $"9C38 979D 3654 9A63 E572 7864 E513 A083" /* œ8—6Tšcårxdå. ƒ */
- $"C943 97C5 A88B 23A2 4ECC E4F1 AEED F3EC" /* ÉC—Ũ‹#¢NÌäñ®íóì */
- $"C57D F254 B087 7E1F 81B3 59E6 E2A0 E5CB" /* Å}òT°‡~.³Yæâ åË */
- $"B710 EF71 0598 01BF 1400 3814 0759 EDA8" /* ·.ïq.˜.¿..8..Yí¨ */
- $"386C 3DF0 F1C5 CA93 612F C58D 71BA 6ED6" /* 8l=ðñÅÊ“a/ÅqºnÖ */
- $"FE35 90B4 9C10 A938 33B6 6987 E407 AE7B" /* þ5´œ.©83¶i‡ä.®{ */
- $"5B1A 8E0E BE53 1C94 D747 9303 2ED9 13FA" /* [.Ž.¾S.”×G“..Ù.ú */
- $"226C F38A 7134 3CF6 1923 B85F A254 0048" /* "lóŠq4<ö.#¸_¢T.H */
- $"A765 B678 FC9C 1E2C E183 FC80 CA83 9572" /* §e¶xüœ.,áƒü€Êƒ•r */
- $"E573 B224 9894 7316 C931 4A49 C28F 6E33" /* ås²$˜”s.É1JIÂn3 */
- $"B579 EE14 84BC 61CC 351B 41FB 7095 5F8C" /* µyî.„¼aÌ5.Aûp•_Œ */
- $"1B15 6DAF FF7F F8EA 5A11 5453 6ECA 1C02" /* ..m¯ÿ.øêZ.TSnÊ.. */
- $"C8A4 F40F AD00 7BC9 EDFD AC3A 28E4 546F" /* Ȥô.­.{Éíý¬:(äTo */
- $"1E36 BE45 897E F5D5 BE25 E84B 57C6 9080" /* .6¾E‰~õÕ¾%èKWÆ€ */
- $"B6C4 79B8 153B 110F D90B 215D 401C 0453" /* ¶Äy¸.;..Ù.!]@..S */
- $"8243 BF4A CDAE 9270 0658 462F E0C7 82A8" /* ‚C¿JÍ®’p.XF/àÇ‚¨ */
- $"E155 C547 D144 EBAD 74EC EAFF 7799 6D50" /* áUÅGÑDë­tìêÿw™mP */
- $"D0F9 6BA4 D8B3 0FBB B75B BC48 D5BA 8EAB" /* Ðùk¤Ø³.»·[¼HÕºŽ« */
- $"FF7F 3A2A 820F D817 FB8B 7590 ED4A 3D7B" /* ÿ.:*‚.Ø.û‹uíJ={ */
- $"DAF8 C05F BDCF 1B7C 8862 53A8 95D6 C0DF" /* ÚøÀ_½Ï.|ˆbS¨•ÖÀß */
- $"4069 36DA 0739 783C C432 1E0C 7DA6 2D70" /* @i6Ú.9x<Ä2..}¦-p */
- $"B33A C5AD 810A FBBD E9BB B776 6463 9FDC" /* ³:Å­Âû½é»·vdcŸÜ */
- $"B401 211D 81BA A9FA 8761 ED36 A1EF 439D" /* ´.!.º©ú‡aí6¡ïC */
- $"9880 BE88 E045 3068 F59F 7AD7 EFFF 7FFC" /* ˜€¾ˆàE0hõŸz×ïÿ.ü */
- $"5562 1F00 0818 22D6 5002 F762 7A20 0DC0" /* Ub...."ÖP.÷bz .À */
- $"3ADD FF5D 1851 D391 F011 0000 0000 0000" /* :Ýÿ].QÓ‘ð....... */
- $"0000 0000 0138 5715 ED61 F2C5 2C28 30C0" /* .....8W.íaòÅ,(0À */
- $"F669 9389 6153 3A95 E010 CCA0 2FEF B36F" /* öi“‰aS:•à.Ì /ï³o */
- $"9576 F8C0 F17B 27F6 F6FA 412C 70C7 CF14" /* •vøÀñ{'ööúA,pÇÏ. */
- $"7625 6871 7FE2 16C9 B6E9 5BF1 1A16 E2F0" /* v%hq.â.ɶé[ñ..âð */
- $"945D E51E CCF9 0970 E586 517C 475F 8856" /* ”]å.ÌùÆpå†Q|G_ˆV */
- $"CA0C 1DD9 E001 D7BC 1876 745C 8077 672D" /* Ê..Ùà.×¼.vt\€wg- */
- $"CECA FF0B 01D1 76FA 32F5 C047 26FB 451F" /* ÎÊÿ..Ñvú2õÀG&ûE. */
- $"5261 79B6 5990 79C9 4DF7 5B69 D548 E894" /* Ray¶YyÉM÷[iÕHè” */
- $"F249 0C84 D3F0 9555 7B99 EA27 FA38 184E" /* òI.„Óð•U{™ê'ú8.N */
- $"F863 AFA1 CE80 AEBC CB89 DD99 B8E2 0BEC" /* øc¯¡Î€®¼Ë‰Ý™¸â.ì */
- $"2F74 E534 3FF4 B50A 4B04 02B1 C178 B189" /* /tå4?ôµÂK..±Áx±‰ */
- $"D30F 77DC 8A15 8C9E AF87 1DCD D545 AC6B" /* Ó.wÜŠ.Œž¯‡.ÍÕE¬k */
- $"CAFB 832B E240 6752 8EF2 9BDF 76E8 621D" /* Êûƒ+â@gRŽò›ßvèb. */
- $"892E 384C 7BF0 4DE8 F910 7689 C3F0 E7E9" /* ‰.8L{ðMèù.v‰Ãðçé */
- $"E401 C781 F341 A84F 6922 E97B FC22 E259" /* ä.ÇóA¨Oi"é{ü"âY */
- $"6B26 9B03 14A7 DFA1 B7BD CBED 9539 5DE3" /* k&›..§ß¡·½Ëí•9]ã */
- $"2041 2F5F A37A 2F23 00FC 6424 D7F8 902E" /* A/_£z/#.üd$×ø. */
- $"7261 227B B4EC F4D1 9C18 22C3 8CA5 EFF8" /* ra"{´ìôÑœ."ÃŒ¥ïø */
- $"5701 6734 9110 8B4E D9E0 EE8F 7FEA 202F" /* W.g4‘.‹NÙàî.ê / */
- $"CFF7 5CC7 6107 0B22 B0BE A87B 32EF 0FA8" /* Ï÷\Ça.."°¾¨{2ï.¨ */
- $"3D2D 794E 556E 6089 ACBA D46C 17EC A9DC" /* =-yNUn`‰¬ºÔl.ì©Ü */
- $"0F4E D57D B8C8 EED1 F9D4 F96A 7BEE 3794" /* .NÕ}¸ÈîÑùÔùj{î7” */
- $"49DE 3AA7 EE2E 0B25 A47C 966A D90D C792" /* IÞ:§î..%¤|–jÙ.Ç’ */
- $"6304 7C05 C6EB A26D 83B8 3E0C AAF5 AFFE" /* c.|.Æë¢mƒ¸>.ªõ¯þ */
- $"FDC3 F7C4 C0A3 C3ED E8D2 0FAB AC58 1F56" /* ýÃ÷ÄÀ£ÃíèÒ.«¬X.V */
- $"FF40 F44B 4289 C6D7 CC17 A019 AD4A C889" /* ÿ@ôKB‰Æ×Ì. .­Jȉ */
- $"67AD 0673 32A0 B6BA 087E 7279 19C2 025F" /* g­.s2 ¶º.~ry.Â._ */
- $"DB0E 0E97 02D9 2268 5BCA CDE6 B94E 8D9B" /* Û..—.Ù"h[ÊÍæ¹N› */
- $"03EB D786 1698 2D8A 2ECD 432E D615 931F" /* .ë׆.˜-Š.ÍC.Ö.“. */
- $"452B 5D40 0950 5BBE A70F BD95 9F0E 8B95" /* E+]@ÆP[¾§.½•Ÿ.‹• */
- $"86B7 47DE 0757 BFE4 9775 3082 9D22 863A" /* †·GÞ.W¿ä—u0‚"†: */
- $"E404 B84C 5E88 8424 31DD 689A D234 88E2" /* ä.¸L^ˆ„$1ÝhšÒ4ˆâ */
- $"971F 9E59 429C 6C7E 3670 8F7C 8F86 A80D" /* —.žYBœl~6p|†¨. */
- $"848E E78B 5331 058E E444 FEC2 269A 7E23" /* „Žç‹S1.ŽäDþÂ&š~# */
- $"608D 0502 E075 F7A4 DACF 515F AA08 31C1" /* `..àu÷¤ÚÏQ_ª.1Á */
- $"1275 02C0 F37E F465 ADE9 1918 F1F0 0E4F" /* .u.Àó~ôe­é..ñð.O */
- $"E5A4 41A5 F655 22D9 946A 7FEC 0720 3D3A" /* å¤A¥öU"Ù”j.ì. =: */
- $"4961 05B2 F02D 51D2 1212 084B B3EA 5DC9" /* Ia.²ð-QÒ...K³ê]É */
- $"F986 5763 A2AC E2AC 1144 5DC3 E6A5 D092" /* ù†Wc¢¬â¬.D]Ãæ¥Ð’ */
- $"3654 3737 A598 21C2 34FF 097C B8B8 5934" /* 6T77¥˜!Â4ÿÆ|¸¸Y4 */
- $"C947 05C9 B4BA F52B 99FF 3AFE 6B15 2CAE" /* ÉG.É´ºõ+™ÿ:þk.,® */
- $"06CF D962 CCDE D937 D4AE B3D9 7E92 E2AF" /* .ÏÙbÌÞÙ7Ô®³Ù~’⯠*/
- $"8F4E 31CE 06E7 0AD8 71DB 4456 7101 E221" /* N1Î.çÂØqÛDVq.â! */
- $"74AC 1159 9EDF 9841 CFA3 E04F DECF 6FD3" /* t¬.Yžß˜AÏ£àOÞÏoÓ */
- $"90CC C22F 63B0 45CC C98B 3125 33C0 CFBA" /* ÌÂ/c°EÌÉ‹1%3ÀϺ */
- $"4CE7 3FAD F2E4 85E7 0C74 35A5 97E9 8672" /* Lç?­òä…ç.t5¥—é†r */
- $"9180 E059 EF0F C416 E25F 0E83 095A 36AA" /* ‘€àYï.Ä.â_.ƒÆZ6ª */
- $"8E74 F1F7 11A8 49DD C47E 5098 D576 DC41" /* Žtñ÷.¨IÝÄ~P˜ÕvÜA */
- $"D6FC 7C37 E307 A2DB 997E A046 C114 CF04" /* Öü|7ã.¢Û™~ FÁ.Ï. */
- $"FD8E 32D1 2AC6 3A81 C8B6 C680 6E60 7826" /* ýŽ2Ñ*Æ:ȶƀn`x& */
- $"9A40 9C80 BA1B 4DE8 854B 09D9 33B3 95BE" /* š@œ€º.Mè…KÆÙ3³•¾ */
- $"7CE5 CCA3 C463 5D1C 1F2B A160 E208 AA0A" /* |åÌ£Äc]..+¡`â.ªÂ */
- $"D00F 1933 5FB5 2705 4E9C 3733 0FD0 2AA0" /* Ð..3_µ'.Nœ73.Ð*  */
- $"D116 F240 05EA 53BB 5A5A 0A4B 3D9E FCB7" /* Ñ.ò@.êS»ZZÂK=žü· */
- $"FE35 1D0B 1E56 C4AA 9B6C 8CE6 10CA DAA5" /* þ5...VĪ›lŒæ.ÊÚ¥ */
- $"6DF1 6F74 C332 BD93 556E 89F5 A94A 232D" /* mñotÃ2½“Un‰õ©J#- */
- $"E9EF C950 666C 7D3E D1BA C98F 4489 3C5D" /* éïÉPfl}>ѺÉD‰<] */
- $"F7FC 88D4 C90E EE9D 7691 C976 2CFE 6BA0" /* ÷üˆÔÉ.îv‘Év,þk  */
- $"B53E 5C59 749E FEBC 4AB4 490C A3B6 5187" /* µ>\Ytžþ¼J´I.£¶Q‡ */
- $"4A10 1076 6348 AEC1 054B 0A98 9196 29C3" /* J..vcH®Á.K˜‘–)à */
- $"F995 50E4 E003 F099 9495 7ECC 1C78 C536" /* ù•Päà.ð™”•~Ì.xÅ6 */
- $"AA8D 7305 BE7F FF72 99F7 25ED 4C38 0896" /* ªs.¾.ÿr™÷%íL8.– */
- $"A1BE F2D4 016E B744 CBB7 9CEE 1C88 5E3D" /* ¡¾òÔ.n·DË·œî.ˆ^= */
- $"1B9E E3CB 29D2 AAA7 C3F6 41F4 B6C0 5861" /* .žãË)Òª§ÃöAô¶ÀXa */
- $"93D3 4773 858E 3470 E670 4F94 E206 FBA3" /* “ÓGs…Ž4pæpO”â.û£ */
- $"7050 2A3D 6DC0 004E 32D7 6043 4E5E C44F" /* pP*=mÀ.N2×`CN^ÄO */
- $"284A 3214 97B7 19DE 41C4 6204 56CB 1695" /* (J2.—·.ÞAÄb.VË.• */
- $"BAD8 C308 0FFE BEB7 FE14 C6AC CEE8 5022" /* ºØÃ..þ¾·þ.ƬÎèP" */
- $"C27A 2CCA 4714 4C52 3975 615D A1C8 62BF" /* Âz,ÊG.LR9ua]¡Èb¿ */
- $"C477 FF7E 2637 3B89 8C43 6E09 285B 2D1A" /* Äwÿ~&7;‰ŒCnÆ([-. */
- $"8E9E 4110 CE7B E30A E21C A140 02C8 D0AD" /* ŽžA.Î{ãÂâ.¡@.ÈЭ */
- $"630B 5488 7CE7 B884 393A 6FDD 5A68 7FB9" /* c.Tˆ|縄9:oÝZh.¹ */
- $"60EC C73B 143E 3F61 3E31 1A3E 8438 7944" /* `ìÇ;.>?a>1.>„8yD */
- $"B652 14AE 63CA 803C 9B67 C6FE 2F5D 4CD0" /* ¶R.®cÊ€<›gÆþ/]LÐ */
- $"3A63 1328 8809 A4AB B4A1 8664 FE90 F03E" /* :c.(ˆÆ¤«´¡†dþð> */
- $"18E2 7982 7DDC A444 1306 4546 61B2 A710" /* .ây‚}ܤD..EFa²§. */
- $"CCED 529C 92CB D547 22F5 0DB0 B10F 8450" /* ÌíRœ’ËÕG"õ.°±.„P */
- $"E5AC 253A 6937 BFBD D0C6 8AED 14C7 787E" /* å¬%:i7¿½ÐÆŠí.Çx~ */
- $"21E7 860D 8567 633D A9E6 0466 93A5 6789" /* !ç†.…gc=©æ.f“¥g‰ */
- $"D643 2EEE 7542 7B02 086A 83C4 AD3C 785C" /* ÖC.îuB{..jƒÄ­<x\ */
- $"E3B4 BFC0 C27C 3762 1D98 0A0C B43D 8107" /* ã´¿ÀÂ|7b.˜Â.´=. */
- $"3003 FF74 C626 1BC1 44AA 08A0 7A68 0ADE" /* 0.ÿtÆ&.ÁDª. zhÂÞ */
- $"E9BD 94DB 3644 AA13 CFCA A9CB 0E8F 9061" /* é½”Û6Dª.ÏÊ©Ë.a */
- $"73BC 6A23 359D C129 F184 4EBA BE0F A772" /* s¼j#5Á)ñ„Nº¾.§r */
- $"9AB6 7DDC C179 81DB 9FDC EDA3 E6C5 21E2" /* š¶}ÜÁyÛŸÜí£æÅ!â */
- $"7049 87BC 00E3 34F5 8066 3FFE 7CA7 A588" /* pI‡¼.ã4õ€f?þ|§¥ˆ */
- $"6277 30DE 8FC1 950A A652 5B12 B0A4 B8BE" /* bw0ÞÁ•¦R[.°¤¸¾ */
- $"2297 4261 CB90 AEBB F3CB 2BEE 2FA8 149E" /* "—BaË®»óË+î/¨.ž */
- $"11E6 487B 3EFA 45B9 E4A8 17DF DF8E D5FF" /* .æH{>úE¹ä¨.ßߎÕÿ */
- $"750C 2E52 4F3F 5960 B3B7 3DEB CFE3 4EC3" /* u..RO?Y`³·=ëÏãNà */
- $"676F D76A F8C3 67EB 383B 042A C000 1CF5" /* go×jøÃgë8;.*À..õ */
- $"FB57 51DF 4E0F 9709 4A58 F371 8A53 79CD" /* ûWQßN.—ÆJXóqŠSyÍ */
- $"B935 29C8 5953 BBFB B216 24F0 FF5C F1BE" /* ¹5)ÈYS»û².$ðÿ\ñ¾ */
- $"1649 C9BE 754A CC45 62C3 44A2 3E12 A872" /* .IɾuJÌEbÃD¢>.¨r */
- $"736B 05DD F77C C7C6 F33D 8224 147E D163" /* sk.Ý÷|ÇÆó=‚$.~Ñc */
- $"02B4 0BC6 297A FA75 03A7 BFDD 709A A878" /* .´.Æ)zúu.§¿Ýpš¨x */
- $"734A 7236 791A BFF6 9F21 CC67 268D 160D" /* sJr6y.¿öŸ!Ìg&.. */
- $"A6D0 7988 72CF 6475 146C 81EB 8249 518A" /* ¦ÐyˆrÏdu.lë‚IQŠ */
- $"49B7 0389 FDB6 9CEB DCA2 41ED 085D 4E85" /* I·.‰ý¶œëÜ¢Aí.]N… */
- $"03E4 3F4E D8CF 25E1 658D 38F6 8F88 A499" /* .ä?NØÏ%áe8öˆ¤™ */
- $"B64A DD79 FDF2 39FB 5CEC F29B 714A 733B" /* ¶JÝyýò9û\ìò›qJs; */
- $"76E4 94E5 F567 3A71 28F0 13A6 7A74 CD91" /* vä”åõg:q(ð.¦ztÍ‘ */
- $"5804 065E D3C7 09B7 ED19 51E5 0913 4436" /* X..^ÓÇÆ·í.QåÆ.D6 */
- $"9791 BB58 10F3 7183 5DB6 4874 65D2 AAD2" /* —‘»X.óqƒ]¶HteÒªÒ */
- $"DBA2 C761 A70F 3EEE 9256 2EF0 945D E52D" /* Û¢Ça§.>î’V.ð”]å- */
- $"34CF 10DF B2AF 8E14 A5A4 E24F 0051 F63E" /* 4Ï.ß²¯Ž.¥¤âO.Qö> */
- $"F11C 5DAC 6D8D DEDD A585 96FC A2AB A5FF" /* ñ.]¬mÞÝ¥…–ü¢«¥ÿ */
- $"5298 6349 DB41 9276 C1C6 F1E2 9ABF 822B" /* R˜cIÛA’vÁÆñâš¿‚+ */
- $"346F 8679 726C 666A 9638 246A EABE 54A9" /* 4o†yrlfj–8$jê¾T© */
- $"49DD F22A BC62 5867 51F2 FDBD B33B 40E0" /* IÝò*¼bXgQòý½³;@à */
- $"220F 075D 031C EAAE 3CDE 67CF 2269 E26D" /* "..]..ê®<ÞgÏ"iâm */
- $"BEF3 1873 E610 D43E 8F03 A14F F04F 980B" /* ¾ó.sæ.Ô>.¡OðO˜. */
- $"69FF 1E4A 1925 DDE6 B473 84B5 6F53 75DD" /* iÿ.J.%Ýæ´s„µoSuÝ */
- $"CF71 C4C0 72DC 5403 7E7B 1A9B 6F16 BA87" /* ÏqÄÀrÜT.~{.›o.º‡ */
- $"A44D D4A2 8029 E15A 8C17 BE55 A30B 87B3" /* ¤MÔ¢€)áZŒ.¾U£.‡³ */
- $"DC5B CED9 2E4C A8F3 939B 6F82 8885 9BD5" /* Ü[ÎÙ.L¨ó“›o‚ˆ…›Õ */
- $"905B 6EE2 E3C9 D45E DE91 DD46 7EDD 23BB" /* [nâãÉÔ^Þ‘ÝF~Ý#» */
- $"6852 2BD3 3D31 2755 2D1B 7431 35EB 6CBD" /* hR+Ó=1'U-.t15ël½ */
- $"638C 9E5D F0EB 9AE0 49BC D327 7536 BCB3" /* cŒž]ðëšàI¼Ó'u6¼³ */
- $"65F1 992B E073 9D25 980D A244 7F9E 749F" /* eñ™+às%˜.¢D.žtŸ */
- $"53BD D08A C5EF 64A2 D672 7A55 9146 5CAD" /* S½ÐŠÅïd¢ÖrzU‘F\­ */
- $"7839 E1B6 7543 4556 146E C347 33E3 2798" /* x9á¶uCEV.nÃG3ã'˜ */
- $"4752 6F78 AAA5 AE5E 7B02 CD92 D5F1 FD30" /* GRoxª¥®^{.Í’Õñý0 */
- $"F78A 7BFB 03AB CF34 58BF 3810 B8A7 CDAB" /* ÷Š{û.«Ï4X¿8.¸§Í« */
- $"A573 658E 260A 7C50 000F 00AC D13F 618E" /* ¥seŽ&Â|P...¬Ñ?aŽ */
- $"A241 9458 3945 9D59 3F9B 13C5 04CC 600E" /* ¢A”X9EY?›.Å.Ì`. */
- $"FC51 8C8D FBA0 4150 5832 4539 730B 4631" /* üQŒû APX2E9s.F1 */
- $"0598 EE14 817C B560 97C5 B953 64D4 980D" /* .˜î.|µ`—ŹSdÔ˜. */
- $"C379 6FFF 3E63 6746 7BE8 D3AB 5215 B47F" /* Ãyoÿ>cgF{èÓ«R.´. */
- $"3CAE 42E4 D4BF B7BF 6580 3319 6A71 C2E9" /* <®BäÔ¿·¿e€3.jqÂé */
- $"48AA 2C5E 9D78 B9C3 F8DA B858 D5AB 99F4" /* Hª,^x¹ÃøÚ¸XÕ«™ô */
- $"B04F EAAC D0DE 2302 F874 7E64 A69B 89CE" /* °Oê¬ÐÞ#.øt~d¦›‰Î */
- $"AEAB A73F F815 0D06 B24E 39EC D8E9 EFB7" /* ®«§?ø...²N9ìØéï· */
- $"ED32 55A0 8E21 B52A E55C 17AE E07B 42F4" /* í2U Ž!µ*å\.®à{Bô */
- $"D451 CB7C E941 1578 3EE3 9565 087E 9A05" /* ÔQË|éA.x>ã•e.~š. */
- $"B5FC 403A AAA2 25CE 5AC1 B658 1EE9 9A53" /* µü@:ª¢%ÎZÁ¶X.éšS */
- $"4000 51DF 95E8 C605 97AC C7E1 A8B1 F86C" /* @.Qß•èÆ.—¬Çᨱøl */
- $"7C3F 0BCC E410 8FA7 78C0 7964 BDD0 E341" /* |?.Ìä.§xÀyd½ÐãA */
- $"5DC5 D977 EF99 460C FC48 A51A B5CD DE47" /* ]ÅÙwï™F.üH¥.µÍÞG */
- $"F9E2 194D 1F2D B2B6 556B 0F68 BD1B 5BEA" /* ùâ.M.-²¶Uk.h½.[ê */
- $"9FDD 1280 92A3 EF96 132C 22F6 CA8A 1C20" /* ŸÝ.€’£ï–.,"öÊŠ. */
- $"54DA F163 6119 BC02 7AE6 10CA A16B 993A" /* TÚñca.¼.zæ.Ê¡k™: */
- $"E22B CC58 D181 40E6 EA99 0897 5166 4C1F" /* â+ÌXÑ@æê™.—QfL. */
- $"6D58 D092 5119 1AF5 0C2B 1DC6 029D F0E8" /* mXÐ’Q..õ.+.Æ.ðè */
- $"1F6F 9F5C 17D8 68A0 F600 5C68 5C16 4269" /* .oŸ\.Øh ö.\h\.Bi */
- $"F5A9 4D97 32DE 3A9C 6609 86C2 1D0F BA56" /* õ©M—2Þ:œfƆÂ..ºV */
- $"3C8C 1046 E0DC 2ECB 9BDB D61E 6955 CE38" /* <Œ.FàÜ.Ë›ÛÖ.iUÎ8 */
- $"DB97 859B 9E73 78BF FDEB ED74 0C4E 4203" /* Û—…›žsx¿ýëít.NB. */
- $"431D 69C4 635D D1EA 1A9A 6462 BE48 DDB9" /* C.iÄc]Ñê.šdb¾Hݹ */
- $"6E63 C4D8 8886 51CB 19E6 A7C9 5941 8443" /* ncÄØˆ†QË.æ§ÉYA„C */
- $"57E5 8C3B B907 FF17 4B41 08DA 7AFC 1B8B" /* WåŒ;¹.ÿ.KA.Úzü.‹ */
- $"9B05 622E 1F81 91D8 2C60 9C6A 3B23 608B" /* ›.b..‘Ø,`œj;#`‹ */
- $"F2EC E527 70F9 D963 D302 D7AC 18E2 2692" /* òìå'pùÙcÓ.׬.â&’ */
- $"AE0C D915 7E30 5B09 305C 8F5D 1346 3FF2" /* ®.Ù.~0[Æ0\].F?ò */
- $"8635 ECEC 1CB7 962D 0846 3FA9 5920 C1B0" /* †5ìì.·–-.F?©Y Á° */
- $"5582 FF3A 24E0 FAAE 8FAE 3843 DFCF B74F" /* U‚ÿ:$àú®®8CßÏ·O */
- $"CAEC 5602 D1C5 1760 5ECD 92C8 1DD1 4ABE" /* ÊìV.ÑÅ.`^Í’È.ÑJ¾ */
- $"2336 8A90 E444 6753 D3E0 0F02 8E99 7393" /* #6ŠäDgSÓà..Ž™s“ */
- $"8B26 6C9F BFB4 64DE 7867 73F7 10F0 477A" /* ‹&lŸ¿´dÞxgs÷.ðGz */
- $"8383 ADA5 49C3 722B 1FD7 0BB5 4118 4714" /* ƒƒ­¥IÃr+.×.µA.G. */
- $"D5F9 6C20 CDD0 8151 EAB4 457F FF4E 314C" /* Õùl ÍÐQê´E.ÿN1L */
- $"6E7F 04DB DE0C 611B 62AC 2A4E 869C 06FB" /* n..ÛÞ.a.b¬*N†œ.û */
- $"DB81 F238 C4FC 149E 8176 3F0C 4B83 0DFF" /* Ûò8Äü.žv?.Kƒ.ÿ */
- $"7FB4 A5F5 80C7 E4F0 47AD 8D3F 5426 B12A" /* .´¥õ€ÇäðG­?T&±* */
- $"8678 11E1 A0EF 5439 31D8 E97E 3AE9 E4DD" /* †x.á ïT91Øé~:éäÝ */
- $"3DB7 4A94 7FFF 7135 0C02 ACE2 70F5 626B" /* =·J”.ÿq5..¬âpõbk */
- $"271A 4401 DF00 AE70 E43B D3F8 75AD 0DAB" /* '.D.ß.®pä;Óøu­.« */
- $"794A C0C7 928F 8621 BE61 DA60 A89F 8E95" /* yJÀÇ’†!¾aÚ`¨ŸŽ• */
- $"64E1 4B82 9CA5 D1CB 26FA 3B49 2FDF 8007" /* dáK‚œ¥ÑË&ú;I/߀. */
- $"60B1 1C23 B192 973E 87DD 9323 E697 CA76" /* `±.#±’—>‡Ý“#æ—Êv */
- $"03D6 B09A 33FA 5CEC 856D 1D12 5249 2492" /* .Ö°š3ú\ì…m..RI$’ */
- $"4924 9249 2492 4924 9231 8B0A C6C2 C882" /* I$’I$’I$’1‹ÂÆÂÈ‚ */
- $"FC66 E59C E646 38B0 B26F A097 FEA2 30FE" /* üfåœæF8°²o —þ¢0þ */
- $"F5B9 90DC 3FEF 3116 73C4 7B20 6C09 EA40" /* õ¹Ü?ï1.sÄ{ lÆê@ */
- $"AB90 6257 8BAD 951C 002E 138D 7274 121D" /* «bW‹­•....rt.. */
- $"B91E 66F5 6038 8257 FD9A 18C9 0155 522C" /* ¹.fõ`8‚Wýš.É.UR, */
- $"D6CC 0F6A 6A4A 09F3 0C4A B702 47FF 7FFC" /* ÖÌ.jjJÆó.J·.Gÿ.ü */
- $"B504 0034 6682 CE19 CA7C 50BE F8B0 9DCB" /* µ..4f‚Î.Ê|P¾ø°Ë */
- $"0092 4924 9248 F298 B4D2 A612 6CEE 878F" /* .’I$’Hò˜´Ò¦.lî‡ */
- $"FF7F FF5F 8F59 B3E0 FE9F A74E 506D C924" /* ÿ.ÿ_Y³àþŸ§NPmÉ$ */
- $"9249 2492 4924 9249 2492 4924 924D 57A2" /* ’I$’I$’I$’I$’MW¢ */
- $"2CC8 426C 393A 96E4 50FB 0ACE 8874 7A86" /* ,ÈBl9:–äPûÂΈtz† */
- $"2B20 84D4 0F34 1532 DFF0 D633 0231 0F65" /* + „Ô.4.2ßðÖ3.1.e */
- $"91D1 8E19 A917 CD2A 8D35 89BE F64E D1A8" /* ‘ÑŽ.©.Í*5‰¾öNѨ */
- $"926C AE06 3A49 80F9 C1FE 0E81 52D8 5A8C" /* ’l®.:I€ùÁþ.RØZŒ */
- $"7A00 5EF2 9F04 3659 74EC D695 94B6 5B90" /* z.^òŸ.6YtìÖ•”¶[ */
- $"89C0 E661 DFC4 5E69 965B 4D1D 4B76 7C0E" /* ‰ÀæaßÄ^i–[M.Kv|. */
- $"89D2 C1E8 B1EF CF9E 5E96 3977 AEA6 532B" /* ‰ÒÁè±ïÏž^–9w®¦S+ */
- $"68B1 BD73 2BE6 BB5B 766E FA91 5C36 628C" /* h±½s+æ»[vnú‘\6bŒ */
- $"F45F FEEA C7DF 49F0 278F F459 E9B6 BDAC" /* ô_þêÇßIð'ôYé¶½¬ */
- $"1A28 F485 45C5 2761 DC37 C72A 8A17 2D08" /* .(ô…EÅ'aÜ7Ç*Š.-. */
- $"5130 E9D5 E1BD 2D59 07B5 2290 00F9 F737" /* Q0éÕá½-Y.µ".ù÷7 */
- $"C1F4 5C78 1058 C4C6 13AB AE5C 45DE ACB4" /* Áô\x.XÄÆ.«®\EÞ¬´ */
- $"7DC9 03C4 0F82 7850 6F9E 5FD3 9223 36FE" /* }É.Ä.‚xPož_Ó’#6þ */
- $"8A1D 1D99 FBB3 646B 206B FC7E 668E 4730" /* Š..™û³dk kü~fŽG0 */
- $"7C8C 79D9 A37A 427B 1E91 E7A1 DED2 E57D" /* |ŒyÙ£zB{.‘ç¡ÞÒå} */
- $"E167 967A 8B9F A6C0 A36F 68E8 D03C 84C6" /* ág–z‹Ÿ¦À£ohèÐ<„Æ */
- $"E952 3CAF 039F 18CD 236C 4AE1 FB74 D7F6" /* éR<¯.Ÿ.Í#lJáût×ö */
- $"DFBF B7A4 AFDB D27E 2FB7 7BBF 86F0 DF6F" /* ß¿·¤¯ÛÒ~/·{¿†ðßo */
- $"4F9F C3A7 EC7F 0D0F BEDB 1EFB 77AA FB77" /* OŸÃ§ì...¾Û.ûwªûw */
- $"2CED 1CDE F39E A2F3 567D 91E9 4703 B8A2" /* ,í.Þóž¢óV}‘éG.¸¢ */
- $"5006 2494 6271 81F3 3B95 0B89 EDD5 7FE8" /* P.$”bqó;•.‰íÕ.è */
- $"B864 3D84 75CD 7478 A5D6 28C8 D483 39EF" /* ¸d=„uÍtx¥Ö(ÈÔƒ9ï */
- $"86CA 5763 87CA 97CF A9D4 AFA9 0450 6744" /* †ÊWc‡Ê—ϩԯ©.PgD */
- $"16E3 8C0B 0015 88DA 5244 1AB2 9790 35B0" /* .ãŒ...ˆÚRD.²—5° */
- $"0489 B911 D871 2BB4 6576 C185 22B7 1F86" /* .‰¹.Øq+´evÁ…"·.† */
- $"230A 3CD3 ECB5 20A6 23BA A068 A53E 8EAD" /* #Â<Óìµ ¦#º h¥>Ž­ */
- $"3793 46B5 BA07 96A8 DF28 6A66 CE05 73CE" /* 7“Fµº.–¨ß(jfÎ.sÎ */
- $"1938 F9A6 9CBC 0D7F F193 E0D5 09CC 3426" /* .8ù¦œ¼..ñ“àÕÆÌ4& */
- $"4BB1 52B9 F337 0537 FA01 B010 5471 B015" /* K±R¹ó7.7ú.°.Tq°. */
- $"754C A1A6 E071 800C 1A26 243D 172B 1497" /* uL¡¦àq€..&$=.+.— */
- $"E5DF 1EB1 6A6C 6761 3BA6 52C0 C0B4 69BD" /* åß.±jlga;¦RÀÀ´i½ */
- $"E6B4 275E EB6E 42BF D693 8928 15A4 9DB2" /* æ´'^ënB¿Ö“‰(.¤² */
- $"D8FA E273 6C04 CBB5 06A9 8096 5E97 5D11" /* Øúâsl.˵.©€–^—]. */
- $"0B1B 8E93 BDCC 1AE8 4CBA 9413 A729 F6A7" /* ..Ž“½Ì.èLº”.§)ö§ */
- $"F24D 467F 0316 BF60 F777 C2E3 7FAA DC07" /* òMF...¿`÷wÂã.ªÜ. */
- $"148F 5C26 91C3 20B8 F3A0 9088 F893 6D47" /* .\&‘Ã ¸ó ˆø“mG */
- $"7AC1 A0D9 5483 8281 5B98 28AE 9EAB 94F0" /* zÁ ÙTƒ‚[˜(®ž«”ð */
- $"9B68 08E3 E3DA 7E3A AA84 9EED F083 117F" /* ›h.ããÚ~:ª„žíðƒ.. */
- $"FE75 781E E394 EEEC F9AC 21D6 FF5E DD57" /* þux.ã”îìù¬!Öÿ^ÝW */
- $"96CF A7DF 3C0D 7E2F F9E7 F212 83EE E629" /* –ϧß<.~/ùçò.ƒîæ) */
- $"9543 AA61 C10A 4B12 1DD8 6835 405A D739" /* •CªaÁÂK..Øh5@Z×9 */
- $"DBD7 1628 2816 909D 1DEB 81F2 16AF 8953" /* Û×.((..ëò.¯‰S */
- $"9239 B79D A64A 3275 E506 BFD3 0198 776C" /* ’9·¦J2uå.¿Ó.˜wl */
- $"F4C2 39CD 4CF8 2482 D781 526A 7D82 0B83" /* ôÂ9ÍLø$‚×Rj}‚.ƒ */
- $"120C B2AB 1FC0 2DAA 4A72 ACD9 B4C7 926A" /* ..²«.À-ªJr¬Ù´Ç’j */
- $"CE69 46FA C67E 904D 12D4 D6EC 2F77 AC43" /* ÎiFúÆ~M.ÔÖì/w¬C */
- $"0A82 A09A 8FAC 59F0 D192 4F8F E6D1 A8B3" /* ‚ š¬YðÑ’OæÑ¨³ */
- $"26FD EAD1 7727 E253 F826 580D 8786 8EAD" /* &ýêÑw'âSø&X.‡†Ž­ */
- $"4561 33FC 6C93 72E4 3F53 3E92 5E78 9597" /* Ea3ül“rä?S>’^x•— */
- $"895F 61B9 D382 514D 839E D4E8 A40B 6F99" /* ‰_a¹Ó‚QMƒžÔè¤.o™ */
- $"0BEC 889F F976 6F24 AEAC 2A18 479B 9CD0" /* .숟ùvo$®¬*.G›œÐ */
- $"A58D E4A8 4940 D7A9 26A7 8649 C387 22EB" /* ¥ä¨I@ש&§†IÇ"ë */
- $"10F3 AB7F 805D 57F4 6918 508A 429D FC32" /* .ó«.€]Wôi.PŠBü2 */
- $"0E49 3480 E5A6 0267 54A6 D677 422D 1B62" /* .I4€å¦.gT¦ÖwB-.b */
- $"4DFB C3A4 2E01 8C0D 029D D238 87B0 230E" /* Mûä..Œ..Ò8‡°#. */
- $"AB6E AEFD 64F3 F7AE 7BD7 DA13 2BCC DCFB" /* «n®ýdó÷®{×Ú.+ÌÜû */
- $"13EC E7EE A36F 86C6 A2D8 DD70 6174 04FA" /* .ìçî£o†Æ¢ØÝpat.ú */
- $"B7F7 A3BF 9C4C F99C C177 9B27 9148 3998" /* ·÷£¿œLùœÁw›'‘H9˜ */
- $"013A 4B0C E3A5 6905 6ADC 739C 3586 7009" /* .:K.ã¥i.jÜsœ5†pÆ */
- $"38DA 0496 C25E DFB2 F2AB 34C0 F138 4F81" /* 8Ú.–Â^ß²ò«4Àñ8O */
- $"7240 2774 4588 B153 267B DBBE DFDE AEAD" /* r@'tEˆ±S&{Û¾ßÞ®­ */
- $"1D90 BA71 2B83 D108 1CDB 8B36 7837 8AAA" /* .ºq+ƒÑ..Û‹6x7Šª */
- $"299C 2916 D66C CC2E 2FCF B0E3 228A 88C1" /* )œ).ÖlÌ./ϰã"ŠˆÁ */
- $"568F 12D8 D599 AB3F 29DE 1FA6 9336 132F" /* V.ØÕ™«?)Þ.¦“6./ */
- $"521E 8EB9 9BD4 30E4 362E 349E 209A 6EB6" /* R.޹›Ô0ä6.4ž šn¶ */
- $"D5CC 985B E51E 8A74 B9A0 1718 2753 A1E0" /* Õ̘[å.Št¹ ..'S¡à */
- $"BDCC 77CC 5697 641D B916 AB08 C12F 102F" /* ½ÌwÌV—d.¹.«.Á/./ */
- $"59A0 4283 27A8 9F9E 1980 381A 4785 E896" /* Y Bƒ'¨Ÿž.€8.G…è– */
- $"B9C8 A383 0C1E EBDE A8DC D1A0 00FB 61C2" /* ¹È£ƒ..ëÞ¨ÜÑ .ûa */
- $"70F1 84C8 8368 337E DA6C 7A1A 014F 77C3" /* pñ„ȃh3~Úlz..Owà */
- $"EFFF 0CCC F88E E539 B4FF 3187 54EA 4B2E" /* ïÿ.ÌøŽå9´ÿ1‡TêK. */
- $"27BF 1121 0DCD 456F 5AB4 E115 9E30 8B1C" /* '¿.!.ÍEoZ´á.ž0‹. */
- $"FCFB 8634 E35F E3F0 2A65 8EC0 775F C0EE" /* üû†4ã_ãð*eŽÀw_Àî */
- $"37B2 6C5A AA44 2B7C 889A 5854 FBB4 DC29" /* 7²lZªD+|ˆšXTû´Ü) */
- $"E875 94AB D4F4 19C2 5989 594D 6B55 CB5E" /* èu”«Ôô.ÂY‰YMkUË^ */
- $"012C A350 BF1C 322E 6DC6 6CFB 052A B48D" /* .,£P¿.2.mÆlû.*´ */
- $"2FFE D908 D443 2FB2 706F 13A8 B2BF 2E97" /* /þÙ.ÔC/²po.¨²¿.— */
- $"D7EF 6FE2 7D0B 4D6C 89E6 24BB D547 A266" /* ×ïoâ}.Ml‰æ$»ÕG¢f */
- $"3B92 FF58 BE83 0D95 D587 B51D B83A B360" /* ;’ÿX¾ƒ.•Õ‡µ.¸:³` */
- $"DF16 A55F 5D17 5ED7 C7D7 88FD D24B 89C4" /* ß.¥_].^×Ç׈ýÒK‰Ä */
- $"17FF 1CE0 2FC5 E332 79FF 6532 D599 2C36" /* .ÿ.à/Åã2yÿe2Õ™,6 */
- $"7360 56F2 6017 1165 F8CD AC09 6435 530F" /* s`Vò`..eøÍ¬Æd5S. */
- $"8E48 0152 06AE 7F31 9D5A A12E EC4A 26BD" /* ŽH.R.®.1Z¡.ìJ&½ */
- $"1D28 2D81 EBF2 625A 03C8 8240 FAB0 343C" /* .(-ëòbZ.È‚@ú°4< */
- $"3460 4650 A369 CBAF D533 EC55 DB4D 46F7" /* 4`FP£i˯Õ3ìUÛMF÷ */
- $"45C4 1B75 581D CC26 9E29 8B0F C424 5512" /* EÄ.uX.Ì&ž)‹.Ä$U. */
- $"9417 F11C 77C1 F3FD 57B1 487F D8F8 A086" /* ”.ñ.wÁóýW±H.Øø † */
- $"E60E 2356 E9E1 F3EC 7F31 52E1 E3DB C75E" /* æ.#Véáóì.1RáãÛÇ^ */
- $"7A4B 2D19 8F06 AB86 5A88 F23D C312 C565" /* zK-..«†Zˆò=Ã.Åe */
- $"1AF0 4B35 F0D9 D100 6634 A377 90C1 A69A" /* .ðK5ðÙÑ.f4£wÁ¦š */
- $"1C64 495A BEF2 5A5C 1714 0504 2639 71A2" /* .dIZ¾òZ\....&9q¢ */
- $"5989 FF6E F887 5ADD 9843 A719 60CC 5185" /* Y‰ÿnø‡ZݘC§.`ÌQ… */
- $"B308 2551 F63A 7543 2A92 3949 FCC5 5023" /* ³.%Qö:uC*’9IüÅP# */
- $"5A92 FE32 A26E FF00 9CFC 0CFF 4A08 60C7" /* Z’þ2¢nÿ.œü.ÿJ.`Ç */
- $"F76C 480A E682 3C58 66B8 7045 CDBA 616C" /* ÷lHÂæ‚<Xf¸pEͺal */
- $"9995 BEC1 809B 0892 A7EC 43EC 7FE8 F49F" /* ™•¾Á€›.’§ìCì.èôŸ */
- $"9E4B AFD6 66BB 0B88 38ED B165 9C1D F096" /* žK¯Öf».ˆ8í±eœ.ð– */
- $"64EC FD43 9A7A BC84 8CEF 2E65 F99B 4B43" /* dìýCšz¼„Œï.eù›KC */
- $"7D47 3AE8 D0DB A066 308B 201D FF3F ABC1" /* }G:èÐÛ f0‹ .ÿ?«Á */
- $"CD0D B822 3734 A23E AF05 D1E1 F9F5 AF09" /* Í.¸"74¢>¯.Ñáùõ¯Æ */
- $"6428 F517 1201 C3F1 1B80 0DD2 DCD9 CA31" /* d(õ...Ãñ.€.ÒÜÙÊ1 */
- $"B022 DAFB D990 A8B1 6FF1 004E 4847 E5C8" /* °"ÚûÙ¨±oñ.NHGåÈ */
- $"0580 DA86 704F E2FF 7E83 5167 5C3F ADB2" /* .€Ú†pOâÿ~ƒQg\?­² */
- $"4C44 A9D9 DB84 C360 68ED 1BF0 068E 04BF" /* LD©ÙÛ„Ã`hí.ð.Ž.¿ */
- $"D16E B55F 0701 3739 42FA E15C 0EA2 BF81" /* Ñnµ_..79Búá\.¢¿ */
- $"31C1 F1A3 A766 CAB8 C82E C96B 4868 D491" /* 1Áñ£§fʸÈ.ÉkHhÔ‘ */
- $"5ACB 6EED 4027 0C73 AACA 730C ECA6 DE42" /* ZËní@'.sªÊs.ì¦ÞB */
- $"38DA E07E CE64 BC49 7FDD FCCB 07B3 45BF" /* 8Úà~Îd¼I.ÝüË.³E¿ */
- $"B9DC FF13 039F D40E 43BB ACE4 B8F8 31F5" /* ¹Üÿ..ŸÔ.C»¬ä¸ø1õ */
- $"6743 9390 0B87 C9B1 194A 0200 FB53 29CD" /* gC“.‡É±.J..ûS)Í */
- $"3141 15F5 3C38 9F70 2B7E 0E46 B5A7 5C94" /* 1A.õ<8Ÿp+~.Fµ§\” */
- $"AED4 E415 1639 7B49 20DA 1541 9742 A3A6" /* ®Ôä..9{I Ú.A—B£¦ */
- $"B873 4C7C 9112 1322 7D7F 5F6E 14AB 57FC" /* ¸sL|‘.."}._n.«Wü */
- $"A01D 94EC BC05 F45B C4C4 1FC3 D61B F5D3" /*  .”ì¼.ô[ÄÄ.ÃÖ.õÓ */
- $"0E62 9C2F CAE6 C609 B0D2 803B AF5F CC7F" /* .bœ/ÊæÆÆ°Ò€;¯_Ì. */
- $"4085 5B49 F81B 0AB3 DB0C 27C1 7A95 45D6" /* @…[Iø.³Û.'Áz•EÖ */
- $"CDDD 4F06 1A20 A7FE 22F6 EA13 EB6E C723" /* ÍÝO.. §þ"öê.ënÇ# */
- $"87B9 A058 CAF9 9F59 C9C9 6AAD 8358 5147" /* ‡¹ XÊùŸYÉÉj­ƒXQG */
- $"2B3E 2FD8 506F A48B 305C 97C7 5D25 5C75" /* +>/ØPo¤‹0\—Ç]%\u */
- $"C5B1 E7B4 CBC7 C76A 2FE5 1669 302C 2318" /* űç´ËÇÇj/å.i0,#. */
- $"CB1D BB38 5B47 3563 F041 0F00 C23A B1E9" /* Ë.»8[G5cðA..Â:±é */
- $"1972 D9C9 2F2F 4013 F8EF A6CA 7E8E 705C" /* .rÙÉ//@.øï¦Ê~Žp\ */
- $"0CB6 1301 5ED4 25E6 F7D9 999D AB8F 4CAC" /* .¶..^Ô%æ÷Ù™«L¬ */
- $"6FF2 04C8 8307 016C 6E46 645B 5488 79C0" /* oò.ȃ..lnFd[TˆyÀ */
- $"C0E5 8A2A 46EB DB4C 65A0 27FC 6230 781C" /* ÀåŠ*FëÛLe 'üb0x. */
- $"EDB8 4666 1604 1937 9603 A2AA D8C3 43A6" /* í¸Ff...7–.¢ªØÃC¦ */
- $"E254 D745 866F D24A DD91 397E C575 F187" /* âT×E†oÒJÝ‘9~Åuñ‡ */
- $"193B F5F5 819B 7D57 EC83 0871 ED1B 64F6" /* .;õõ›}Wìƒ.qí.dö */
- $"E47A E1B0 65F9 67DF 5680 3642 52AA BB4B" /* äzá°eùgßV€6BRª»K */
- $"BA52 D8BA 8AF7 0A96 412A 92B2 045F 9739" /* ºRغŠ÷–A*’²._—9 */
- $"3A52 D961 6BC6 1D2E D90D 29A7 E9DE 2651" /* :RÙakÆ..Ù.)§éÞ&Q */
- $"CE3F 9921 03BC 7A7A CBFD 63E2 4C7C 9025" /* Î?™!.¼zzËýcâL|% */
- $"BCC3 D509 745E 9AE4 1675 0242 26EE E4F6" /* ¼ÃÕÆt^šä.u.B&îäö */
- $"B04B CFB3 E37F EADB 2840 E47E 0209 C8C5" /* °Kϳã.êÛ(@ä~.ÆÈÅ */
- $"56FC 6228 BB57 F43A BE32 0753 73FB EAE2" /* Vüb(»Wô:¾2.Ssûêâ */
- $"55B4 D581 42C8 10B8 AEA9 67C4 F685 982C" /* U´ÕBÈ.¸®©gÄö…˜, */
- $"3104 095F DCBD 3701 8749 9CBA A7A5 B714" /* 1.Æ_ܽ7.‡Iœº§¥·. */
- $"FDED FAA3 F034 54D8 728F 8640 4A61 560C" /* ýíú£ð4TØr†@JaV. */
- $"50D4 B224 A5F1 6715 6C8B 7EC6 BF5C 120D" /* PÔ²$¥ñg.l‹~Æ¿\.. */
- $"8797 B25E B0E1 C57E 69AF 1FF2 99C3 44B5" /* ‡—²^°áÅ~i¯.ò™ÃDµ */
- $"0508 0061 1F44 795F 27C0 511E 0796 9740" /* ...a.Dy_'ÀQ..–—@ */
- $"14FF 4C51 5651 34F3 658D 4CA8 3FBF 43CC" /* .ÿLQVQ4óeL¨?¿CÌ */
- $"8813 D372 1723 7DB5 6D44 4524 4E91 B644" /* ˆ.Ór.#}µmDE$N‘¶D */
- $"4B7D CDEC E0E0 8468 622D 87FE 80E3 E097" /* K}Íìàà„hb-‡þ€ãà— */
- $"303D 8894 1FFF 7FA6 9AAB C6E0 0B83 3EDD" /* 0=ˆ”.ÿ.¦š«Æà.ƒ>Ý */
- $"86A5 43D3 C650 0008 D364 A800 0000 0000" /* †¥CÓÆP..Ód¨..... */
- $"0000 07D7 8F92 61B9 E6E0 BCBF CD4A AB76" /* ...×’a¹æà¼¿ÍJ«v */
- $"5B6E 246A 8DFB D274 41F9 3583 773D 5165" /* [n$jûÒtAù5ƒw=Qe */
- $"2139 B773 476E DF91 33F0 8CDA F420 613F" /* !9·sGnß‘3ðŒÚô a? */
- $"9B35 33C9 8298 A661 A5DB 2CEF 1A1C BC3E" /* ›53É‚˜¦a¥Û,ï..¼> */
- $"09B4 5415 8511 4FE5 3FF8 B88C 339D C169" /* Æ´T.….Oå?ø¸Œ3Ái */
- $"9608 FF62 B2D6 285A 80A2 22C9 E4AA 5A99" /* –.ÿb²Ö(Z€¢"ÉäªZ™ */
- $"B3F5 E9D4 7FFF 7FF4 7D5C 4CC0 788F 0EB6" /* ³õéÔ.ÿ.ô}\LÀx.¶ */
- $"8024 0000 0A1E 1F40 0000 0000 0000 0000" /* €$..Â..@........ */
- $"CA54 CF6A 897B B6D7 9C90 87E9 FF6A 22A0" /* ÊTÏj‰{¶×œ‡éÿj"  */
- $"0765 4AE8 B827 B7A1 C412 4000 0000 0000" /* .eJè¸'·¡Ä.@..... */
- $"0000 2222 DAB7 AEED C4EB AFCB FF79 6610" /* ..""Ú·®íÄë¯Ëÿyf. */
- $"A362 D5F2 1401 DA9F 8978 3FC3 FF60 341C" /* £bÕò..ÚŸ‰x?Ãÿ`4. */
- $"524C CBF3 AF64 9BA4 637F F217 CA8C A4CE" /* RLËó¯d›¤c.ò.ÊŒ¤Î */
- $"A881 46DE C63F CB0B 4C86 F71C CDFF 6CDC" /* ¨FÞÆ?Ë.L†÷.ÍÿlÜ */
- $"3C86 AFD6 02EF 25B3 E392 0238 14ED F9FF" /* <†¯Ö.ï%³ã’.8.íùÿ */
- $"71EA 1A7B 7848 281D C18D 83C1 F0D1 C115" /* qê.{xH(.ÁƒÁðÑÁ. */
- $"C525 7E38 9E60 32A4 CED2 A5DE 8006 1212" /* Å%~8ž`2¤ÎÒ¥Þ€... */
- $"7136 14A1 74D1 9C7D F74C 708E 43DE 4154" /* q6.¡tÑœ}÷LpŽCÞAT */
- $"2939 179A 87BB 2AAF 7401 4404 CB30 458F" /* )9.š‡»*¯t.D.Ë0E */
- $"F1B7 EE42 3E46 458F B220 6F30 EE24 7D86" /* ñ·îB>FE² o0î$}† */
- $"2D28 3CA7 C184 60D3 4EBC 9C79 C402 02FC" /* -(<§Á„`ÓN¼œyÄ..ü */
- $"553C C62D DDC0 3D0C F12B C1FF 546D A4FF" /* U<Æ-ÝÀ=.ñ+ÁÿTm¤ÿ */
- $"5885 6B1B 9EF6 2206 8FB5 1CB0 2D3D B922" /* X…k.žö".µ.°-=¹" */
- $"644F D104 0152 70F8 BF41 4D6E 4F05 B928" /* dOÑ..Rpø¿AMnO.¹( */
- $"396A 4A92 9B1B 24AB 4611 6D95 87D6 2D7C" /* 9jJ’›.$«F.m•‡Ö-| */
- $"7546 B839 A3B1 C612 0F2A 796E 7911 5FF9" /* uF¸9£±Æ..*yny._ù */
- $"03C4 D13E EF00 2DEF 9CFE FDDE 3A2C FF3E" /* .ÄÑ>ï.-ïœþýÞ:,ÿ> */
- $"4567 F432 3673 3F84 8787 B65C 7A4F 2007" /* Egô26s?„‡‡¶\zO . */
- $"FF7C D894 A762 3872 8FA4 9563 D178 5039" /* ÿ|Ø”§b8r¤•cÑxP9 */
- $"C4BD 2EB4 0491 2A80 0000 0000 0000 0001" /* Ľ.´.‘*€........ */
- $"F172 6FA1 09F2 9F35 F3BC 2E0B 8E46 2557" /* ñro¡ÆòŸ5ó¼..ŽF%W */
- $"67C5 4F12 D1CF F08C BC61 0F89 E4A4 9249" /* gÅO.ÑÏðŒ¼a.‰ä¤’I */
- $"2492 4924 9249 221B 4708 65ED 84CA FDD2" /* $’I$’I".G.eí„ÊýÒ */
- $"D193 7C69 0CA3 95EF DDF2 33FF 556E D976" /* Ñ“|i.£•ïÝò3ÿUnÙv */
- $"2E4D FDCE E0FC 8669 83FF 768E 3CBB 179B" /* .MýÎàü†iƒÿvŽ<».› */
- $"DBB9 253D BFFF 79F1 5006 27BF 5548 40B9" /* Û¹%=¿ÿyñP.'¿UH@¹ */
- $"BADC F963 10BA 8BD9 367F E03A 6E29 5908" /* ºÜùc.º‹Ù6.à:n)Y. */
- $"0000 0000 0000 0000 0028 8080 0000 000A" /* .........(€€... */
- $"6370 D000 0142 83C0 0000 0011 CD3F D940" /* cpÐ..BƒÀ....Í?Ù@ */
- $"0022 C990 C912 501C 14FC 1926 5412 0E88" /* ."ÉÉ.P..ü.&T..ˆ */
- $"C32F B2ED E7A4 9249 2492 4924 9249 247E" /* Ã/²í礒I$’I$’I$~ */
- $"FB2C 999E D2ED 6DFF 783B 4C3A 3DB7 14A5" /* û,™žÒímÿx;L:=·.¥ */
- $"872C 2B85 8FC2 72EA 3412 FCA8 32E0 7A2E" /* ‡,+…Ârê4.ü¨2àz. */
- $"B109 F66C 3F99 7C32 2761 1522 7B9C 1851" /* ±Æöl?™|2'a."{œ.Q */
- $"B3CB 5373 0652 CE79 D8C5 B721 03D7 CD81" /* ³ËSs.RÎyØÅ·!.×Í */
- $"A03A CD5F CECF B58A 4122 7ED2 9FFF 7FFF" /*  :Í_ÎϵŠA"~ÒŸÿ.ÿ */
- $"1575 DF0B 430B 0A6C 6108 B421 B33F E9FA" /* .uß.C.Âla.´!³?éú */
- $"AC06 391C EB01 17F4 3BF4 4CDA 87DA 516F" /* ¬.9.ë..ô;ôLÚ‡ÚQo */
- $"EFA3 E7F9 651A 6902 C269 AF79 2EA4 D861" /* ï£çùe.i.Âi¯y.¤Øa */
- $"CBC1 7F37 146D 4163 38BB B16B AAD4 9AC2" /* ËÁ.7.mAc8»±kªÔšÂ */
- $"424A B3CE 1368 78EF B4B0 FE68 2FBA 0CB2" /* BJ³Î.hxï´°þh/º.² */
- $"E672 A89D 999E 64CD 417A 98A3 8458 0603" /* ær¨™ždÍAz˜£„X.. */
- $"C03D 9F9E B15E 8418 0FC6 F3E0 BA39 A3C1" /* À=Ÿž±^„..Æóàº9£Á */
- $"9929 0547 9C29 FC76 57CA B1E5 F887 AE73" /* ™).Gœ)üvWÊ±åø‡®s */
- $"78AA BA9F FF7F C07C 00F0 28E9 7533 0FC1" /* xªºŸÿ.À|.ð(éu3.Á */
- $"097C 4ABC F3CB 6604 EEC2 5194 A1F2 A201" /* Æ|J¼óËf.îÂQ”¡ò¢. */
- $"D6B0 C5F3 4AA3 8FD8 34DC A382 0CD4 134E" /* Ö°ÅóJ£Ø4Ü£‚.Ô.N */
- $"8275 37F5 2388 74C6 1A6C F889 1037 A348" /* ‚u7õ#ˆtÆ.lø‰.7£H */
- $"ACB4 EFF5 B446 564C C6DC 75F7 8445 013F" /* ¬´ïõ´FVLÆÜu÷„E.? */
- $"79FF 407B 05EE 9C66 8A53 FF7A 367A 6D06" /* yÿ@{.îœfŠSÿz6zm. */
- $"9ADF CBDD 25B5 0629 78A0 A071 35BA EE49" /* šßËÝ%µ.)x  q5ºîI */
- $"64E9 3EA3 9A07 917A 66E3 090C B916 3BF5" /* dé>£š.‘zfãÆ.¹.;õ */
- $"10D7 77D5 7281 248E 3F09 0C0F 319E 7F71" /* .×wÕr$Ž?Æ..1ž.q */
- $"98DA A34A C823 06A4 6BFD 8EA1 8C71 EB25" /* ˜Ú£JÈ#.¤kýŽ¡Œqë% */
- $"E5FC 0BA1 DB35 9514 A229 56F0 7E42 9FD0" /* åü.¡Û5•.¢)Vð~BŸÐ */
- $"5435 3CB7 AED9 0A4F 625B A493 D1B2 C654" /* T5<·®ÙÂOb[¤“ѲÆT */
- $"F691 87F9 F8E9 7459 1823 E06B 57D6 C638" /* ö‘‡ùøétY.#àkWÖÆ8 */
- $"7EE2 8CA0 1D79 4000 0000 0000 0000 0000" /* ~⌠.y@......... */
- $"0000 0000 442A 0D8C 8522 4E1A 3752 5040" /* ....D*.Œ…"N.7RP@ */
- $"E53D EE69 0B70 A6BF 9D0D D725 D66E 8D50" /* å=îi.p¦¿.×%ÖnP */
- $"10DB 966B 649B 0CA3 958B 6457 90CC 214A" /* .Û–kd›.£•‹dWÌ!J */
- $"C4C0 27A2 95F4 98AD 14C2 1892 EBE7 864B" /* ÄÀ'¢•ô˜­.Â.’ëç†K */
- $"18AA 55C7 50D2 4A15 7F4E 566A 9C13 9C52" /* .ªUÇPÒJ..NVjœ.œR */
- $"AC77 FE86 B3A2 5D92 D112 516C BA99 60EE" /* ¬wþ†³¢]’Ñ.Qlº™`î */
- $"221A F194 D9DF FF5F FF6B 77F9 4B01 4F8F" /* ".ñ”Ùßÿ_ÿkwùK.O */
- $"F681 8614 2F3E 31E3 EABB 7C34 6025 A491" /* ö†./>1ãê»|4`%¤‘ */
- $"9BC1 A348 628D 34AE 751A F8F7 7521 7F48" /* ›Á£Hb4®u.ø÷u!.H */
- $"68A4 6B9C F66F 252D 6021 9C97 39AB B637" /* h¤kœöo%-`!œ—9«¶7 */
- $"3B5D E8FB 56EE 824A F65D C84D E23C 7BF2" /* ;]èûVî‚Jö]ÈMâ<{ò */
- $"5400 0000 0000 0000 0000 0000 0014 080D" /* T............... */
- $"B05B 4688 1F60 376D 2209 1DE1 7E75 CD30" /* °[Fˆ.`7m"Æ.á~uÍ0 */
- $"5D2F 627B A077 8D86 2001 62AF 1031 6853" /* ]/b{ w† .b¯.1hS */
- $"2A8E 0308 16F6 C4EC E5B6 814A 1DF2 23EB" /* *Ž...öÄìå¶J.ò#ë */
- $"8C16 64F9 A1ED 8A1F 346E 2E1C 5ACB 4376" /* Œ.dù¡íŠ.4n..ZËCv */
- $"5014 B885 5212 5294 8F4F DF56 7339 8A5D" /* P.¸…R.R”OßVs9Š] */
- $"03C0 A05F D60B 5D58 2677 CD67 A4EE 3803" /* .À _Ö.]X&wÍg¤î8. */
- $"B2B1 9AD5 A41A C3EF 3281 3FFF 780A A5BD" /* ²±šÕ¤.Ãï2?ÿxÂ¥½ */
- $"861B 62F7 456F 1021 93CD A115 BD61 7E4C" /* †.b÷Eo.!“Í¡.½a~L */
- $"2306 D6BF D5D9 18AF 12BB 22D9 E32E 6976" /* #.Ö¿ÕÙ.¯.»"Ùã.iv */
- $"9282 5E47 A842 7983 2C87 64C5 6215 A0D9" /* ’‚^G¨Byƒ,‡dÅb. Ù */
- $"E45A EFAE 74F3 E5E5 7679 A7C0 D366 649C" /* äZï®tóååvy§ÀÓfdœ */
- $"9EF3 D763 2D6C D0AD 48E5 7A2A 9454 8B34" /* žó×c-lЭHåz*”T‹4 */
- $"B7FF 7FCD F604 90E4 2716 1C40 DD8A 8B1A" /* ·ÿ.Íö.ä'..@ÝŠ‹. */
- $"24C8 2F0C 06AC 999A 58B7 C15E E6B1 431B" /* $È/..¬™šX·Á^æ±C. */
- $"73D1 FEC5 5182 4A2D 33CB E920 AFBE 9F5A" /* sÑþÅQ‚J-3Ëé ¯¾ŸZ */
- $"0478 C2F3 80D7 241A 2E07 8BF3 FD3F 471A" /* .xÂó€×$...‹óý?G. */
- $"7C53 1C79 2F17 C32F D5C6 B977 E2F9 9D80" /* |S.y/.Ã/ÕÆ¹wâù€ */
- $"558B 7336 75BC 5945 3986 BD1C CE95 EA07" /* U‹s6u¼YE9†½.Εê. */
- $"7152 C778 65AD 73E9 F1B7 24D4 BDB0 7F24" /* qRÇxe­séñ·$Ô½°.$ */
- $"BACD 3C51 D344 33D7 21C7 BE9A 915D 2808" /* ºÍ<QÓD3×!Ǿš‘](. */
- $"3E68 3F1B 43AE 8F30 CE7F FF67 1C78 8498" /* >h?.C®0Î.ÿg.x„˜ */
- $"08D8 E1D9 3F1A E50B EB7C E564 6F4C 57F3" /* .ØáÙ?.å.ë|ådoLWó */
- $"9E60 5F9B 244E 83A9 33C9 668A 3951 7E33" /* ž`_›$Nƒ©3ÉfŠ9Q~3 */
- $"31D7 01E7 0342 6BC0 7FD1 7488 2BE1 9AD1" /* 1×.ç.BkÀ.Ñtˆ+ášÑ */
- $"1938 BBD8 7710 BAD3 BB92 2C80 A162 B2EF" /* .8»Øw.ºÓ»’,€¡b²ï */
- $"3FEA 6FC2 47D2 0D0E 28AB 03DA 4B34 4027" /* ?êoÂGÒ..(«.ÚK4@' */
- $"7FFD 87BC 9D96 E076 3C00 0000 0000 0000" /* .ý‡¼–àv<....... */
- $"0000 0000 0000 136C 1721 95F0 1991 3F80" /* .......l.!•ð.‘?€ */
- $"65DC 1F3F AEA0 BE5C 71D2 94CE C7FF 7FFF" /* eÜ.?® ¾\qÒ”ÎÇÿ.ÿ */
- $"7917 BEAD D458 935A 563C CC9C 6C0D CFFF" /* y.¾­ÔX“ZV<Ìœl.Ïÿ */
- $"55DA 93C2 F199 3D1E C4C2 3C5F A7BC D48E" /* UÚ“Âñ™=.ÄÂ<_§¼ÔŽ */
- $"4980 037B 9FCC F7BC 6E1E 78CD 2838 DC58" /* I€.{ŸÌ÷¼n.xÍ(8ÜX */
- $"F156 C827 88EA BFF7 BD95 BBD6 FE11 C305" /* ñVÈ'ˆê¿÷½•»Öþ.Ã. */
- $"A1D2 FA2A EA0B E56B 285B 91FE 551E F5E2" /* ¡Òú*ê.åk([‘þU.õâ */
- $"687C 5A51 1A67 64D3 BD76 4937 F455 4C94" /* h|ZQ.gdÓ½vI7ôUL” */
- $"6A7E B888 CB40 7AA3 DDEE 8BD8 2D9F 1EB6" /* j~¸ˆË@z£Ýî‹Ø-Ÿ.¶ */
- $"48DF 9C66 6BF3 A26A 3CC4 2D4D E47A 6D9A" /* Hßœfkó¢j<Ä-Mäzmš */
- $"DAB1 1DA4 083A D994 4416 C0D2 2E63 539E" /* Ú±.¤.:Ù”D.ÀÒ.cSž */
- $"7274 3C04 85F4 D7B5 EDEF 507A B2B7 1832" /* rt<.…ô×µíïPz²·.2 */
- $"6615 A186 4A80 0000 0000 0000 0000 0000" /* f.¡†J€.......... */
- $"07CF BF6C 3626 7453 BF7D 8B57 26C9 F556" /* .Ï¿l6&tS¿}‹W&ÉõV */
- $"1F12 0BB9 5DC4 797D 3C69 7DB2 2FFF 7F33" /* ...¹]Äy}<i}²/ÿ.3 */
- $"81FC E4ED 4BF8 9180 3FD2 0142 3F2D 1DF0" /* üäíKø‘€?Ò.B?-.ð */
- $"097B D61C 019A C409 B506 26FC D55D 7AE9" /* Æ{Ö..šÄƵ.&üÕ]zé */
- $"3464 6C57 13E7 565F 2553 70C3 3EC7 87AC" /* 4dlW.çV_%SpÃ>LJ¬ */
- $"3161 5289 3A6A FC0B E254 CAFA 6A32 2F8C" /* 1aR‰:jü.âTÊúj2/Œ */
- $"8B76 FA87 DADD 0333 2250 0058 F5C6 21CD" /* ‹vú‡ÚÝ.3"P.XõÆ!Í */
- $"D094 5CD5 10DD 2FA0 B74B 06FB AA9B 2B62" /* Д\Õ.Ý/ ·K.ûª›+b */
- $"E36D 708E B8F5 0739 3097 7F03 47BE 48F5" /* ãmpޏõ.90—..G¾Hõ */
- $"D079 1641 CA5D DF28 C92B 0EFA B18F CE6F" /* Ðy.AÊ]ß(É+.ú±Îo */
- $"6648 DB26 DE5C 1D17 2BD3 28AF DD89 801C" /* fHÛ&Þ\..+Ó(¯Ý‰€. */
- $"AB0D 40D1 9016 D542 63A0 8222 9D7A F0F5" /* «.@Ñ.ÕBc ‚"zðõ */
- $"A171 2D28 3D2C C22E 09AB 3AA9 C50B 7545" /* ¡q-(=,Â.Æ«:©Å.uE */
- $"4C64 18E8 8E67 3A7D DDBE 36CE 2F97 5AD0" /* Ld.èŽg:}ݾ6Î/—ZÐ */
- $"E4F0 8AFB 6071 6268 E5F6 09EA 245F 9F87" /* äðŠû`qbhåöÆê$_Ÿ‡ */
- $"E304 242C 234C 9FF7 1D0A 11C7 4FE7 20BC" /* ã.$,#LŸ÷.Â.ÇOç ¼ */
- $"EC58 1A4B 5A8E DE45 0E5F 4A03 4C8A 5051" /* ìX.KZŽÞE._J.LŠPQ */
- $"E410 4405 321B BD82 AC69 94F7 AA5E 5C65" /* ä.D.2.½‚¬i”÷ª^\e */
- $"436F 861A C95F 1AB0 2E2B 9689 AA43 B247" /* Co†.É_.°.+–‰ªC²G */
- $"6DE3 4E9E F205 F221 D175 86BB 4434 C0EE" /* mãNžò.ò!Ñu†»D4Àî */
- $"C472 EA2B 499D 63FA B4C8 FAB3 91F3 060D" /* Ärê+Icú´Èú³‘ó.. */
- $"C203 A636 1D98 6B00 D678 0D3C BE92 309E" /* Â.¦6.˜k.Öx.<¾’0ž */
- $"759A 11D4 B514 24FB E4D2 7089 76DE 42DD" /* uš.Ôµ.$ûäÒp‰vÞBÝ */
- $"5338 4798 5943 4A6B 500A 472E 77BE AEBD" /* S8G˜YCJkPÂG.w¾®½ */
- $"93B0 117A 0E2D A8E4 DFED 5A76 1775 2BFF" /* “°.z.-¨äßíZv.u+ÿ */
- $"1A84 CBE1 B007 D3EA 11B0 9BB8 4B3F BB56" /* .„Ëá°.Óê.°›¸K?»V */
- $"33F6 B242 4C5C A63D 638F 1BA5 0AC5 698D" /* 3ö²BL\¦=c.¥ÂÅi */
- $"45B3 D343 D769 FEEE C45D 50B0 9AAA 4146" /* E³ÓC×iþîÄ]P°šªAF */
- $"0BFA F8CC 694B A42D FC1E C3F1 54F0 D3F9" /* .úøÌiK¤-ü.ÃñTðÓù */
- $"F051 5182 D373 5210 38AA F9B0 D3F3 6B07" /* ðQQ‚ÓsR.8ªù°Óók. */
- $"C944 7FCA 2126 D17A 01B1 7763 CDE8 D5FF" /* ÉD.Ê!&Ñz.±wcÍèÕÿ */
- $"00F4 08D7 4060 339C D8E2 7EA4 B00D 3171" /* .ô.×@`3œØâ~¤°.1q */
- $"ABB0 7F47 D146 13B9 398E 14B3 C55D 10AF" /* «°.GÑF.¹9Ž.³Å].¯ */
- $"8D0A 2444 26A0 EFEA 6CB2 51FD EA28 0FD7" /* Â$D& ïêl²Qýê(.× */
- $"4E2F F54F 0066 62F2 66F3 334C 5D9D 77ED" /* N/õO.fbòfó3L]wí */
- $"F3D0 12ED 7A95 89A1 B928 8429 DCFB 8C68" /* óÐ.íz•‰¡¹(„)ÜûŒh */
- $"C35C 3C77 5D7D 5180 A012 ADA3 AE60 AAE0" /* Ã\<w]}Q€ .­£®`ªà */
- $"0D88 09A4 4F7B FAC4 A2FD 327D E109 4F0B" /* .ˆÆ¤O{úÄ¢ý2}áÆO. */
- $"3343 C0ED D985 7402 93E2 7A2E 09B4 09A6" /* 3CÀíÙ…t.“âz.ƴƦ */
- $"5348 2E51 C037 BE62 C1A7 15C4 B9C8 7F4B" /* SH.QÀ7¾bÁ§.ĹÈ.K */
- $"FC22 3596 D989 C701 6701 5488 1001 22B2" /* ü"5–Ù‰Ç.g.Tˆ.."² */
- $"C06A A5D5 2C94 6BA9 D1C6 2B33 5910 8B1F" /* Àj¥Õ,”k©ÑÆ+3Y.‹. */
- $"0B0D 5531 BE0F 3E72 9C60 75A8 2669 220D" /* ..U1¾.>rœ`u¨&i". */
- $"E140 D538 7CD4 5763 D708 6D5E 45C0 AE61" /* á@Õ8|ÔWc×.m^EÀ®a */
- $"EC8B E180 1D9C 712C 4DB9 F177 6733 0F76" /* ì‹á€.œq,M¹ñwg3.v */
- $"9A72 7AD0 D18D 2BE6 9DCE 6294 4092 CE8E" /* šrzÐÑ+æÎb”@’ÎŽ */
- $"ACED 8B00 B050 AE53 C09C 98D6 CFD1 4208" /* ¬í‹.°P®SÀœ˜ÖÏÑB. */
- $"DEB2 AF01 5ED7 E1F4 4EAA 0B09 2263 FE09" /* Þ²¯.^×áôNª.Æ"cþÆ */
- $"2771 6EB7 9181 1DFE A5DD 9A12 4592 02FD" /* 'qn·‘.þ¥Ýš.E’.ý */
- $"5F2D D4D6 5C15 B454 B07C 9B6A B9F9 AEC2" /* _-ÔÖ\.´T°|›j¹ù®Â */
- $"D883 1F5F B9B1 8258 6732 C7E3 5C90 DB16" /* ؃._¹±‚Xg2Çã\Û. */
- $"42EC D875 2B9D FEAF 1FED BD80 261D BAAE" /* BìØu+þ¯.í½€&.º® */
- $"3799 FDC7 DBE5 E769 A11C 3304 5D3B 419C" /* 7™ýÇÛåçi¡.3.];Aœ */
- $"5844 E615 EE7A 5DCE 272E D055 121D 1F84" /* XDæ.îz]Î'.ÐU...„ */
- $"2EC6 E6B1 A7DA D03A D600 6D58 4FF0 9196" /* .Ææ±§ÚÐ:Ö.mXOð‘– */
- $"FBCA CDDC 1B8D 9D1A BB7B 3782 0F3F 626C" /* ûÊÍÜ..»{7‚.?bl */
- $"26AA AF34 6A20 8210 1E96 ED21 5A26 EF04" /* &ª¯4j ‚..–í!Z&ï. */
- $"5F66 5C2D A8A4 F3BC 1871 AD1D FE4D 8C8B" /* _f\-¨¤ó¼.q­.þMŒ‹ */
- $"F1E5 A382 654B 08C7 EFC4 BFBA C29B 5C73" /* ñ壂eK.ÇïÄ¿ºÂ›\s */
- $"2420 9390 3B75 6DE6 0208 6F4F BB53 B2AA" /* $ “;umæ..oO»S²ª */
- $"AD28 4360 1A8A 4301 088C 6F17 68CC 9180" /* ­(C`.ŠC..Œo.hÌ‘€ */
- $"D757 7012 3BE3 C4AB DF05 97B9 4B57 B6FC" /* ×Wp.;ãÄ«ß.—¹KW¶ü */
- $"7693 36DE 89E8 E2AB 4352 A782 4520 DA28" /* v“6Þ‰èâ«CR§‚E Ú( */
- $"F1F2 34D6 2EAE E401 ED61 1E2E 4E74 D4EB" /* ñò4Ö.®ä.ía..NtÔë */
- $"98A9 94AD F856 8EE1 E3D0 06FC AA37 31E5" /* ˜©”­øVŽáãÐ.üª71å */
- $"1047 113E C151 CE86 B6A4 0F82 E5D9 CE50" /* .G.>ÁQΆ¶¤.‚åÙÎP */
- $"57A8 8F86 AFAD 21D1 2C4C F181 8BD7 106C" /* W¨†¯­!Ñ,Lñ‹×.l */
- $"3C77 649E 038E 3C63 66F4 EE1A 2906 755C" /* <wdž.Ž<cfôî.).u\ */
- $"EDD8 6093 6868 531C 9FA3 C5C9 3F3C 7786" /* íØ`“hhS.Ÿ£ÅÉ?<w† */
- $"BCC4 440C 13F9 0BCB 76BA 9364 A3CC 344F" /* ¼ÄD..ù.Ëvº“d£Ì4O */
- $"128B D594 CB9D A2DC 6C03 CA48 2D9E 9706" /* .‹Õ”Ë¢Ül.ÊH-ž—. */
- $"A281 5170 A91B 0033 4552 2A9A BF6F D4A9" /* ¢Qp©..3ER*š¿oÔ© */
- $"61B6 F6C1 7959 FDD2 8F3F C94B 2B90 29BB" /* a¶öÁyYýÒ?ÉK+)» */
- $"9FAA A83B FEFF 80A3 1EC2 B2D9 77CF 963B" /* Ÿª¨;þÿ€£.²ÙwÏ–; */
- $"85FF 5728 5CDD 2F01 7556 8155 F8AA 7984" /* …ÿW(\Ý/.uVUøªy„ */
- $"7543 0C18 A1FC 0353 DF5F D368 41E9 E0EF" /* uC..¡ü.Sß_ÓhAéàï */
- $"C363 A78F 3FE9 41E9 5F77 19A4 A811 FF43" /* Ãc§?éAé_w.¤¨.ÿC */
- $"8EE8 3FBA 00FA 54F6 15F5 CF3B 39A6 0984" /* Žè?º.úTö.õÏ;9¦Æ„ */
- $"CC99 7AE1 8E5B 71A9 1575 DB95 F166 D52F" /* Ì™záŽ[q©.uÛ•ñfÕ/ */
- $"A270 08D4 9515 3B89 2EA1 A097 12A3 B4E9" /* ¢p.Ô•.;‰.¡ —.£´é */
- $"5BFB AE47 8FD7 60F0 33DA E91B 234B 5D2F" /* [û®G×`ð3Úé.#K]/ */
- $"7C4B 00C2 60F1 7260 B78A 1835 B440 611B" /* |K.Â`ñr`·Š.5´@a. */
- $"042D F768 F9C9 8785 50AD 8421 77D4 B97A" /* .-÷hùɇ…P­„!wÔ¹z */
- $"6B02 828C E758 8B31 1E92 DF7F BE67 3DAB" /* k.‚ŒçX‹1.’ß.¾g=« */
- $"E5F8 F1FB FD8C 34F4 4B2F 98BF 24A9 4DF2" /* åøñûýŒ4ôK/˜¿$©Mò */
- $"32A9 A661 B01E F960 12E1 9C18 F197 CEA7" /* 2©¦a°.ù`.áœ.ñ—Χ */
- $"E1C4 4AB4 7CEB 2CE2 33F3 C23C F3FD 2CF9" /* áÄJ´|ë,â3óÂ<óý,ù */
- $"F132 8395 3D39 FD9D 983D 4454 9758 856B" /* ñ2ƒ•=9ý˜=DT—X…k */
- $"6556 B234 72B0 C2CA 71CA 9CEB 7AE4 FD7C" /* eV²4r°ÂÊqÊœëzäý| */
- $"0E3F 1930 6B17 7074 C216 3D9C 24BF 5B97" /* .?.0k.ptÂ.=œ$¿[— */
- $"A7EA 25F0 9DCC AFA5 BBEF 47E9 D7E6 7B0E" /* §ê%ð̯¥»ïGé׿{. */
- $"E02F 87A2 EF87 68FC 9BF7 F274 5F00 FC3D" /* à/‡¢ï‡hü›÷òt_.ü= */
- $"A5F8 7AC7 F0FA A5F8 7D42 C03F 0F42 FE1D" /* ¥øzÇðú¥ø}BÀ?.Bþ. */
- $"ABF0 F7CF E1EE 40ED 1CBC E67A C7C3 33E9" /* «ð÷Ïáî@í.¼æzÇÃ3é */
- $"75CE 6202 697A FF68 B299 C0A6 2F39 4F64" /* uÎb.izÿh²™À¦/9Od */
- $"6775 1459 6387 68C9 941E E328 B150 8D7C" /* gu.Yc‡hÉ”.ã(±P| */
- $"24C4 D953 4443 9A50 E4CC 4E41 B3A9 F28A" /* $ÄÙSDCšPäÌNA³©òŠ */
- $"BB0E 943C 0DAB C98A 023C 332B AE2D AF60" /* ».”<.«ÉŠ.<3+®-¯` */
- $"4D30 BA77 9D1A 93DC CEBB 7560 EA33 084C" /* M0ºw.“Üλu`ê3.L */
- $"BCFD 2F47 685E 4CC9 8A76 F1C8 04AB 126F" /* ¼ý/Gh^LÉŠvñÈ.«.o */
- $"B9FD 4A34 E181 4147 9F56 2AB4 EB2C 50EF" /* ¹ýJ4áAGŸV*´ë,Pï */
- $"D652 4543 763B B857 210B 2B4A BB50 0EAE" /* ÖRECv;¸W!.+J»P.® */
- $"90BD EEEC F92B DD18 0881 9B3A C6DF A028" /* ½îìù+Ý..›:Æß ( */
- $"45EB 36D7 50B4 D756 FB49 9F08 D74D 037B" /* Eë6×P´×VûIŸ.×M.{ */
- $"83A1 001C 0977 1DCC 81D0 B6B9 828A 6851" /* ƒ¡..Æw.Ìж¹‚ŠhQ */
- $"3CAC B3FF 572B 543A 4C73 3F35 0561 EC81" /* <¬³ÿW+T:Ls?5.aì */
- $"A8D4 82BC 9148 5E30 FF3E 3164 C43E 5461" /* ¨Ô‚¼‘H^0ÿ>1dÄ>Ta */
- $"4BD0 139E 6390 0E05 4793 56B8 5080 CBF6" /* KÐ.žc..G“V¸P€Ëö */
- $"9E70 BEA1 FB26 DD1E AEE1 E78D 0D32 FA02" /* žp¾¡û&Ý.®áç.2ú. */
- $"43FC FBC6 7464 2C9A 14AD 2C7C 0969 995F" /* CüûÆtd,š.­,|Æi™_ */
- $"6363 3037 9C34 C5F8 42DF B339 D2B0 5C45" /* cc07œ4ÅøBß³9Ò°\E */
- $"6130 509D 28E7 D3A7 9308 74ED 9265 B7F9" /* a0P(çÓ§“.tí’e·ù */
- $"0F54 D265 33D9 EB57 07C4 852B E3C8 771F" /* .TÒe3ÙëW.Ä…+ãÈw. */
- $"21F8 ADA3 D807 625C 513A E395 604B 0D6A" /* !ø­£Ø.b\Q:ã•`K.j */
- $"A9FC 297E 63AF 7622 23B6 63E1 EF25 F572" /* ©ü)~c¯v"#¶cáï%õr */
- $"01B0 400D 18C6 C9FA 6AF5 3E26 4199 6E68" /* .°@..ÆÉújõ>&A™nh */
- $"99B5 B3A9 F861 3419 C6C7 B65C D0F6 353B" /* ™µ³©øa4.ÆÇ¶\Ðö5; */
- $"6551 1B0A 9D82 1F07 4185 8C46 5867 DC22" /* eQ.‚..A…ŒFXgÜ" */
- $"BD38 AFF7 27BA 1114 9266 5EF4 1EA9 89B4" /* ½8¯÷'º..’f^ô.©‰´ */
- $"A634 E917 65E5 502E 8028 D24E 725F 0C22" /* ¦4é.eåP.€(ÒNr_." */
- $"1513 7B38 5FEA 3150 520B 6D8A 03D8 F796" /* ..{8_ê1PR.mŠ.Ø÷– */
- $"D183 D8FA 82E2 C147 B662 593B 9FC8 A2A0" /* уØú‚âÁG¶bY;ŸÈ¢  */
- $"C63B D151 D905 072C 02E5 919B 0BE9 6D76" /* Æ;ÑQÙ..,.å‘›.émv */
- $"4BEF 7D51 FF67 C2F2 BB61 DDD2 7981 0B7E" /* Kï}QÿgÂò»aÝÒy.~ */
- $"D406 3679 DFA4 FAE3 A33C 28AC 06C6 93C1" /* Ô.6yߤúã£<(¬.Æ“Á */
- $"B82F 53DB 1EB8 A6F3 5A24 A44A 1A76 9204" /* ¸/SÛ.¸¦óZ$¤J.v’. */
- $"6543 FC80 18DA 3C5D 395B 01DC D7E8 C21E" /* eCü€.Ú<]9[.Ü×èÂ. */
- $"A66C 9AE3 08D6 DBFC EE95 9E73 F71D 7CCA" /* ¦lšã.ÖÛüs÷.|Ê */
- $"2A6A F6D2 11D9 AC28 BEDE 8E1B 65EF A995" /* *jöÒ.Ù¬(¾ÞŽ.eï©• */
- $"F7B5 B19D 5F63 F42B D0AD D69A BD47 1EED" /* ÷µ±_cô+Э֚½G.í */
- $"2E5C 0276 3AEA F6D9 6E3F 314C 7F5F 52C3" /* .\.v:êöÙn?1L._RÃ */
- $"093D C8A9 23E4 C154 5587 294A 98A9 0643" /* Æ=È©#äÁTU‡)J˜©.C */
- $"AF18 0D20 51A4 6FE1 F326 11E7 5A91 2919" /* ¯.. Q¤oáó&.çZ‘). */
- $"DD53 B13B 2CB3 DE77 FAB9 420E BAFB 305B" /* ÝS±;,³Þwú¹B.ºû0[ */
- $"E9AB 7A2B 623B 78FE 346D 8BB6 BA40 AE40" /* é«z+b;xþ4m‹¶º@®@ */
- $"5B6D 6D53 81A1 076D 7058 E792 E410 3FA7" /* [mmS¡.mpXç’ä.?§ */
- $"AD06 7E2E 5158 D129 9233 6E1D 6B7C C701" /* ­.~.QXÑ)’3n.k|Ç. */
- $"D61D 42D8 472F D5E2 2710 0B6C 828A 2352" /* Ö.BØG/Õâ'..l‚Š#R */
- $"D400 65FA E227 A938 1832 18CC 2BCE 19A8" /* Ô.eúâ'©8.2.Ì+Î.¨ */
- $"773C 3CB1 C6BD D722 8EE1 8AE2 4D4B 97D4" /* w<<±Æ½×"ŽáŠâMK—Ô */
- $"1763 37E4 2F93 8578 534E 0BA9 B493 3B80" /* .c7ä/“…xSN.©´“;€ */
- $"F018 28BE 2A52 15B2 8499 08A8 005F F028" /* ð.(¾*R.²„™.¨._ð( */
- $"ADFD ACEB 238F 922A 75E4 1C65 F2C3 F14B" /* ­ý¬ë#’*uä.eòÃñK */
- $"213D 7263 4A9A 1C80 12BD 5895 0EC8 B955" /* !=rcJš.€.½X•.ȹU */
- $"8CD0 FB81 63CF FF7F B545 85DF E201 36A9" /* ŒÐûcÏÿ.µE…ßâ.6© */
- $"E524 1BD6 EDDA 7C33 8CD2 E114 BA93 51E0" /* å$.ÖíÚ|3ŒÒá.º“Qà */
- $"A113 A12A FBEA 8570 B5FE E1B6 7963 5B31" /* ¡.¡*ûê…pµþá¶yc[1 */
- $"512A 99B1 3A59 E50E C584 DD7F FF7F FF7E" /* Q*™±:Yå.Å„Ý.ÿ.ÿ~ */
- $"D3C9 019B 1FBC DB70 2C2A 14A6 E7F1 0147" /* ÓÉ.›.¼Ûp,*.¦çñ.G */
- $"5F3A A36C 6F8A 9038 ABD8 EB8F FF7F FE79" /* _:£loŠ8«Øëÿ.þy */
- $"6C12 2D6F FD6D F9A0 0392 0E82 0296 3C14" /* l.-oýmù .’.‚.–<. */
- $"FEFA 803C A3D4 1049 CF30 E22F 6542 7ABF" /* þú€<£Ô.IÏ0â/eBz¿ */
- $"378E 66B2 9091 D396 B953 DCF5 66D3 C5B5" /* 7Žf²‘Ó–¹SÜõfÓŵ */
- $"7719 028C 5C0F F898 00A1 0C1D E181 F9C7" /* w..Œ\.ø˜.¡..áùÇ */
- $"2E46 06D4 D623 1256 EFAE 89E3 4FFF 7FDD" /* .F.ÔÖ#.VﮉãOÿ.Ý */
- $"F00D 4E11 65D5 B8F9 7C0B A045 AC4A 1E42" /* ð.N.eÕ¸ù|. E¬J.B */
- $"221C B512 5480 EF2D CB80 A089 3603 2CA1" /* ".µ.T€ï-Ë€ ‰6.,¡ */
- $"391C 7925 C817 92E3 8438 C438 08D1 0637" /* 9.y%È.’ã„8Ä8.Ñ.7 */
- $"9FCD F4C2 C04C 40BB A484 5043 0C1E 7C85" /* ŸÍôÂÀL@»¤„PC..|… */
- $"D7F6 1F6D BFC7 60AA 4D18 A399 9A13 CCD0" /* ×ö.m¿Ç`ªM.£™š.ÌÐ */
- $"26DA 3F97 24CB E902 0668 67F7 FE63 7A2E" /* &Ú?—$Ëé..hg÷þcz. */
- $"16D6 987F FF7F AFC1 5C35 E63D BA36 6227" /* .Ö˜.ÿ.¯Á\5æ=º6b' */
- $"FF7C FD39 8B8B 1A5F 6026 831B 0764 8805" /* ÿ|ý9‹‹._`&ƒ..dˆ. */
- $"E40B 0F19 7FFF 7FFC DEBC DD5B 9008 0000" /* ä....ÿ.üÞ¼Ý[... */
- $"0C24 1D44 4641 3BC8 4248 E229 62D2 088D" /* .$.DFA;ÈBHâ)bÒ. */
- $"117F DE8D 0B52 C3FD 1DD9 3823 F138 4C98" /* ..Þ.RÃý.Ù8#ñ8L˜ */
- $"58A8 2683 519C F914 4961 5226 891F F863" /* X¨&ƒQœù.IaR&‰.øc */
- $"3FF2 B19F 113D BFEF 9D12 30C6 66BD E2A6" /* ?ò±Ÿ.=¿ï.0Æf½â¦ */
- $"5D8C BE7E BE19 3D8F 03F2 5D26 FF7F FF7E" /* ]Œ¾~¾.=.ò]&ÿ.ÿ~ */
- $"A82B 5E03 E7A8 E8F1 8C4D B6F1 F0E2 FC36" /* ¨+^.ç¨èñŒM¶ñðâü6 */
- $"DE7A 2F55 38B1 B436 2E50 7D25 E3F0 82C8" /* Þz/U8±´6.P}%ãð‚È */
- $"580F 0D19 C280 415C 2A7F FCD9 C720 E649" /* X...€A\*.üÙÇ æI */
- $"4064 2624 04AC 0B71 41FD 3937 8359 4137" /* @d&$.¬.qAý97ƒYA7 */
- $"8CA9 B642 C318 BD37 82D3 B786 8217 3252" /* Œ©¶BÃ.½7‚Ó·†‚.2R */
- $"44EA 4598 57D2 2F66 957F 39FE D712 F449" /* DêE˜WÒ/f•.9þ×.ôI */
- $"213A BEBB B6CC F551 FF7F EB0A AE45 8497" /* !:¾»¶ÌõQÿ.ë®E„— */
- $"0F4C FD34 4090 01FE CFC8 51AA C32A 7D95" /* .Lý4@.þÏÈQªÃ*}• */
- $"D414 2609 E22F 1B7D E10E 97BB 05D1 9D04" /* Ô.&Æâ/.}á.—».Ñ. */
- $"0592 9271 0D39 AB59 F165 0D09 549C B4E3" /* .’’q.9«Yñe.ÆTœ´ã */
- $"AEE5 555F 00A3 5E0A E4D3 BAFE 1EC6 2FCE" /* ®åU_.£^ÂäÓºþ.Æ/Î */
- $"FB04 C9BC 71D8 A42D 2F70 9FE1 EC17 C31D" /* û.ɼqؤ-/pŸáì.Ã. */
- $"ECB2 0A82 EFB1 914C F6D2 E54C 5316 B6C4" /* ì²Â‚ﱑLöÒåLS.¶Ä */
- $"4FFF 653B FD6E 27A6 9959 244B F458 B35C" /* Oÿe;ýn'¦™Y$KôX³\ */
- $"865C EB94 2CD7 7343 B74C C211 8A4D 2A99" /* †\ë”,×sC·LÂ.ŠM*™ */
- $"732E 3B43 CEAC C300 A520 924D 6F1F 8295" /* s.;CάÃ.¥ ’Mo.‚• */
- $"DF36 1FD4 E8F0 9221 6313 1B33 0C98 2721" /* ß6.Ôèð’!c..3.˜'! */
- $"8F55 5BA1 0E46 A755 1D7F A914 458D 9FFF" /* U[¡.F§U..©.EŸÿ */
- $"33CF 4CE3 AFC6 3383 BC4D A7E9 F546 FDCB" /* 3ÏLã¯Æ3ƒ¼M§éõFýË */
- $"8276 7778 2BBA EF7C 3677 6251 58C0 9EFF" /* ‚vwx+ºï|6wbQXÀžÿ */
- $"526C C883 6CFF 7FFF 7D4C 3F9F BD74 6BE9" /* Rlȃlÿ.ÿ}L?Ÿ½tké */
- $"B6EB 9003 823B 235D 6AD9 B382 FC45 F10C" /* ¶ë.‚;#]jÙ³‚üEñ. */
- $"8282 90ED 9D47 E949 FADC 7B04 1C1C 9EF1" /* ‚‚íGéIúÜ{...žñ */
- $"1ABB 270D 07BE 1943 4E14 70E0 48FF 81EE" /* .»'..¾.CN.pàHÿî */
- $"CE8A 5AAD 3CE9 090D 3126 F96A AEBA 5853" /* ΊZ­<éÆ.1&ùj®ºXS */
- $"D02E ADE8 4614 E2B7 2E7E 3DB6 DE6A 77A8" /* Ð.­èF.â·.~=¶Þjw¨ */
- $"48D0 2DBB BAF4 E94C 735D 27D6 87FF 7F80" /* HÐ-»ºôéLs]'Ö‡ÿ.€ */
- $"5BCC 3CA6 1168 D9E0 38B4 22B2 2154 02AA" /* [Ì<¦.hÙà8´"²!T.ª */
- $"A1FF 6D87 EB2B F3EB 3814 9F74 DEF3 4D86" /* ¡ÿm‡ë+óë8.ŸtÞóM† */
- $"ED68 7E75 9E81 1FD9 170B E013 7E4D 97B3" /* íh~už.Ù..à.~M—³ */
- $"51B0 6B2A 42AF EEB4 899B D2A2 6AC9 8EBF" /* Q°k*B¯î´‰›Ò¢jÉŽ¿ */
- $"2858 9FFC 5050 3364 8F2D 313E 94A9 5ED5" /* (XŸüPP3d-1>”©^Õ */
- $"6213 E9DD 6FF6 5813 72DA FE40 0F70 06C4" /* b.éÝoöX.rÚþ@.p.Ä */
- $"FF7D 053C 3E69 C976 DDFF 02D9 4688 D8D7" /* ÿ}.<>iÉvÝÿ.ÙFˆØ× */
- $"8DEF 5187 FCA3 40EE 3167 B6DD 7EE6 42AB" /* ïQ‡ü£@î1g¶Ý~æB« */
- $"B07A DB20 DC1D 7016 631F 8FB0 C83A 9CC2" /* °zÛ Ü.p.c.°È:œÂ */
- $"66B9 304B 74F5 03F7 217C D3E3 6000 ECE6" /* f¹0Ktõ.÷!|Óã`.ìæ */
- $"A319 FD9E 4131 7E74 59C6 FB3F 1B51 FE89" /* £.ýžA1~tYÆû?.Qþ‰ */
- $"52D3 C845 1BF0 4BFE 3BAE 4940 9830 8E9C" /* RÓÈE.ðKþ;®I@˜0Žœ */
- $"F843 F6A2 218E B2E2 8092 8E0E 3889 8137" /* øCö¢!Ž²â€’Ž.8‰7 */
- $"583C 394F CCE6 3D1B 37B8 C9A4 D805 B9E4" /* X<9OÌæ=.7¸É¤Ø.¹ä */
- $"A037 E45D 1167 9627 81E0 538C 1B6D EA0E" /*  7ä].g–'àSŒ.mê. */
- $"18CD 8E3C EE0C 5E0C B048 8DD2 C804 CA38" /* .ÍŽ<î.^.°HÒÈ.Ê8 */
- $"8678 CAA9 5EE1 8B6C E7D9 FDE1 5C14 D52A" /* †xÊ©^á‹lçÙýá\.Õ* */
- $"67F3 8A12 F698 857A 5692 1FB3 FF27 FE1B" /* góŠ.ö˜…zV’.³ÿ'þ. */
- $"7E31 5D25 B4A2 3647 FF07 064A 4D7B F160" /* ~1]%´¢6Gÿ..JM{ñ` */
- $"62D7 81CE 0940 AE5F CAEB F1A6 10C4 CB0E" /* b×ÎÆ@®_Êëñ¦.ÄË. */
- $"3D77 2C40 0146 8C72 B765 F6A9 3047 E748" /* =w,@.FŒr·eö©0GçH */
- $"0239 A725 8B4C 56F0 7E86 9A24 53D7 4832" /* .9§%‹LVð~†š$S×H2 */
- $"7924 73CB 4431 4977 0487 03FC F1B3 A21C" /* y$sËD1Iw.‡.üñ³¢. */
- $"2792 0B05 8183 8348 8EC0 2635 47D9 B51D" /* '’..ƒƒHŽÀ&5GÙµ. */
- $"CE40 1FA4 20C5 93A8 BEB4 B8CD 93D8 A79E" /* Î@.¤ Å“¨¾´¸Í“اž */
- $"62C5 846C 964D 0404 BE21 3AA5 9EC3 4450" /* bÅ„l–M..¾!:¥žÃDP */
- $"FAEE 938A A428 E4D0 7F1B 46A8 7AEC 97FB" /* ú¤(äÐ..F¨zì—û */
- $"1AFF 71DA F26D B5B1 E6F2 66B4 865E 1F12" /* .ÿqÚòmµ±æòf´†^.. */
- $"CE0F 3A8A EDF1 6321 BC5A 22D5 D3D6 BE19" /* Î.:Šíñc!¼Z"ÕÓÖ¾. */
- $"671A 38C3 11E8 FC9D 93AC 895A 1B84 7C9B" /* g.8Ã.èü“¬‰Z.„|› */
- $"979F 5DC5 BBE6 19A8 5D03 BE83 6FA4 B8F2" /* —Ÿ]Å»æ.¨].¾ƒo¤¸ò */
- $"AFCD 8115 B21B C1D5 80B4 5E20 3B19 9E48" /* ¯Í.².ÁÕ€´^ ;.žH */
- $"29C0 68DA F799 EC0D 56B3 7049 5EC1 11CB" /* )ÀhÚ÷™ì.V³pI^Á.Ë */
- $"CBAF FA0A 5AF1 22F1 3A4C 6F13 635A C681" /* ˯úÂZñ"ñ:Lo.cZÆ */
- $"06DA 8B44 A35B CF31 9B6F 57E6 AEC2 8D59" /* .Ú‹D£[Ï1›oWæ®ÂY */
- $"1556 A43E A289 74DC C398 B209 31B9 8CD0" /* .V¤>¢‰tÜØ²Æ1¹ŒÐ */
- $"07BE D253 76AB 7D79 4F26 D099 7AE8 E52C" /* .¾ÒSv«}yO&Йzèå, */
- $"EA35 D7BB E968 CAA0 5F61 EAE5 E9A1 E903" /* ê5×»éhÊ _aêåé¡é. */
- $"100E ED2C 5A66 21E2 1426 BE74 7A19 8C98" /* ..í,Zf!â.&¾tz.Œ˜ */
- $"3D67 A4D2 370F C95D 7131 2D31 0971 6022" /* =g¤Ò7.É]q1-1Æq`" */
- $"F4F2 359E 1FBD D23A CD94 4467 205E F7B1" /* ôò5ž.½Ò:Í”Dg ^÷± */
- $"5D18 EE91 9078 176B ADC2 65EB EECF D1A8" /* ].î‘x.k­ÂeëîÏѨ */
- $"F1B3 B999 E7CC 3079 BD9C 82D8 DF6E 29E0" /* ñ³¹™çÌ0y½œ‚Øßn)à */
- $"9502 EC8D 5C13 629B 109E A7C0 F438 6674" /* •.ì\.b›.ž§Àô8ft */
- $"C48B E75A 7CAC 28AE 3E9C 0ECF 9ADF F7BF" /* Ä‹çZ|¬(®>œ.Ïšß÷¿ */
- $"C51A E20D 64F1 B1DD C986 0C6F 6BFF 5102" /* Å.â.dñ±ÝɆ.okÿQ. */
- $"B233 B826 EBC9 35E2 9799 0A0F E81D 0816" /* ²3¸&ëÉ5â—™Â.è... */
- $"E01C B1A8 E4D9 1CCF 7F2E 4DB3 371B 83C0" /* à.±¨äÙ.Ï..M³7.ƒÀ */
- $"9DFD A603 83D6 4412 7DCF 2E2F 85D8 8259" /* ý¦.ƒÖD.}Ï./…Ø‚Y */
- $"DC97 798F 2E8A 09F5 C1A7 1E56 55F3 BFD0" /* Ü—y.ŠÆõÁ§.VUó¿Ð */
- $"34CE 311A 98BE C87C 8CCE 6EDF C85C A788" /* 4Î1.˜¾È|ŒÎnßÈ\§ˆ */
- $"AA7E 47D5 72AF 1842 5C5F 9D6A C586 CA4C" /* ª~GÕr¯.B\_jņÊL */
- $"34D3 6315 D6CA 0D6D 5B75 6C85 551B E270" /* 4Óc.ÖÊ.m[ul…U.âp */
- $"E9DD 6127 C363 1F5A 0AA4 8F55 114F 9ED3" /* éÝa'Ãc.Z¤U.OžÓ */
- $"034E A968 1BF1 513A 2F0D 3E61 612A 15E6" /* .N©h.ñQ:/.>aa*.æ */
- $"B89F 1877 F38E 8C96 20C3 1952 A559 62AE" /* ¸Ÿ.w󎌖 Ã.R¥Yb® */
- $"20E0 BE7D BF7C FAA3 F56C FF75 6D5E 07E7" /* à¾}¿|ú£õlÿum^.ç */
- $"EB87 E7E9 BFE7 EE37 E7EE B60B E7DA F7CF" /* ë‡çé¿çî7çî¶.çÚ÷Ï */
- $"A6FF 2B5C 2F9F AC00 ED1C BCF0 084D B6D5" /* ¦ÿ+\/Ÿ¬.í.¼ð.M¶Õ */
- $"A3F8 3A1B 179B 5659 AE02 A536 8D65 B1A0" /* £ø:..›VY®.¥6e±  */
- $"F806 81C6 9453 B9E5 1E84 EF36 3D8C 9922" /* ø.Æ”S¹å.„ï6=Œ™" */
- $"A841 EBC7 584D 175D A8CF 5AE5 52F4 364A" /* ¨AëÇXM.]¨ÏZåRô6J */
- $"CACB F4FA 59D1 6C18 1FE0 5F96 0F70 465A" /* ÊËôúYÑl..à_–.pFZ */
- $"7CFD 0C37 59FF 6248 10C6 4872 8573 D54E" /* |ý.7YÿbH.ÆHr…sÕN */
- $"7839 337E D900 4336 CF58 B59C BCC4 602F" /* x93~Ù.C6ÏXµœ¼Ä`/ */
- $"EA1A 205F CD8D 635B AE0D 5750 3316 72C7" /* ê. _Íc[®.WP3.rÇ */
- $"A765 C2F2 CF8C 52FB 1892 F55E B7A5 6D85" /* §eÂòÏŒRû.’õ^·¥m… */
- $"5782 FAB6 FBB5 CDF3 2DC2 0256 2927 4F4F" /* W‚ú¶ûµÍó-Â.V)'OO */
- $"1F92 5F99 B540 87DD 7A80 991B 0677 AB00" /* .’_™µ@‡Ýz€™..w«. */
- $"2D82 C5F6 11F7 F21B 2652 B798 75D5 42A6" /* -‚Åö.÷ò.&R·˜uÕB¦ */
- $"7757 E0E7 3C3F DBA5 6106 9F44 1800 E044" /* wWàç<?Û¥a.ŸD..àD */
- $"5844 8C9D 83C0 C5D3 6B95 CE2A 3EBC D7FD" /* XDŒƒÀÅÓk•Î*>¼×ý */
- $"B79B E645 6FD3 A5EE ECE2 C9A7 53C7 B2E3" /* ·›æEoÓ¥îìâɧSDzã */
- $"C659 D5C5 0FBD 7C88 93C3 D3D9 D81F 0AEB" /* ÆYÕÅ.½|ˆ“ÃÓÙØ.Âë */
- $"5784 8BF9 DAD7 993D 0C8B 9873 08A4 254B" /* W„‹ùÚ×™=.‹˜s.¤%K */
- $"2452 F95D 29CA 8B3E D48D 18FB C813 4ECB" /* $Rù])Ê‹>Ô.ûÈ.NË */
- $"D118 E3FA 926C 7A5F E5CC F774 D1DB B5C1" /* Ñ.ãú’lz_åÌ÷tÑÛµÁ */
- $"579A 2647 619A 67A0 423D 6C64 B3A6 9357" /* Wš&Gašg B=ld³¦“W */
- $"B8C6 8FBE A3AC E380 E548 5ED3 D83D 7DB9" /* ¸Æ¾£¬ã€åH^ÓØ=}¹ */
- $"93E8 9071 F6E0 168F 6BEC F674 6D08 F4DA" /* “èqöà.kìötm.ôÚ */
- $"C1F7 11FD DEF8 2420 30DA 71E2 C605 81EB" /* Á÷.ýÞø$ 0ÚqâÆ.ë */
- $"565B D461 AF6E 3127 34AC BA64 C660 14E1" /* V[Ôa¯n1'4¬ºdÆ`.á */
- $"F6AB DA92 386B 3E7B BD42 90E9 ABA2 6EE7" /* ö«Ú’8k>{½Bé«¢nç */
- $"8D0D 373C D280 46EC 6746 310C EA41 862B" /* .7<Ò€FìgF1.êA†+ */
- $"6D1B 7BE9 93AF 17F6 1D3A E7AB CA55 8A4B" /* m.{铯.ö.:ç«ÊUŠK */
- $"E867 6EF3 29DF FF5F B839 75E1 FA04 DD81" /* ègnó)ßÿ_¸9uáú.Ý */
- $"B6C9 DA44 D268 3B1A FF63 60F5 37A5 DDCB" /* ¶ÉÚDÒh;.ÿc`õ7¥ÝË */
- $"1AB3 5275 7692 7F15 F8E8 6A96 CEB4 D9E5" /* .³Ruv’..øèj–δÙå */
- $"3E5A 0E16 B1D0 B056 D0D2 0360 0900 5773" /* >Z..±Ð°VÐÒ.`Æ.Ws */
- $"BB3F C215 FD55 C9BF E3FC 48A1 CFAB BD39" /* »?Â.ýUÉ¿ãüH¡Ï«½9 */
- $"CD3D 906E 21CB C3DD E4D3 548C 4731 E777" /* Í=n!ËÃÝäÓTŒG1çw */
- $"EE15 C0DE CEBC 0F2F 85A6 9822 F1FF 7B2F" /* î.ÀÞμ./…¦˜"ñÿ{/ */
- $"2530 48C7 0C39 3659 CD03 06C5 7C8E 3D49" /* %0HÇ.96YÍ..Å|Ž=I */
- $"FED5 7B72 4652 772C 39C7 8F1B 63E8 2DC1" /* þÕ{rFRw,9Ç.cè-Á */
- $"1242 CA35 E396 6103 15DF D939 0597 B8D4" /* .BÊ5ã–a..ßÙ9.—¸Ô */
- $"8858 ACE3 3C32 6EE5 69A3 8512 3447 2B3B" /* ˆX¬ã<2nåi£….4G+; */
- $"0647 8C1F 2D31 4E57 0D03 BE26 5235 5275" /* .GŒ.-1NW..¾&R5Ru */
- $"74E8 B8F6 CF32 E077 8C51 41DB ED67 EE30" /* tè¸öÏ2àwŒQAÛígî0 */
- $"AD97 7956 D279 B0A8 768D 00E3 F604 A240" /* ­—yVÒy°¨v.ãö.¢@ */
- $"9656 5BCD B309 D0CD 3ECE C477 31EC F88D" /* –V[ͳÆÐÍ>ÎÄw1ìø */
- $"782F 8B9E 37FA A741 C636 7B55 D047 64A4" /* x/‹ž7ú§AÆ6{UÐGd¤ */
- $"E2EC C69D F609 F38F 821E 8D20 8709 87FF" /* âìÆöÆó‚. ‡Æ‡ÿ */
- $"3C3A B1ED C420 1F0B 52E3 8999 C684 30F3" /* <:±íÄ ..R㉙Ƅ0ó */
- $"C4ED 7FA9 3A2C D0E7 AE48 1AC2 7196 9347" /* Äí.©:,Ðç®H.Âq–“G */
- $"6BC9 BEE1 4112 4209 93CA 307A 7FF7 8B12" /* kɾáA.BÆ“Ê0z.÷‹. */
- $"EE76 8890 A529 33CC F435 A84F 9414 A719" /* îvˆ¥)3Ìô5¨O”.§. */
- $"BFB2 6305 201F 372D 567F 30DF 2E47 D0B9" /* ¿²c. .7-V.0ß.Gй */
- $"C68F 5126 7EAA D95A 12D0 DA8A 8CF4 8A2A" /* ÆQ&~ªÙZ.ÐÚŠŒôŠ* */
- $"CBAE 0509 B614 A9E1 2CA2 D0E0 F017 E395" /* Ë®.ƶ.©á,¢Ðàð.ã• */
- $"AF82 85B5 4509 E75C 8E4D 5465 7DF2 CF39" /* ¯‚…µEÆç\ŽMTe}òÏ9 */
- $"ACFB DD5B C683 62C0 0B1C B7B9 EAEC 049C" /* ¬ûÝ[ƃbÀ..·¹êì.œ */
- $"8045 0178 6757 E317 872D ABC2 B077 6EF6" /* €E.xgWã.‡-«Â°wnö */
- $"3612 4132 3DD7 D39B B49A 04A8 207D 6135" /* 6.A2=×Ó›´š.¨ }a5 */
- $"C64F 3A0F 5028 7B6B 953E 8F19 920A 718F" /* ÆO:.P({k•>.’Âq */
- $"08E9 A079 EC51 A08F 4A77 5130 C807 9BC2" /* .é yìQ JwQ0È.›Â */
- $"B37B 4C7B 9BAA 40F3 4E94 BE51 C027 32B5" /* ³{L{›ª@óN”¾QÀ'2µ */
- $"751F 4793 7271 226E 82F3 CF14 8BC3 F927" /* u.G“rq"n‚óÏ.‹Ãù' */
- $"4C81 7F29 AB70 8B3B E948 86D6 569F FEC2" /* L.)«p‹;éH†ÖVŸþÂ */
- $"BF6C 92F9 1011 3BE3 9E91 6458 1634 34A3" /* ¿l’ù..;ãž‘dX.44£ */
- $"3042 520F 5D64 6429 32CE 04FD 1B98 0698" /* 0BR.]dd)2Î.ý.˜.˜ */
- $"3A36 655C 86C7 C272 4B02 E259 0537 4DB8" /* :6e\†ÇÂrK.âY.7M¸ */
- $"C6C2 6980 ECFB 0FC1 C6D9 0A2C D00F 282A" /* ÆÂi€ìû.ÁÆÙÂ,Ð.(* */
- $"7A0B D91F 08CA 762C A629 048E 9BCC CFD2" /* z.Ù..Êv,¦).Ž›ÌÏÒ */
- $"1EBC 8F60 2F64 F24D F1FB 81C6 8AEC CFDB" /* .¼`/dòMñûÆŠìÏÛ */
- $"623A 01A9 35D2 B5E1 B80A 2D32 084E 3857" /* b:.©5Òµá¸Â-2.N8W */
- $"C025 BCDA 4728 F3AD 35AD 9AAA E054 21B7" /* À%¼ÚG(ó­5­šªàT!· */
- $"A47E 62C5 9921 02C0 09E3 440D 063A 3789" /* ¤~bÅ™!.ÀÆãD..:7‰ */
- $"5072 E54A 4654 E148 AC2E 4A99 C6A5 3923" /* PråJFTáH¬.J™Æ¥9# */
- $"49B5 6906 6531 FD5E 7CCE 1C4B EEDE 7482" /* Iµi.e1ý^|Î.KîÞt‚ */
- $"9E3F 73AE C777 0214 C921 3131 C5CB 9F61" /* ž?s®Çw..É!11ÅËŸa */
- $"64A4 4E70 57C2 5C04 E25B 266E 6887 7477" /* d¤NpWÂ\.â[&nh‡tw */
- $"FCCB 1F0C 89F2 6CF6 713E 4D08 8AC8 9B0C" /* üË..‰òlöq>M.ŠÈ›. */
- $"00AC D9D7 A28A C219 B52B B46A D704 F919" /* .¬Ù×¢ŠÂ.µ+´j×.ù. */
- $"2050 6CCA 215A 299B 9129 9739 DA6F 3A67" /* PlÊ!Z)›‘)—9Úo:g */
- $"FE12 2BF1 4F8B 26ED D21F F727 5B59 22F3" /* þ.+ñO‹&íÒ.÷'[Y"ó */
- $"2E05 F4A0 9754 F431 9AED 1B65 038C CD7F" /* ..ô —Tô1ší.e.ŒÍ. */
- $"8254 E3AE 035C 18D7 0E28 6300 0DF0 998D" /* ‚Tã®.\.×.(c..ð™ */
- $"0191 85AF C71B B3CF F0D6 3A8F B1AA 5E99" /* .‘…¯Ç.³ÏðÖ:±ª^™ */
- $"BAB8 7C7F 0214 F864 4744 E747 7248 3C94" /* º¸|...ødGDçGrH<” */
- $"3AC8 CE04 1019 11ED 4BCC 76E9 FE4E 5728" /* :ÈÎ....íKÌvéþNW( */
- $"5BB0 986C D763 A3C7 AF8A 14E9 D24A AD17" /* [°˜l×c£Ç¯Š.éÒJ­. */
- $"FF66 611F B77C 0830 9093 A560 06FA E9CF" /* ÿfa.·|.0“¥`.úéÏ */
- $"054B 5846 1681 5DBF 34F9 49A9 45E0 8F20" /* .KXF.]¿4ùI©Eà */
- $"7FFD 6264 2193 031D A60F A111 B0B7 CFEE" /* .ýbd!“..¦.¡.°·Ïî */
- $"DE49 EC80 C0F1 D7F6 A495 900B 4126 40BE" /* ÞIì€Àñ×ö¤•.A&@¾ */
- $"185B DFFE C7B0 12AC C143 AA85 70E5 81EF" /* .[ßþǰ.¬ÁCª…påï */
- $"79CE 1662 08E4 203F 1706 40FB CC39 CA8F" /* yÎ.b.ä ?..@ûÌ9Ê */
- $"8002 1CFA 3BCC 6B79 5C83 A4D2 7147 E38F" /* €..ú;Ìky\ƒ¤ÒqGã */
- $"C93B F2E8 6A15 6D30 C314 E898 81E3 FF7B" /* É;òèj.m0Ã.è˜ãÿ{ */
- $"5FC5 EE13 0449 1985 2CBC 73C7 C569 DCB1" /* _Åî..I.…,¼sÇÅiܱ */
- $"8024 F7CA CC7A FE3B CC15 4BCE 5B92 1BBB" /* €$÷ÊÌzþ;Ì.KÎ[’.» */
- $"0048 F291 579F FD20 F11A 1934 CC11 9C3F" /* .Hò‘WŸý ñ..4Ì.œ? */
- $"CE49 027A 9763 9E57 A2FF 7FFD 53E4 E50B" /* ÎI.z—cžW¢ÿ.ýSäå. */
- $"C747 02FF 7869 0537 1482 221E 0220 79D5" /* ÇG.ÿxi.7.‚".. yÕ */
- $"45B1 2E48 6A6C 8486 571F E1F1 BF39 0797" /* E±.Hjl„†W.áñ¿9.— */
- $"5D21 6964 EA9B 13F1 E6B7 C4B5 A2B7 E2BD" /* ]!idê›.ñæ·Äµ¢·â½ */
- $"09C2 B200 0000 0000 003E A392 6527 69B6" /* ÆÂ²......>£’e'i¶ */
- $"B189 8365 F55D 7A2B 0398 4196 BB60 D4F0" /* ±‰ƒeõ]z+.˜A–»`Ôð */
- $"06B6 100C 5B60 D76F 8FEE EFFB D525 0E2B" /* .¶..[`×oîïûÕ%.+ */
- $"3535 B765 22E7 F77C CF5C 8907 7626 62C0" /* 55·e"ç÷|Ï\‰.v&bÀ */
- $"3B04 A170 EEA6 A399 F26B CD7E 92BC 9E13" /* ;.¡p™òkÍ~’¼ž. */
- $"9D2D 6907 B06F 6B9A 957D 3C57 DC9F 06E6" /* -i.°okš•}<WÜŸ.æ */
- $"C3B6 16AD C91B E868 E000 1848 3BE4 5C3A" /* ö.­É.èhà..H;ä\: */
- $"1162 2272 401F 600B A973 281E 62B3 2654" /* .b"r@.`.©s(.b³&T */
- $"74B0 287C C53E A3DA 2A14 E38F 9FFE 3A8E" /* t°(|Å>£Ú*.ãŸþ:Ž */
- $"0D69 7E9D 5B07 1396 ED52 69BC 3971 5630" /* .i~[..–íRi¼9qV0 */
- $"7C63 8DA9 7A40 F364 CC6A FCAC DC7C 59DC" /* |c©z@ódÌjü¬Ü|YÜ */
- $"278A 92E3 6FBF F936 7157 2583 232E E558" /* 'Š’ão¿ù6qW%ƒ#.åX */
- $"0000 C241 6B90 4DCB 6421 F85A B681 4812" /* ..ÂAkMËd!øZ¶H. */
- $"9165 5C06 0195 F213 DB9F 5E2F 4BDE A075" /* ‘e\..•ò.ÛŸ^/KÞ u */
- $"BD9A 741B 971B 3411 1F73 7FF8 D719 BA55" /* ½št.—.4..s.ø×.ºU */
- $"8048 404F FEEA FC74 AEB1 84FD 03F9 5D43" /* €H@Oþêüt®±„ý.ù]C */
- $"BE42 E61F FF7F F4CA BA56 9654 B757 FF60" /* ¾Bæ.ÿ.ôʺV–T·Wÿ` */
- $"CA39 3290 054C E785 0EA7 F04D AF3E B342" /* Ê92.Lç….§ðM¯>³B */
- $"A80A 815D 3954 73F2 871A 51FF 7488 20CD" /* ¨Â]9Tsò‡.Qÿtˆ Í */
- $"90F3 23B8 80FE C6BF 726C 5426 83F2 5400" /* ó#¸€þÆ¿rlT&ƒòT. */
- $"0000 0000 0000 0000 BFA5 D802 777C F954" /* ........¿¥Ø.w|ùT */
- $"286B A586 76CF 26CE 72CA 6FE7 BD43 DB36" /* (k¥†vÏ&ÎrÊoç½CÛ6 */
- $"A826 870E 2EEF E2C4 2E22 E63C FF7F AF51" /* ¨&‡..ïâÄ."æ<ÿ.¯Q */
- $"40C1 B727 22F3 9ACC 894D 0C49 EC7A D998" /* @Á·'"óšÌ‰M.IìzÙ˜ */
- $"64A9 DD22 2545 B85C D621 0609 B73A 9D9F" /* d©Ý"%E¸\Ö!.Æ·:Ÿ */
- $"FF7F FF7F C0F7 00E1 B069 1D76 3BA1 E98C" /* ÿ.ÿ.À÷.á°i.v;¡éŒ */
- $"5F1B 1E11 B6F6 EB6D 6316 9DBC D1B2 DC90" /* _...¶öëmc.¼Ñ²Ü */
- $"5E1D 5EE0 3C65 57D0 B69C 3782 D1BE 3A77" /* ^.^à<eWжœ7‚Ѿ:w */
- $"436E 462B 45B7 FF61 4FA4 A45B 8C34 39D8" /* CnF+E·ÿaO¤¤[Œ49Ø */
- $"1B35 B876 A5F1 F2AD 3F78 D289 1C2E E3B4" /* .5¸v¥ñò­?xÒ‰..ã´ */
- $"A28B 64FA 1E2C 0CCD 0B1C AD42 8866 DDD6" /* ¢‹dú.,.Í..­BˆfÝÖ */
- $"62F0 225B 8DF7 32B3 FC3C 79E9 000B 1CA9" /* bð"[÷2³ü<yé...© */
- $"2C82 4874 34AB B158 47CD FA9F EBC8 0923" /* ,‚Ht4«±XGÍúŸëÈÆ# */
- $"B291 7229 8C3F E7FD 193C 330B A3B4 6969" /* ²‘r)Œ?çý.<3.£´ii */
- $"FCF6 E1BA 4C4A E64C B1BC 5BAF F402 C828" /* üöáºLJæL±¼[¯ô.È( */
- $"3A51 CC67 A851 E207 5A7C 3733 1031 FD5C" /* :QÌg¨Qâ.Z|73.1ý\ */
- $"E4D3 B69F FF67 2C6D 3FC7 D5B4 E63F 55B9" /* äÓ¶Ÿÿg,m?ÇÕ´æ?U¹ */
- $"FD5F 3DB1 4589 6ADF 54F0 F42A 498F 61C8" /* ý_=±E‰jßTðô*IaÈ */
- $"4872 5CD7 F70D 9C80 8880 EB9A 1FE7 C715" /* Hr\×÷.œ€ˆ€ëš.çÇ. */
- $"E57A 280F 96CF 014C 0411 EF44 C4F2 C64F" /* åz(.–Ï.L..ïDÄòÆO */
- $"F91B A9D6 EB9E F615 096F E5C0 5B30 BB79" /* ù.©Öëžö.ÆoåÀ[0»y */
- $"D645 BF4F B70A 2C40 3D24 A4C4 5A01 F3DB" /* ÖE¿O·Â,@=$¤ÄZ.óÛ */
- $"8879 D458 F558 4C8E 3C87 E83C 9C30 F0C3" /* ˆyÔXõXLŽ<‡è<œ0ðà */
- $"F7EB BE6A 2B3B B9CB 4F2E 3B49 CA98 6025" /* ÷ë¾j+;¹ËO.;Iʘ`% */
- $"D6C7 6B39 ED18 A784 5410 F9CD 4FB5 9E32" /* ÖÇk9í.§„T.ùÍOµž2 */
- $"EABF F72F 6ECC 217F E295 4BDA F0C8 2678" /* ê¿÷/nÌ!.â•KÚðÈ&x */
- $"B0F7 3381 2299 1033 5300 BB1C E72F 1EE0" /* °÷3"™.3S.».ç/.à */
- $"75D6 68D0 8C87 A574 580B 4AD8 7BC8 E1C4" /* uÖhÐŒ‡¥tX.JØ{ÈáÄ */
- $"64D3 76AA A080 1E28 FD04 890B B9A1 7E5C" /* dÓvª €.(ý.‰.¹¡~\ */
- $"79E2 31B9 1C3E DBAE 8BC6 DB23 53A4 0F06" /* yâ1¹.>Û®‹ÆÛ#S¤.. */
- $"74AA 7920 6233 E3BF B281 AFAA 957D FDFB" /* tªy b3㿲¯ª•}ýû */
- $"216A 3ECE 3139 37DF 8885 620B 5D55 D0FD" /* !j>Î197߈…b.]UÐý */
- $"F796 6A70 CEFD 33D8 B369 178E 99C0 9FFF" /* ÷–jpÎý3سi.Ž™ÀŸÿ */
- $"7FD2 27D4 D615 4840 B836 A0B5 1D6F 2A5A" /* .Ò'ÔÖ.H@¸6 µ.o*Z */
- $"1338 2369 83A0 D409 0FA7 77EF 19B9 21E6" /* .8#iƒ ÔÆ.§wï.¹!æ */
- $"3E21 0CB0 D4D3 362A EA6F 6340 8D73 27FB" /* >!.°ÔÓ6*êoc@s'û */
- $"C3EF 7823 33DF 7A8C 5C69 20C4 5816 72E4" /* Ãïx#3ßzŒ\i ÄX.rä */
- $"712C 3345 6755 76F3 FEAF 494B D0B4 3C8F" /* q,3EgUvóþ¯IKд< */
- $"B83F A050 C3E9 4CA2 6A6E 7AD0 D7FF 5860" /* ¸? PÃéL¢jnzÐ×ÿX` */
- $"548E 54E7 C3B9 6DDF 462C 54BE 5EF9 1A41" /* TŽTçùmßF,T¾^ù.A */
- $"6A46 A4FB 1C36 1CA4 77EC 2899 F147 3422" /* jF¤û.6.¤wì(™ñG4" */
- $"843C 7FAE 123E 6894 9B7F 3125 EB0F 3129" /* „<.®.>h”›.1%ë.1) */
- $"9DC1 8469 CE90 BB6E 4F2C 385A 0FD1 9AC7" /* Á„iλnO,8Z.ÑšÇ */
- $"3318 3BF0 B1AA A51A 9022 A143 29FF 7FC1" /* 3.;𱪥."¡C)ÿ.Á */
- $"0F0F 6570 67C4 7FA7 9906 DE4E 5439 A278" /* ..epgÄ.§™.ÞNT9¢x */
- $"34E1 3D57 BB0E 086E 4C71 4406 DA9D CA56" /* 4á=W»..nLqD.ÚÊV */
- $"3EFD D077 5DA5 CD7D C244 9128 F408 1F03" /* >ýÐw]¥Í}ÂD‘(ô... */
- $"0C8F FF4B 9274 2EC6 E208 13C5 EE1B 3CEA" /* .ÿK’t.Æâ..Åî.<ê */
- $"C5C0 06F5 0FA1 11FF 7FE3 A446 32E6 F4DA" /* ÅÀ.õ.¡.ÿ.ã¤F2æôÚ */
- $"23EC 5108 3AE0 CD16 AFFF 3965 8196 56E2" /* #ìQ.:àÍ.¯ÿ9e–Vâ */
- $"2881 4EB9 CA14 5C4A 8091 B176 8823 BF09" /* (N¹Ê.\J€‘±vˆ#¿Æ */
- $"CED5 0D88 E6BB DD95 1B72 36E8 809C D432" /* ÎÕ.ˆæ»Ý•.r6耜Ô2 */
- $"872D C08C 7DCB B30E 548B AE16 0D85 6B49" /* ‡-ÀŒ}˳.T‹®..…kI */
- $"9B28 D491 ECD6 F598 691A 0891 135A 63A0" /* ›(Ô‘ìÖõ˜i..‘.Zc  */
- $"593C 1FFD 8A54 4FB9 F2AB 20FC 5CF3 1B88" /* Y<.ýŠTO¹ò« ü\ó.ˆ */
- $"EE7E 8355 45D6 87C8 28CE 7B33 92A2 D8D6" /* î~ƒUEÖ‡È(Î{3’¢ØÖ */
- $"E8DF EF94 500A 0D78 DE9F 8657 F7BD 7F40" /* èßï”PÂ.xÞŸ†W÷½.@ */
- $"5E07 0789 EDC7 F3A5 A0BF 3929 6B19 A460" /* ^..‰íÇó¥ ¿9)k.¤` */
- $"7A50 91FF 42EA 5F12 DFA5 E0A0 84CC E869" /* zP‘ÿBê_.ߥࠄÌèi */
- $"BB1F 6EDA 2238 5DB0 7F22 3521 F04B FF6B" /* ».nÚ"8]°."5!ðKÿk */
- $"6827 722A DD5F 3C9D D3F4 2BE3 614D 0A3F" /* h'r*Ý_<Óô+ãaMÂ? */
- $"62C4 E6AC 95CA 5946 37E8 BC76 97FD 5167" /* bÄæ¬•ÊYF7è¼v—ýQg */
- $"C970 D4C7 0655 C470 5913 DBBD AA8C 87A4" /* ÉpÔÇ.UÄpY.Û½ªŒ‡¤ */
- $"3C63 0B7F 54CD 391E 574D F2D5 C728 20B7" /* <c..TÍ9.WMòÕÇ( · */
- $"9955 DAC8 72A5 DBBB F7ED 4C9F 6FFE 3A4E" /* ™UÚÈr¥Û»÷íLŸoþ:N */
- $"E165 1831 C0E5 8285 96C2 3959 1BE7 E884" /* áe.1Àå‚…–Â9Y.çè„ */
- $"E568 89C1 FD03 D443 F6D1 A7C9 4CFE F7B9" /* åh‰Áý.ÔCöѧÉLþ÷¹ */
- $"A0BA 5040 19D5 965F 0EB5 E503 4B32 E6C8" /*  ºP@.Õ–_.µå.K2æÈ */
- $"B9C1 DEBB B8B7 47DC A850 AF44 D3B7 F562" /* ¹ÁÞ»¸·GܨP¯DÓ·õb */
- $"4210 4DFF 42A0 3D9A 7C63 8124 22A9 B258" /* B.MÿB =š|c$"©²X */
- $"2256 6243 3077 FF57 7389 3FB6 A096 0EAB" /* "VbC0wÿWs‰?¶ –.« */
- $"DD33 EF25 C4B0 7338 F6D7 8730 FF2E DD0A" /* Ý3ï%İs8öׇ0ÿ.Ý */
- $"BBDA 7A6E EFE8 58EE D64B A09E 2B00 EC04" /* »ÚznïèXîÖK ž+.ì. */
- $"09C9 A9F4 82A0 3132 4829 65CA E93B B827" /* ÆÉ©ô‚ 12H)eÊé;¸' */
- $"E81F B387 132B 5D15 E526 6FEC 2CB1 407F" /* è.³‡.+].å&oì,±@. */
- $"8485 FF32 4933 D357 FC45 0E44 EE66 D960" /* „…ÿ2I3ÓWüE.DîfÙ` */
- $"5AA3 A13A FC0B D8E2 622E 0BEE 714F 2672" /* Z£¡:ü.Øâb..îqO&r */
- $"3850 26C4 E626 F9BA 418C BC8A 7481 C6BE" /* 8P&Äæ&ùºAŒ¼Štƾ */
- $"BFA6 0D72 0603 3452 46C0 9FDB BE63 34D9" /* ¿¦.r..4RFÀŸÛ¾c4Ù */
- $"9599 7519 804B F1CE 0FC8 7572 F58E EB32" /* •™u.€KñÎ.ÈurõŽë2 */
- $"3501 CBB0 C05B 5643 485A 0012 64C2 8022" /* 5.˰À[VCHZ..d€" */
- $"BD39 EB39 2B57 0AA3 3931 93D4 885E CDF2" /* ½9ë9+W£91“Ôˆ^Íò */
- $"818D 7734 36C2 BEE1 4F55 116C 47A9 DC40" /* w46¾áOU.lG©Ü@ */
- $"A8A8 4532 7C33 9D7E 070A BA9E 36F7 2445" /* ¨¨E2|3~.ºž6÷$E */
- $"074C 181A 07B2 C470 FA15 8CCB C069 AD0F" /* .L...²Äpú.ŒËÀi­. */
- $"9DD2 8B21 6F22 7300 34B4 4378 25AB D9D2" /* Ò‹!o"s.4´Cx%«ÙÒ */
- $"1D9B B7F7 2F9C C3B1 926F DE61 4463 90BD" /* .›·÷/œÃ±’oÞaDc½ */
- $"BC76 27E7 A5B5 826F 908E 31BA 048F 97C1" /* ¼v'祵‚oŽ1º.—Á */
- $"1884 67A9 C4BA 4B2B 4A58 D0EE 0269 6832" /* .„g©ÄºK+JXÐî.ih2 */
- $"E8C6 03AA D2A2 D034 27AA D49E 9C01 069A" /* èÆ.ªÒ¢Ð4'ªÔžœ..š */
- $"1BDC C40B 3BA7 5F8D 0468 152D E505 7EC0" /* .ÜÄ.;§_.h.-å.~À */
- $"6BBF C4F4 2F45 99CB 1872 C713 FA0D 055F" /* k¿Äô/E™Ë.rÇ.ú.._ */
- $"551D 6E4D 5794 CC71 BAB5 C560 4D20 9464" /* U.nMW”ÌqºµÅ`M ”d */
- $"9F8C 94BA 1C96 0987 1AB4 61BB BA86 751B" /* ŸŒ”º.–Ƈ.´a»º†u. */
- $"9B79 D06A 7A3D A663 FB31 8B86 E588 5D15" /* ›yÐjz=¦cû1‹†åˆ]. */
- $"4A09 8B2B 81FC AE85 0D5A 1D8C A5B7 6DD9" /* JÆ‹+ü®….Z.Œ¥·mÙ */
- $"02F5 50CE 7017 1BDD 3D3D 86CB 250B 491B" /* .õPÎp..Ý==†Ë%.I. */
- $"AA1F 2D21 A416 E8E7 9A53 4299 8CDE CD59" /* ª.-!¤.èçšSB™ŒÞÍY */
- $"C678 B559 D85C C580 6795 AD5F F578 C9EE" /* ÆxµYØ\Å€g•­_õxÉî */
- $"73B2 8F4B 6EEA 6F07 F785 C1B3 374B E51F" /* s²Knêo.÷…Á³7Kå. */
- $"46DC 728C 05A4 6932 792A DB50 4E9A FD82" /* FÜrŒ.¤i2y*ÛPNšý‚ */
- $"A8A2 5EB8 024D C558 D6BC 350C 97B0 B2E8" /* ¨¢^¸.MÅXÖ¼5.—°²è */
- $"8F42 92FD 604D 6FB7 74B6 6EBE 97F6 CE03" /* B’ý`Mo·t¶n¾—öÎ. */
- $"0DFA C340 31C3 4C5E 0041 088B E097 383B" /* .úÃ@1ÃL^.A.‹à—8; */
- $"A236 97CC 8D2B 6F6D 0E58 4E56 1D49 32EC" /* ¢6—Ì+om.XNV.I2ì */
- $"626C C303 42BB D30B B8DE 5868 3C2F E39B" /* blÃ.B»Ó.¸ÞXh</ã› */
- $"A07A 236D 0F21 C0DD 1A0A 933A 7710 6605" /*  z#m.!ÀÝ.“:w.f. */
- $"343E 8D1A 9384 4F16 C01E 5AF7 DF53 0B38" /* 4>.“„O.À.Z÷ßS.8 */
- $"3615 80D7 428E 90F6 4620 02EA 4590 DF22" /* 6.€×BŽöF .êEß" */
- $"4B70 2FB2 CADA A529 F7FA E7C6 BC99 DFCD" /* Kp/²ÊÚ¥)÷úçÆ¼™ßÍ */
- $"5EE7 D677 B5BE F819 6A55 6070 E1A9 DF53" /* ^çÖwµ¾ø.jU`pá©ßS */
- $"3F82 0229 B6B7 D247 1967 8313 056F 9D27" /* ?‚.)¶·ÒG.gƒ..o' */
- $"753E E4DD EB7F 1372 C0F7 D72E 349B 2F9B" /* u>äÝë..rÀ÷×.4›/› */
- $"686C C9AF 0896 0865 7A3A 5A9D 807F 292A" /* hlɯ.–.ez:Z€.)* */
- $"8DDA A776 4B3C 0993 532D D682 A41B 9DC2" /* Ú§vK<Æ“S-Ö‚¤. */
- $"5113 9D60 934B 2055 D671 C6C4 1252 3CEF" /* Q.`“K UÖqÆÄ.R<ï */
- $"C72F AC19 4BED 185D BC60 5957 F81B 8278" /* Ç/¬.Kí.]¼`YWø.‚x */
- $"20B5 9173 4A1B FDC9 295D 54B7 8AFE 6938" /* µ‘sJ.ýÉ)]T·Šþi8 */
- $"FE49 BA78 3225 49A1 4243 823C 52B9 8489" /* þIºx2%I¡BC‚<R¹„‰ */
- $"9BDF 0AA1 9A6B 667D DCE2 FE18 C386 4EE9" /* ›ß¡škf}Üâþ.ÆNé */
- $"8AF7 92D0 4405 227C BD4C B9E4 34A7 2533" /* Š÷’ÐD."|½L¹ä4§%3 */
- $"D3C6 E915 D57B 681B B6DC FF03 D5D4 F1DD" /* ÓÆé.Õ{h.¶Üÿ.ÕÔñÝ */
- $"4FB5 BA54 262A 73C2 1CF4 4CD1 D842 E8C2" /* OµºT&*sÂ.ôLÑØBè */
- $"8169 3555 13EC 6A25 6DE0 3614 EC2E D1BB" /* i5U.ìj%mà6.ì.Ñ» */
- $"E597 BFC6 2ACB 6879 11D1 870D E79E 8422" /* å—¿Æ*Ëhy.ч.çž„" */
- $"C01D 4032 8887 6DBA FBEC 3077 F220 49E3" /* À.@2ˆ‡mºûì0wò Iã */
- $"8693 0B00 9F45 0F57 0A39 DA8E EAA5 CD48" /* †“..ŸE.WÂ9ÚŽê¥ÍH */
- $"2C93 C3EC BDE0 71D5 5749 0952 441C E3F8" /* ,“Ãì½àqÕWIÆRD.ãø */
- $"597F C1E6 FB6B BBED AD71 FC34 CFF8 5877" /* Y.Áæûk»í­qü4ÏøXw */
- $"DB67 5F6D 798F E163 5F6B 1CFA A87B ED7C" /* Ûg_myác_k.ú¨{í| */
- $"F176 3065 72FF 443D BA6B 8FBD 9E85 806A" /* ñv0erÿD=ºk½ž…€j */
- $"2A1B 368C 7A9E B1B1 93DE ABD8 263F 31B3" /* *.6Œzž±±“Þ«Ø&?1³ */
- $"1739 58F1 7233 FE7C 4EC4 32AA CDDB CF11" /* .9Xñr3þ|NÄ2ªÍÛÏ. */
- $"C519 9C61 B756 AF62 D55D 5D48 6AF7 4364" /* Å.œa·V¯bÕ]]Hj÷Cd */
- $"205E F14D AAD6 EFF5 2F0D CBE4 0F19 3159" /* ^ñMªÖïõ/.Ëä..1Y */
- $"94F4 910E 4217 990B CABE EBF5 2B67 2EF6" /* ”ô‘.B.™.ʾëõ+g.ö */
- $"FE41 0C44 1C50 43EA 69F5 4E73 5569 82A1" /* þA.D.PCêiõNsUi‚¡ */
- $"C13C 4899 3AA9 5E13 5F76 BF98 2105 1842" /* Á<H™:©^._v¿˜!..B */
- $"AF34 9AFD CFC8 D1E7 3479 E1F3 C86F D06F" /* ¯4šýÏÈÑç4yáóÈoÐo */
- $"9ED9 9DD8 E2E0 4B44 19F4 03E6 9CC0 3474" /* žÙØâàKD.ô.æœÀ4t */
- $"DFBD 078F D140 1C06 5F8C B6E2 665C 703A" /* ß½.Ñ@.._Œ¶âf\p: */
- $"2841 642E F538 C531 697D 5064 11AD 9E8C" /* (Ad.õ8Å1i}Pd.­žŒ */
- $"5A53 3174 7302 762E 9708 BEF5 AD41 0C01" /* ZS1ts.v.—.¾õ­A.. */
- $"D744 85FC D963 416A 9A3A 6898 F067 5B1C" /* ×D…üÙcAjš:h˜ðg[. */
- $"873B 42B6 72C4 FF18 337A 8A24 EDCE 6B8B" /* ‡;B¶rÄÿ.3zŠ$íÎk‹ */
- $"BF06 0EA4 0227 A131 8620 B03C A2B9 729E" /* ¿..¤.'¡1† °<¢¹rž */
- $"1242 EC64 E340 5C5C 9BFF 120A BB1B 75E5" /* .Bìdã@\\›ÿ.».uå */
- $"385B 68AF C7B7 8BA5 1E7B 6FC1 DDB2 F642" /* 8[h¯Ç·‹¥.{oÁݲöB */
- $"FF56 4D21 66B3 EA8C 7095 8FBD 92CC 7315" /* ÿVM!f³êŒp•½’Ìs. */
- $"665F B398 608C ADD4 11E0 DA38 734A C3DB" /* f_³˜`Œ­Ô.àÚ8sJÃÛ */
- $"9249 4640 27D6 D057 426E 651D BF14 F0DE" /* ’IF@'ÖÐWBne.¿.ðÞ */
- $"9130 2D17 8D66 9689 79BD 9A6D 5AF9 6C7C" /* ‘0-.f–‰y½šmZùl| */
- $"94BF 8531 6507 5621 1C11 8D8F F3A5 83D9" /* ”¿…1e.V!..ó¥ƒÙ */
- $"7EE3 1E6D 9B0A 8D44 F466 DE49 E606 E143" /* ~ã.m›ÂDôfÞIæ.áC */
- $"7E77 D417 D49D 9CF2 89AA B0FA 84A4 33A5" /* ~wÔ.Ôœò‰ª°ú„¤3¥ */
- $"8279 A26A 82C5 27CF FB64 D227 994E C6A7" /* ‚y¢j‚Å'ÏûdÒ'™NƧ */
- $"531C 7B7D D333 20D4 F79E 7C21 CC1E 7ADA" /* S.{}Ó3 Ô÷ž|!Ì.zÚ */
- $"F978 DEBB 1FF2 7420 A72D DE6B AB74 8DC6" /* ùxÞ».òt §-Þk«tÆ */
- $"DD0F 0386 BF57 5F23 4926 C874 D598 47A3" /* Ý..†¿W_#I&ÈtÕ˜G£ */
- $"FBC8 E9B0 38BB C695 B7F4 82A1 CC5F 1E22" /* ûÈé°8»Æ•·ô‚¡Ì_." */
- $"767C 20D5 E64D 44F1 B2D4 2298 C6A1 1842" /* v| ÕæMDñ²Ô"˜Æ¡.B */
- $"8139 0CC8 B9C5 284F 9FC8 945B 5342 94A8" /* 9.ȹÅ(OŸÈ”[SB”¨ */
- $"1A57 3351 E00E DB28 D5E3 9712 4346 6DBA" /* .W3Qà.Û(Õã—.CFmº */
- $"CC9B A1ED CD9B 778D 4523 1E9A AC69 8ED9" /* Ì›¡íÍ›wE#.š¬iŽÙ */
- $"67C4 C16D A548 A029 0075 0185 8D06 B7F0" /* gÄÁm¥H ).u.….·ð */
- $"8258 D26A EB95 D437 F0D2 8E91 D536 F534" /* ‚XÒjë•Ô7ðÒŽ‘Õ6õ4 */
- $"30A1 6DE7 E4B8 48DF 246E 6A43 4FE6 AED0" /* 0¡mçä¸Hß$njCOæ®Ð */
- $"48A0 5E1E C339 6C40 BE36 CEB8 870B F9EB" /* H ^.Ã9l@¾6θ‡.ùë */
- $"5ED8 3CA2 B3FA 8CD9 2D26 FF79 6468 862D" /* ^Ø<¢³úŒÙ-&ÿydh†- */
- $"6B87 3072 15D5 5640 D5D4 B4BA EAD3 84F1" /* k‡0r.ÕV@ÕÔ´ºêÓ„ñ */
- $"6A43 F378 100E 8088 A3FE 989B E75B F67F" /* jCóx..€ˆ£þ˜›ç[ö. */
- $"5B25 3AE2 C08C 8CB0 08DD A37F 94DD 7F03" /* [%:âÀŒŒ°.Ý£.”Ý.. */
- $"35C9 DF27 9A9A B829 6326 A95D 91F7 0BA3" /* 5Éß'šš¸)c&©]‘÷.£ */
- $"7220 E220 F062 D8DE ADE2 2AD6 DDFD C9E4" /* r â ðbØÞ­â*ÖÝýÉä */
- $"FAAE 543D 3CCB 5230 74F7 3120 02FD 6B45" /* ú®T=<ËR0t÷1 .ýkE */
- $"A2AB 805B 13FB 1879 6060 5600 1847 98E5" /* ¢«€[.û.y``V..G˜å */
- $"BF65 2CD4 ACD7 15D0 B77E 5A0F 8095 95CA" /* ¿e,Ô¬×.з~Z.€••Ê */
- $"1847 D25F 7D32 1AE2 89EA 9D49 074D A3E5" /* .GÒ_}2.â‰êI.M£å */
- $"201E 8AC7 CB9C 43BC 0732 70E0 3C4F E625" /* .ŠÇËœC¼.2pà<Oæ% */
- $"88E3 74DB 6FB7 7BE2 7006 F9E7 1F76 DBF3" /* ˆãtÛo·{âp.ùç.vÛó */
- $"C988 D665 F7AA 21E2 A5C1 E969 2917 3BA3" /* ɈÖe÷ª!â¥Áéi).;£ */
- $"17BF 925F F835 9827 813E DA4F EE9B 2DF3" /* .¿’_ø5˜'>ÚOî›-ó */
- $"B640 95E8 70A5 B577 8C1D 99D5 797D D482" /* ¶@•èp¥µwŒ.™Õy}Ô‚ */
- $"E23A 56DD 644D 9623 FEE2 63D2 A3DB E146" /* â:VÝdM–#þâcÒ£ÛáF */
- $"FC39 35A7 6C28 63D8 5240 0C80 0000 0000" /* ü95§l(cØR@.€.... */
- $"0001 4095 99D3 7A7A 0A05 B673 69BC DA9C" /* ..@•™ÓzzÂ.¶si¼Úœ */
- $"A108 DDEA EE48 6385 0790 FEA1 1AFC 2CED" /* ¡.ÝêîHc….þ¡.ü,í */
- $"2225 BE73 2ED7 00BB 2301 80FE 09DF E78E" /* "%¾s.×.»#.€þÆßçŽ */
- $"6FE6 4743 A0EE 0A03 4C9E F046 CDD8 E7F1" /* oæGC îÂ.LžðFÍØçñ */
- $"DB3F 1B67 F6E1 1F31 8096 90DF 5110 40B0" /* Û?.göá.1€–ßQ.@° */
- $"0000 0000 0000 0000 C0B9 E0FC 41FB A11C" /* ........À¹àüAû¡. */
- $"4696 89A0 DE42 F8C7 27D0 3F03 AA51 70FD" /* F–‰ ÞBøÇ'Ð?.ªQpý */
- $"DC5F D7B9 AFD3 A0F3 7BAA A910 9E5C 259E" /* Ü_×¹¯Ó ó{ª©.ž\%ž */
- $"E4FB 8F8E 01C1 96E2 0768 FE5A 0A43 E2F8" /* äûŽ.Á–â.hþZÂCâø */
- $"DA74 9500 C241 D1F6 3EFF 3F06 586F A511" /* Út•.ÂAÑö>ÿ?.Xo¥. */
- $"CCFE 8FE7 61E1 C392 D001 3F52 1CA8 CC23" /* ÌþçaáÃ’Ð.?R.¨Ì# */
- $"93F0 27DF 893F 4AC1 06C3 34DA 8953 BBC0" /* “ð'߉?JÁ.Ã4Ú‰S»À */
- $"84C0 4843 27E0 067E 5EBF FF7A 1540 4C0E" /* „ÀHC'à.~^¿ÿz.@L. */
- $"FA6C 44A1 A7BC DB24 6AD7 C367 EC93 33BF" /* úlD¡§¼Û$j×Ãgì“3¿ */
- $"FECB C1DF 83CC 5BF7 A7C0 DF62 2EFA 4283" /* þËÁ߃Ì[÷§Àßb.úBƒ */
- $"6E49 2492 4924 9249 2492 4924 9246 A4A5" /* nI$’I$’I$’I$’F¤¥ */
- $"7754 9685 B091 D8FF 1549 CF90 2079 3AFB" /* wT–…°‘Øÿ.IÏ y:û */
- $"E925 85CC 62A2 E49B 476B 47B9 319B 630F" /* é%…Ìb¢ä›GkG¹1›c. */
- $"A6B8 182C E282 D1CD 920A 4EB3 21BF 943C" /* ¦¸.,â‚ÑÍ’ÂN³!¿”< */
- $"27BF CCDE BD6E 481A 188C F70B C257 8118" /* '¿ÌÞ½nH..Œ÷.ÂW. */
- $"FBF7 FF78 F422 A3DB AE81 4980 0000 0000" /* û÷ÿxô"£Û®I€.... */
- $"0000 0000 0000 1EE1 BFBB C300 0000 0000" /* .......á¿»Ã..... */
- $"0000 0000 0000 14FB 3FE1 1B7A D142 E13F" /* .......û?á.zÑBá? */
- $"5B6F 704A 61CF 957D 258E F744 FB26 8356" /* [opJaÏ•}%Ž÷Dû&ƒV */
- $"74AD 1DDB 02F2 CF85 7AEB 3A06 6F12 084E" /* t­.Û.òÏ…zë:.o..N */
- $"8E93 D6DA E4FE 9FBE 2D16 1C87 701F 55C3" /* Ž“ÖÚäþŸ¾-..‡p.Uà */
- $"9966 3E8F 36CB 6D9F F3F6 F8D3 B3B9 E2C1" /* ™f>6ËmŸóöøÓ³¹âÁ */
- $"1019 C6E6 8FFF 7FDC 6948 D3AB C944 C64A" /* ..Ææÿ.ÜiHÓ«ÉDÆJ */
- $"8000 0000 0000 0000 000A B0CB 3806 445C" /* €........°Ë8.D\ */
- $"7110 4CDE 3651 AC94 777C 8AB0 5382 04AF" /* q.LÞ6Q¬”w|аS‚.¯ */
- $"32E5 68C2 122F 8A5B 12A8 FF39 CF5E 72FB" /* 2åhÂ./Š[.¨ÿ9Ï^rû */
- $"EFD4 1669 47C6 525E 88EF 0AAC 1EE1 98B6" /* ïÔ.iGÆR^ˆï¬.ᘶ */
- $"0BFF 7FAF 8A4B 7158 F7D7 1707 DE93 841E" /* .ÿ.¯ŠKqX÷×..Þ“„. */
- $"3C82 3260 1FFF 1C8B 6A6E 8C66 0000 0000" /* <‚2`.ÿ.‹jnŒf.... */
- $"0000 0000 0000 0121 EF03 234C 3124 0000" /* .......!ï.#L1$.. */
- $"0000 0000 0000 0000 077C 5957 204B A2ED" /* .........|YW K¢í */
- $"59B8 F3C4 CC60 8A58 7E23 0B9F A0FD 1DC8" /* Y¸óÄÌ`ŠX~#.Ÿ ý.È */
- $"8E0F FE2B 5F9F 12D8 09B3 57BB 7818 3CF5" /* Ž.þ+_Ÿ.ØÆ³W»x.<õ */
- $"D579 D427 5198 BD86 E2FC 8775 915B 37A5" /* ÕyÔ'Q˜½†âü‡u‘[7¥ */
- $"B2E6 6BD8 8404 31D9 4C54 3621 6561 5C3E" /* ²ækØ„.1ÙLT6!ea\> */
- $"4A80 0000 0000 0000 0000 0014 D22D 6758" /* J€..........Ò-gX */
- $"336C 63A1 C13F 3E94 9877 8E90 4E5D 0C70" /* 3lc¡Á?>”˜wŽN].p */
- $"F80A 4262 C2CC C7E4 DAE8 526F 393F 4558" /* øÂBbÂÌÇäÚèRo9?EX */
- $"5CC9 5DDA B2FF 7ED5 F809 3A02 F1EE 2760" /* \É]Ú²ÿ~ÕøÆ:.ñî'` */
- $"FF7E 5037 F054 4A1B 9602 92EA 8D26 A198" /* ÿ~P7ðTJ.–.’ê&¡˜ */
- $"9C4F 8238 A60E 7734 20F8 18FE 478F 5403" /* œO‚8¦.w4 ø.þGT. */
- $"1658 618B A80F 879F 4A98 E809 DEB2 7CE9" /* .Xa‹¨.‡ŸJ˜èÆÞ²|é */
- $"9724 407B B8C8 A48D 4F33 9126 751B 9FC2" /* —$@{¸È¤O3‘&u.ŸÂ */
- $"0283 44C3 5AFD 9546 FCE2 4212 4F5B 01D4" /* .ƒDÃZý•FüâB.O[.Ô */
- $"6E53 A032 DA91 40F4 4BDE 0C23 FF1E D5DE" /* nS 2Ú‘@ôKÞ.#ÿ.ÕÞ */
- $"B543 59DC C0DC 759A 6043 5883 A5FE C785" /* µCYÜÀÜuš`CXƒ¥þÇ… */
- $"BA68 9F46 C21A 4C50 20E3 0488 FB34 1043" /* ºhŸFÂ.LP ã.ˆû4.C */
- $"FC68 562B 635A EE8D E334 0C6F 25A9 E4C9" /* ühV+cZîã4.o%©äÉ */
- $"3484 2AC2 6188 7242 E3F6 AEAC 6F86 2DE2" /* 4„*ÂaˆrBãö®¬o†-â */
- $"C377 BD02 CB1C 9553 5485 6A5B E118 9BBD" /* Ãw½.Ë.•ST…j[á.›½ */
- $"DC6B 2C92 C6CC C866 6E7F FE63 AB01 FE7D" /* Ük,’ÆÌÈfn.þc«.þ} */
- $"FF7F BB81 EA94 87BE B101 F468 0E30 F111" /* ÿ.»ê”‡¾±.ôh.0ñ. */
- $"7BC9 FA0D F87F BDD0 811B 8588 1AE7 8387" /* {Éú.ø.½Ð.…ˆ.烇 */
- $"5C06 B3A9 E2ED 6E5B B524 35AA CBFF 50D6" /* \.³©âín[µ$5ªËÿPÖ */
- $"49D9 6918 3837 59BD E7CC 8796 B0AF 2729" /* IÙi.87Y½ç̇–°¯') */
- $"0512 5A97 66FF 1A85 E004 1882 0108 EA41" /* ..Z—fÿ.…à..‚..êA */
- $"BBCC 15E0 254C 59AF 877D 0722 15FB ADA1" /* »Ì.à%LY¯‡}.".û­¡ */
- $"84C2 9B83 DD5B C6B1 EE29 084C 08F7 06C8" /* „›ƒÝ[Ʊî).L.÷.È */
- $"4F07 9818 6BF2 66E2 582B 2F7D 29AD BAFA" /* O.˜.kòfâX+/})­ºú */
- $"8F9E 0AC8 60AE D10E 3E49 17BF E015 0C5E" /* žÂÈ`®Ñ.>I.¿à..^ */
- $"5C51 5D5B 5BC1 6C83 C428 4505 E9BB 61CB" /* \Q][[ÁlƒÄ(E.é»aË */
- $"D7C2 F3C6 C102 73F5 409E D0CF B43E E497" /* ×ÂóÆÁ.sõ@žÐÏ´>ä— */
- $"C1E0 707B 3F6F EAA8 2F10 9285 7D9D 9F81" /* Áàp{?oê¨/.’…}Ÿ */
- $"303D 3A70 2B3F 4A45 558D 63F6 EEB9 CF21" /* 0=:p+?JEUcöî¹Ï! */
- $"52C1 27C2 8439 0BE2 BE1F A553 A1C7 E44C" /* RÁ'„9.â¾.¥S¡ÇäL */
- $"5422 9BC0 356D 1B40 E53B 3064 AA69 F464" /* T"›À5m.@å;0dªiôd */
- $"7AA7 4E56 F7E2 7AE5 CB6E E538 8582 1927" /* z§NV÷âzåËnå8…‚.' */
- $"019D B4B0 E6D9 0F0E 9670 7723 62CF C422" /* .´°æÙ..–pw#bÏÄ" */
- $"DD53 ED12 92AE 20B0 6B63 6CB3 C596 4F4E" /* ÝSí.’® °kcl³Å–ON */
- $"18B6 FD06 93B2 6F73 A740 770D C39F B873" /* .¶ý.“²os§@w.߸s */
- $"598F 3667 6F7A 29E9 9E6F 9D04 48DD A175" /* Y6goz)éžo.HÝ¡u */
- $"2AFC 61BD D706 2A8E 9789 F513 B8AF B8EA" /* *üa½×.*Ž—‰õ.¸¯¸ê */
- $"2426 7EDF 1EFA 1D19 7A50 D22F D15E 76FE" /* $&~ß.ú..zPÒ/Ñ^vþ */
- $"CD34 19AD 8126 775C A5FB B209 9658 F850" /* Í4.­&w\¥û²Æ–XøP */
- $"F2FD A65F B487 9F50 7FF0 12FD BA8B FB6E" /* òý¦_´‡ŸP.ð.ýº‹ûn */
- $"49F5 50DF C349 B4F9 F4D7 EDEB 53BE DEB0" /* IõPßÃI´ùô×íëS¾Þ° */
- $"7F85 29FB 5DFF 36B9 BEDA 9BF8 3CF2 FDAE" /* .…)û]ÿ6¹¾Ú›ø<òý® */
- $"DFB5 ABBE D3DB ED2B FDBA CFFB 7606 FB74" /* ßµ«¾ÓÛí+ýºÏûv.ût */
- $"D3F8 6B96 83BA F7ED EB3F 7EDE AFE0 EECD" /* Óøk–ƒº÷íë?~Þ¯àîÍ */
- $"FB5E 7F6E 807E DB9B F6BD F0FE D32B EA21" /* û^.n€~Û›ö½ðþÓ+ê! */
- $"EFA8 1EFA 823F 6DCF FB6C 8BEA 6CFD B5AF" /* ï¨.ú‚?mÏûl‹êlýµ¯ */
- $"0774 CFDB D337 FB7A 3F83 BA5D F51F DF55" /* .tÏÛÓ7ûz?ƒº]õ.ßU */
- $"47FB 690F DA86 F791 DDD6 2CCB E6B8 C536" /* Gûi.Ú†÷‘ÝÖ,Ëæ¸Å6 */
- $"D512 AD5E 1B08 0B8A 8D03 2F75 60E5 6BF8" /* Õ.­^...Š./u`åkø */
- $"447B C66A 7EC2 7912 B45F 8E48 277C D8E1" /* D{Æj~Ây.´_ŽH'|Øá */
- $"809C 5755 D718 BAAC F891 2AE5 F97C 3F5E" /* €œWU×.º¬ø‘*åù|?^ */
- $"0116 3A00 99F4 5896 E0EA B189 F5A5 7929" /* ..:.™ôX–à걉õ¥y) */
- $"C491 B57F 2232 B0C2 52F8 89B1 DB2F B284" /* Ä‘µ."2°ÂRø‰±Û/²„ */
- $"C1EE 0C43 EF76 FD94 F871 4077 7E19 EC36" /* Áî.Cïvý”øq@w~.ì6 */
- $"BBFA 6DFF 3C0B 5A98 89B4 84BB 56DB 5FC2" /* »úmÿ<.Z˜‰´„»VÛ_ */
- $"16C2 351A B46E AF45 AAC7 DD2E 97ED 970C" /* .Â5.´n¯EªÇÝ.—í—. */
- $"76D8 F8D0 42EB E639 28E8 BE33 A530 3B58" /* vØøÐBëæ9(è¾3¥0;X */
- $"2374 6B1C 97B0 1CD5 ACD5 615F FD30 62C6" /* #tk.—°.Õ¬Õa_ý0bÆ */
- $"899A 977D 4B74 CAB1 E9EE 6588 4E67 8733" /* ‰š—}KtʱéîeˆNg‡3 */
- $"B359 BCC7 DC7B 9884 E4A8 78CB 77E7 675D" /* ³Y¼ÇÜ{˜„ä¨xËwçg] */
- $"FF2D FCE4 7744 BDD1 A833 6BEC C481 2DA8" /* ÿ-üäwD½Ñ¨3kìÄ-¨ */
- $"3D1C 5D57 7595 1DEB 2278 31AE 4188 B1F2" /* =.]Wu•.ë"x1®Aˆ±ò */
- $"54E1 113D DA75 96ED 71FF 1577 7820 4D22" /* Tá.=Úu–íqÿ.wx M" */
- $"2BD9 3841 A416 96A4 2549 1A9D 3A55 8E39" /* +Ù8A¤.–¤%I.:UŽ9 */
- $"A929 4B4E E11F 0F88 8BB6 7E08 2210 9D21" /* ©)KNá..ˆ‹¶~.".! */
- $"92BF 623B B974 D371 0208 1489 5713 0F66" /* ’¿b;¹tÓq...‰W..f */
- $"3C4C 8394 72A6 08A1 3D86 BA0C 198B CE8B" /* <Lƒ”r¦.¡=†º..‹Î‹ */
- $"FB71 18D8 E044 CE7C A642 F1E5 DC8B F8E6" /* ûq.ØàDÎ|¦BñåÜ‹øæ */
- $"2405 66E0 B6C5 6A4F B1AE 2231 3060 11D4" /* $.fà¶ÅjO±®"10`.Ô */
- $"9963 5EF4 BB3D 1F61 0807 0AE1 0DFC 4718" /* ™c^ô»=.a..Âá.üG. */
- $"6C97 80A7 D438 6A81 B76A 6E7E 7A64 87A1" /* l—€§Ô8j·jn~zd‡¡ */
- $"1D7A 8744 3227 F565 4B4A E311 FA0F B477" /* .z‡D2'õeKJã.ú.´w */
- $"9DD6 0662 8844 7138 BDF8 CBCC 007F BDB6" /* Ö.bˆDq8½øËÌ..½¶ */
- $"07C4 98CC 226B 9762 33D0 99EF 54D9 5800" /* .ĘÌ"k—b3ЙïTÙX. */
- $"509D C37B 39A7 E11B 8771 0999 AB8B AAA6" /* PÃ{9§á.‡qÆ™«‹ª¦ */
- $"C463 6C38 7FB0 9121 2CA2 7634 BBEE 41FB" /* Äcl8.°‘!,¢v4»îAû */
- $"4F3B B050 3E38 15C4 98A6 216D 31C2 7057" /* O;°P>8.ʦ!m1ÂpW */
- $"0B3D 429A 6CFB 0819 EB4D B9D2 549F 6601" /* .=Bšlû..ëM¹ÒTŸf. */
- $"2436 5BEA 9DAC BBDA AB3A AB4F ABFF 768D" /* $6[ꬻګ:«O«ÿv */
- $"E220 E451 7E45 49C5 21FD B2E6 DEFD 2505" /* â äQ~EIÅ!ý²æÞý%. */
- $"836B 3500 54D8 50B8 7538 C5BF B951 7FB2" /* ƒk5.TØP¸u8Å¿¹Q.² */
- $"F927 CBB1 7AA1 D0BD 51E2 D7F7 C440 5DA0" /* ù'˱z¡Ð½Qâ×÷Ä@]  */
- $"89EF FEEE BF2E A5E4 F98A B652 F25A D1DC" /* ‰ïþî¿.¥äùжRòZÑÜ */
- $"482A 40CB A288 250A 22CA BCB4 815D 077E" /* H*@Ë¢ˆ%Â"ʼ´].~ */
- $"229E 59B2 8249 D336 A3C1 5D5B FAE5 483C" /* "žY²‚IÓ6£Á][úåH< */
- $"67F3 255E 1530 AFB1 D900 48FE 254B C54E" /* gó%^.0¯±Ù.Hþ%KÅN */
- $"42DC EE54 066B CE83 B1C9 F021 2031 8DF1" /* BÜîT.k΃±Éð! 1ñ */
- $"FE58 9315 B761 79CA 409A 6CD6 337A 14A9" /* þX“.·ayÊ@šlÖ3z.© */
- $"8622 90BC 3474 727C 66CE 09C5 61B4 A386" /* †"¼4tr|fÎÆÅa´£† */
- $"7509 819F 6EEB 5FCC C0A7 084A 7742 A6E3" /* uÆŸnë_ÌÀ§.JwB¦ã */
- $"F69A 90CA 24AD EB53 60AB 5FD0 FD6F 3DE6" /* öšÊ$­ëS`«_Ðýo=æ */
- $"44CF 80FB A400 B71F 1DD4 C690 A3DB 54CF" /* DÏ€û¤.·..ÔÆ£ÛTÏ */
- $"F492 7EC7 540C 048F 3D35 FD63 7593 751B" /* ô’~ÇT..=5ýcu“u. */
- $"F88F 4B7D E355 6685 FD5F 2743 8DF3 D839" /* øK}ãUf…ý_'CóØ9 */
- $"0894 99DB 1FAA 22B2 8800 8C9F D91F E60B" /* .”™Û.ª"²ˆ.ŒŸÙ.æ. */
- $"0EEE 2870 2932 2AE5 F401 11F0 8B2B 53DB" /* .î(p)2*åô..ð‹+SÛ */
- $"8028 E39D 744F E70B 11F3 A220 ABF4 FCD5" /* €(ãtOç..ó¢ «ôüÕ */
- $"37C9 0AC8 8749 215E 1D89 4022 96D0 04FF" /* 7ÉÂȇI!^.‰@"–Ð.ÿ */
- $"0C57 AC3D 351A 8582 EBA4 EA2B B65B A14B" /* .W¬=5.…‚ë¤ê+¶[¡K */
- $"048B E031 DE15 251C 669F 8457 FF38 D131" /* .‹à1Þ.%.fŸ„Wÿ8Ñ1 */
- $"0027 BB20 9721 6636 A375 AFBA AF7B BDBA" /* .'» —!f6£u¯º¯{½º */
- $"05F3 3114 E55E DAA9 219F 9516 F3DF 12B4" /* .ó1.å^Ú©!Ÿ•.óß.´ */
- $"DA3F 83DF 13A0 9900 3FA6 17E9 B014 E404" /* Ú?ƒß. ™.?¦.é°.ä. */
- $"434D 02D4 4283 D73D F4D1 5D95 8B25 6A6A" /* CM.ÔBƒ×=ôÑ]•‹%jj */
- $"CD5E BA93 82DF 1A30 4B0D 0E21 65A1 0001" /* Í^º“‚ß.0K..!e¡.. */
- $"2869 F06A 8949 311F DB03 39EB E8E1 5BFB" /* (iðj‰I1.Û.9ëèá[û */
- $"F11C 05C6 2469 BAEA 4516 4CC4 DAF5 927A" /* ñ..Æ$iºêE.LÄÚõ’z */
- $"2CEB 3150 DB6F 4DE2 8EED 59C0 604F 9AE5" /* ,ë1PÛoMâŽíYÀ`Ošå */
- $"E136 83B0 F348 3D1A B44D 3A8E D77A B0DE" /* á6ƒ°óH=.´M:Ž×z°Þ */
- $"5267 1055 24F7 3C3D EB3E 08EF 97F9 4B29" /* Rg.U$÷<=ë>.ï—ùK) */
- $"454F 1B5D 4A6E 56E1 0F90 00A1 4467 7454" /* EO.]JnVá..¡DgtT */
- $"B556 362A 9A19 9E35 19E9 BFDF E2AD 91D6" /* µV6*š.ž5.é¿ßâ­‘Ö */
- $"7FB6 95B9 F19D 8D07 2FAF 3162 D880 0AA7" /* .¶•¹ñ./¯1b؀§ */
- $"C9C4 94AD C49A 1231 2D9F 780F 6E3E 57D2" /* ÉÄ”­Äš.1-Ÿx.n>WÒ */
- $"8C1C 582C 179A 721C 7063 F056 F938 4EA1" /* Œ.X,.šr.pcðVù8N¡ */
- $"F3E4 E458 D254 280F 92CA ABDC 4ECF 3EB7" /* óääXÒT(.’Ê«ÜNÏ>· */
- $"95DF A3B8 45C0 1427 BA54 B2E2 D1BC B67D" /* •ߣ¸EÀ.'ºT²âѼ¶} */
- $"5A0F EE12 37D4 BE1C 5785 A90D 2E62 B301" /* Z.î.7Ô¾.W…©..b³. */
- $"F66D A637 374B 17DA 7446 C318 3B11 4F50" /* öm¦77K.ÚtFÃ.;.OP */
- $"ED27 AEB2 D8F6 C3E4 AB48 5E7C 1D46 9463" /* í'®²ØöÃä«H^|.F”c */
- $"E7BA 9296 7BFA FDBB 39F2 7E86 1A5D 8FFA" /* 纒–{úý»9ò~†.]ú */
- $"7E06 FC92 3472 7950 8B67 8329 FA9F 47AA" /* ~.ü’4ryP‹gƒ)úŸGª */
- $"51F3 01AD A6DA 224F E711 AF6F BA8F FA86" /* Qó.­¦Ú"Oç.¯oºú† */
- $"FF61 EBD1 5613 B076 3543 3515 FF1B 1E9C" /* ÿaëÑV.°v5C5.ÿ..œ */
- $"CE78 6A36 7CCF FD63 E9E3 00E6 EA60 1DBE" /* Îxj6|Ïýcéã.æê`.¾ */
- $"42FB 3E66 D69D 8BA6 A0E6 13E1 2087 20D7" /* Bû>fÖ‹¦ æ.á ‡ × */
- $"7941 E3C4 C7C6 67FF 2C9C A486 253A C206" /* yAãÄÇÆgÿ,œ¤†%:Â. */
- $"F961 4A0E D9DD D32A 6D67 A012 B1A2 B549" /* ùaJ.ÙÝÓ*mg .±¢µI */
- $"3F58 8BA1 CA98 94EB 6099 570C D139 09AA" /* ?X‹¡Ê˜”ë`™W.Ñ9ƪ */
- $"8DEB C31A 0812 5DAD 2926 6846 D789 4430" /* ëÃ...]­)&hF׉D0 */
- $"4931 16B5 0804 52F1 040D B0A7 DDD7 7052" /* I1.µ..Rñ..°§Ý×pR */
- $"4269 C765 98AA 3941 F9EE 987A 2EAD 46BE" /* BiÇe˜ª9Aùî˜z.­F¾ */
- $"AA2B DD79 D9F9 7AF7 9318 B633 97CC DB93" /* ª+ÝyÙùz÷“.¶3—ÌÛ“ */
- $"5AF7 23D4 08E5 1FD7 EA45 85E9 4C98 77B6" /* Z÷#Ô.å.×êE…éL˜w¶ */
- $"0038 8756 6C8F 1A76 8D36 D67C 0BBD 248F" /* .8‡Vl.v6Ö|.½$ */
- $"8465 4CC4 7B7A C1B7 6348 F763 66A7 F04E" /* „eLÄ{zÁ·cH÷cf§ðN */
- $"FF4E 1C72 1053 323F 9E55 F75D 4097 9C24" /* ÿN.r.S2?žU÷]@—œ$ */
- $"AD5D 3C1B 766A 50A8 7252 6563 2687 8251" /* ­]<.vjP¨rRec&‡‚Q */
- $"8AE2 2EAE 6AA9 6439 2831 281E 034D 7999" /* Šâ.®j©d9(1(..My™ */
- $"F46F 47C1 911D 553A D887 0E8F 6E83 1B48" /* ôoGÁ‘.U:؇.nƒ.H */
- $"F0D9 C566 C0FF 0F02 5E68 EA76 7381 25B1" /* ðÙÅfÀÿ..^hêvs%± */
- $"D388 A375 370B A655 625B B71A 191C CD9D" /* Óˆ£u7.¦Ub[·...Í */
- $"F3CA 83B2 88D6 3712 B3E3 6CEA 19DC 3295" /* óʃ²ˆÖ7.³ãlê.Ü2• */
- $"3398 DF4F 1279 B346 1DD8 ED24 186F BEE1" /* 3˜ßO.y³F.Øí$.o¾á */
- $"8FD4 5FAD EAFF 6960 DE17 A0A4 B89E 7CF3" /* Ô_­êÿi`Þ. ¤¸ž|ó */
- $"C360 9DA8 91BF 470F ECC0 C0AA E260 3430" /* Ã`¨‘¿G.ìÀÀªâ`40 */
- $"EF4E CAD6 F964 05B0 8E27 C1F6 7516 4350" /* ïNÊÖùd.°Ž'Áöu.CP */
- $"B87D 7D16 703E 7972 1232 2E0F 6577 664C" /* ¸}}.p>yr.2..ewfL */
- $"8FA6 1414 7FB2 A33D A69E FD2F CF21 FC8F" /* ¦...²£=¦žý/Ï!ü */
- $"23A5 6AED 3E28 34A0 F73F F7D6 7F7C 5B6B" /* #¥jí>(4 ÷?÷Ö.|[k */
- $"0596 8B6D BACA 52DF 8E72 CDBA E221 7092" /* .–‹mºÊRߎrͺâ!p’ */
- $"A3AB B99D 1EE3 3F21 1AD2 0F0B DC5A 8BE1" /* £«¹.ã?!.Ò..ÜZ‹á */
- $"9E35 D891 9A60 EF28 5934 FA3B 8009 DC42" /* ž5Ø‘š`ï(Y4ú;€ÆÜB */
- $"11BE 487F D776 AF26 0EBD BF3E 8DCC B940" /* .¾H.×v¯&.½¿>̹@ */
- $"2523 D6E1 447F EA8A 5F66 DE0B 0962 249E" /* %#ÖáD.êŠ_fÞ.Æb$ž */
- $"165D BB6D 1EBD 1237 021B F903 DEEF 78FE" /* .]»m.½.7..ù.Þïxþ */
- $"B3F3 76B7 429F 336D 0EFA FF47 5CBC E3DF" /* ³óv·BŸ3m.úÿG\¼ãß */
- $"FC44 41BA BC9D 67AE 0B43 D817 FBCE 4F36" /* üDAº¼g®.CØ.ûÎO6 */
- $"8209 CCB5 38F6 712E 7DEA 4E9E 4B38 3B80" /* ‚ÆÌµ8öq.}êNžK8;€ */
- $"7B16 28E3 AB59 340E 93F0 4C65 C281 A4F1" /* {.(ã«Y4.“ðLe¤ñ */
- $"08E4 26A6 31AA B6A4 F784 BA8E C7FA 8919" /* .ä&¦1ª¶¤÷„ºŽÇú‰. */
- $"4B19 FA98 09C8 3C79 27DA CB39 881C 3B0E" /* K.ú˜ÆÈ<y'ÚË9ˆ.;. */
- $"9BEA 1EF3 D655 CFEB B4F7 0888 971D 69EF" /* ›ê.óÖUÏë´÷.ˆ—.iï */
- $"1105 0EF2 80B8 FF1E F0BE 107F 9AB0 6C52" /* ...ò€¸ÿ.ð¾..š°lR */
- $"FF78 3AA4 8FE0 3370 40DF C5E8 478A 2FCF" /* ÿx:¤à3p@ßÅèGŠ/Ï */
- $"96C5 8D32 8E07 AA93 DA95 4D9B 60C6 2748" /* –Å2Ž.ª“Ú•M›`Æ'H */
- $"C8F4 8347 D2D9 2E35 75E4 333A 6494 B177" /* ÈôƒGÒÙ.5uä3:d”±w */
- $"C836 6E4F AF08 CDB0 0FA5 D565 A0EC 946F" /* È6nO¯.Ͱ.¥Õe ì”o */
- $"ED5C 03F6 E5DB FA4F D29A BF8F BC7F 12D8" /* í\.öåÛúOÒš¿¼..Ø */
- $"7730 8564 524D 4B31 F681 8C71 C5BC 1641" /* w0…dRMK1öŒqż.A */
- $"6988 F9CF 0385 B8EE 4C04 07DB 5AD2 531C" /* iˆùÏ.…¸îL..ÛZÒS. */
- $"48BA 3E6F E24E AF73 DB5E B729 A4BF 894A" /* Hº>oâN¯sÛ^·)¤¿‰J */
- $"782D E8F2 91C9 E628 322C F20C 2D0C 73DD" /* x-èò‘Éæ(2,ò.-.sÝ */
- $"F093 4ED7 63DF E121 E7B9 DB7E 530D E3BD" /* ð“N×cßá!ç¹Û~S.ã½ */
- $"3469 29CE 5768 BE0F 1E91 46B7 00A0 CC2E" /* 4i)ÎWh¾..‘F·. Ì. */
- $"183D 7D57 762C 062D 0707 EBA4 177D 73E8" /* .=}Wv,.-..ë¤.}sè */
- $"FA30 83A6 479B AA9A 702E B8FD 9B54 0FF3" /* ú0ƒ¦G›ªšp.¸ý›T.ó */
- $"8222 1EB0 4CDD 4CF7 F0AB 8972 B655 9426" /* ‚".°LÝL÷ð«‰r¶U”& */
- $"4EEE 3B88 A6D2 F8B9 6845 0467 D606 9DDD" /* Nî;ˆ¦Òø¹hE.gÖ.Ý */
- $"C547 A61F 71E7 5A8E 6B83 51FD B2C1 A732" /* ÅG¦.qçZŽkƒQý²Á§2 */
- $"A6EA A0AA 6D13 E80B 0EC4 5DF4 348F FF6E" /* ¦ê ªm.è..Ä]ô4ÿn */
- $"2289 CFB4 1AE2 18D1 340F B29B E1FF 16B1" /* "‰Ï´.â.Ñ4.²›áÿ.± */
- $"0F0F B5AD 260A 7FD9 B1F2 3D0C 404F 75A8" /* ..µ­&Â.Ù±ò=.@Ou¨ */
- $"E4DB 52EE 259B D762 E5E5 4FFD 22AC 4856" /* äÛRî%›×bååOý"¬HV */
- $"9C62 8DDB F5D8 58F8 4EC7 1110 30EC E0D8" /* œbÛõØXøNÇ..0ìàØ */
- $"7FED 0176 FEF2 53B3 75C6 34E1 A3A7 79DA" /* .í.vþòS³uÆ4ᣧyÚ */
- $"1FDC 42EC 83B2 F3EB 056C E41B 4E65 3699" /* .ÜB샲óë.lä.Ne6™ */
- $"4BD6 1AE3 85A9 DBF6 89D4 39B0 79F9 8877" /* KÖ.ã…©Ûö‰Ô9°yùˆw */
- $"161C 2CB5 3F3C 294B 8CA3 A6F6 556C 4CAD" /* ..,µ?<)KŒ£¦öUlL­ */
- $"A752 918D 7E61 BA54 02D2 CF5C AEBE 1A0B" /* §R‘~aºT.ÒÏ\®¾.. */
- $"B75C A9CA 9876 AB0B 6028 4D8E D46C E479" /* ·\©Ê˜v«.`(MŽÔläy */
- $"A186 EA09 496E 0935 04E2 4C25 FA18 270B" /* ¡†êÆInÆ5.âL%ú.'. */
- $"A054 DE1C 1BD8 A089 9D95 1335 E93C 7C21" /*  TÞ..Ø ‰•.5é<|! */
- $"435E A570 3C42 AA88 0075 BB20 20AF 90EC" /* C^¥p<Bªˆ.u» ¯ì */
- $"26F9 7E41 5CC7 2154 63A3 D965 075C 1A78" /* &ù~A\Ç!Tc£Ùe.\.x */
- $"2A13 753E DDD9 F846 467C EFC6 5308 2B46" /* *.u>ÝÙøFF|ïÆS.+F */
- $"5BD9 2BFF 5F26 72DB 523D D0FC CE49 47B0" /* [Ù+ÿ_&rÛR=ÐüÎIG° */
- $"D98B 4D36 1B60 7C3A 0707 F46A 8565 4CCB" /* Ù‹M6.`|:..ôj…eLË */
- $"5DC1 A50D C039 BF24 7418 78A7 6D4F DE55" /* ]Á¥.À9¿$t.x§mOÞU */
- $"1CB8 B787 158C 6C4D D840 920F 3130 7A92" /* .¸·‡.ŒlMØ@’.10z’ */
- $"1CF4 1B74 BC2B 8954 0A80 9636 BFC3 6330" /* .ô.t¼+‰T€–6¿Ãc0 */
- $"3E7F 7E4E A811 39F2 3D56 10D3 6A76 4E20" /* >.~N¨.9ò=V.ÓjvN */
- $"F646 5CD3 9166 D2D6 046F E398 A934 2D04" /* öF\Ó‘fÒÖ.o㘩4-. */
- $"2E01 C602 1332 8274 6AE2 D5C9 6226 30B3" /* ..Æ..2‚tjâÕÉb&0³ */
- $"07DB FDF3 B3BB 6C31 B162 FF63 0639 8E6F" /* .Ûýó³»l1±bÿc.9Žo */
- $"3501 A54C 1AA6 42EB EDE7 885E EE2F A6D9" /* 5.¥L.¦Bëíçˆ^î/¦Ù */
- $"B74A AE20 8FFB 6FCF A537 642D F17F A45E" /* ·J® ûoÏ¥7d-ñ.¤^ */
- $"EE37 DE05 7569 A81E F464 A35B 603B 4F40" /* î7Þ.ui¨.ôd£[`;O@ */
- $"D00F C3D2 D04A F943 AC3C 37E2 1B2B A1D3" /* Ð.ÃÒÐJùC¬<7â.+¡Ó */
- $"09D6 A92B F7CB B2FA 9FF7 97F2 83F9 BABC" /* ÆÖ©+÷˲úŸ÷—òƒùº¼ */
- $"E4BE F015 E804 97FC A16F 6E8B 9004 8424" /* ä¾ð.è.—ü¡on‹.„$ */
- $"04F7 1295 0A15 3C1A AA5D 6A75 372A 0BB4" /* .÷.•Â.<.ª]ju7*.´ */
- $"4849 DD4A 012F D969 23A9 FBA7 C3EB D29F" /* HIÝJ./Ùi#©û§ÃëÒŸ */
- $"5CE0 BD6F 8436 26BB 1B52 3BCB DCAA 0791" /* \à½o„6&».R;Ëܪ.‘ */
- $"02B3 8EC7 5A89 D402 C9FF 058E E2C8 AD72" /* .³ŽÇZ‰Ô.Éÿ.ŽâÈ­r */
- $"01BF D9B3 FA52 B000 0000 3090 8B4E 8809" /* .¿Ù³úR°...0‹NˆÆ */
- $"9E4F 59A7 8021 D030 169B 78E6 55B4 9FB8" /* žOY§€!Ð0.›xæU´Ÿ¸ */
- $"48A1 D2F4 BE8E A948 A89E 5E3E BE56 AE8C" /* H¡Òô¾Ž©H¨ž^>¾V®Œ */
- $"BF6C 6485 F435 4906 BE37 4D88 589A 85C0" /* ¿ld…ô5I.¾7MˆXš…À */
- $"5278 59EC 1FED 3652 3FE0 5229 0524 D686" /* RxYì.í6R?àR).$Ö† */
- $"1E5E 14D9 8C56 8742 9625 36BB 4674 0391" /* .^.ÙŒV‡B–%6»Ft.‘ */
- $"9647 FCC9 30C4 6D0D 5812 1271 E9C8 E89D" /* –GüÉ0Äm.X..qéÈè */
- $"7F9B 3420 0269 5F58 4554 F964 BDDA E9F3" /* .›4 .i_XETùd½Úéó */
- $"973A 5B5F 4C59 107B 2D9E 87CB D896 1F13" /* —:[_LY.{-ž‡ËØ–.. */
- $"AC52 F00D 3600 9104 3FF2 399A 0158 5153" /* ¬Rð.6.‘.?ò9š.XQS */
- $"139A A5C2 51CC D2C7 D082 C2A0 E35B FE05" /* .š¥ÂQÌÒÇЂ ã[þ. */
- $"06C9 DBB4 7036 39DB 80AF 4642 9F53 170C" /* .ÉÛ´p69Û€¯FBŸS.. */
- $"2856 38D5 0FA7 B562 4ED8 3BB5 B48A B1C8" /* (V8Õ.§µbNØ;µ´Š±È */
- $"B20B 4B42 4499 C5C1 242B A1BA CB74 D8F1" /* ².KBD™ÅÁ$+¡ºËtØñ */
- $"1CF1 241E 7A2A B847 111D 13DC CD3C 05A3" /* .ñ$.z*¸G...ÜÍ<.£ */
- $"024F 25B5 41E2 0A15 E1C4 1A0E A5D8 0742" /* .O%µAâÂ.áÄ..¥Ø.B */
- $"A359 2372 FD88 7447 1DB7 F766 5B7F E63E" /* £Y#rýˆtG.·÷f[.æ> */
- $"26B8 BC6E 7B72 E331 2BE1 73BD 04A0 E941" /* &¸¼n{rã1+ás½. éA */
- $"45EC 9039 8769 8BFF 1624 8D43 CA24 9D0D" /* Eì9‡i‹ÿ.$CÊ$. */
- $"A05B F467 7401 E777 0608 C4A6 A698 9A9B" /*  [ôgt.çw..Ħ¦˜š› */
- $"7066 11D3 606F 857E 18D8 D9D3 E226 38C0" /* pf.Ó`o…~.ØÙÓâ&8À */
- $"D89B 09D9 A2F1 0171 BAC9 D7BF AB2E BD58" /* Ø›ÆÙ¢ñ.qºÉ׿«.½X */
- $"7178 6CC2 608D 447D D92A 621C 1A82 B764" /* qxlÂ`D}Ù*b..‚·d */
- $"2ABE CBE8 07C0 E2A6 9B83 46A8 1109 FC87" /* *¾Ëè.À⦛ƒF¨.Æü‡ */
- $"F083 9598 26AE 8847 7E22 278D 9311 59FC" /* ðƒ•˜&®ˆG~"'“.Yü */
- $"2995 1D44 BA58 24BC 2A99 3946 0E00 9144" /* )•.DºX$¼*™9F..‘D */
- $"9113 0297 29E3 A7B5 B937 2D23 8405 86ED" /* ‘..—)ã§µ¹7-#„.†í */
- $"29F1 5254 6A8C 0FB8 4B13 F6C3 6028 2C14" /* )ñRTjŒ.¸K.öÃ`(,. */
- $"3B80 E317 225C 7A9B 405C 7E95 A2E4 311B" /* ;€ã."\z›@\~•¢ä1. */
- $"076A D7B8 A4B5 225A 1F29 FAA2 8239 D98F" /* .j׸¤µ"Z.)ú¢‚9Ù */
- $"071A F302 DA24 AE80 2AC0 D108 035D EA76" /* ..ó.Ú$®€*ÀÑ..]êv */
- $"2F7E 850F 9E87 6B19 B2F1 F1E5 F5B3 A5AF" /* /~….ž‡k.²ññåõ³¥¯ */
- $"35BB D867 8257 8A48 5E4F 6983 E22E 6DAD" /* 5»Øg‚WŠH^Oiƒâ.m­ */
- $"D361 1505 ECF2 3F3C DB84 1861 E5AB 6793" /* Óa..ìò?<Û„.aå«g“ */
- $"910D 8F56 6BB5 FD17 29DB 242A 6946 8022" /* ‘.Vkµý.)Û$*iF€" */
- $"7DAF 8120 02EB C840 3765 69EC BB8B F2FF" /* }¯ .ëÈ@7ei컋òÿ */
- $"6031 7BE4 EFC4 BECD 7BD7 CB0A 8B8C 75C2" /* `1{äïľÍ{×Ë‹Œu */
- $"E63A F4E4 B05B 1442 0CB1 BEBD E078 84F5" /* æ:ôä°[.B.±¾½àx„õ */
- $"3D95 24FA 952F 949B AD72 01B7 1CC7 4CA6" /* =•$ú•/”›­r.·.ÇL¦ */
- $"78C2 BA05 B757 517A 5CB1 A380 0C23 0680" /* xº.·WQz\±£€.#.€ */
- $"3113 0CBA 23B8 AA48 F832 B74F 997E 6E03" /* 1..º#¸ªHø2·O™~n. */
- $"D16C 577F 968F E9A4 73CA DA79 07B3 A5F1" /* ÑlW.–é¤sÊÚy.³¥ñ */
- $"2D20 C13D F821 62F9 41A0 A7AA 472A 368A" /* - Á=ø!bùA §ªG*6Š */
- $"28EE 7686 F7B4 D5CF 225E 004E 709F C4E8" /* (îv†÷´ÕÏ"^.NpŸÄè */
- $"FCBC B778 C976 A1E0 1968 1EF9 E998 2DC2" /* ü¼·xÉv¡à.h.ùé˜- */
- $"1693 C645 A4F5 787A 5B10 45C0 F010 8596" /* .“ÆE¤õxz[.EÀð.…– */
- $"A0F6 E8AA 1BAC C958 C0F6 101E 0C4D 2E61" /*  öèª.¬ÉXÀö...M.a */
- $"B76E 4019 58DD 3058 000C 2375 6EBC 6599" /* ·n@.XÝ0X..#un¼e™ */
- $"BEA3 9ADC 0002 F98F 24B3 B036 EA0D F2FD" /* ¾£šÜ..ù$³°6ê.òý */
- $"6823 E10A 59D7 5D0B F6C0 EFB2 7D9D A684" /* h#áÂY×].öÀï²}¦„ */
- $"3084 4AD6 92F2 BFB2 57CA 7294 FF2D 53C8" /* 0„JÖ’ò¿²WÊr”ÿ-SÈ */
- $"8D05 254E 2360 582F CE0C E209 240D FAB4" /* .%N#`X/Î.âÆ$.ú´ */
- $"C638 2103 7462 2AF1 5461 2036 09B4 294F" /* Æ8!.tb*ñTa 6Æ´)O */
- $"52A6 6553 F6B7 85F6 E77F A8B7 058C F201" /* R¦eSö·…öç.¨·.Œò. */
- $"19BA D75B 6612 0013 CFA6 F54F 8855 C000" /* .º×[f...ϦõOˆUÀ. */
- $"00BE 57DE C13B 77B0 AF81 F95D 8E88 7224" /* .¾WÞÁ;w°¯ù]Žˆr$ */
- $"002F C7BE 1D06 F540 58EF 1909 1D8F 037F" /* ./Ǿ..õ@Xï.Æ... */
- $"E973 290F 641E 8849 F996 EA66 D15C CA23" /* és).d.ˆIù–êfÑ\Ê# */
- $"C620 3090 94D8 F95F C58C 720B 7FFE 206C" /* Æ 0”Øù_ÅŒr..þ l */
- $"A3E0 EE49 AE89 4586 6617 FE87 4D7B D300" /* £àîI®‰E†f.þ‡M{Ó. */
- $"4CF6 E77F A882 E041 362F 710E AC03 D573" /* Löç.¨‚àA6/q.¬.Õs */
- $"69FF 7480 0018 484B 0D10 C800 0000 0C24" /* iÿt€..HK..È....$ */
- $"183F ADBF D900 0184 8481 E82C C758 1848" /* .?­¿Ù..„„è,ÇX.H */
- $"4840 6806 1212 B020 EA50 0818 484B F6E7" /* H@h...° êP..HKöç */
- $"7FA5 E774 6249 2F3D 5FF9 2FC0 0C24 1656" /* .¥çtbI/=_ù/À.$.V */
- $"1B91 8000 1846 D5F4 CA01 40C2 3F26 3D84" /* .‘€..FÕôÊ.@Â?&=„ */
- $"7B4A 811F 08D6 B47D 05C2 4402 D57B C1FC" /* {J..Ö´}.ÂD.Õ{Áü */
- $"7D32 E6FE 8125 F24E 514B 2820 7323 F96F" /* }2æþ%òNQK( s#ùo */
- $"B1F9 CDBD 94E4 C9BF 81D6 5A26 1C08 2131" /* ±ùͽ”äÉ¿ÖZ&..!1 */
- $"FF58 608E A4BB BEFD 703F C3EA B596 2AEA" /* ÿX`ޤ»¾ýp?Ãêµ–*ê */
- $"48B2 2319 2F7A B9BC A14D EAB4 49CF 89E9" /* H²#./z¹¼¡Mê´Iωé */
- $"D312 5979 1910 6519 C45E 4B88 F709 D65D" /* Ó.Yy..e.Ä^Kˆ÷ÆÖ] */
- $"BF0F 86DC C883 8469 9757 7FC7 FB91 A851" /* ¿.†Üȃ„i—W.Çû‘¨Q */
- $"7834 0232 03F5 F552 B022 E799 431E 3FE8" /* x4.2.õõR°"ç™C.?è */
- $"BE7C A37B AAE1 D04F 9795 EA98 CAB0 6816" /* ¾|£{ªáÐO—•ê˜Ê°h. */
- $"047F 244A 2BD3 E0CF B862 B172 B1B3 F027" /* ..$J+Óàϸb±r±³ð' */
- $"6505 A5AA 6AB2 5F8E B98F 85CB D487 2603" /* e.¥ªj²_޹…ËÔ‡&. */
- $"BDA4 4C6D 4B74 0A12 117F 6137 6A30 37CE" /* ½¤LmKtÂ...a7j07Î */
- $"0441 188C 63FC 46ED 5C9A B6A0 9012 6450" /* .A.ŒcüFí\š¶ .dP */
- $"A042 C4D3 8E69 8930 0797 25B3 B70D 5C62" /*  BÄÓŽi‰0.—%³·.\b */
- $"6A83 3964 5EF1 4A28 508D FF7F E847 17D0" /* jƒ9d^ñJ(Pÿ.èG.Ð */
- $"7C91 F4BC AA82 5462 99EF FF79 5A7A E45E" /* |‘ô¼ª‚Tb™ïÿyZzä^ */
- $"98FF 5B1E 90FE 7F80 9453 7AD1 4A63 8FFC" /* ˜ÿ[.þ.€”SzÑJcü */
- $"1B61 796C 4B90 7FE9 1959 752B 8579 95F8" /* .aylK.é.Yu+…y•ø */
- $"C5B9 7EC6 2D24 5185 1BCE 12D6 B418 B42C" /* Ź~Æ-$Q….Î.Ö´.´, */
- $"D40F 7AF7 657E 5184 9CAA 8834 B65C 4785" /* Ô.z÷e~Q„œªˆ4¶\G… */
- $"B934 7C3A 8000 0000 99F5 3F06 3790 6AF7" /* ¹4|:€...™õ?.7j÷ */
- $"0769 9D8E F19F 4FF3 EDE6 D059 B97C A1F0" /* .iŽñŸOóíæÐY¹|¡ð */
- $"0CE2 4FAF B846 8CCE 52E4 E898 D2E0 00A3" /* .âO¯¸FŒÎRäè˜Òà.£ */
- $"CB3D F2B1 E7F7 0C30 FF13 DB29 474C C00D" /* Ë=ò±ç÷.0ÿ.Û)GLÀ. */
- $"C6B7 6A2D 2F89 8E2F BDE7 F2BA C3DD 591B" /* Æ·j-/‰Ž/½çòºÃÝY. */
- $"CEDE C7DD 35BA 492C BB53 2AF6 7315 AC30" /* ÎÞÇÝ5ºI,»S*ös.¬0 */
- $"17D7 1C05 3AE4 4AB3 8D31 0DC9 7A9F 0A76" /* .×..:äJ³1.ÉzŸÂv */
- $"B4EE 95EE 6CB5 1C6A FE4F D27E 0966 CE51" /* ´î•îlµ.jþOÒ~ÆfÎQ */
- $"8607 E144 F4AD E999 5480 05FF 7FC2 C645" /* †.áDô­é™T€.ÿ.ÂÆE */
- $"D136 BB6E 89FA 9A2D F827 338F FEB9 B248" /* Ñ6»n‰úš-ø'3þ¹²H */
- $"23A6 377D 0E53 BBF3 D290 3AD8 F58B CE4C" /* #¦7}.S»óÒ:Øõ‹ÎL */
- $"24CA 8E49 76ED DA48 8856 904D C31F 305F" /* $ÊŽIvíÚHˆVMÃ.0_ */
- $"C441 7DAA 86D8 3FE1 5EA7 E20A CDBC 5F2A" /* ÄA}ª†Ø?á^§âÂͼ_* */
- $"35DC 107F DDE2 D88C 7B38 D700 4C54 9C81" /* 5Ü..ÝâØŒ{8×.LTœ */
- $"B8FD F39D 0F47 DE2B 6E17 7D4F E30F F60C" /* ¸ýó.GÞ+n.}Oã.ö. */
- $"0895 5694 3006 1211 EFEC D7F8 F743 3D43" /* .•V”0...ïì×ø÷C=C */
- $"6BA5 7C06 9025 9188 E369 0FC8 94CB F38E" /* k¥|.%‘ˆãi.È”ËóŽ */
- $"DF76 CA67 91C4 D786 F34F 1E56 332B 1404" /* ßvÊg‘Ä׆óO.V3+.. */
- $"B66B 2702 B13D 47B8 1FBD 38D7 A2DF 54EF" /* ¶k'.±=G¸.½8×¢ßTï */
- $"FD1C 00CC 5D05 5B28 3EBF 2FC7 7263 5880" /* ý..Ì].[(>¿/ÇrcX€ */
- $"0364 4A0B 982F 4A13 A55F 5D64 61D2 110C" /* .dJ.˜/J.¥_]daÒ.. */
- $"4319 318A 5BD6 94B7 DBA9 92F0 379B 0E87" /* C.1Š[Ö”·Û©’ð7›.‡ */
- $"4561 92A0 0000 0000 0000 12FE B897 0ABD" /* Ea’ .......þ¸—½ */
- $"B3C7 FEA8 AE43 B177 DA3F 2BA3 2D59 3358" /* ³Çþ¨®C±wÚ?+£-Y3X */
- $"9FAE 567F E53B 2877 9FFF 7FFF 7FFB 4B90" /* Ÿ®V.å;(wŸÿ.ÿ.ûK */
- $"C00D FEA3 7DF6 39C4 C825 2952 2C65 8FFF" /* À.þ£}ö9ÄÈ%)R,eÿ */
- $"7E91 DB49 1333 7DEC 6471 1E2E 394E A080" /* ~‘ÛI.3}ìdq..9N € */
- $"C1C9 0DD4 62C4 4FC9 E332 BC0D F9DD FEAB" /* ÁÉ.ÔbÄOÉã2¼.ùÝþ« */
- $"9D33 8271 2A01 8484 B009 6058 624E 2736" /* 3‚q*.„„°Æ`XbN'6 */
- $"529C A0F4 BCBB 846D 32FD 407C FA84 2D52" /* Rœ ô¼»„m2ý@|ú„-R */
- $"21DC 1623 210B 0410 4061 212D 0386 04FF" /* !Ü.#!...@a!-.†.ÿ */
- $"7F72 1DFF 6F83 6A31 2B6E 0A6B D1F1 9A43" /* .r.ÿoƒj1+nÂkÑñšC */
- $"F340 2C47 D413 DFAC FF76 46AC 4BDD 55F0" /* ó@,GÔ.߬ÿvF¬KÝUð */
- $"2F9A 3BC6 613E 2F69 F45C 08F3 3FCB F83F" /* /š;Æa>/iô\.ó?Ëø? */
- $"F7D8 DC38 0F99 4764 0309 0948 41C6 1212" /* ÷ØÜ8.™Gd.ÆÆHAÆ.. */
- $"293B 5EA3 BE56 F760 BAEF 61FF 43D4 2891" /* );^£¾V÷`ºïaÿCÔ(‘ */
- $"A380 672E FF7E 4B98 FBFB 1ACD 90F6 4A7E" /* £€g.ÿ~K˜ûû.ÍöJ~ */
- $"3B14 E9F4 B1B4 4120 E600 AF42 0056 B131" /* ;.éô±´A æ.¯B.V±1 */
- $"0310 EF4F EA97 E030 9090 A298 F514 CEFA" /* ..ïOê—à0¢˜õ.Îú */
- $"B200 0061 211A A495 FD76 5850 B8F7 1CF1" /* ²..a!.¤•ývXP¸÷.ñ */
- $"A979 F478 5BFF 7FFB E6D6 F6D8 03FF 7FFD" /* ©yôx[ÿ.ûæÖöØ.ÿ.ý */
- $"2A36 38D4 BA43 6280 D508 C4BD 735D 1C6F" /* *68ÔºCb€Õ.Ľs].o */
- $"2444 63E9 1C9A 969F 90A6 F34E D24D 94F2" /* $Dcé.š–Ÿ¦óNÒM”ò */
- $"1A09 F86A 2762 886F FBA0 96EA 1DC7 0364" /* .Æøj'bˆoû –ê.Ç.d */
- $"6192 A000 0000 0000 0000 0000 0061 BE9F" /* a’ ..........a¾Ÿ */
- $"2C25 5C25 4958 1428 AA60 5ABF 5551 6084" /* ,%\%IX.(ª`Z¿UQ`„ */
- $"D319 B739 1DC3 F92F 03A7 CF66 39CC 13BE" /* Ó.·9.Ãù/.§Ïf9Ì.¾ */
- $"100A 204E 9A06 CBD9 A8ED 9E4D CEED AE53" /* . Nš.ËÙ¨ížMÎí®S */
- $"023D B3BF AC07 F70E F7DD 2601 E2B4 B214" /* .=³¿¬.÷.÷Ý&.â´². */
- $"3B1D 74CD 0F60 7063 EFC5 24B8 3B0F DF21" /* ;.tÍ.`pcïÅ$¸;.ß! */
- $"2929 3755 A800 7D09 63D9 1548 5D89 6D22" /* ))7U¨.}ÆcÙ.H]‰m" */
- $"FAEF 37DC EB96 FF52 0018 EBDF 464C 8B34" /* úï7Üë–ÿR..ëßFL‹4 */
- $"DF85 2990 1CF1 7C84 CEDC D384 5003 D5A1" /* ß…).ñ|„ÎÜÓ„P.Õ¡ */
- $"2797 DBDC FDFB 0E8C 3703 470D 1FD5 B974" /* '—ÛÜýû.Œ7.G..Õ¹t */
- $"5A32 CF32 3D2A 0213 FDC8 8A0C B595 4840" /* Z2Ï2=*..ýÈŠ.µ•H@ */
- $"C240 6E40 D585 AF4C 004A F98F FC90 E5BB" /* Â@n@Õ…¯L.Jùüå» */
- $"D6AD 2A34 0A6E 1D4D 933D 2221 80B7 C8EF" /* Ö­*4Ân.M“="!€·Èï */
- $"7C61 2953 2991 F91A 61A3 B54E 56D2 77E1" /* |a)S)‘ù.a£µNVÒwá */
- $"1DB8 8B5F 5E9C 7D32 80A0 C23F BBE6 A2B2" /* .¸‹_^œ}2€ Â?»æ¢² */
- $"D49F C777 4BE6 FDA6 7B0F 2983 E19B 84FF" /* ÔŸÇwKæý¦{.)ƒá›„ÿ */
- $"4B7B 0DD6 A35E 60AD 632D D6D7 7030 0A9F" /* K{.Ö£^`­c-Ö×p0Ÿ */
- $"0FA2 0820 8451 9624 D0FF 1FB4 9B81 61CC" /* .¢. „Q–$Ðÿ.´›aÌ */
- $"591F 6D98 E1AF 16E4 AF42 1FE0 B7C7 30DF" /* Y.m˜á¯.ä¯B.à·Ç0ß */
- $"CFFC EC14 15A1 B07A 4E11 ED5F BDB3 FD2A" /* Ïüì..¡°zN.í_½³ý* */
- $"84B1 6901 4333 27BB 2E8C 3329 2064 A800" /* „±i.C3'».Œ3) d¨. */
- $"0001 2FDE 803E 817B C369 A30F FCF0 FF1D" /* ../Þ€>{Ãi£.üðÿ. */
- $"89A1 2FD7 FF71 B63D 19EC 98DE DFE2 D9B8" /* ‰¡/×ÿq¶=.ì˜ÞßâÙ¸ */
- $"9D39 1737 4722 2A89 D291 623B 279F BF0B" /* 9.7G"*‰Ò‘b;'Ÿ¿. */
- $"E8C0 8AF8 CBE4 0011 5D58 29AB 34B0 335C" /* èÀŠøËä..]X)«4°3\ */
- $"36B2 1383 D820 11B8 22DF 56E1 27EF 932D" /* 6².ƒØ .¸"ßVá'ï“- */
- $"30DE CC72 58E3 9BDD A88C 229A CBC8 A466" /* 0ÞÌrXã›Ý¨Œ"šËȤf */
- $"7C29 FDE8 E789 F28F 3258 A2DD 897B 1C6A" /* |)ýèç‰ò2X¢Ý‰{.j */
- $"C048 306A EEA7 3DF0 F8D4 BECC CDBD 9E43" /* ÀH0jî§=ðøÔ¾ÌͽžC */
- $"A29D 8052 478B 6470 79B7 B38A 5743 CAE7" /* ¢€RG‹dpy·³ŠWCÊç */
- $"0BD4 0F4A 23E1 4C85 39C9 DEB0 75AF 151E" /* .Ô.J#áL…9ÉÞ°u¯.. */
- $"45D5 1681 2BA4 74C9 13B5 746A E399 9467" /* EÕ.+¤tÉ.µtjã™”g */
- $"E6B9 D503 7F7C D57D 4D5F 7FC8 DD43 7D9B" /* æ¹Õ..|Õ}M_.ÈÝC}› */
- $"3CDC F9AD 167C 162B 4E6C 2110 DB2C DF34" /* <Üù­.|.+Nl!.Û,ß4 */
- $"AEED CCE4 05AC 4057 9829 B161 9CA0 8159" /* ®íÌä.¬@W˜)±aœ Y */
- $"A64F FD15 EC5A 4A51 CA6C FD10 9A25 4291" /* ¦Oý.ìZJQÊlý.š%B‘ */
- $"1E90 1FC2 3530 E0DB E4E6 232E CB64 AF95" /* ..Â50àÛäæ#.Ëd¯• */
- $"9494 656D D395 3D62 9EDA 2EC1 DB02 1FAA" /* ””emÓ•=bžÚ.ÁÛ..ª */
- $"6778 0FC0 C4A2 CCA8 EDC0 4DA8 F889 162F" /* gx.ÀĢ̨íÀM¨ø‰./ */
- $"03F9 A9C1 C635 1DAD 2E22 580B 0B2B 83E3" /* .ù©ÁÆ5.­."X..+ƒã */
- $"EC02 5552 3AA8 91BA 45AF 5439 4265 71F6" /* ì.UR:¨‘ºE¯T9Beqö */
- $"3E7A 4412 5DE5 1863 50E6 C0ED C470 3ED9" /* >zD.]å.cPæÀíÄp>Ù */
- $"0E3F 48BA 54C5 915E 03F0 D836 6429 2A67" /* .?HºTÅ‘^.ðØ6d)*g */
- $"B7FA 6AF9 069E 8E67 2848 B570 C3AC 7746" /* ·újù.žŽg(HµpìwF */
- $"EB48 0A2F 4BE4 8EB3 3F8F 791F 0646 DEDF" /* ëHÂ/K䎳?y..FÞß */
- $"316B EFDF 6FD8 C0B9 7319 CE94 8930 C6F6" /* 1kïßoØÀ¹s.Δ‰0Æö */
- $"6399 C4A9 79AD E967 4783 3F8D C538 3C15" /* c™Ä©y­égGƒ?Å8<. */
- $"E5B7 CE98 22B7 5333 A938 B26F 0E1E EF2E" /* å·Î˜"·S3©8²o..ï. */
- $"74B9 72EF 9D8A 80B7 FDC1 8334 A5F9 DCFB" /* t¹r·ýÁƒ4¥ùÜû */
- $"B891 BB38 373C 9BE8 59F4 6018 6E63 DA65" /* ¸‘»87<›èYô`.ncÚe */
- $"9B13 9DC8 28DB 3C15 0D2C 11FC 0E2D 7A0A" /* ›.È(Û<..,.ü.-z */
- $"F8FF 671F C3FF 7F8E 1210 C212 EA5A 5F0B" /* øÿg.Ãÿ.Ž..Â.êZ_. */
- $"9727 F770 25A5 236D 9789 75C7 4089 11DD" /* —'÷p%¥#m—‰uÇ@‰.Ý */
- $"E472 3865 B217 B946 CF22 5225 27DE 566D" /* är8e².¹FÏ"R%'ÞVm */
- $"6799 4F82 0D46 59F5 E466 F9E7 71C3 FA80" /* g™O‚.FYõäfùçqÃú€ */
- $"7826 E598 FF48 E181 6CA8 5A7E C354 0CAA" /* x&å˜ÿHál¨Z~ÃT.ª */
- $"B01C 9EC4 181F 849B 6A13 FB8D C477 70BD" /* °.žÄ..„›j.ûÄwp½ */
- $"F46B 278C 4467 B0CF 3E21 805E EF97 9696" /* ôk'ŒDg°Ï>!€^ï—–– */
- $"CBB9 E3F6 B62E DC26 001A 408F D7E2 07C3" /* ˹ãö¶.Ü&..@×â.à */
- $"C1A4 AD97 4235 8863 A088 1980 C505 6E1F" /* Á¤­—B5ˆc ˆ.€Å.n. */
- $"F392 0B24 B500 20DC 8295 5703 F9B9 FF70" /* ó’.$µ. Ü‚•W.ù¹ÿp */
- $"355C 9B8D BB49 898F 1AAB F65F 7D7E E28F" /* 5\›»I‰.«ö_}~â */
- $"4300 BDCC FB20 4F67 CA07 0CAE 3BAD AA36" /* C.½Ìû OgÊ..®;­ª6 */
- $"A4D8 3358 4176 1AD6 01FA 0450 0000 0042" /* ¤Ø3XAv.Ö.ú.P...B */
- $"7B49 E0E8 A7D8 4EA9 E1A5 597B DB80 BA6D" /* {Iàè§ØN©á¥Y{Û€ºm */
- $"8010 25EA 0A26 833F DE77 DBF7 78B9 564B" /* €.%êÂ&ƒ?ÞwÛ÷x¹VK */
- $"57B2 AF8C BC92 97D7 46A1 23C1 B595 A2EE" /* W²¯Œ¼’—×F¡#Áµ•¢î */
- $"F8A9 29FA 42C2 3557 6345 80B1 FCFD F322" /* ø©)úBÂ5WcE€±üýó" */
- $"E992 9262 A83F E43D B059 CB12 D425 FEF2" /* é’’b¨?ä=°YË.Ô%þò */
- $"9932 1BD8 C65C ED82 D05E E15C 5E9C 76B7" /* ™2.ØÆ\í‚Ð^á\^œv· */
- $"7C64 FCDB A247 D388 3CCB 86B5 C486 2261" /* |düÛ¢GÓˆ<ˆµÄ†"a */
- $"BFD1 7213 39C3 0D69 6AF0 2476 B711 7E91" /* ¿Ñr.9Ã.ijð$v·.~‘ */
- $"6B53 6A04 4F3C 2781 A090 3118 6C3F 49BA" /* kSj.O<' 1.l?Iº */
- $"B81A 3FEB D686 EFCE F487 8315 E33F 84DB" /* ¸.?ëÖ†ïÎô‡ƒ.ã?„Û */
- $"E2C9 F35F 28C5 10C4 FF7F FA4F E953 89FC" /* âÉó_(Å.Äÿ.úOéS‰ü */
- $"8B32 23C6 0D04 5E49 DADA F0FE BCA7 D2C9" /* ‹2#Æ..^IÚÚðþ¼§ÒÉ */
- $"5869 EAD4 F153 9BF5 A5EA 3298 CC8B 8721" /* XiêÔñS›õ¥ê2˜Ì‹‡! */
- $"F919 680B 3F8C 304A 2849 4970 41CF 0F60" /* ù.h.?Œ0J(IIpAÏ.` */
- $"76D9 5820 EF21 CD4A 205A 632F 7CC4 EFDF" /* vÙX ï!ÍJ Zc/|Äïß */
- $"33F3 CCA8 EDAF 405B 78E1 8F79 0F66 6573" /* 3ǫ́í¯@[xáy.fes */
- $"35A2 AD75 1E18 6018 AF23 7C9D A008 1A01" /* 5¢­u..`.¯#| ... */
- $"C5FE 69AA 2C8E D97E 244D D075 F213 0CC6" /* Åþiª,ŽÙ~$MÐuò..Æ */
- $"738F 4395 BBC0 5CB6 3ADC 3DA8 ACB8 E018" /* sC•»À\¶:Ü=¨¬¸à. */
- $"BA5B 13DB 0F6A CB18 DEAC 9749 F5B5 361D" /* º[.Û.jË.Þ¬—Iõµ6. */
- $"CF3A C107 9606 179F F4C7 F3DE CB0B 1F53" /* Ï:Á.–..ŸôÇóÞË..S */
- $"F27E 5D3C 11AB 66B4 8037 0644 AE98 19BF" /* ò~]<.«f´€7.D®˜.¿ */
- $"D564 973A 0CF2 C96F 56D4 5CB8 666F C68C" /* Õd—:.òÉoVÔ\¸foÆŒ */
- $"1E73 E515 8B33 75D2 D3B4 B3A3 8CDE DE0C" /* .så.‹3uÒÓ´³£ŒÞÞ. */
- $"DA37 A3DF 44D2 B57E 2DB2 E891 D36F CC23" /* Ú7£ßDÒµ~-²è‘ÓoÌ# */
- $"ADE8 45BC BB30 78D7 77BD D4A8 087F C83F" /* ­èE¼»0x×w½Ô¨..È? */
- $"E49A 6873 FAC4 C12B 0056 5E18 C3CB C2E9" /* äšhsúÄÁ+.V^.ÃËÂé */
- $"DCAE F0E8 A75F 18DD B8DD 1DCD B0F5 3A1C" /* Ü®ðè§_.ݸÝ.Ͱõ:. */
- $"3816 51A8 0D93 00D0 6FF6 8F07 E4BE EDF9" /* 8.Q¨.“.Ðoö.ä¾íù */
- $"BF0E 6CAA 5384 5DF0 DF12 4CF4 E3B3 5D6C" /* ¿.lªS„]ðß.Lôã³]l */
- $"602A B6F1 C0E0 E520 B0D6 71FB 7996 4930" /* `*¶ñÀàå °Öqûy–I0 */
- $"23DD 3601 3653 C40D 1A64 DC2B D5C2 01C9" /* #Ý6.6SÄ..dÜ+ÕÂ.É */
- $"5002 6BBE 7338 81EE F87D 7687 0FE6 7CF9" /* P.k¾s8îø}v‡.æ|ù */
- $"BAB6 5B35 1A25 421C 5BBA 4D82 4E1F B1D4" /* º¶[5.%B.[ºM‚N.±Ô */
- $"1907 FF78 F534 4A16 7BB6 B598 51F6 E4D3" /* ..ÿxõ4J.{¶µ˜QöäÓ */
- $"A04B 1198 B926 CFAE FC03 22E3 8360 E696" /*  K.˜¹&Ï®ü."ãƒ`æ– */
- $"F546 62F9 7178 F327 E245 4520 8D17 41C4" /* õFbùqxó'âEE .AÄ */
- $"9EC6 EF8D 0924 9416 7901 CE87 5EBB 286D" /* žÆïÆ$”.y.·^»(m */
- $"53BF 09FA 41F6 5FBA 8F4C 79A8 75BA 277A" /* S¿ÆúAö_ºLy¨uº'z */
- $"7D42 642B 38EE 9A49 DEDB F1B3 80D0 E5D0" /* }Bd+8îšIÞÛñ³€ÐåÐ */
- $"2980 F797 E7D0 F90D 4B2F AFDD 4A69 3389" /* )€÷—çÐù.K/¯ÝJi3‰ */
- $"1418 EBD0 6DF0 E38D 6E2F D546 C1A8 C8DD" /* ..ëÐmðãn/ÕFÁ¨ÈÝ */
- $"8977 E053 9C26 053A CF69 97F9 7FB4 9000" /* ‰wàSœ&.:Ïi—ù.´. */
- $"0000 0115 0E67 B64C 0015 DD82 643D 6476" /* .....g¶L..Ý‚d=dv */
- $"ED28 6324 AD72 8124 1AF6 FB1B 21C9 0605" /* í(c$­r$.öû.!É.. */
- $"FAE6 04A6 31BF 6D67 FF7B B889 831A 4FFD" /* úæ.¦1¿mgÿ{¸‰ƒ.Oý */
- $"6BF5 F098 23AB A490 39F7 6AFC 3832 E2E1" /* kõð˜#«¤9÷jü82âá */
- $"11B2 ADB0 ECCA 83DE B4FF 3685 5106 75DE" /* .²­°ìʃ޴ÿ6…Q.uÞ */
- $"3047 28A0 EDBE AD29 17CD DA62 698B CE64" /* 0G( í¾­).ÍÚbi‹Îd */
- $"5999 2B8E BB7D C74F F009 A25D B2B5 BDD9" /* Y™+Ž»}ÇOðÆ¢]²µ½Ù */
- $"B852 BFFE 0B74 9C05 22D7 B0A3 2139 0979" /* ¸R¿þ.tœ."×°£!9Æy */
- $"5C29 BAE8 43DA F9E5 5383 AFD2 14EC 64AA" /* \)ºèCÚùåSƒ¯Ò.ìdª */
- $"442C CE71 74ED 5C27 4331 9374 AC77 47EE" /* D,Îqtí\'C1“t¬wGî */
- $"31AC 4C74 97BC 753C D5DC 3D8B F7D2 C612" /* 1¬Lt—¼u<ÕÜ=‹÷ÒÆ. */
- $"2399 F431 07A1 76CA DAE6 772B 309A C800" /* #™ô1.¡vÊÚæw+0šÈ. */
- $"9F2F D6DF A44C 48EB 853E 4140 A123 BCA3" /* Ÿ/ÖߤLHë…>A@¡#¼£ */
- $"D096 00DA 0822 DFB3 6887 B31F A18F 59BE" /* Ж.Ú."ß³h‡³.¡Y¾ */
- $"6B25 B5CF CFA3 8806 85B7 ED84 B20B CDA2" /* k%µÏÏ£ˆ.…·í„².Í¢ */
- $"A0C8 404B 3FFF 7FF3 3816 5BF0 A16B 85D0" /*  È@K?ÿ.ó8.[ð¡k…Ð */
- $"B87F E4BB 21F9 A3BB 9103 2944 434A 5789" /* ¸.ä»!ù£»‘.)DCJW‰ */
- $"E3EC B1E3 6F3E 154A 37E4 ACA6 4B02 6C5B" /* ãì±ão>.J7䬦K.l[ */
- $"D23A D4D4 83CE F291 CD7F 114F 5935 8EE0" /* Ò:ÔÔƒÎò‘Í..OY5Žà */
- $"17EA F0B3 1D93 BC5F 2CF8 511C E99F 21D8" /* .êð³.“¼_,øQ.éŸ!Ø */
- $"E286 EB17 6FC2 C34B 1110 6398 03BF CB08" /* â†ë.oÂÃK..c˜.¿Ë. */
- $"0018 4848 E24D 90A5 63F9 B1F8 6E20 EF6E" /* ..HHâM¥cù±øn ïn */
- $"25D5 858B 0AE4 2235 581B D4DA E01C B006" /* %Õ…‹Âä"5X.ÔÚà.°. */
- $"E5EB DE78 855B 19E7 4D80 DAC2 1E8F CB2B" /* åëÞx…[.çM€ÚÂ.Ë+ */
- $"0EC8 3FFF 7759 B569 0861 20CC 1D71 2121" /* .È?ÿwYµi.a Ì.q!! */
- $"71A7 FA20 B34B EAB3 4260 A827 6E91 2B3C" /* q§ú ³Kê³B`¨'n‘+< */
- $"5479 449A 3161 D24E 8489 C00A 18A6 3FEC" /* TyDš1aÒN„‰ÀÂ.¦?ì */
- $"61F2 4C86 23C1 85DB 6ECA 221D BCC2 C25F" /* aòL†#Á…ÛnÊ".¼ÂÂ_ */
- $"EFFF 7891 F475 0E20 DC0A 8F85 8208 4541" /* ïÿx‘ôu. ÜÂ…‚.EA */
- $"579B 5EE2 24C4 5C60 39B7 D9F1 ECFD 0F0C" /* W›^â$Ä\`9·Ùñìý.. */
- $"3719 72A8 A543 8BF5 94BF BF6C E6F7 E45A" /* 7.r¨¥C‹õ”¿¿læ÷äZ */
- $"C5CF 1FD7 32F5 2D70 041E 3641 2C46 E23D" /* ÅÏ.×2õ-p..6A,Fâ= */
- $"E072 6889 A892 A27F 44A8 564A 74A3 B421" /* àrh‰¨’¢.D¨VJt£´! */
- $"E1CC A0F3 50E2 2711 6919 76BE D84B D2FE" /* áÌ óPâ'.i.v¾ØKÒþ */
- $"AAED 2D64 7C8F 4C55 7FFF 7EFC 2CBF 05DE" /* ªí-d|LU.ÿ~ü,¿.Þ */
- $"25B2 001C 00EC 6D17 ED17 E559 9DFA F731" /* %²...ìm.í.åYú÷1 */
- $"B21A 7394 8B35 5948 BA4F 5858 020F FF7C" /* ².s”‹5YHºOXX..ÿ| */
- $"C89D 1CFA F89B 9F9C 841F 19EF D626 E6DE" /* È.úø›Ÿœ„..ïÖ&æÞ */
- $"DCC3 3148 38A0 C32F 898F BEC3 0AF3 318C" /* ÜÃ1H8 Ã/‰¾ÃÂó1Œ */
- $"5E09 119B 43C8 9FE6 73B2 F4B9 9789 4BFC" /* ^Æ.›CÈŸæs²ô¹—‰Kü */
- $"99A2 FF7F FF7A 4FD0 8C64 F459 410C 013C" /* ™¢ÿ.ÿzOÐŒdôYA..< */
- $"1C6C 85B5 1C8F D078 995D 714E 1C60 3090" /* .l…µ.Ðx™]qN.`0 */
- $"9058 77C4 BB80 5F57 1871 CA72 B2FD 0016" /* XwÄ»€_W.qÊr²ý.. */
- $"BAA7 F84F F4E9 ACDF F766 8CB4 475D 2F0B" /* º§øOôé¬ß÷fŒ´G]/. */
- $"37BC 18C8 6162 79C2 BDD7 8753 204B A536" /* 7¼.Èaby½ׇS K¥6 */
- $"9CBE 4972 316A BCB1 9442 4238 B88F 2F48" /* œ¾Ir1j¼±”BB8¸/H */
- $"7A45 5CD1 A306 3A23 5A78 354F CDB6 C0A5" /* zE\Ñ£.:#Zx5OͶÀ¥ */
- $"2A5C 19DA 0B0C CD84 8D85 D2B8 1DC9 059C" /* *\.Ú..Í„…Ò¸.É.œ */
- $"A8C4 8118 4848 9372 9372 566C 21E5 2665" /* ¨Ä.HH“r“rVl!å&e */
- $"D16C 6601 48A8 35CE 7FFF 7F19 B54E 7F04" /* Ñlf.H¨5Î.ÿ..µN.. */
- $"10EC 1AA3 13FF 4588 9722 A7AA B011 863C" /* .ì.£.ÿEˆ—"§ª°.†< */
- $"E4B1 717B 7C2D 21E6 267B 4B48 E790 FF76" /* ä±q{|-!æ&{KHçÿv */
- $"40CC F425 41CB 289F 809D 8170 A529 2EDA" /* @Ìô%AË(Ÿ€p¥).Ú */
- $"A105 B3AF FB44 7951 B87A 0091 5B53 5979" /* ¡.³¯ûDyQ¸z.‘[SYy */
- $"CDC6 5976 6393 34F2 21FF 7FFF 7FFF 7D43" /* ÍÆYvc“4ò!ÿ.ÿ.ÿ}C */
- $"4F4B C77F 73C7 0454 BE9C BE9C 282E 440E" /* OKÇ.sÇ.T¾œ¾œ(.D. */
- $"0608 A380 6121 2103 DBD2 250B 5D57 9159" /* ..£€a!!.ÛÒ%.]W‘Y */
- $"B69A 28CF E66A 154F F84F F4E9 99ED 48C4" /* ¶š(Ïæj.OøOôé™íHÄ */
- $"CA7E BE76 FC67 A7CD DC26 1C00 0184 8463" /* Ê~¾vüg§ÍÜ&...„„c */
- $"69A8 C0A9 127C 5830 CC3A 380A C742 E4DE" /* i¨À©.|X0Ì:8ÂÇBäÞ */
- $"06F5 7999 556D FD9F 268B 895F FF4B 7BB9" /* .õy™UmýŸ&‹‰_ÿK{¹ */
- $"C201 52B7 B483 0906 65EC 1848 4750 6F27" /* Â.R·´ƒÆ.eì.HGPo' */
- $"C86C 1F27 9108 6253 0416 4CD3 30E4 7F77" /* Èl.'‘.bS..LÓ0ä.w */
- $"0705 8420 83B6 BCB6 29DE B71E 8DC5 851A" /* ..„ ƒ¶¼¶)Þ·.Å…. */
- $"ABB0 83D8 F2E2 5113 55D2 AAF6 B3AB 7679" /* «°ƒØòâQ.UÒªö³«vy */
- $"49FE A1F8 6F30 0EC0 7D91 534C C78C DC5D" /* Iþ¡øo0.À}‘SLÇŒÜ] */
- $"5A42 CA06 37D8 E0ED 27FA 3E31 C849 D2BE" /* ZBÊ.7Øàí'ú>1ÈIÒ¾ */
- $"847C 0CCF 676F ACFE 91A3 0F62 B711 1897" /* „|.Ïgo¬þ‘£.b·..— */
- $"9DC3 8E37 3AF8 907E 0B69 1577 2856 AA36" /* ÃŽ7:ø~.i.w(Vª6 */
- $"FAC0 D56C 6686 0443 CA96 FDCD 051B 23A7" /* úÀÕlf†.CÊ–ýÍ..#§ */
- $"7DAC 8229 C5FC F840 103A 6407 49F7 6B32" /* }¬‚)Åüø@.:d.I÷k2 */
- $"254F 2B32 7FC1 F460 D5C0 5EE1 3046 612A" /* %O+2.Áô`ÕÀ^á0Fa* */
- $"1BC1 C143 7B76 B9EF ECCB 5EE9 8F0C 3F71" /* .ÁÁC{v¹ïìË^é.?q */
- $"E805 8B9B 17B7 9ECE C237 AF5C 0062 E61E" /* è.‹›.·žÎÂ7¯\.bæ. */
- $"DF6C C1F7 904E 4379 2A9C 92FC 1B04 00A8" /* ßlÁ÷NCy*œ’ü...¨ */
- $"F9D5 DB1B C4C6 9485 ABC2 1199 CCF2 0A47" /* ùÕÛ.ÄÆ”…«Â.™ÌòÂG */
- $"9693 C097 7AD0 449A FC53 DEC5 6EE8 6BF7" /* –“À—zÐDšüSÞÅnèk÷ */
- $"0D7D 4ED8 3426 DA7E ECF9 57ED 9252 9A6A" /* .}NØ4&Ú~ìùWí’Ršj */
- $"2B94 2614 1B6E A495 8261 4D5E DAEF 03FA" /* +”&..n¤•‚aM^Úï.ú */
- $"8A63 9496 E8AB A1A6 5B5C B03E E73E 2889" /* Šc”–è«¡¦[\°>ç>(‰ */
- $"D257 6C28 080A 68DC 226C 950F F55B E7CC" /* ÒWl(.ÂhÜ"l•.õ[çÌ */
- $"95AD FDA7 43EA 7489 A545 C0FC E9B0 2A25" /* •­ý§Cêt‰¥EÀüé°*% */
- $"719C EE06 9E5A 8FC0 D3B0 0C81 1EB0 C8C6" /* qœî.žZÀÓ°..°ÈÆ */
- $"25BD B383 33BD B80D D9A9 48F3 7539 D7D5" /* %½³ƒ3½¸.Ù©Hóu9×Õ */
- $"8021 5EBA 94A7 83A3 69FE 8179 9106 BC56" /* €!^º”§ƒ£iþy‘.¼V */
- $"14A4 427B 8C09 BACB 2FC9 B8F3 CAFA E51C" /* .¤B{ŒÆºË/ɸóÊúå. */
- $"9C07 9A69 033C 6159 163E 6ED8 259D 7AAB" /* œ.ši.<aY.>nØ%z« */
- $"D316 475C F6C7 BD0E 7972 4C59 DF3A D5B4" /* Ó.G\öǽ.yrLYß:Õ´ */
- $"44ED 7D01 B0FB 34D4 4C9C BC2D B8A6 5B65" /* Dí}.°û4ÔLœ¼-¸¦[e */
- $"134F 0C96 5CA1 21CC A249 F17D 4660 9835" /* .O.–\¡!Ì¢Iñ}F`˜5 */
- $"957C 7392 53A9 DE42 E650 604B 10E2 FF12" /* •|s’S©ÞBæP`K.âÿ. */
- $"B47A 044A 524A B8D3 60B5 A258 CEAB 55E8" /* ´z.JRJ¸Ó`µ¢XΫUè */
- $"5219 EC3E A9F6 0813 A2B4 930C EDE4 3BBE" /* R.ì>©ö..¢´“.íä;¾ */
- $"C0E3 7F93 1A3F 38EB 2DE3 492D A3BD FD00" /* Àã.“.?8ë-ãI-£½ý. */
- $"811C 530E 2FB8 9D68 2466 D288 EC29 9094" /* .S./¸h$fÒˆì)” */
- $"A3C7 2D32 0A25 BA73 2023 08CA C360 2C72" /* £Ç-2Â%ºs #.ÊÃ`,r */
- $"8BA9 516A 7081 F2FF 1E84 E1C2 F841 77CE" /* ‹©Qjpòÿ.„áÂøAwÎ */
- $"ABDF 6476 30A4 3018 F7F4 F3EE 1A5E 5DF0" /* «ßdv0¤0.÷ôóî.^]ð */
- $"CAAA AA77 C90D 52C4 6AA9 5755 33B9 1814" /* ʪªwÉ.RÄj©WU3¹.. */
- $"3528 E205 C379 648A E627 A23E D5DB 1CAE" /* 5(â.ÃydŠæ'¢>ÕÛ.® */
- $"4868 B7D4 F381 2534 1F48 2BCC 5211 3B0F" /* Hh·Ôó%4.H+ÌR.;. */
- $"9692 B002 4CFB 1F83 3628 D1EB 5416 0648" /* –’°.Lû.ƒ6(ÑëT..H */
- $"F0F0 B0F8 C7C7 6E92 8C54 6859 791B 7890" /* ðð°øÇÇn’ŒThYy.x */
- $"EBA3 BC74 5F3F C4AD 7C9D 6954 2D0C 15BF" /* 룼t_?Ä­|iT-..¿ */
- $"F699 82A6 4170 D2F1 02A5 7EF3 6061 C9CF" /* ö™‚¦ApÒñ.¥~ó`aÉÏ */
- $"C370 E129 F805 8CC8 C670 CBDC 2D44 D349" /* Ãpá)ø.ŒÈÆpËÜ-DÓI */
- $"F3E5 C5F9 357E 3DF2 CDF3 DC8A 1F13 5B2D" /* óåÅù5~=òÍóÜŠ..[- */
- $"C544 448D 1038 8293 4EEA 75A4 0738 7D9F" /* ÅDD.8‚“Nêu¤.8}Ÿ */
- $"C002 3D68 26D8 7B06 FB10 CCDF C4F3 5364" /* À.=h&Ø{.û.ÌßÄóSd */
- $"2342 154B F8FB 01ED 8893 9160 A3A0 B81D" /* #B.Køû.툓‘`£ ¸. */
- $"47A0 6C82 1CBA FAED 931D E025 BDFF 1535" /* G l‚.ºúí“.à%½ÿ.5 */
- $"CADF 68C5 41FD 3896 1AC9 F979 A885 F5AE" /* ÊßhÅAý8–.Éùy¨…õ® */
- $"EFBE C674 ED92 5FE9 E9AF FF52 D573 A6DD" /* ï¾Ætí’_éé¯ÿRÕs¦Ý */
- $"631B 27E4 62CB B76E 7020 EC65 75E2 DB6F" /* c.'äbË·np ìeuâÛo */
- $"0E10 980A 0EA3 2287 4CF8 D402 52B8 1491" /* ..˜Â.£"‡LøÔ.R¸.‘ */
- $"21C9 BC2B 48BC CBD4 464A C539 6CD5 28F1" /* !ɼ+H¼ËÔFJÅ9lÕ(ñ */
- $"CAE4 CA43 9CB8 B181 BF06 522B 4D19 8295" /* ÊäÊCœ¸±¿.R+M.‚• */
- $"05C8 D7CD 8CFA D3E7 7BC9 630C DCDD 7C7E" /* .È×ÍŒúÓç{Éc.ÜÝ|~ */
- $"E4C6 D7DC 5E38 67CC 5934 9E8D 9552 B837" /* äÆ×Ü^8gÌY4ž•R¸7 */
- $"53AE 6D39 FAB1 2EB6 886C 1855 26ED AD08" /* S®m9ú±.¶ˆl.U&í­. */
- $"1EBE 9570 EA2F DFFF 06F4 ABF3 4534 2831" /* .¾•pê/ßÿ.ô«óE4(1 */
- $"1AE2 0A99 2956 2A90 C2A4 58AC E49E F047" /* .â™)V*¤X¬äžðG */
- $"A9BA C394 E8F4 6427 7966 A79C 4269 9ADD" /* ©ºÃ”èôd'yf§œBišÝ */
- $"AD1D 1A7E 375C D3FB 8C25 0B6B 0460 5EB9" /* ­..~7\ÓûŒ%.k.`^¹ */
- $"416C AE82 DFC3 09DA 1F69 8796 6897 8CD0" /* Al®‚ßÃÆÚ.i‡–h—ŒÐ */
- $"3E1B FF7D 9AE9 7F6D 4E84 967C 674F CA41" /* >.ÿ}šé.mN„–|gOÊA */
- $"44C1 0575 93A9 2599 66D0 AB7B 6260 D32C" /* DÁ.u“©%™fЫ{b`Ó, */
- $"94AF 7FC8 82FD F692 92FE B6ED A660 750F" /* ”¯.È‚ýö’’þ¶í¦`u. */
- $"80A2 A8AA E6F6 7B9F E894 ED71 D223 6F4B" /* €¢¨ªæö{Ÿè”íqÒ#oK */
- $"A203 F64C 7560 DBB1 6F9E EE9F 2945 C994" /* ¢.öLu`Û±ožîŸ)EÉ” */
- $"BA00 D3D1 6414 A300 4296 670B 2350 CDD1" /* º.ÓÑd.£.B–g.#PÍÑ */
- $"DF61 29E8 EC17 87B6 BC62 B6BD 5F31 13B2" /* ßa)èì.‡¶¼b¶½_1.² */
- $"48A2 F723 53C7 6955 969B ED83 6A9B 1B06" /* H¢÷#SÇiU–›íƒj›.. */
- $"C7D0 2584 430B 8C52 D00A 736B D6FB AEDB" /* ÇÐ%„C.ŒRÐÂskÖû®Û */
- $"2BA1 5095 759B 0AFF 5138 58EF 3DC2 B14D" /* +¡P•u›ÂÿQ8Xï=±M */
- $"3B7D 62D0 DE12 CFEF 17A3 32C4 C79A C2DA" /* ;}bÐÞ.Ïï.£2ÄÇšÂÚ */
- $"6BA1 6478 B1D3 2278 3787 6C30 08FD 6095" /* k¡dx±Ó"x7‡l0.ý`• */
- $"FF65 1DF4 7606 34C3 B4EE E609 A3BF 7085" /* ÿe.ôv.4Ã´îæÆ£¿p… */
- $"8B3B 2C80 D860 6043 10A4 24B1 2D80 880D" /* ‹;,€Ø``C.¤$±-€ˆ. */
- $"671A 9A76 E1D4 2304 B4E0 9E47 129D 6316" /* g.šváÔ#.´àžG.c. */
- $"33DF C88C 3BB6 5232 475C D19D FA9B 3303" /* 3ßÈŒ;¶R2G\Ñú›3. */
- $"2956 D8B1 08A5 2735 CD4D F130 C700 DA0D" /* )Vر.¥'5ÍMñ0Ç.Ú. */
- $"7BAE 21FA FB1B 35A5 957E 0211 955B 25D0" /* {®!úû.5¥•~..•[%Ð */
- $"A3DD B72F 5BCD 8792 418E BCB6 C727 DD0F" /* £Ý·/[͇’A޼¶Ç'Ý. */
- $"2D42 F031 2A73 C1F9 7964 B937 1E77 A757" /* -Bð1*sÁùyd¹7.w§W */
- $"D158 CB02 80D3 C310 E1C5 709C 5C69 7F04" /* ÑXË.€ÓÃ.áÅpœ\i.. */
- $"4476 F017 3FF2 B891 0160 D681 AEBC F8C9" /* Dvð.?ò¸‘.`Ö®¼øÉ */
- $"8F46 7922 4414 5CEE 0CA8 417B 33BB 5926" /* Fy"D.\î.¨A{3»Y& */
- $"B7A6 7094 6363 C5F2 9AD7 1751 2456 3B83" /* ·¦p”ccÅòš×.Q$V;ƒ */
- $"9BB0 0ECD 1420 6141 A097 DBF4 802A 2377" /* ›°.Í. aA —Ûô€*#w */
- $"CDAC EFE9 4A16 4B3C 5058 A5DC 1C40 169E" /* ͬïéJ.K<PX¥Ü.@.ž */
- $"3999 F0C2 C418 2E8F 0951 664A 7082 F49F" /* 9™ðÂÄ..ÆQfJp‚ôŸ */
- $"E576 B2B1 5918 E3EE 9B97 1686 6499 A572" /* åv²±Y.ãî›—.†d™¥r */
- $"B1F6 2F39 A798 6292 DE22 007B 60AD 1D94" /* ±ö/9§˜b’Þ".{`­.” */
- $"31BA 068D F15A 06DB 2654 6B52 F692 3C3A" /* 1º.ñZ.Û&TkRö’<: */
- $"0DA8 A74B 30F6 3852 76F0 A897 9086 FBD5" /* .¨§K0ö8Rv𨗆ûÕ */
- $"1C78 047E 7BF2 08EE 7B45 85C5 6ED5 AA43" /* .x.~{ò.î{E…ÅnÕªC */
- $"F423 8A4E 4111 C68E 172E DD87 AF9E BF19" /* ô#ŠNA.ÆŽ..݇¯ž¿. */
- $"D4D2 020C 6FD5 EE3F F0E8 289E 4E6C 0871" /* ÔÒ..oÕî?ðè(žNl.q */
- $"1187 D3F1 E458 94F5 4519 BF3C D239 D86C" /* .‡ÓñäX”õE.¿<Ò9Øl */
- $"17F1 8916 4206 2346 ACD8 1F08 9A44 0AB3" /* .ñ‰.B.#F¬Ø..šD³ */
- $"CEE6 441D 78D5 2909 4CEA 46F7 D6C6 D21A" /* ÎæD.xÕ)ÆLêF÷ÖÆÒ. */
- $"6D41 BB64 ADFF 6252 5A80 3556 C459 2845" /* mA»d­ÿbRZ€5VÄY(E */
- $"C05D C2C5 1F69 4087 0380 C0FF 61AA D5D1" /* À]ÂÅ.i@‡.€ÀÿaªÕÑ */
- $"E5C2 5FC0 CEF4 2D59 B4A3 6BA8 343E 184B" /* åÂ_ÀÎô-Y´£k¨4>.K */
- $"89CE 81FD AC96 C691 FDE5 F993 B9CB 6302" /* ‰Îý¬–Æ‘ýåù“¹Ëc. */
- $"B8EE 86B4 A2F7 19EA DAFD D511 B59F BBD2" /* ¸î†´¢÷.êÚýÕ.µŸ»Ò */
- $"5D4E F6A3 BC58 51D5 273F 2E2E 2B6A 2755" /* ]Nö£¼XQÕ'?..+j'U */
- $"38A3 CA29 BFAB D31D CD53 B29C 7418 40DB" /* 8£Ê)¿«Ó.ÍS²œt.@Û */
- $"FD56 1BF6 9350 5411 CF5C 8D26 B1FA 754F" /* ýV.ö“PT.Ï\&±úuO */
- $"E584 8277 6221 6866 257C 9FC9 65A5 6D93" /* å„‚wb!hf%|ŸÉe¥m“ */
- $"C524 B971 3F1D 34A0 BBF4 6B83 9722 CFAD" /* Å$¹q?.4 »ôkƒ—"Ï­ */
- $"8296 103F 53BB 1B22 8A84 2FAC 94DE 4994" /* ‚–.?S»."Š„/¬”ÞI” */
- $"2D31 56A5 DBCD B661 81D7 B360 4958 8FF5" /* -1V¥ÛͶa׳`IXõ */
- $"EB02 25A9 6386 8241 D936 A3CB AA88 9936" /* ë.%©c†‚AÙ6£Ëªˆ™6 */
- $"1698 4F59 765B 34EA 3741 D2D3 2DAC 854D" /* .˜OYv[4ê7AÒÓ-¬…M */
- $"366B C9A0 15F8 D2E6 7CCF 99EF A794 460C" /* 6kÉ .øÒæ|ϙ倫F. */
- $"934E C88B 2BF5 91F7 7BD1 3DC9 6ED3 91FE" /* “NÈ‹+õ‘÷{Ñ=ÉnÓ‘þ */
- $"E63B EDCC 3D4A CC1B AE5D 88D0 B241 20D1" /* æ;íÌ=JÌ.®]ˆÐ²A Ñ */
- $"AB6C 9FE2 E494 395E 8E3C 0EB0 1796 58CC" /* «lŸâä”9^Ž<.°.–XÌ */
- $"9791 D931 DB33 473E 003E 10CD B736 7295" /* —‘Ù1Û3G>.>.Í·6r• */
- $"DD81 B481 9A0A ED27 3C1E 6298 FD0D BDE0" /* Ý´šÂí'<.b˜ý.½à */
- $"11D6 8A21 79C1 DBB7 FEDC 6E48 8080 5ADB" /* .ÖŠ!yÁÛ·þÜnH€€ZÛ */
- $"E61D 9E0E E6A3 6D38 A028 4016 464D F534" /* æ.ž.æ£m8 (@.FMõ4 */
- $"D764 3AD7 55DF 3CAB 7B3D 12F5 9A8D DDCF" /* ×d:×Uß<«{=.õšÝÏ */
- $"6CCD 0387 C982 0FE9 D431 0FE3 E064 1700" /* lÍ.‡É‚.éÔ1.ãàd.. */
- $"1AAD F49E D6DE A939 8010 C91B 605B 4E0A" /* .­ôžÖÞ©9€.É.`[NÂ */
- $"FCBE ADE9 C17A EC1F 3990 9EB2 E6BF 92AA" /* ü¾­éÁzì.9ž²æ¿’ª */
- $"951C D27F A984 10A9 22DC 996E FF6E 12AE" /* •.Ò.©„.©"Ü™nÿn.® */
- $"DC03 5AB3 2CA0 8291 4174 C69E AE28 DBA8" /* Ü.Z³, ‚‘AtÆž®(Û¨ */
- $"38A8 FF12 67D3 F8A3 00D6 2A2E A564 CEFA" /* 8¨ÿ.gÓø£.Ö*.¥dÎú */
- $"0F00 4B44 62A7 CA9F F072 2821 DD3C 6A34" /* ..KDb§ÊŸðr(!Ý<j4 */
- $"926C 8F3C 1548 D31A 021F 2604 252D A929" /* ’l<.HÓ...&.%-©) */
- $"172B 8212 174F 2D2D CC7D DA15 F9A9 AD7E" /* .+‚..O--Ì}Ú.ù©­~ */
- $"59D3 7885 9215 C77B 6583 4D8F 3308 149C" /* YÓx…’.Ç{eƒM3..œ */
- $"270A 4508 21C9 A05B CDE9 BEF1 C18A 4B74" /* 'ÂE.!É [Íé¾ñÁŠKt */
- $"F07B 0DFE 007B E5AF D9AA CED7 8661 34C7" /* ð{.þ.{å¯ÙªÎ׆a4Ç */
- $"AA26 21AC D09C 6BAA EABB A7C4 486E 40A5" /* ª&!¬Ðœkªê»§ÄHn@¥ */
- $"C791 976A 1EC3 534F 84EC E6E9 7363 FF08" /* Ç‘—j.ÃSO„ìæéscÿ. */
- $"5B20 0E29 000C 5E8F 3339 6210 65CC FD34" /* [ .)..^39b.eÌý4 */
- $"76EB F1B2 76C6 5FDC C1A8 B0F5 53EE 103C" /* vëñ²vÆ_ÜÁ¨°õSî.< */
- $"50B0 650F 8459 9777 E890 E28A BB84 56B9" /* P°e.„Y—wè⊻„V¹ */
- $"0522 90F9 5B81 C982 979E E507 A4BC 26C3" /* ."ù[É‚—žå.¤¼&à */
- $"E356 F2A9 C0D1 BFF3 F882 EC0E 6AA9 CA0D" /* ãVò©ÀÑ¿óø‚ì.j©Ê. */
- $"4419 16FB 9BEF 947E F848 19BF 5CB6 EA4E" /* D..û›ï”~øH.¿\¶êN */
- $"C290 F254 020B 51DB 8094 4D05 E9A5 21A0" /* ÂòT..QÛ€”M.é¥!  */
- $"D3E6 84EA 5A3E 4380 650C B24F 31DA 209F" /* Óæ„êZ>C€e.²O1Ú Ÿ */
- $"F51A 9108 7912 32B0 52A6 A901 CADB A758" /* õ.‘.y.2°R¦©.ÊÛ§X */
- $"C00A D516 E462 35B4 C071 131A 0F01 9A95" /* ÀÂÕ.äb5´Àq....š• */
- $"9739 F131 0E5F 7FBA D8AD 925F 992C 0187" /* —9ñ1._.ºØ­’_™,.‡ */
- $"D97C 832B 847E 1148 0402 0449 FB25 D0F1" /* Ù|ƒ+„~.H...Iû%Ðñ */
- $"C1F8 2B8E CE97 D5A4 BEFE 7F0D E420 E43E" /* Áø+ŽÎ—Õ¤¾þ..ä ä> */
- $"801A 448D 9D61 D23C 5956 3DEB A1A6 0858" /* €.DaÒ<YV=롦.X */
- $"CD98 F32B 92E6 D960 C0E1 E542 294D 6FD3" /* ͘ó+’æÙ`ÀáåB)MoÓ */
- $"4234 37C9 3537 275F AC1E 936D 534A BF02" /* B47É57'_¬.“mSJ¿. */
- $"B742 8CAB BE88 E4FF 23DC D9EB 1FC4 9CF0" /* ·BŒ«¾ˆäÿ#ÜÙë.Äœð */
- $"C5D1 3F1D 5995 AD68 12E9 71B3 2100 AFB7" /* ÅÑ?.Y•­h.éq³!.¯· */
- $"CBF7 9ADB D5FF 48EE B1A2 AE4D E021 7C07" /* Ë÷šÛÕÿHî±¢®Mà!|. */
- $"5AD5 E94C A965 DFE8 B32A 23AB DE05 4FB1" /* ZÕéL©eßè³*#«Þ.O± */
- $"FDB7 ECC5 3611 73D9 B03C 399A D5F6 663D" /* ý·ìÅ6.sÙ°<9šÕöf= */
- $"0E78 0BEE 67D9 2F9D 0072 E938 509C 9779" /* .x.îgÙ/.ré8Pœ—y */
- $"6C64 03A1 B8C9 C1C0 2256 29EA 112C FB1C" /* ld.¡¸ÉÁÀ"V)ê.,û. */
- $"766C DF51 83B1 388F 902E EE03 337E 689A" /* vlßQƒ±8.î.3~hš */
- $"CA5A A9F0 09AF 3422 4115 D489 3FBD 22C1" /* ÊZ©ðƯ4"A.Ô‰?½"Á */
- $"4A4F 642A 0AC8 D01C 2950 18CA D441 780A" /* JOd*ÂÈÐ.)P.ÊÔAx */
- $"C929 A7FF 0AFA 956A A581 B590 9B7A 7D74" /* É)§ÿÂú•j¥µ›z}t */
- $"2084 3DC1 5D81 B12B DF9C 333D EFAD 0ADD" /* „=Á]±+ßœ3=ï­ÂÝ */
- $"3445 4F8C 132E F02F C2E7 E13F BE12 2F84" /* 4EOŒ..ð/Âçá?¾./„ */
- $"7FC3 D55F 876A BE1D 07F2 688D 774C FC3E" /* .ÃÕ_‡j¾..òhwLü> */
- $"A177 C3EA 4FE4 AFFE 1BFF 61D3 2F87 4BFC" /* ¡wÃêOä¯þ.ÿaÓ/‡Kü */
- $"946E 03F8 6CFF 06A3 FC28 FE13 BF0F 6B7E" /* ”n.ølÿ.£ü(þ.¿.k~ */
- $"1EB8 FC3B 47E1 ECEE EEDF F87D 51FF 07D5" /* .¸ü;Gáìîîßø}Qÿ.Õ */
- $"0BBB 87E1 D3FF 0779 FC3B 6FE1 D378 0DF0" /* .»‡áÓÿ.yü;oáÓx.ð */
- $"BD7C 29EB A2DD 17F2 6ADB E1DB 7F0D 97E1" /* ½|)ë¢Ý.òjÛáÛ..—á */
- $"E84D 7750 FC3E 906F C3E8 35DD 42ED AFE1" /* èMwPü>oÃè5ÝBí¯á */
- $"D33F 0E8D F86E 00F7 91DD 3D8B A94D D83C" /* Ó?.øn.÷‘Ý=‹©MØ< */
- $"B51B 129C 103F 899D B929 4724 C188 2C29" /* µ..œ.?‰¹)G$Áˆ,) */
- $"CE89 11F8 9065 1C37 E234 DFEF 60D7 3221" /* Ή.øe.7â4ßï`×2! */
- $"5343 F889 DCDB AFB3 6F20 F76A 31D9 986E" /* SCø‰ÜÛ¯³o ÷j1Ù˜n */
- $"A745 547E 6F18 076D A675 BA1A 1AAF 6558" /* §ET~o..m¦uº..¯eX */
- $"338A FF71 4707 0776 1B62 BCCC 89E5 4726" /* 3ŠÿqG..v.b¼Ì‰åG& */
- $"A7CB 8885 E07C DADC D741 3B1D D81F AB03" /* §Ëˆ…à|ÚÜ×A;.Ø.«. */
- $"2F84 F52D DFD5 7384 4649 7BA2 5AB1 14C8" /* /„õ-ßÕs„FI{¢Z±.È */
- $"3D8D B951 8183 C33A B08E 82CC EF1A F046" /* =¹QƒÃ:°Ž‚Ìï.ðF */
- $"5B62 C9E0 A926 F330 0A61 A30C 6194 7E1E" /* [bÉà©&ó0Âa£.a”~. */
- $"1EE9 3D0D 1ABE 5536 A026 8B32 830F C02F" /* .é=..¾U6 &‹2ƒ.À/ */
- $"3041 04B7 2C65 024D AC81 D2CC 03CA A08A" /* 0A.·,e.M¬ÒÌ.Ê Š */
- $"B105 F3F1 C365 6BCE 9876 A867 7DBA 63AF" /* ±.óñÃekΘv¨g}ºc¯ */
- $"0973 495F DCC1 3552 54BA 5BDB 618D C6C0" /* ÆsI_ÜÁ5RTº[ÛaÆÀ */
- $"91B8 4489 141B A7D3 F188 8A97 DAB0 8942" /* ‘¸D‰..§ÓñˆŠ—Ú°‰B */
- $"EA67 F235 E18A 871B 4B0C DAC6 9050 BA9C" /* êgò5ኇ.K.ÚÆPºœ */
- $"C432 95CE 13CA 93ED 4FD5 9495 377D C920" /* Ä2•Î.Ê“íOÕ”•7}É */
- $"C8A2 F997 5348 8890 91D5 0A23 50BF 3C37" /* È¢ù—SHˆ‘ÕÂ#P¿<7 */
- $"8372 7C96 32AA 1CD2 46BE 8220 C983 2A71" /* ƒr|–2ª.ÒF¾‚ Ƀ*q */
- $"7961 BF33 9590 C086 CCE9 578B 322E FB50" /* ya¿3•À†ÌéW‹2.ûP */
- $"CB68 6459 C127 EB9B E974 EF02 59F4 FF4D" /* ËhdYÁ'ë›étï.YôÿM */
- $"4525 1874 6A9F 99EB DFCC C1B1 72EA 9FA0" /* E%.tjŸ™ëßÌÁ±r꟠ */
- $"DE00 BBB9 D95F 36B9 406E 3CE0 3BCF 32B6" /* Þ.»¹Ù_6¹@n<à;Ï2¶ */
- $"8DC0 55D6 C6DA 3622 8A6E 63F6 28AE 08AC" /* ÀUÖÆÚ6"Šncö(®.¬ */
- $"03AC 288D 069A 750E CBBD 97D9 E42D BA93" /* .¬(.šu.˽—Ùä-º“ */
- $"E82A 4EB3 C008 CC7C B6A7 6F70 F1BC FDAA" /* è*N³À.Ì|¶§opñ¼ýª */
- $"1DF4 D2E4 3ECB 9702 444E 278F 6B50 F00E" /* .ôÒä>Ë—.DN'kPð. */
- $"C228 C132 E5E0 B4DE 93BF DBBD 2C85 ABF9" /* Â(Á2åà´Þ“¿Û½,…«ù */
- $"7FAD EC28 1D40 D390 5A2F 9B14 D348 8C76" /* .­ì(.@ÓZ/›.ÓHŒv */
- $"C04B 1173 BF19 8F50 7E3D 8311 BB79 FDA8" /* ÀK.s¿.P~=ƒ.»yý¨ */
- $"1FD4 24A9 5F59 8B76 709E 5C84 1902 8690" /* .Ô$©_Y‹vpž\„..† */
- $"AD49 334F 5AE8 E376 288C BDE7 EE13 FBDE" /* ­I3OZèãv(Œ½çî.ûÞ */
- $"7606 0135 6DB2 DCD9 F5B3 E7E2 B2B8 8BE1" /* v..5m²ÜÙõ³çⲸ‹á */
- $"1985 85D2 0EC1 5CCD BC74 D88B 7206 5075" /* .……Ò.Á\ͼtØ‹r.Pu */
- $"FB92 BF92 C5CB B6E3 024D EB71 D909 AF79" /* û’¿’Å˶ã.MëqÙÆ¯y */
- $"DD82 BBF2 37F1 1193 74D0 373D 4043 C292" /* Ý‚»ò7ñ.“tÐ7=@CÂ’ */
- $"0B1D 4E8F 04F4 A035 451A 7DCB 02DB D77E" /* ..N.ô 5E.}Ë.Û×~ */
- $"DD1C 3667 1BA7 2584 C128 3835 4454 5C15" /* Ý.6g.§%„Á(85DT\. */
- $"5846 C7D1 4689 3D2A 1172 9BA8 9830 F037" /* XFÇÑF‰=*.r›¨˜0ð7 */
- $"0053 8FD6 4023 68C6 7122 CAC6 0325 5AF3" /* .SÖ@#hÆq"ÊÆ.%Zó */
- $"E104 A423 C5AE F551 6DF6 7B11 D5EB FD34" /* á.¤#Å®õQmö{.Õëý4 */
- $"DF67 C50C 737D 74D5 D5EC 7027 A2D8 C79A" /* ßgÅ.s}tÕÕìp'¢ØÇš */
- $"200D A972 A30A 509A C3DE 483F 8B53 D69C" /* .©r£ÂPšÃÞH?‹SÖœ */
- $"001F 47E9 BD2C 84EC DB83 B493 0326 DE6E" /* ..Gé½,„ìÛƒ´“.&Þn */
- $"336A 7C76 3225 8351 7B2D 37B5 D645 9866" /* 3j|v2%ƒQ{-7µÖE˜f */
- $"019E 6472 40C4 5853 3376 9D90 D3EA A727" /* .ždr@ÄXS3vÓê§' */
- $"07A1 A4B8 A32F 475A 22A2 059C AB5B F13E" /* .¡¤¸£/GZ"¢.œ«[ñ> */
- $"E2DF 5B3E E6B5 B27F 28AF A15F 400C 7D9F" /* âß[>æµ².(¯¡_@.}Ÿ */
- $"43ED 33D4 9B4D CB64 E550 5FED FC2F E485" /* Cí3Ô›MËdåP_íü/ä… */
- $"271E 2DB1 6AE5 6793 EFE8 FCC5 A784 4C95" /* '.-±jåg“ïèüŧ„L• */
- $"E488 B5AC A528 BACB 10FF 4ABD D554 E56B" /* 䈵¬¥(ºË.ÿJ½ÕTåk */
- $"F72E 8ED7 5E48 60A4 82D0 381F A2D4 625C" /* ÷.Ž×^H`¤‚Ð8.¢Ôb\ */
- $"9F80 2A63 5FD3 DD0C EDA8 3DE3 281E A65C" /* Ÿ€*c_ÓÝ.í¨=ã(.¦\ */
- $"88EA 1A96 626D DC03 79BE C4ED EA60 4FC5" /* ˆê.–bmÜ.y¾Äíê`OÅ */
- $"BB10 D9D5 99AF 0534 65C2 05AE 8D23 82B0" /* ».ÙÕ™¯.4eÂ.®#‚° */
- $"6FB7 881A 7BC5 0316 7A28 4B27 2763 A6C3" /* o·ˆ.{Å..z(K''c¦Ã */
- $"8FC7 073A 1391 81BB 707F 625D 355F B1DF" /* Ç.:.‘»p.b]5_±ß */
- $"A749 C3EE A157 EC1F 0F6C 70AB 1A36 5711" /* §IÃî¡Wì..lp«.6W. */
- $"C49B 1CA8 54A0 0FB9 6A2E 0F86 2E57 BC2F" /* Ä›.¨T .¹j..†.W¼/ */
- $"8CDD B76A F6DB 83F9 EEFF 4BF1 DE60 660E" /* ŒÝ·jöÛƒùîÿKñÞ`f. */
- $"BCBA 7D68 D5DE 8663 DF06 3F65 A981 38D7" /* ¼º}hÕÞ†cß.?e©8× */
- $"CC20 EBAE 6143 C79E D2F3 DCF4 FA0F 433E" /* Ì ë®aCÇžÒóÜôú.C> */
- $"6DFE 4C5F 032A F6DD DD11 F85F 5003 22CD" /* mþL_.*öÝÝ.ø_P."Í */
- $"C07E F1CC 40B9 8D61 825D 77C7 91A6 BD49" /* À~ñÌ@¹a‚]wÇ‘¦½I */
- $"2590 4BCD EB13 37A2 D5FA 2931 F311 9028" /* %KÍë.7¢Õú)1ó.( */
- $"6C02 96FC ACF5 1EA4 8E51 4BC9 FDE8 DFEF" /* l.–ü¬õ.¤ŽQKÉýèßï */
- $"C5A0 8082 7E0D C127 3A80 A65B 7989 CCEE" /* Å €‚~.Á':€¦[y‰Ìî */
- $"6F6A 8DDF FB5B 46A5 3757 7FC3 3EFD BC0A" /* ojßû[F¥7W.Ã>ý¼Â */
- $"8567 1CB0 3BE7 A153 D7CE 8F63 D2DC 8840" /* …g.°;ç¡S×ÎcÒ܈@ */
- $"D993 E028 0E86 AA99 3ADE CC55 A789 CFC8" /* Ù“à(.†ª™:ÞÌU§‰ÏÈ */
- $"D92B 9613 3850 B7B3 467A FA09 7D45 E174" /* Ù+–.8P·³FzúÆ}Eát */
- $"D351 3254 64A3 7FC5 0D8D 1EDB FEC9 3F05" /* ÓQ2Td£.Å..ÛþÉ?. */
- $"C3C2 264B ACB8 F3C3 1BFF 04A5 12CF C191" /* ÃÂ&K¬¸óÃ.ÿ.¥.ÏÁ‘ */
- $"8CA0 5985 E34C E583 A230 CD43 8602 BAAF" /* Œ Y…ãL僢0ÍC†.º¯ */
- $"1475 FCA7 B274 1314 051F AF06 089D 13B1" /* .uü§²t....¯...± */
- $"5C06 815E FAA5 6864 CECE D56A 127C 058B" /* \.^ú¥hdÎÎÕj.|.‹ */
- $"1859 E9E8 7A98 4299 3CFF 70CE C2DD 8676" /* .Yéèz˜B™<ÿpÎÂ݆v */
- $"1798 5F8E 9960 922E 9226 3F9B 5657 890F" /* .˜_Ž™`’.’&?›VW‰. */
- $"75BC FECF 6919 6701 D086 0EA5 26BA 8B78" /* u¼þÏi.g.І.¥&º‹x */
- $"7381 41FC 19AD 7201 BFD9 B3D3 2F00 1A1C" /* sAü.­r.¿Ù³Ó/... */
- $"E689 F3BC 5FC7 0418 66A2 5AEE 0374 DE30" /* æ‰ó¼_Ç..f¢Zî.tÞ0 */
- $"DC4B 70F1 ACC6 2BC6 06E9 461F E71B CD5E" /* ÜKpñ¬Æ+Æ.éF.ç.Í^ */
- $"2766 D533 884B A37F 7820 5CCA 3D60 1C3A" /* 'fÕ3ˆK£.x \Ê=`.: */
- $"8865 509F C1F0 86B6 9A91 0A52 426E CF1D" /* ˆePŸÁð†¶š‘ÂRBnÏ. */
- $"4B52 7AFE 9519 ECDB 9DD3 BFA1 80F7 50BD" /* KRzþ•.ìÛÓ¿¡€÷P½ */
- $"D2DD 6FAB F00D 3600 9104 37AC 81AA F9C3" /* ÒÝo«ð.6.‘.7¬ªùà */
- $"3933 A702 AC9C 42F1 4579 C5F2 CD99 165F" /* 93§.¬œBñEyÅòÍ™._ */
- $"2D84 FE8B D02C 055F F99C 1729 45C7 6B56" /* -„þ‹Ð,._ùœ.)EÇkV */
- $"EE73 818A 9940 BB46 1408 639B 9779 C805" /* îsŠ™@»F..c›—yÈ. */
- $"1B0B CC86 D42E E9BB 046D 0E93 7273 E00F" /* ..̆Ô.é».m.“rsà. */
- $"B7D5 D377 E0ED 2494 4623 5BDF C83C 54A5" /* ·ÕÓwàí$”F#[ßÈ<T¥ */
- $"6B6B D343 F20E AD4C B45C 2BF4 7C65 87A1" /* kkÓCò.­L´\+ô|e‡¡ */
- $"E2EA E2B7 FF17 F9A1 5606 D5A7 C113 F062" /* âêâ·ÿ.ù¡V.Õ§Á.ðb */
- $"D50E E647 922C 8746 7CBA 99C8 4400 979D" /* Õ.æG’,‡F|º™ÈD.— */
- $"3D09 19E7 3A84 E245 ED1F 1C14 3967 45CE" /* =Æ.ç:„âEí...9gEÎ */
- $"2B06 C383 F2A6 2CEE 02E6 A2A7 1821 0F3F" /* +.Ãò¦,î.梧.!.? */
- $"4057 F9E9 B830 94C7 65AA C396 6F97 2721" /* @Wùé¸0”ÇeªÃ–o—'! */
- $"F1AC 6AF7 6C6C 3F02 D2F1 343D 8B42 0F6F" /* ñ¬j÷ll?.Òñ4=‹B.o */
- $"E2D4 A7D8 7158 F033 C573 AD72 01B7 1CC7" /* âÔ§ØqXð3Ås­r.·.Ç */
- $"4CA6 78C2 BABD BB30 5E03 BDEE DF19 8240" /* L¦xº½»0^.½îß.‚@ */
- $"9521 A43A B142 2F42 3590 AD8C B9FD A409" /* •!¤:±B/B5­Œ¹ý¤Æ */
- $"9D77 38E7 B8F8 3BCD 4478 61C3 5768 0324" /* w8ç¸ø;ÍDxaÃWh.$ */
- $"4E55 4240 1E87 1F93 D0BA 6929 C235 7E76" /* NUB@.‡.“кi)Â5~v */
- $"F6E8 AA1B AF13 15FD EB95 2609 BE7D BFE8" /* öèª.¯..ýë•&ƾ}¿è */
- $"3E51 8F2E 4780 4EE6 891E F83D FF7D D1C3" /* >Q.G€Næ‰.ø=ÿ}Ñà */
- $"818F 28A2 2AC0 AD00 7F03 5781 2882 A44A" /* (¢*À­...W(‚¤J */
- $"6728 D9F6 E77F A883 C794 71AC 55E9 8112" /* g(Ùöç.¨ƒÇ”q¬Ué. */
- $"BF6F ECDA 9BD1 96B8 79AA A397 A6F2 C93F" /* ¿oìڛі¸yª£—¦òÉ? */
- $"3792 B8C4 8667 AAF4 659D 59F6 E77F A870" /* 7’¸Ä†gªôeYöç.¨p */
- $"24F1 5461 DB69 0F4C F8B3 F02A F6E7 7FA6" /* $ñTaÛi.Lø³ð*öç.¦ */
- $"26C9 5EDE 9BB6 A1C6 9467 854A 5327 BA38" /* &É^Þ›¶¡Æ”g…JS'º8 */
- $"F535 A01A B90A 9580 95A0 FE5C A623 DE0D" /* õ5 .¹Â•€• þ\¦#Þ. */
- $"6C3E BF23 66F2 9312 9490 EB88 1D63 7AF4" /* l>¿#fò“.”ëˆ.czô */
- $"9F5B 7F45 9078 3A5F CC36 7702 EAD5 FA4D" /* Ÿ[.Ex:_Ì6w.êÕúM */
- $"5F9D 258B 14A8 A235 6490 6B7D 2B05 42C3" /* _%‹.¨¢5dk}+.Bà */
- $"2A5A 791E 92C3 B1E8 B323 FF74 81FC B063" /* *Zy.’ñè³#ÿtü°c */
- $"4A31 CBBC 91E2 A64A F935 FE79 4C07 1376" /* J1˼‘â¦Jù5þyL..v */
- $"002A 4795 5221 70B2 005C 41F9 D631 126F" /* .*G•R!p².\AùÖ1.o */
- $"FF7F DF03 06BD 7214 71AB 4EF3 8EEA 0261" /* ÿ.ß..½r.q«NóŽê.a */
- $"D054 C087 EA15 CBD2 4645 2F9F 3600 4144" /* ÐTÀ‡ê.ËÒFE/Ÿ6.AD */
- $"5671 C61E D3CB 8B84 A60D B58E FB69 C71F" /* VqÆ.ÓË‹„¦.µŽûiÇ. */
- $"B09A EDD9 AAC0 6FBA D7FE 8C4D 8262 6C73" /* °šíÙªÀoº×þŒM‚bls */
- $"9F69 0E81 7581 1D52 FB27 C979 1597 69EA" /* Ÿi.u.Rû'Éy.—iê */
- $"F1DF E906 0B77 2E21 D31A 5CCD 9474 95A2" /* ñßé..w.!Ó.\Í”t•¢ */
- $"CB48 AB27 5F53 B82F 1638 16A4 87CD ED1F" /* ËH«'_S¸/.8.¤‡Íí. */
- $"20BC 2894 5EE1 C84C 1AC1 1158 0293 024E" /* ¼(”^áÈL.Á.X.“.N */
- $"1023 0E4F 9BD8 FA73 6E62 FF7F FD08 5797" /* .#.O›Øúsnbÿ.ý.W— */
- $"0788 A951 6DDA 2448 21D2 7FCA 20B4 E1BF" /* .ˆ©QmÚ$H!Ò.Ê ´á¿ */
- $"3262 89C7 5386 ACB1 8B89 6AC3 F907 1355" /* 2b‰ÇS†¬±‹‰jÃù..U */
- $"66D9 1E5A 5B54 19E9 2737 FF7C B8DF 1F5E" /* fÙ.Z[T.é'7ÿ|¸ß.^ */
- $"3592 B16D 6089 DE73 8F19 479D 626B 977D" /* 5’±m`‰Þs.Gbk—} */
- $"185E F7A3 AF62 AD92 E5AC 2F74 B991 F96F" /* .^÷£¯b­’å¬/t¹‘ùo */
- $"211F 5AE0 4C27 344F A9E1 C731 DB20 A0FF" /* !.ZàL'4O©áÇ1Û  ÿ */
- $"7FFF 7F2E 356F CC55 C6B8 C2C9 2AEF 2D31" /* .ÿ..5oÌUƸÂÉ*ï-1 */
- $"EFEB D878 C16F B1B1 3D47 240C 489C 7153" /* ïëØxÁo±±=G$.HœqS */
- $"E5F8 A5C8 6E2C 7650 AED0 C4B7 43EA 67B6" /* åø¥Èn,vP®ÐÄ·Cêg¶ */
- $"94E4 7274 CFEB 4CF3 FD3E 8065 B9CC 35A5" /* ”ärtÏëLóý>€e¹Ì5¥ */
- $"21B1 3804 AD98 4F8A 6FFC 50DA 014C 442B" /* !±8.­˜OŠoüPÚ.LD+ */
- $"AA41 1455 BD94 B366 A37D CA82 7FFC DE57" /* ªA.U½”³f£}Ê‚.üÞW */
- $"2EA9 98C2 5510 E51E 24CC 0428 4C83 1BBE" /* .©˜ÂU.å.$Ì.(Lƒ.¾ */
- $"0A46 A6DD 6963 D4CB 24E8 748B ED10 7B6D" /* ÂF¦ÝicÔË$èt‹í.{m */
- $"E61C 86C3 C80E 3030 FCE9 2263 C956 95A1" /* æ.†ÃÈ.00üé"cÉV•¡ */
- $"AED0 C4B1 D07C F701 9DA0 ED2C C401 BC1A" /* ®ÐıÐ|÷. í,Ä.¼. */
- $"9421 2D43 EF12 7494 8D46 CB82 3FE2 6439" /* ”!-Cï.t”FË‚?âd9 */
- $"6BDE C8CE 23B7 9D2E B6F9 DF4B C1A9 A145" /* kÞÈÎ#·.¶ùßKÁ©¡E */
- $"1512 85E6 30E6 98D1 AC22 EEBC 459C D841" /* ..…æ0æ˜Ñ¬"î¼EœØA */
- $"0A0F 1F31 2F75 7937 220F 7271 FE79 44A6" /* Â..1/uy7".rqþyD¦ */
- $"777E 1645 E0BA D980 0FFF 7D9F EC83 A930" /* w~.EàºÙ€.ÿ}Ÿìƒ©0 */
- $"D12B 216D 4D3F 4AD0 5EE9 DBC7 53D7 0A21" /* Ñ+!mM?JÐ^éÛÇS×Â! */
- $"2372 C608 6701 8AFA 8E33 4125 2B7E 38DA" /* #rÆ.g.ŠúŽ3A%+~8Ú */
- $"5990 99EE B1D0 B07C 9F9D 97DD D658 2C2A" /* Y™î±Ð°|Ÿ—ÝÖX,* */
- $"C7D6 4556 2AA7 297F ACBE 4802 B472 E76F" /* ÇÖEV*§).¬¾H.´rço */
- $"644F 2F11 17FF 7F9D CE1C 2989 7199 03B1" /* dO/..ÿ.Î.)‰q™.± */
- $"E719 2B3B 1131 C4CC 808B BC7A 26A4 479F" /* ç.+;.1ÄÌ€‹¼z&¤GŸ */
- $"4824 6486 E338 DB65 A502 454C C415 B8D0" /* H$d†ã8Ûe¥.ELÄ.¸Ð */
- $"7C77 7323 E381 5958 F415 95B9 142E 85F8" /* |ws#ãYXô.•¹..…ø */
- $"1742 E22F FF17 567B A195 DFF1 7EE0 8E40" /* .Bâ/ÿ.V{¡•ßñ~àŽ@ */
- $"431A B629 DDCE AED1 A925 9FCD 56B5 7945" /* C.¶)Ýήѩ%ŸÍVµyE */
- $"B8B9 77DF 732C CD1E 8137 2645 1135 9593" /* ¸¹wßs,Í.7&E.5•“ */
- $"E31C 333B 30E2 518D E202 A1E0 FEA6 C40E" /* ã.3;0âQâ.¡àþ¦Ä. */
- $"BB50 0174 C21D 0BFB 34C1 1A8D 8E5D FF77" /* »P.tÂ..û4Á.Ž]ÿw */
- $"909A 8111 3123 8200 AFC2 0525 13A1 C383" /* š.1#‚.¯Â.%.¡Ãƒ */
- $"5472 BA45 8D58 8818 E5CD 6FEA D858 47C5" /* TrºEXˆ.åÍoêØXGÅ */
- $"F5A0 7773 3C86 1CE8 9A67 FAA7 5726 643B" /* õ ws<†.èšgú§W&d; */
- $"1BF8 C2C1 E7AD D3CE E89B 97C4 0210 1FAE" /* .øÂÁç­ÓÎè›—Ä...® */
- $"9319 1F1F 7F89 0B76 5918 7EF8 9947 CF44" /* “....‰.vY.~ø™GÏD */
- $"6B5C 4B5D 5067 58A7 F35E CF39 7D01 C555" /* k\K]PgX§ó^Ï9}.ÅU */
- $"FCD3 E0F6 C1A4 9C8A 0B34 2D33 A20D F664" /* üÓàöÁ¤œŠ.4-3¢.öd */
- $"C174 CCE8 CAA1 C45F 2974 101B 86E7 68FD" /* ÁtÌèÊ¡Ä_)t..†çhý */
- $"D6FE 8FE9 AC95 5D3D DE38 1829 E3B9 37FE" /* Öþ鬕]=Þ8.)ã¹7þ */
- $"5008 F383 21C4 4D57 AE92 9F94 A9BB 3A76" /* P.óƒ!ÄMW®’Ÿ”©»:v */
- $"705F 8D2D 889C EB93 FD2B 05C5 89F2 500E" /* p_-ˆœë“ý+.ʼnòP. */
- $"4220 A486 F348 D466 4D62 E368 540A 1D25" /* B ¤†óHÔfMbãhTÂ.% */
- $"AF7C A9EF 43CC E423 16FC 6EE5 C407 DDAE" /* ¯|©ïCÌä#.ünåÄ.Ý® */
- $"EB28 23D2 3FDE 40EF 2ED1 D53A B87B 9C40" /* ë(#Ò?Þ@ï.ÑÕ:¸{œ@ */
- $"80A2 77EF CC8F D34E C33F 7BB4 4748 E4A6" /* €¢wïÌÓNÃ?{´GHä¦ */
- $"B177 05FF 085F CBF9 F1A0 8CA7 4200 32AC" /* ±w.ÿ._Ëùñ Œ§B.2¬ */
- $"7B87 A517 EA04 C96C F9A3 C6ED 5FFF 7FED" /* {‡¥.ê.Élù£Æí_ÿ.í */
- $"D5EB F835 3E15 6882 AED1 72BF B42C 87DE" /* Õëø5>.h‚®Ñr¿´,‡Þ */
- $"8111 0F7A 5DA6 CFEA 79A7 9174 89E8 E637" /* ..z]¦Ïêy§‘t‰èæ7 */
- $"7E56 B53E 9987 2013 8F1A 06A5 07A2 1856" /* ~Vµ>™‡ ...¥.¢.V */
- $"FE30 E259 128A 968B 881F E88D 8566 98D7" /* þ0âY.Š–‹ˆ.è…f˜× */
- $"C815 C397 64E8 9FAC 059A 5922 C863 F220" /* È.×d蟬.šY"Ècò */
- $"EC2A 4AF8 5DB2 A77D FC6A 3AC1 357E D5CC" /* ì*Jø]²§}üj:Á5~ÕÌ */
- $"142B 85B0 FEE0 2579 D845 CDFD F507 4C58" /* .+…°þà%yØEÍýõ.LX */
- $"D86A F299 0BBC A0A8 39A4 03D9 2144 6B3E" /* Øjò™.¼ ¨9¤.Ù!Dk> */
- $"6D67 242B 0FEB B6F4 79CB 58ED 2338 DB9F" /* mg$+.ë¶ôyËXí#8ÛŸ */
- $"6EC7 1626 0FDD 0C77 1E00 2AE4 8B46 F39C" /* nÇ.&.Ý.w..*ä‹Fóœ */
- $"6268 EE5F FF49 B5C8 30E7 9859 E163 A9D4" /* bhî_ÿIµÈ0ç˜Yác©Ô */
- $"C50F BC0C 46BB BBC7 9FFF 7D54 E81B 8936" /* Å.¼.F»»ÇŸÿ}Tè.‰6 */
- $"A032 72E8 6576 5FEA 9A3F A5A9 9E58 B9C2" /*  2rèev_êš?¥©žX¹Â */
- $"A089 A039 5695 766F 3295 A1FF 7F5F FBDB" /*  ‰ 9V•vo2•¡ÿ._ûÛ */
- $"A3FD 1F1F 76AD 6787 B4D0 D1A5 E4EA 72F8" /* £ý..v­g‡´ÐÑ¥äêrø */
- $"0276 0C35 EC34 65A8 000A CA35 6AAE 1800" /* .v.5ì4e¨.ÂÊ5j®.. */
- $"99CA 1B65 F56D 6C3B DF33 AB08 94A3 15CF" /* ™Ê.eõml;ß3«.”£.Ï */
- $"C9B8 D32E 35D7 D32D 57E6 86D2 A5BE 2B3A" /* ɸÓ.5×Ó-Wæ†Ò¥¾+: */
- $"4535 2C10 41FE FDA9 E202 3927 BC4F 5F90" /* E5,.Aþý©â.9'¼O_ */
- $"E637 311C DB00 E394 09F3 005B 7DB3 0DFE" /* æ71.Û.ã”Æó.[}³.þ */
- $"9F1F CAA4 DD03 B381 8330 AB38 E13B 2F9C" /* Ÿ.ʤÝ.³ƒ0«8á;/œ */
- $"3DB5 01C5 100A 5D16 5C8D 792C FA0E 1A85" /* =µ.Å.Â].\y,ú..… */
- $"E3FF 467A 6333 E4F1 F27C 9E2B 161E 18F0" /* ãÿFzc3äñò|ž+...ð */
- $"3F30 9C2C 631D BE74 4B7F 6E21 3FBC 404E" /* ?0œ,c.¾tK.n!?¼@N */
- $"E063 4152 D02D 68E4 869C E7E9 E4E6 4E95" /* àcARÐ-h䆜çéäæN• */
- $"3A66 1FDA 1145 DFB4 0796 9F97 503C E2C9" /* :f.Ú.Eß´.–Ÿ—P<âÉ */
- $"7F49 D644 1290 98BD 8EA0 2FA1 CF00 E383" /* .IÖD.˜½Ž /¡Ï.ム*/
- $"C003 7BFE D79B FF62 A38E 2C39 A64D 19FF" /* À.{þ×›ÿb£Ž,9¦M.ÿ */
- $"6A9D 976A 994B 6626 4F4D 7DC8 F0CA EDB7" /* j—j™Kf&OM}ÈðÊí· */
- $"F99E 21E2 36B4 3AAB E787 C6A2 1783 F623" /* ùž!â6´:«ç‡Æ¢.ƒö# */
- $"8755 1F66 AFBC 2959 6E6E 2E61 AC85 2198" /* ‡U.f¯¼)Ynn.a¬…!˜ */
- $"9978 EDFD 334C F0D6 7F76 9AF2 47AF 5E4B" /* ™xíý3LðÖ.všòG¯^K */
- $"805C 54D3 5F2A 16C5 6675 C288 B44F F851" /* €\TÓ_*.Åfuˆ´OøQ */
- $"1CE9 9F21 BF10 92B9 2366 5D69 AE8E 9989" /* .éŸ!¿.’¹#f]i®Ž™‰ */
- $"36A6 F9E6 75A7 0D47 C8B5 8727 0138 2BFA" /* 6¦ùæu§.Gȵ‡'.8+ú */
- $"5C4A 649C 123C 225E 2CEC 2007 5016 3F11" /* \Jdœ.<"^,ì .P.?. */
- $"B8FF 60CB 7150 EBFD DFED 147E 0A98 E096" /* ¸ÿ`ËqPëýßí.~Â˜à– */
- $"6B76 3AF0 39A5 5BF2 880C E857 174C 8735" /* kv:ð9¥[òˆ.èW.L‡5 */
- $"ACF6 E4B7 3477 6293 FF7C 8515 A8DE 4E73" /* ¬öä·4wb“ÿ|….¨ÞNs */
- $"8E37 8A0C 4384 0CF3 FA01 15F5 9639 ED05" /* Ž7Š.C„.óú..õ–9í. */
- $"C86B 28A0 C331 14BC 2817 FE9B F96A D60D" /* Èk( Ã1.¼(.þ›ùjÖ. */
- $"EBCB 14DA FF7F FF47 8A61 A2C7 F01F 10B7" /* ëË.Úÿ.ÿGŠa¢Çð..· */
- $"3DAF B01C B484 F55D 457E E3EC CC41 95DE" /* =¯°.´„õ]E~ãìÌA•Þ */
- $"097E 8117 F77F FEFB A490 8B96 1300 2B37" /* Æ~.÷.þû¤‹–..+7 */
- $"19FA E04C 4188 E9F6 8950 0668 B082 8FD8" /* .úàLAˆéö‰P.h°‚Ø */
- $"0B7D 6C32 4DBF F84F F4E9 ACAF 719A DC43" /* .}l2M¿øOô鬯qšÜC */
- $"9F8D A53E DF1A BDB0 AAA7 3267 9C2D 357A" /* Ÿ¥>ß.½°ª§2gœ-5z */
- $"9CA7 1AE1 59C4 F467 83D3 308B 004A 42C2" /* œ§.áYÄôgƒÓ0‹.JB */
- $"909B F979 41CE AB25 C6D1 9FE9 46E1 E837" /* ›ùyAΫ%ÆÑŸéFáè7 */
- $"7ADF FF72 225E 4472 D323 F55C BE19 1E50" /* zßÿr"^DrÓ#õ\¾..P */
- $"BF94 6787 CADB F576 300A 054B 0A2D E9B2" /* ¿”g‡ÊÛõv0Â.KÂ-é² */
- $"5C15 DB84 E735 F76D 5477 D8A7 28AF FF7A" /* \.Û„ç5÷mTwا(¯ÿz */
- $"7EB8 06F8 4FF4 E999 ED48 02C4 F111 F61D" /* ~¸.øOôé™íH.Äñ.ö. */
- $"8A6C 1CC6 AE54 94E4 8C5D 7655 4ECC 205F" /* Šl.Æ®T”äŒ]vUNÌ _ */
- $"DBF9 1BA7 83CC 52E9 E9C9 52A4 1151 7DE4" /* Ûù.§ƒÌRééÉR¤.Q}ä */
- $"051B E140 3FC0 D60B 0C11 663F 98A9 8B53" /* ..á@?ÀÖ...f?˜©‹S */
- $"776E BD8D 7678 AD62 ACEE 033F D134 B61E" /* wn½vx­b¬î.?Ñ4¶. */
- $"F86D 3384 AAE7 9074 F7CF 4509 F9B3 4F30" /* øm3„ªçt÷ÏEÆù³O0 */
- $"F32D 840F 1DDA E6B1 BDD4 951F 2379 F890" /* ó-„..Úæ±½Ô•.#yø */
- $"530A E915 A228 D3D8 B188 C692 2767 D628" /* SÂé.¢(ÓØ±ˆÆ’'gÖ( */
- $"12F8 3FFA BA23 F76B 1D92 1FC1 EA73 30FC" /* .ø?úº#÷k.’.Áês0ü */
- $"CE72 0CA5 6695 6326 F93B B52F B9D4 F6F0" /* Îr.¥f•c&ù;µ/¹Ôöð */
- $"FF07 727B 80F9 EBFC 2176 788C 333F 4137" /* ÿ.r{€ùëü!vxŒ3?A7 */
- $"E82C D066 6088 A8EA 168F 40EA F1EE BDE8" /* è,Ðf`ˆ¨ê.@êñî½è */
- $"C023 75BA 66F2 335A 98C0 31A8 2137 7A7B" /* À#uºfò3Z˜À1¨!7z{ */
- $"DA0F 3962 D4B3 3E6E A5A1 3A19 5EED 48A7" /* Ú.9bÔ³>n¥¡:.^íH§ */
- $"7617 DE46 D178 BC48 D85D 7821 DFEC B30D" /* v.ÞFÑx¼HØ]x!ßì³. */
- $"F84F B7CD 80ED 55C7 9E1A F58D 7085 F625" /* øO·Í€íUÇž.õp…ö% */
- $"F564 3BF5 A09E B353 4E45 2F0B FC02 ECFD" /* õd;õ ž³SNE/.ü.ìý */
- $"539F 529C A652 34F1 C0CC BC04 FCE0 2C7D" /* SŸRœ¦R4ñÀ̼.üà,} */
- $"A8A9 9E67 79E9 ADE4 ABEE BFF6 4793 1B91" /* ¨©žgyé­ä«î¿öG“.‘ */
- $"413A 4302 7FB5 190C CB09 0DC9 3B33 E18D" /* A:C..µ..ËÆ.É;3á */
- $"DDAB 23C5 FABA 5DC1 554F C940 B964 7F6A" /* Ý«#Åúº]ÁUOÉ@¹d.j */
- $"A781 2032 BF9E 0262 7C99 CD96 9251 9FB6" /* § 2¿ž.b|™Í–’QŸ¶ */
- $"1C69 9141 7A13 3022 DE48 DA68 C959 A0B5" /* .i‘Az.0"ÞHÚhÉY µ */
- $"0F3A F19A 9301 5051 5855 9D7B 5173 EE47" /* .:ñš“.PQXU{QsîG */
- $"2B0D DB30 28CC 5E41 46F1 E79F 90B3 AB2A" /* +.Û0(Ì^AFñ石«* */
- $"CAEA 6128 10E1 2CC0 DDC2 EBF1 26F1 E1DC" /* Êêa(.á,ÀÝÂëñ&ñáÜ */
- $"EB87 87ED 55F3 827C A066 D932 FCF7 B134" /* 뇇íUó‚| fÙ2ü÷±4 */
- $"8BC9 CC70 B38C B019 8372 EA60 7C36 4D38" /* ‹ÉÌp³Œ°.ƒrê`|6M8 */
- $"F82F 16C2 2390 A91B 203A 8EBE D0EC E278" /* ø/.Â#©. :޾Ðìâx */
- $"7AC4 8493 A217 6AC3 B85A 470D D74A B91D" /* zÄ„“¢.jøZG.×J¹. */
- $"0180 7BAB 4088 5671 6268 5B4A 54FE C179" /* .€{«@ˆVqbh[JTþÁy */
- $"1600 7677 830B 0E81 EEB2 6124 33F8 DBBD" /* ..vwƒ..î²a$3øÛ½ */
- $"1B35 D1F9 0568 3891 0ECB A836 5A86 9636" /* .5Ñù.h8‘.˨6Z†–6 */
- $"9F87 052F 0D66 8AA3 3362 1651 9B33 9057" /* Ÿ‡./.fŠ£3b.Q›3W */
- $"5B98 05EB 23CE 099F 2358 444E 0D64 A9F9" /* [˜.ë#ÎÆŸ#XDN.d©ù */
- $"A569 7D56 A50D 6256 69AF BDD9 7847 D651" /* ¥i}V¥.bVi¯½ÙxGÖQ */
- $"73E2 F76E F277 58DC BFB9 7B8E 593C 0E97" /* sâ÷nòwXÜ¿¹{ŽY<.— */
- $"3C4E 507D FA6C 7984 FAC8 6C42 6882 78AC" /* <NP}úly„úÈlBh‚x¬ */
- $"E40D B7A2 4E43 998B 1C29 D7C6 B7BA 58C9" /* ä.·¢NC™‹.)ׯ·ºXÉ */
- $"3503 114B 86B8 CB5D B605 832D 98FE 0257" /* 5..K†¸Ë]¶.ƒ-˜þ.W */
- $"FB50 8CA0 43D4 71BE E330 1584 5983 668F" /* ûPŒ CÔq¾ã0.„Yƒf */
- $"735C 2448 3B30 82E4 1932 5BF8 129F FE38" /* s\$H;0‚ä.2[ø.Ÿþ8 */
- $"749D 01ED DAFC 95B9 375D BBCB 60D9 FC58" /* t.íÚü•¹7]»Ë`ÙüX */
- $"0796 AEFC 2337 F89E 01F5 48BD 0BAF A61F" /* .–®ü#7øž.õH½.¯¦. */
- $"3EC4 C092 DC6A 584C AAAF 1A9F A20F CEA4" /* >ÄÀ’ÜjXLª¯.Ÿ¢.Τ */
- $"884B 2DB6 09F4 F51B 546F CD71 F4D3 6452" /* ˆK-¶Æôõ.ToÍqôÓdR */
- $"B6E5 3EFF 66F8 0D60 D916 F755 1348 E250" /* ¶å>ÿfø.`Ù.÷U.HâP */
- $"D8E2 6858 B424 B84B D59A 6885 24D3 D845" /* ØâhX´$¸KÕšh…$ÓØE */
- $"692F 4313 B616 584F 7419 0661 0064 C281" /* i/C.¶.XOt..a.d */
- $"A873 131C 5296 042B 1FD5 3EED BFC2 659E" /* ¨s..R–.+.Õ>í¿Âež */
- $"C4C7 2720 8002 28DD 141A BBE7 99F8 028F" /* ÄÇ' €.(Ý..»ç™ø. */
- $"8262 0577 5240 EB9A F866 2901 B75B 3FED" /* ‚b.wR@ëšøf).·[?í */
- $"9E78 9071 83FD 02BC FCDE 2135 42D1 F184" /* žxqƒý.¼üÞ!5BÑñ„ */
- $"309D F47E DF10 F797 4268 120A D377 04A4" /* 0ô~ß.÷—Bh.ÂÓw.¤ */
- $"2998 099E CA35 66AD FB20 8C14 1E0E 714E" /* )˜ÆžÊ5f­û Œ...qN */
- $"B9A7 70EE 5BA0 7A18 FC16 97EB 1A98 CB6C" /* ¹§pî[ z.ü.—ë.˜Ël */
- $"4B5D AC5B 3DC2 2062 E74A 18F2 0A76 6085" /* K]¬[=Â bçJ.òÂv`… */
- $"EF50 1C2F FE23 117A ED22 7BE8 0231 BC71" /* ïP./þ#.zí"{è.1¼q */
- $"707C 6736 BC3C 38AA 81C2 66B6 DCE5 13E9" /* p|g6¼<8ªÂf¶Üå.é */
- $"3076 C7AD 8C4B A962 C37E 4605 CDC0 8247" /* 0vÇ­ŒK©bÃ~F.ÍÀ‚G */
- $"190C 41CD 6923 8D00 BC94 5B5F E2AB 443B" /* ..AÍi#.¼”[_â«D; */
- $"3C5A 7FF6 213C 9E2D 9224 70B1 EA9B 7D36" /* <Z.ö!<ž-’$p±ê›}6 */
- $"E7EA 0D03 CB32 7413 AB26 CB30 1B56 CBDE" /* çê..Ë2t.«&Ë0.VËÞ */
- $"3C31 361D 24E2 F441 4D78 7825 1DA0 0C14" /* <16.$âôAMxx%. .. */
- $"5C84 B112 6FC1 77DB 42CA 7791 960B 9F09" /* \„±.oÁwÛBÊw‘–.ŸÆ */
- $"980A 5629 54C0 EC82 889A B0E3 38F4 E734" /* ˜ÂV)TÀ삈š°ã8ôç4 */
- $"FA91 D5CD 2C8F 43CD 5629 3DAD 81DA 5E0A" /* ú‘ÕÍ,CÍV)=­Ú^Â */
- $"C008 712F EAD3 2486 4CD2 C7BA 0FA9 BBD3" /* À.q/êÓ$†LÒǺ.©»Ó */
- $"6AC2 A912 7736 5A33 CC96 9EDC 9C5A 3084" /* j©.w6Z3Ì–žÜœZ0„ */
- $"C826 A3FB 0661 ED4B 9689 A921 22AB 2399" /* È&£û.aíK–‰©!"«#™ */
- $"6F2A 4A78 A5F8 A059 BE4B 7DFF 5D41 1A31" /* o*Jx¥ø Y¾K}ÿ]A.1 */
- $"E688 045C BD1E D1DB 7C5B 6B89 5C22 3CAF" /* æˆ.\½.ÑÛ|[k‰\"<¯ */
- $"F133 FF14 13A2 9A3F 6E42 54EB 5082 9F25" /* ñ3ÿ..¢š?nBTëP‚Ÿ% */
- $"7C07 6BA6 25EA A890 3560 E915 B058 CB68" /* |.k¦%ê¨5`é.°XËh */
- $"3601 4B07 ACE7 EC8A 2897 F908 D405 455E" /* 6.K.¬çìŠ(—ù.Ô.E^ */
- $"5EDD 427E 791A EA3D 6ACE 3BC0 0D43 731A" /* ^ÝB~y.ê=jÎ;À.Cs. */
- $"C9C6 8C03 BD83 6F85 EF75 7246 2F8E 1CFB" /* ÉÆŒ.½ƒo…ïurF/Ž.û */
- $"8DC9 2726 593F 1D87 A822 399F 9770 324C" /* É'&Y?.‡¨"9Ÿ—p2L */
- $"6ABF 38B9 E89E B2F5 D575 E7DB C449 63CF" /* j¿8¹èž²õÕuçÛÄIcÏ */
- $"EBE1 07BB 80A4 C099 6A15 9A47 96F3 8C8D" /* ëá.»€¤À™j.šG–óŒ */
- $"49E1 1F78 2119 9460 CA7A F257 EDA1 104B" /* Iá.x!.”`ÊzòWí¡.K */
- $"5C68 0E57 188C 62B0 FBE3 CF4F 5251 6525" /* \h.W.Œb°ûãÏORQe% */
- $"CB59 5E3D C6F4 6B04 5B2D 1ED2 3BE1 02BB" /* ËY^=Æôk.[-.Ò;á.» */
- $"7207 12AA BFEC 50F4 83FE 2797 121B 3D14" /* r..ª¿ìPôƒþ'—..=. */
- $"DA23 BE41 D647 E5CA DD2D CD48 8C4D A094" /* Ú#¾AÖGåÊÝ-ÍHŒM ” */
- $"B1A9 4ED5 4735 8818 C4F1 597D 3211 5D12" /* ±©NÕG5ˆ.ÄñY}2.]. */
- $"D96B 5A38 AB9A 7E89 C503 13B0 8354 C887" /* ÙkZ8«š~‰Å..°ƒTȇ */
- $"F766 96F0 EDAE C6B6 17B4 E9A4 9230 C2F5" /* ÷f–ðí®Æ¶.´é¤’0Âõ */
- $"029D 3D72 A1CF 5BB9 E975 DBFF 06DC F5B2" /* .=r¡Ï[¹éuÛÿ.Üõ² */
- $"686F 667B AD3E 1D8D 5BE4 0D6A 2CD7 DE66" /* hof{­>.[ä.j,×Þf */
- $"BE8E C996 696D 58EC 6CFE 40AD 3C95 EAF1" /* ¾ŽÉ–imXìlþ@­<•êñ */
- $"4591 1D62 836E D2E3 4CD8 E4A6 F4F4 C456" /* E‘.bƒnÒãLØä¦ôôÄV */
- $"A70C B3BE AA22 A188 DAB5 D3F7 4B7B 865D" /* §.³¾ª"¡ˆÚµÓ÷K{†] */
- $"4D89 77E6 99A6 46C9 14BA 25E1 55C5 ADBD" /* M‰w晦FÉ.º%áUÅ­½ */
- $"4379 96AF 26DA A399 F009 AE75 248B 0285" /* Cy–¯&Ú£™ðÆ®u$‹.… */
- $"B370 5704 6429 C8AF 0BD3 A332 90B2 8351" /* ³pW.d)ȯ.Ó£2²ƒQ */
- $"F715 32C9 347B EADE 2EBB 9D97 BF95 0C5A" /* ÷.2É4{êÞ.»—¿•.Z */
- $"9203 1EC5 7A8E CF46 C28C 39A2 DE74 C656" /* ’..ÅzŽÏFÂŒ9¢ÞtÆV */
- $"F0BF 3ABF CE5F BE71 B7CE 2FF3 F41B F3EA" /* ð¿:¿Î_¾q·Î/óô.óê */
- $"8BE7 B07E AB17 4F87 74FC FDE8 EF9F BF3F" /* ‹ç°~«.O‡tüýè? */
- $"A9EB F3D5 3F3E 83BE 7BAF EA5F E0FE 7ADF" /* ©ëóÕ?>ƒ¾{¯ê_àþzß */
- $"E7A7 7F9D 3FE7 3BF9 FA77 F9FA 3FF9 F7C7" /* ç§.?ç;ùúwùú?ù÷Ç */
- $"E7E9 871D E84F CFE8 83FC FE85 E3BB E7E7" /* çé‡.èOÏèƒüþ…ã»çç */
- $"AFFE 7D7F F9F5 57E7 AF70 6F9D 2DF3 9ED7" /* ¯þ}.ùõWç¯po-óž× */
- $"C81E F903 FEAB 8EF9 F50D F254 3F3E A4D1" /* È.ù.þ«Žùõ.òT?>¤Ñ */
- $"DD53 F3F6 F37E 7EC9 4775 1BE4 77F9 EEBF" /* ÝSóöó~~ÉGu.äwùî¿ */
- $"9ED1 F9DC 00F7 91DD 3D8B A94D D83C 797F" /* žÑùÜ.÷‘Ý=‹©MØ<y. */
- $"4243 1F04 D29C 94E6 FA35 A9C7 9C1C 0762" /* BC..Òœ”æú5©Çœ..b */
- $"AA92 7DF8 65D6 B16D 30C6 E3F2 22D5 8971" /* ª’}øeÖ±m0Æãò"Õ‰q */
- $"F890 651C 37E3 1F4A 29A4 6637 D7AE 7CB9" /* øe.7ã.J)¤f7×®|¹ */
- $"14C7 D06B 2595 45F8 89DC DBAF B284 6ADA" /* .ÇÐk%•Eø‰ÜÛ¯²„jÚ */
- $"E4DB 9D25 F76C CDA3 EB7E 1B5A 4264 8145" /* äÛ%÷lÍ£ë~.ZBdE */
- $"547E 6F18 076D A675 BA1A 1AB1 0BF1 AEB6" /* T~o..m¦uº..±.ñ®¶ */
- $"C8C2 AAE0 489F 4E11 7F77 336A 41A4 C050" /* ȪàHŸN..w3jA¤ÀP */
- $"D19E AE10 BD35 C5EC DA71 BDEF A017 C32D" /* Ñž®.½5ÅìÚq½ï .Ã- */
- $"CB15 0C8E 0B75 C179 FB84 FDF2 DD5D C21F" /* Ë..Ž.uÁyû„ýòÝ]Â. */
- $"56A5 397D C437 A82F 65F9 2E68 A785 0AF3" /* V¥9}Ä7¨/eù.h§…Âó */
- $"B9F0 7781 E6B8 ACFA 09DC B57D 6317 B29B" /* ¹ðw測úÆÜµ}c.²› */
- $"C754 09FC 3635 9854 0DA1 A3BE D3EE CF40" /* ÇTÆü65˜T.¡£¾ÓîÏ@ */
- $"4BE4 A4D9 07C4 D65E 3887 C8A7 CD3A 83F5" /* Kä¤Ù.ÄÖ^8‡È§Í:ƒõ */
- $"DFA8 10A6 BB6D B811 852D 3877 8782 1E66" /* ߨ.¦»m¸.…-8w‡‚.f */
- $"AF11 43B8 CA3A 6146 3657 AFE0 B314 36CB" /* ¯.C¸Ê:aF6W¯à³.6Ë */
- $"8E1C 272D ED4B 634C AABA 0207 6A1A E2E3" /* Ž.'-íKcLªº..j.âã */
- $"C500 C0A4 894A BAD8 C9A1 0AE7 AC8D 750C" /* Å.À¤‰JºØÉ¡Âç¬u. */
- $"7D84 FBCC DB2E EE05 B04A 002B B383 46DE" /* }„ûÌÛ.î.°J.+³ƒFÞ */
- $"C18D 5BBD B442 9E88 BBB2 89CC 0EBA CF5A" /* Á[½´Bžˆ»²‰Ì.ºÏZ */
- $"5616 DDAB ED7B 4C2E 1C82 0C9D 4820 C0E8" /* V.Ý«í{L..‚.H Àè */
- $"1C4E 39A5 9041 9E33 A20A A73D 821A 238A" /* .N9¥Až3¢Â§=‚.#Š */
- $"3B24 14B9 D9A6 95AA F5B0 13C1 8CFD 790F" /* ;$.¹Ù¦•ªõ°.ÁŒýy. */
- $"33CB 82D3 FE12 0F27 F309 7453 05E0 DF8F" /* 3Ë‚Óþ..'óÆtS.àß */
- $"AAE8 F77A 31BA 0118 43E1 7AE7 69DC 5D12" /* ªè÷z1º..CázçiÜ]. */
- $"BD53 9858 EA6D D8D3 174C FE4C F487 3CCF" /* ½S˜XêmØÓ.LþLô‡<Ï */
- $"9098 7872 8FC3 EBAC 4C76 F503 6915 A1B3" /* ˜xrÃë¬Lvõ.i.¡³ */
- $"5FF8 81CD E13D D511 AAB8 5C7B 1376 C87F" /* _øÍá=Õ.ª¸\{.vÈ. */
- $"2DA1 557D 2053 3341 CC15 418C 0911 5378" /* -¡U} S3AÌ.AŒÆ.Sx */
- $"5FFE 324E 1412 2046 B049 3A77 69B7 417F" /* _þ2N.. F°I:wi·A. */
- $"AC17 B8B0 7FDA 6D19 59F0 DD68 8A88 E55A" /* ¬.¸°.Úm.YðÝhŠˆåZ */
- $"8098 0888 3714 713A 1D17 BB8D F01C 6005" /* €˜.ˆ7.q:..»ð.`. */
- $"8F2E 3D20 2753 1BB4 9BE3 DFD1 709F 99EB" /* .= 'S.´›ãßÑpŸ™ë */
- $"DFCC C1B1 717B 7FA3 52BB C12D E6B7 24D2" /* ßÌÁ±q{.£R»Á-æ·$Ò */
- $"F448 F23D C196 1BAA D61B F422 41B4 D620" /* ôHò=Á–.ªÖ.ô"A´Ö */
- $"466D 45F3 06F6 F631 3E88 5CDE F7F6 BC6F" /* FmEó.öö1>ˆ\Þ÷ö¼o */
- $"789C D06C 02CC 2E71 B6B0 03D2 297B BFCD" /* xœÐl.Ì.q¶°.Ò){¿Í */
- $"8C21 67AD CEE0 DB53 5749 A676 690C 11E3" /* Œ!g­ÎàÛSWI¦vi..ã */
- $"5AD2 905C 78E1 4AB0 E60E C920 4ECC 7CB6" /* ZÒ\xáJ°æ.É NÌ|¶ */
- $"A76F 70F1 BCFD AA1D F4D2 E43F E203 D0C8" /* §opñ¼ýª.ôÒä?â.ÐÈ */
- $"E11E 61AF F1A7 5762 600E 65BB D870 818A" /* á.a¯ñ§Wb`.e»ØpŠ */
- $"CDF0 DFC4 8C9C 1926 678B 2732 C52F 98FD" /* ÍðßÄŒœ.&g‹'2Å/˜ý */
- $"33B3 EE23 138D 5E5F C9C3 FEF9 6111 E3E6" /* 3³î#.^_ÉÃþùa.ãæ */
- $"AF79 A8A5 2949 D590 B463 EDF3 F72A 18FD" /* ¯y¨¥)IÕ´cíó÷*.ý */
- $"BB23 233B 7924 2DD1 A335 B949 467E A30C" /* »##;y$-Ñ£5¹IF~£. */
- $"3185 5FE5 DB63 6748 B22D AB3F 8A8C 0926" /* 1…_åÛcgH²-«?ŠŒÆ& */
- $"5450 E925 A69D 1185 7300 D694 EA1F 4DF2" /* TPé%¦.…s.Ö”ê.Mò */
- $"2413 F4ED 6D64 5B74 BBD5 0E65 26EF A8CD" /* $.ôímd[t»Õ.e&ï¨Í */
- $"5806 0C60 404F 90A0 06B6 AFD1 785F 9646" /* X..`@O .¶¯Ñx_–F */
- $"B1AD 2A45 5777 33FA 49DB 8D3D AC2A BAEA" /* ±­*EWw3úIÛ=¬*ºê */
- $"4527 B4DF 481A 6AB9 4485 05E6 7040 1B93" /* E'´ßH.j¹D….æp@.“ */
- $"D6E0 3BBF A334 E13B 68EC 934B C393 B621" /* Öà;¿£4á;hì“KÓ¶! */
- $"CFC8 69BE A6AC 672C 235E F1FC 4480 DE83" /* ÏÈi¾¦¬g,#^ñüD€Þƒ */
- $"32D7 D269 F78C F22D 5B9F F4DF DDDD D6DE" /* 2×Òi÷Œò-[ŸôßÝÝÖÞ */
- $"4C65 4D61 C1F0 26BF E4C3 D7C9 A034 163D" /* LeMaÁð&¿äÃ×É 4.= */
- $"FBAE 0167 4DF0 EBEF AA8B B742 2832 1F67" /* û®.gMðë懲·B(2.g */
- $"8CC0 80D0 4A6B 9843 DE59 2F7B F944 9DA4" /* ŒÀ€ÐJk˜CÞY/{ùD¤ */
- $"343D 9AD9 9E0B C7B5 0B7D 2CA1 F638 8A3B" /* 4=šÙž.ǵ.},¡ö8Š; */
- $"BB38 A39B 025A 9BA9 34AC ACF0 063D 5483" /* »8£›.Z›©4¬¬ð.=Tƒ */
- $"FE57 22E4 EB2C C699 AEF3 8EFB 1C8C A23A" /* þW"äë,Æ™®óŽû.Œ¢: */
- $"2C15 D2EF AC9A 91C9 993A 4CB0 2DDC 0A32" /* ,.Ò﬚‘É™:L°-ÜÂ2 */
- $"14B9 50D2 8579 8F9D 5AF2 88DB E726 1B39" /* .¹PÒ…yZòˆÛç&.9 */
- $"3E06 69F9 F300 09E4 D3E8 BB4C A704 10E0" /* >.iùó.ÆäÓè»L§..à */
- $"F1D0 53DE 91D8 6723 A047 11C7 57B3 C46C" /* ñÐSÞ‘Øg# G.ÇW³Äl */
- $"84A7 C2E1 C7CC 185C 9F21 7E2B 0F2E 64B1" /* „§ÂáÇÌ.\Ÿ!~+..d± */
- $"D734 4142 C65E A2FB 9ABE B62D 076B 2B65" /* ×4ABÆ^¢ûš¾¶-.k+e */
- $"9D6E 63F1 4825 79A9 3936 C7A7 531F EF6A" /* ncñH%y©96ǧS.ïj */
- $"F859 3084 0421 88A9 A648 8641 ACEB 95DE" /* øY0„.!ˆ©¦H†A¬ë•Þ */
- $"2E94 E3C9 442C 13AF CF63 0404 C5C6 5CE2" /* .”ãÉD,.¯Ïc..ÅÆ\â */
- $"CE90 F9CC A1B6 5713 031E C239 174F CC40" /* ÎùÌ¡¶W...Â9.OÌ@ */
- $"BCA4 EA9A EB6A 1D24 7962 F735 AF5A B937" /* ¼¤êšëj.$yb÷5¯Z¹7 */
- $"AC3B A12E 10A8 D332 6FE3 8ED1 6F01 B198" /* ¬;¡..¨Ó2oãŽÑo.±˜ */
- $"1543 A6A1 367E E226 5D76 B860 E0E1 8963" /* .C¦¡6~â&]v¸`àá‰c */
- $"AA7A F9EE DABF DB52 28F6 69F9 273F 8729" /* ªzùîÚ¿ÛR(öiù'?‡) */
- $"1D00 C7D2 20B9 3483 2125 88FC 94C0 54A6" /* ..ÇÒ ¹4ƒ!%ˆü”ÀT¦ */
- $"42FE F4E5 DA50 F495 F88B 5986 21CB 22E8" /* BþôåÚPô•ø‹Y†!Ë"è */
- $"EE5E 0622 2CB0 BCC8 0C6B 2B2B 23EB 0506" /* î^.",°¼È.k++#ë.. */
- $"A40F 09C2 726F 0C1F B8D4 55D3 2FE4 D629" /* ¤.ÆÂro..¸ÔUÓ/äÖ) */
- $"94C2 C913 BB28 4394 A9D2 8684 9E47 0445" /* ”ÂÉ.»(C”©Ò†„žG.E */
- $"B6CF 3E21 7072 B435 310C D7A3 063D 942B" /* ¶Ï>!pr´51.×£.=”+ */
- $"6AE9 350C 9442 C76E 1E6B A8C1 18A3 4309" /* jé5.”BÇn.k¨Á.£CÆ */
- $"6D55 E62F FC4E C4E9 6CF8 241D FAC5 2CC9" /* mUæ/üNÄélø$.úÅ,É */
- $"E020 6B12 31A6 9B11 710B 8850 FABE 5D63" /* à k.1¦›.q.ˆPú¾]c */
- $"068A 4018 2A90 93A5 9715 531E 8E7B AD7A" /* .Š@.*“¥—.S.Ž{­z */
- $"2921 115F 19CE 2B6A F643 DE89 2E76 890B" /* )!._.Î+jöCÞ‰.v‰. */
- $"5A69 1668 6A02 061F 4832 24EB FC82 6B4D" /* Zi.hj...H2$ëü‚kM */
- $"9B08 D22F CBBF D348 D18F 8B0C C684 6851" /* ›.Ò/Ë¿ÓHÑ‹.Æ„hQ */
- $"6CA9 E2FA 43CE 8A9A 7A58 FB28 0208 A6E0" /* l©âúCΊšzXû(..¦à */
- $"1ACF CE23 C624 5A38 C640 72C0 26F1 2818" /* .ÏÎ#Æ$Z8Æ@rÀ&ñ(. */
- $"07FD 74D9 F3D6 ED38 CA01 6485 CE8C 41A3" /* .ýtÙóÖí8Ê.d…ÎŒA£ */
- $"02C6 18E5 E4D2 2043 FA62 8768 3E14 7E80" /* .Æ.åäÒ Cúb‡h>.~€ */
- $"F2EB 67AD F743 75A0 2DDF 8724 1468 F88D" /* òëg­÷Cu -߇$.hø */
- $"9BF3 11EB 4D4C B372 D210 9B58 BAA0 646A" /* ›ó.ëML³rÒ.›Xº dj */
- $"222F 5E5A C781 1D86 5652 1B57 07AF C8FA" /* "/^ZÇ.†VR.W.¯Èú */
- $"9E77 DD7B FCB9 1D4C 8573 7B03 95AC D2DA" /* žwÝ{ü¹.L…s{.•¬ÒÚ */
- $"3314 4FFC CAF4 39B5 EAF4 9617 2CC5 9258" /* 3.OüÊô9µêô–.,Å’X */
- $"8F99 8C44 8D44 DA10 F1A5 51F7 5533 F13B" /* ™ŒDDÚ.ñ¥Q÷U3ñ; */
- $"CDDC B6D6 BE71 3C92 2628 3B69 DC32 C623" /* Íܶ־q<’&(;iÜ2Æ# */
- $"F497 3959 034A 67C3 10A8 26E2 572F B4B1" /* ô—9Y.JgÃ.¨&âW/´± */
- $"6C5C 3E47 FB9F AA7D D9A4 7A08 4BBA E854" /* l\>GûŸª}Ù¤z.KºèT */
- $"4370 CE77 C69A 11EB 1BD8 B9AF 8225 BC8E" /* CpÎwÆš.ë.ع¯‚%¼Ž */
- $"A261 1CAA A74D B531 A0B9 D462 35DF 9C21" /* ¢a.ª§Mµ1 ¹Ôb5ßœ! */
- $"73F1 EAC1 A13C E0BC AF6C 8111 03DF AF1F" /* sñêÁ¡<༯l..߯. */
- $"4748 1866 322C 535A 7C5E D2BC 4304 3541" /* GH.f2,SZ|^Ò¼C.5A */
- $"F14E 8412 296B 2C37 B642 9B4A 6417 EABB" /* ñN„.)k,7¶B›Jd.ê» */
- $"9034 1260 1B81 AFCC F903 4FAA A3F2 339E" /* 4.`.¯Ìù.Oª£ò3ž */
- $"F332 B080 8C32 31D7 4DEA B260 F190 43F1" /* ó2°€Œ21×Mê²`ñCñ */
- $"CCD5 A584 5C1C 343F FB87 CEA5 F246 8EAC" /* ÌÕ¥„\.4?û‡Î¥òFެ */
- $"C407 302C FEE7 3F59 F4B8 74ED ED62 D373" /* Ä.0,þç?Yô¸tííbÓs */
- $"A4BA B53A 0554 5403 9C2C E745 1087 5546" /* ¤ºµ:.TT.œ,çE.‡UF */
- $"2671 7BA6 3A33 703E BEF5 CD28 10A5 462B" /* &q{¦:3p>¾õÍ(.¥F+ */
- $"D902 9493 B2FC 176F 34BA 5A2D D2BC 0CBB" /* Ù.”“²ü.o4ºZ-Ò¼.» */
- $"5AB7 B854 08D3 CD79 3C71 1A89 E643 2FBC" /* Z·¸T.ÓÍy<q.‰æC/¼ */
- $"5A24 FEA6 EC06 1F23 79D9 3886 F6F4 7FB9" /* Z$þ¦ì..#yÙ8†öô.¹ */
- $"F892 1A20 DC66 1EB1 D6FD 1C48 52DE 4267" /* ø’. Üf.±Öý.HRÞBg */
- $"77E2 620B 2DC0 6828 575C F7CA 74BC FE73" /* wâb.-Àh(W\÷Êt¼þs */
- $"FABD C9ED 4E8F 71A7 8CCD 8D80 8BD2 8AA3" /* ú½ÉíNq§ŒÍ€‹ÒŠ£ */
- $"45C0 EF2A 387D 038E 8B00 BA81 12CD F93F" /* EÀï*8}.Ž‹.º.Íù? */
- $"E9BE 9134 2928 439B 69CF 3DB1 5DFC 3DAF" /* 龑4)(C›iÏ=±]ü=¯ */
- $"86CA 34A7 4574 C91C 3F99 3EA9 B6E9 F3AF" /* †Ê4§EtÉ.?™>©¶éó¯ */
- $"6757 09A3 C49E A9AD 7201 BFD9 B3FA 52B0" /* gWƣĞ©­r.¿Ù³úR° */
- $"0000 0030 908B 4E52 45F1 3CBE F04A D2E4" /* ...0‹NREñ<¾ðJÒä */
- $"83AF 6AEA 78E9 A438 C877 BAAD 65CB C703" /* ƒ¯jêxé¤8Èwº­eËÇ. */
- $"70B2 B9DD E19B 6B8C 0CE9 E402 0C9F 94F0" /* p²¹Ýá›kŒ.éä..Ÿ”ð */
- $"21BC 4E05 C03C 012A 66EF D0BC 2B72 292E" /* !¼N.À<.*fïм+r). */
- $"3592 1FDB 2A5C 8D2D C2FF 5C5B 6AB8 F695" /* 5’.Û*\-Âÿ\[j¸ö• */
- $"F279 2C54 0529 555A 6ACA 22A4 C28B D693" /* òy,T.)UZjÊ"¤Â‹Ö“ */
- $"1FC9 4492 43F3 A323 F990 0A31 9356 30D3" /* .ÉD’Có£#ùÂ1“V0Ó */
- $"D6F0 0D36 0091 043F F239 9D1E 114E 3693" /* Öð.6.‘.?ò9..N6“ */
- $"DF1C 23DF A27A 5B11 A44D 9199 07D1 AF2C" /* ß.#ߢz[.¤M‘™.ѯ, */
- $"63EB 21C5 D29F 8644 8C6A 129A 9CB9 ED72" /* cë!ÅÒŸ†DŒj.šœ¹ír */
- $"9286 3E0E B604 539A F262 B727 9284 01F9" /* ’†>.¶.Sšòb·'’„.ù */
- $"5AE1 DA5A 8A02 140E 5275 5433 BCDF 8038" /* ZáÚZŠ...RuT3¼ß€8 */
- $"0050 856F A747 857B 8376 255A 9185 28CC" /* .P…o§G…{ƒv%Z‘…(Ì */
- $"301A EC7C B5D3 89CC A695 1C87 8266 7CA8" /* 0.ì|µÓ‰Ì¦•.‡‚f|¨ */
- $"A203 7467 426E 9507 3DB3 1F90 F66B DC9F" /* ¢.tgBn•.=³.ökÜŸ */
- $"ACF6 CDB2 4FCC 5AE4 2F94 F555 CB9E D8AC" /* ¬öͲOÌZä/”õU˞ج */
- $"950B FF38 0FE4 5056 E5E8 F371 9A98 5697" /* •.ÿ8.äPVåèóqš˜V— */
- $"6319 5197 B545 E594 AADD B2F2 CA27 260D" /* c.Q—µE唪ݲòÊ'&. */
- $"9BAF 0E45 0846 5573 F96B 7AC1 CC89 E86E" /* ›¯.E.FUsùkzÁ̉èn */
- $"61E6 72E2 05E3 9F8D 26D8 F178 BCC0 0B18" /* aærâ.ãŸ&Øñx¼À.. */
- $"967C EA80 F7C1 45AE 8FAE A41C 41B6 438E" /* –|ê€÷ÁE®®¤.A¶CŽ */
- $"46EF 1094 D558 01A8 BBAD 7380 DA27 2772" /* Fï.”ÕX.¨»­s€Ú''r */
- $"9D67 1330 A48C 62EA 0643 14EC 3E22 A055" /* g.0¤Œbê.C.ì>" U */
- $"4E39 4E23 853D C587 99C8 CFD2 AEBB 9843" /* N9N#…=Ň™ÈÏÒ®»˜C */
- $"ECC9 0241 3253 8CF1 E068 1936 3BB2 56D3" /* ìÉ.A2SŒñàh.6;²VÓ */
- $"46F7 6A71 98D1 A300 1337 B3B0 7ABB 5752" /* F÷jq˜Ñ£..7³°z»WR */
- $"DB7A 7F85 5CFE 59DE A852 6987 DC11 C6B5" /* Ûz.…\þYÞ¨Ri‡Ü.Ƶ */
- $"E45B 7DD1 1F3A D566 C16D 3FBF 7BAD 7201" /* ä[}Ñ.:ÕfÁm?¿{­r. */
- $"B71C C74C A678 C2BB 10FD 534A 5E5D 79C0" /* ·.ÇL¦x».ýSJ^]yÀ */
- $"000C 2336 9113 B9C5 5D4A 1756 1C8B 0CD6" /* ..#6‘.¹Å]J.V.‹.Ö */
- $"AA8B DFF5 6CE3 CDAB B9B4 D85C 93FF 76AA" /* ª‹ßõlãÍ«¹´Ø\“ÿvª */
- $"15CF CF39 A864 B236 A172 03A1 65A1 9F76" /* .ÏÏ9¨d²6¡r.¡e¡Ÿv */
- $"FF55 00DE C7D0 C767 2787 9EB3 7CE5 C5BC" /* ÿU.ÞÇÐÇg'‡ž³|åż */
- $"8E08 6085 37A2 229C 73D3 2CC5 F6E8 AA1B" /* Ž.`…7¢"œsÓ,Åöèª. */
- $"AF13 15FD EB95 2609 6006 23C6 7910 8FFE" /* ¯..ýë•&Æ`.#Æy.þ */
- $"8C5E 60A6 A558 E899 0A05 0F37 EC94 8E51" /* Œ^`¦¥Xè™Â..7씎Q */
- $"7838 9A11 8483 88B0 E284 B88D CDEA 9D56" /* x8š.„ƒˆ°â„¸ÍêV */
- $"5C7E CFA2 8001 847E ABC9 360E 17EA 2D34" /* \~Ï¢€.„~«É6..ê-4 */
- $"8314 96C0 3810 D88F A54E 6E7C 6030 76FA" /* ƒ.–À8.Ø¥Nn|`0vú */
- $"18A4 A549 37FC 11F6 E77F A883 C794 71AC" /* .¤¥I7ü.öç.¨ƒÇ”q¬ */
- $"55F1 7F88 664A FEE4 01C4 5576 1BE6 9C41" /* Uñ.ˆfJþä.ÄUv.æœA */
- $"D800 6121 2FC0 E681 A16E 21AF D5FE 0E80" /* Ø.a!/Àæ¡n!¯Õþ.€ */
- $"A800 0000 3090 8C40 9184 82DA 7187 51C6" /* ¨...0Œ@‘„‚Úq‡QÆ */
- $"44DC C420 FF13 98AD D100 2C07 132C 8D6C" /* DÜÄ ÿ.˜­Ñ.,..,l */
- $"5D16 A089 D8F6 E77F A870 24F1 5461 DB69" /* ]. ‰Øöç.¨p$ñTaÛi */
- $"0F41 5029 7A41 B55F 0000 0184 846A 850C" /* .AP)zAµ_...„„j…. */
- $"241E E628 EDA6 4000 3090 6AA2 F6E7 7FA6" /* $.æ(í¦@.0j¢öç.¦ */
- $"26C9 5EDE 9BB6 A1B1 51E6 8D5D F800 0061" /* &É^Þ›¶¡±Qæ]ø..a */
- $"19B3 E47D 6F6F DB03 0885 4A53 27BA 38F5" /* .³ä}ooÛ..…JS'º8õ */
- $"35A0 1AB9 0A95 8FAE 85E3 F528 5A8B E645" /* 5 .¹Â•®…ãõ(Z‹æE */
- $"8419 0456 6A38 D0DA 4948 8987 2323 1216" /* „..Vj8ÐÚIH‰‡##.. */
- $"A4F8 FD1A C374 D30C BF43 CD86 B984 F23C" /* ¤øý.ÃtÓ.¿C͆¹„ò< */
- $"5487 B47F E217 F15A D8CF A66A 96A9 EAF3" /* T‡´.â.ñZØÏ¦j–©êó */
- $"F966 0205 D320 1556 5C3C 073A 8E66 1E3F" /* ùf..Ó .V\<.:Žf.? */
- $"A74E FF2C BC45 E9DB 3B25 FF7F 46AD 13A9" /* §Nÿ,¼EéÛ;%ÿ.F­.© */
- $"5C21 458B 6AD4 829C 1DFB 54BA E5F2 3C76" /* \!E‹jÔ‚œ.ûTºåò<v */
- $"3898 11F6 D710 7470 00FC 0742 CA59 9E40" /* 8˜.ö×.tp.ü.BÊYž@ */
- $"757C 5952 61FF 4D28 0991 1673 9B01 06B9" /* u|YRaÿM(Æ‘.s›..¹ */
- $"3999 E9B5 06CD B1DA CB08 FF19 DE70 8D10" /* 9™éµ.ͱÚË.ÿ.Þp. */
- $"E725 848E D27D 2B0B 54F0 B60B 26AB CD92" /* ç%„ŽÒ}+.Tð¶.&«Í’ */
- $"E4F8 C007 FF68 6933 E2FF 31D5 435B FF7F" /* äøÀ.ÿhi3âÿ1ÕC[ÿ. */
- $"9A8E 9845 007F FEDA 4C63 9892 513A ABD9" /* šŽ˜E..þÚLc˜’Q:«Ù */
- $"A98A C012 5C99 31C0 D48F E334 671D A695" /* ©ŠÀ.\™1ÀÔã4g.¦• */
- $"C7EF 3AAA FF37 D381 4F42 983F FC4D AE82" /* Çï:ªÿ7ÓOB˜?üM®‚ */
- $"FF43 6555 9E7F 10A3 7B95 415D 41FF 20B3" /* ÿCeUž..£{•A]Aÿ ³ */
- $"8CB1 7302 0000 0000 584E AB14 398C A865" /* Œ±s.....XN«.9Œ¨e */
- $"5A7B 1650 52EB 8BCE 3E92 461D 071B 8F21" /* Z{.PRë‹Î>’F...! */
- $"2CFF 4F5F FD2E 999E B77D A47D 61B4 2C01" /* ,ÿO_ý.™ž·}¤}a´,. */
- $"D397 493D CB48 AB27 EB4A 13A7 8C89 7F64" /* Ó—I=ËH«'ëJ.§Œ‰.d */
- $"6C08 FF21 9696 98C7 6248 1615 541F EC81" /* l.ÿ!––˜ÇbH..T.ì */
- $"8E18 FAED 5257 3D01 2CBB 74C1 DA64 81A0" /* Ž.úíRW=.,»tÁÚd  */
- $"39BF B272 4068 15E8 A44A 007C 732C D9DC" /* 9¿²r@h.è¤J.|s,ÙÜ */
- $"1CF8 4612 8611 A36D 67BC 6E6A EA14 9D87" /* .øF.†.£mg¼njê.‡ */
- $"2962 C4B4 5442 9564 BFAA D0FB 991F 4288" /* )bÄ´TB•d¿ªÐû™.Bˆ */
- $"7CB2 2A41 333E 7827 5070 F3A6 67FF 7FFF" /* |²*A3>x'Ppó¦gÿ.ÿ */
- $"7601 CFFE E44B 4413 809B 3877 B59D BC19" /* v.ÏþäKD.€›8wµ¼. */
- $"548F 0A5B C1E9 A8D7 6B5D 8EC8 8A1A BB3D" /* TÂ[Áé¨×k]ŽÈŠ.»= */
- $"3CD1 3139 57CF 9E94 00E9 CF6E 3830 3561" /* <Ñ19WÏž”.éÏn805a */
- $"8DE4 A59F FD1B 45CF C608 D0FD 5D48 485E" /* 䥟ý.EÏÆ.Ðý]HH^ */
- $"D5A3 30A5 F9EE 5D55 B9C2 E552 3A9F B087" /* Õ£0¥ùî]U¹ÂåR:Ÿ°‡ */
- $"FE87 5DBC 5E73 0F16 9221 2B0D F399 AB6F" /* þ‡]¼^s..’!+.ó™«o */
- $"9950 0000 0000 0000 0008 2444 88CE 3BBD" /* ™P........$DˆÎ;½ */
- $"CC78 4932 9C47 DEFA 74E7 91BF 9827 FF7B" /* ÌxI2œGÞútç‘¿˜'ÿ{ */
- $"77EB 9B1B 9F7F FDAB 6552 35A1 0C22 E9C6" /* wë›.Ÿ.ý«eR5¡."éÆ */
- $"42E3 FF7F FF7F E9FD A23B 2F7D 3ADD FC90" /* Bãÿ.ÿ.éý¢;/}:Ýü */
- $"E4A1 F8B9 0560 0F86 D7FE 3F46 C953 2A03" /* 䡸¹.`.†×þ?FÉS*. */
- $"F1C7 F5AE D0C4 B743 EA67 B694 E47D 45CD" /* ñÇõ®ÐÄ·Cêg¶”ä}EÍ */
- $"6F92 178A E383 8B71 800E D9AF A55A F149" /* o’.Šãƒ‹q€.Ù¯¥ZñI */
- $"A838 5671 4C9A 8915 447A CDA9 C6B7 DD68" /* ¨8VqLš‰.DzͩƷÝh */
- $"A5FB F404 CF63 A62E CC5E 89D3 FDB2 C841" /* ¥ûô.Ïc¦.Ì^‰Óý²ÈA */
- $"7A37 5B5D 5958 4B46 20B1 D389 5188 F9FE" /* z7[]YXKF ±Ó‰Qˆùþ */
- $"8FF1 D718 6C8C 3254 0000 0000 0000 0000" /* ñ×.lŒ2T........ */
- $"0000 00A1 EBEC C33A 8622 D0FF 7FFF 7FFF" /* ...¡ëìÃ:†"Ðÿ.ÿ.ÿ */
- $"705D C7FE 49E7 01B7 A65D D5BC 2041 80B0" /* p]ÇþIç.·¦]Õ¼ A€° */
- $"89ED F68A A000 F438 EBD0 C908 0B67 414F" /* ‰íöŠ .ô8ëÐÉ..gAO */
- $"C8F1 4312 2EC8 05E6 CA19 184F FF5B BA24" /* ÈñC..È.æÊ..Oÿ[º$ */
- $"57E8 A6B4 FBD3 FF79 4D8E FF44 BC50 6938" /* W覴ûÓÿyMŽÿD¼Pi8 */
- $"137F FF7D 6251 8D1A 9B33 CF7E 0BCB EAD7" /* ..ÿ}bQ.›3Ï~.Ëê× */
- $"2E0D EAE0 0003 0906 AA2B 66A8 C950 0000" /* ..êà..Æ.ª+f¨ÉP.. */
- $"0000 0000 0000 0000 0001 1E1F F600 1848" /* ............ö..H */
- $"4BF6 7A7C F92D 3E7A 437E 2254 51EB 4AF5" /* Köz|ù->zC~"TQëJõ */
- $"C6BF 442A 12CD 51FF 7FFE B8AE D0C4 B1D0" /* Æ¿D*.ÍQÿ.þ¸®ÐıР*/
- $"7CF7 019D A0ED 2CC4 01BC 1A94 212D 43EF" /* |÷. í,Ä.¼.”!-Cï */
- $"1274 9B67 94D5 062D 5FCC E23C 4816 416B" /* .t›g”Õ.-_Ìâ<H.Ak */
- $"1540 59C2 1D35 213D A11C EE70 8D15 5394" /* .@YÂ.5!=¡.îp.S” */
- $"53C6 29CF 4E19 F4CF 5B94 7FFF 7F8B 2813" /* SÆ)ÏN.ôÏ[”.ÿ.‹(. */
- $"3E95 DE81 30D0 3188 2A75 4F35 CB11 DDD5" /* >•Þ0Ð1ˆ*uO5Ë.ÝÕ */
- $"7FFD A983 95A9 71E7 A7A3 7D3F F944 0A7E" /* .ý©ƒ•©qç§£}?ùDÂ~ */
- $"24D9 966F 6B6A 0FD0 23AC 7000 0000 0000" /* $Ù–okj.Ð#¬p..... */
- $"0009 D4AF 9196 E5A4 B8AC 407F F9EE C709" /* .ÆÔ¯‘–夸¬@.ùîÇÆ */
- $"F927 08C3 CA6C 3A3A D90F E306 BCC4 6D6C" /* ù'.ÃÊl::Ù.ã.¼Äml */
- $"C7A9 F042 6F4C FDC9 60AB A087 6338 8F12" /* Ç©ðBoLýÉ`« ‡c8. */
- $"4D29 D00C C575 C7B5 9FA4 E96C 1FA0 AAFB" /* M)Ð.ÅuǵŸ¤él. ªû */
- $"09E9 8DF9 1BE0 C62D 3C1D F55B DD77 A0FD" /* Æéù.àÆ-<.õ[Ýw ý */
- $"5C16 D959 BA08 0000 0000 0000 0145 AE01" /* \.ÙYº........E®. */
- $"712A 0E06 1212 70CD 94A8 0A2C 18F5 1E3B" /* q*....pÍ”¨Â,.õ.; */
- $"52FA C8F6 56F3 F7E4 69E6 54A0 3FF6 2487" /* RúÈöVó÷äiæT ?ö$‡ */
- $"C65F 0EFF 7F4F 8D07 C817 FE78 727D 3C75" /* Æ_.ÿ.O.È.þxr}<u */
- $"E4C6 1003 FECF 3E7E 6252 08C0 4A83 50D7" /* äÆ..þÏ>~bR.ÀJƒP× */
- $"DADA 8602 5949 900F D2B6 D10D 2661 3014" /* ÚÚ†.YI.Ò¶Ñ.&a0. */
- $"4541 17FF 2106 00DF AC82 0046 09BB A5AF" /* EA.ÿ!..߬‚.FÆ»¥¯ */
- $"CE51 0EBF F9AD 787A 907F 9F9A 628F E16B" /* ÎQ.¿ù­xz.Ÿšbák */
- $"C015 137E 9C68 FCFA A817 FF7F DD6B FDB6" /* À..~œhüú¨.ÿ.Ýký¶ */
- $"3DA3 7C9D 3309 0B8A B551 C370 4401 CD7F" /* =£|3Æ.еQÃpD.Í. */
- $"7503 8425 E297 1B3F FF49 4FF8 3583 685A" /* u.„%â—.?ÿIOø5ƒhZ */
- $"B273 A7F7 CEBF F27E D78C 3E35 5332 152B" /* ²s§÷οò~׌>5S2.+ */
- $"033C C7FF 7B97 1AF0 F2A4 3C88 CC7B B96E" /* .<Çÿ{—.ðò¤<ˆÌ{¹n */
- $"65B3 533C F2F8 5E4B 6DBF 7D78 A316 310F" /* e³S<òø^Km¿}x£.1. */
- $"6B09 FD62 88D7 77FF 7447 524E C235 00A3" /* kÆýbˆ×wÿtGRNÂ5.£ */
- $"8F5A 4BEE D240 6154 C17C 2CC2 68F0 A959" /* ZKîÒ@aTÁ|,Âhð©Y */
- $"2F12 9B74 7E8E 423F BB1D BC9A C75B C618" /* /.›t~ŽB?».¼šÇ[Æ. */
- $"19D1 C6CB 0A15 BD77 99BD 96D3 CC07 F5AC" /* .ÑÆËÂ.½w™½–ÓÌ.õ¬ */
- $"D2ED DE5E F19D 5CFC B2B0 5407 0386 32C6" /* ÒíÞ^ñ\ü²°T..†2Æ */
- $"5F49 7BAD 3270 BF81 CF97 C934 7E23 7237" /* _I{­2p¿Ï—É4~#r7 */
- $"727B 0FA2 6DB0 D717 8C73 B109 E089 AAC5" /* r{.¢m°×.Œs±Æà‰ªÅ */
- $"7D98 9061 2956 EA75 0135 E870 3430 4E9B" /* }˜a)Vêu.5èp40N› */
- $"C76C D3D6 7EEB 83DB 9EEB C9A0 983D 1327" /* ÇlÓÖ~ëƒÛžëÉ ˜=.' */
- $"62D8 FD62 CA51 7135 80B0 ABFF 431B 9843" /* bØýbÊQq5€°«ÿC.˜C */
- $"68B4 A929 44E4 1F3E E3A1 22AA 5E87 579C" /* h´©)Dä.>ã¡"ª^‡Wœ */
- $"745B 9CA4 438C BFC2 9A1B 17BE BA75 06E4" /* t[œ¤CŒ¿Âš..¾ºu.ä */
- $"0108 698C E4F2 341C 24CC 7913 6237 ED48" /* ..iŒäò4.$Ìy.b7íH */
- $"E797 4D7A 0D5A D1EA ACDF F974 4F9F 9139" /* ç—Mz.ZÑê¬ßùtOŸ‘9 */
- $"6A87 3972 A1C8 0A2B 1E8B 6DB7 B811 4AB0" /* j‡9r¡ÈÂ+.‹m·¸.J° */
- $"EEE8 BB23 959C 239D 4165 DBED ACE4 F133" /* îè»#•œ#AeÛí¬äñ3 */
- $"8276 40BB C447 29FE 3EB6 5BA4 A6D0 2441" /* ‚v@»ÄG)þ>¶[¤¦Ð$A */
- $"1431 8B2D 8BFD 96B7 C8C2 9F9B DFB9 2B06" /* .1‹-‹ý–·ÈŸ›ß¹+. */
- $"E191 00FF 7E4B 8281 D609 D163 B8CB AF9A" /* á‘.ÿ~K‚ÖÆÑc¸Ë¯š */
- $"0995 7385 27FC 3C6A 5310 024D BAD1 8013" /* Æ•s…'ü<jS..MºÑ€. */
- $"8995 3DF4 FA80 FE12 8F5F 40E5 09E6 E7E8" /* ‰•=ôú€þ._@寿çè */
- $"C5E7 1309 3E97 E278 0228 1693 F565 F83E" /* Åç.Æ>—âx.(.“õeø> */
- $"4161 0037 E0AA D0CC 3AED 4E56 04E8 4456" /* Aa.7àªÐÌ:íNV.èDV */
- $"6E50 4626 C7E0 0790 014E 329B 0DDB D87D" /* nPF&Çà..N2›.ÛØ} */
- $"4532 6482 3F51 D651 3F62 D6EB 3BCA 75EB" /* E2d‚?QÖQ?bÖë;Êuë */
- $"5444 A42F 3CFB 4146 19FB 5376 876F 6BC1" /* TD¤/<ûAF.ûSv‡okÁ */
- $"B80B 7787 71DF 4CAA D70A 98BC 98E1 15A1" /* ¸.w‡qßLª×˜¼˜á.¡ */
- $"7996 F17F FF7A 91CF 350C FA04 5753 7ECB" /* y–ñ.ÿz‘Ï5.ú.WS~Ë */
- $"29F1 A4AD F335 59DB A580 EAA3 98AD FEB0" /* )ñ¤­ó5YÛ¥€ê£˜­þ° */
- $"275E BABE 6679 9AD4 B246 75F2 ECAA B042" /* '^º¾fyšÔ²Fuò쪰B */
- $"92C9 745E 1C58 58FF 2570 9228 4EAF 6F65" /* ’Ét^.XXÿ%p’(N¯oe */
- $"56F3 1D0C 85AA 9468 8000 0000 0101 3082" /* Vó..…ª”h€.....0‚ */
- $"08FD E30F FF75 70BF FCCA 2225 E5FC 3464" /* .ýã.ÿup¿üÊ"%åü4d */
- $"00CA 6C43 E833 80DE 2895 5F84 4B08 CEFA" /* .ÊlCè3€Þ(•_„K.Îú */
- $"AA94 EE33 24E7 CA20 A668 4717 FD5F F7F2" /* ª”î3$çÊ ¦hG.ý_÷ò */
- $"59E7 D6C6 6D0D 8E0F 1AC3 BBFA 3890 8ACB" /* YçÖÆm.Ž..ûú8ŠË */
- $"9250 6D82 E892 D4B9 1F14 D987 9818 877A" /* ’Pm‚è’Ô¹..Ù‡˜.‡z */
- $"66F0 905A B088 D761 B529 F02A 6964 6C65" /* fðZ°ˆ×aµ)ð*idle */
- $"8FB8 9A87 7771 9A12 C8A6 7F9C 9905 D643" /* ¸š‡wqš.Ȧ.œ™.ÖC */
- $"E554 91F5 0C26 4299 30C6 BC87 B38C 86FB" /* åT‘õ.&B™0Ƽ‡³Œ†û */
- $"ED50 C019 3822 52A8 97C6 1F49 176D FB8C" /* íPÀ.8"R¨—Æ.I.mûŒ */
- $"87B7 E37C 196E 3695 357A E2B8 FDE5 736E" /* ‡·ã|.n6•5zâ¸ýåsn */
- $"DF11 6026 3CD9 51CF 2A50 6F8A 53B0 0F16" /* ß.`&<ÙQÏ*PoŠS°.. */
- $"938B 745A F84D 571C A582 9723 90B4 49D7" /* “‹tZøMW.¥‚—#´I× */
- $"B11D 7BA6 45C1 2AFA D519 A471 60A3 17A9" /* ±.{¦EÁ*úÕ.¤q`£.© */
- $"2C13 6E04 D58E 3F37 0115 E4AE F51C 1BA8" /* ,.n.ÕŽ?7..ä®õ..¨ */
- $"EF7F 4C9F 7B47 8C5A D1D6 CAC7 D416 D6D4" /* ï.LŸ{GŒZÑÖÊÇÔ.ÖÔ */
- $"7F05 9504 5685 0D6D E0E8 6809 9307 7864" /* ..•.V….màèhÆ“.xd */
- $"1A86 1BA6 A321 D08C 1B0C 0981 9395 6DC0" /* .†.¦£!ÐŒ..Æ“•mÀ */
- $"C74F ECF7 CA1B FF4B 1896 BDBE 4876 8A4B" /* ÇOì÷Ê.ÿK.–½¾HvŠK */
- $"519F CC3C 7813 BE21 C40C B001 30F4 4FC7" /* QŸÌ<x.¾!Ä.°.0ôOÇ */
- $"B76C B9FA 26F6 38C8 116D B8F0 0B9D 818F" /* ·l¹ú&ö8È.m¸ð. */
- $"56F9 F934 AE60 71FD E583 8D07 A4A4 DE41" /* Vùù4®`qýåƒ.¤¤ÞA */
- $"FB75 B83F 384B 11C9 CC5E CD9D FF4C 05A8" /* ûu¸?8K.ÉÌ^ÍÿL.¨ */
- $"D59F 1E59 4797 FF7F DFD8 391C E8BA 72E2" /* ÕŸ.YG—ÿ.ߨ9.èºrâ */
- $"C1F8 9F5C 5317 01E3 EC2D 4120 97D2 BAEC" /* ÁøŸ\S..ãì-A —Òºì */
- $"DBB0 FF30 FC56 2E43 3716 1B7B A8CD 19AE" /* Û°ÿ0üV.C7..{¨Í.® */
- $"7FFF 7FF4 468B FF45 749B 3C67 EE31 1651" /* .ÿ.ôF‹ÿEt›<gî1.Q */
- $"17B2 B21C A982 A185 E8A3 03BC 2DCB C09A" /* .²².©‚¡…è£.¼-ËÀš */
- $"8522 64CF BB21 6955 068D F002 871B 05F3" /* …"dÏ»!iU.ð.‡..ó */
- $"9F44 7384 D624 E1FA A24D 67C7 BC5E F7BF" /* ŸDs„Ö$áú¢MgǼ^÷¿ */
- $"59BC DC3C BE4B 1456 0C6F F2C1 0841 038D" /* Y¼Ü<¾K.V.oòÁ.A. */
- $"723C 14FA 4F19 0AD4 1F88 0A1B FF14 3D93" /* r<.úO.ÂÔ.ˆÂ.ÿ.=“ */
- $"27AA 6E0B 4AA7 6A11 E06D 5D82 C930 1B53" /* 'ªn.J§j.àm]‚É0.S */
- $"0227 A9AA 253A 41E6 31D5 8B87 DC08 819B" /* .'©ª%:Aæ1Õ‹‡Ü.› */
- $"E5EE EA0F 6AA0 0000 0006 9BC0 594E 0004" /* åîê.j ....›ÀYN.. */
- $"D326 312C 0364 8835 C4D7 5040 3724 3CD9" /* Ó&1,.dˆ5Ä×P@7$<Ù */
- $"B889 2E14 12BC F0AD 9D2E 326B 1654 5952" /* ¸‰...¼ð­.2k.TYR */
- $"2B5F 1A9D 5403 C9C5 A731 1B3C 3443 783C" /* +_.T.Éŧ1.<4Cx< */
- $"A459 248B BBC7 DEDC 74AD E2A1 D647 5047" /* ¤Y$‹»ÇÞÜt­â¡ÖGPG */
- $"AD17 15AF FF5C 88C4 025F 4361 3F83 BFC9" /* ­..¯ÿ\ˆÄ._Ca?ƒ¿É */
- $"FF6D 7E58 128D 33D7 7076 E73A 9CF6 76D8" /* ÿm~X.3×pvç:œövØ */
- $"A0FF 2C44 2029 0B59 B427 3BDC 915B 87CF" /*  ÿ,D ).Y´';Ü‘[‡Ï */
- $"75D6 EC52 7793 6DFA A4E2 9E2D 7D25 FBC2" /* uÖìRw“mú¤âž-}%û */
- $"2028 DE78 D868 BEC5 E9D2 BFFA 8B12 9265" /* (ÞxØh¾ÅéÒ¿ú‹.’e */
- $"B01D 92F7 F71E 8782 F1CD 4E98 B46E 6DA5" /* °.’÷÷.‡‚ñÍN˜´nm¥ */
- $"8825 F851 1CE9 9F21 D8E2 86EB BAF4 126F" /* ˆ%øQ.éŸ!Øâ†ëºô.o */
- $"9CB3 0144 009A 6F38 0919 9C1F D0CE D23C" /* œ³.D.šo8Æ.œ.ÐÎÒ< */
- $"C9DD 9273 D8F6 6733 6E5A 2E7A 635C 8723" /* ÉÝ’sØög3nZ.zc\‡# */
- $"6E04 1283 1A43 02CA 74E4 8000 0309 08DB" /* n..ƒ.C.Êtä€..Æ.Û */
- $"EF05 DC00 D116 0D58 1A69 2055 1BA0 D8DE" /* ï.Ü.Ñ..X.i U. ØÞ */
- $"34B6 EA40 CC06 C673 559A 75F2 9B58 C474" /* 4¶ê@Ì.ÆsUšuò›XÄt */
- $"DD4C AB9A 9E6D 653B FCDF 4F33 3707 105E" /* ÝL«šžme;üßO37..^ */
- $"DBCE D327 45FB C663 E1AF 375B B106 B0B8" /* ÛÎÓ'EûÆcá¯7[±.°¸ */
- $"26EE AE4B 538A CF74 588E 928B 58C7 2D93" /* &î®KSŠÏtXŽ’‹XÇ-“ */
- $"371E BC81 0ED0 9F2C 1A18 8DD7 7E65 4FBF" /* 7.¼.П,..×~eO¿ */
- $"511B 63A1 8F26 2A08 A4D3 2BF3 96E6 FC32" /* Q.c¡&*.¤Ó+ó–æü2 */
- $"D457 8287 D843 6D19 2458 0EA4 AC8F 0512" /* ÔW‚‡ØCm.$X.¤¬.. */
- $"831D D4CA 9BFF 5A6E 951A 5897 451F 750C" /* ƒ.ÔÊ›ÿZn•.X—E.u. */
- $"CAD4 89C1 94A7 4BFA 4030 4828 1E37 C049" /* ÊÔ‰Á”§Kú@0H(.7ÀI */
- $"34C4 54B1 1054 2645 14E5 6DFF 7FFF 7328" /* 4ÄT±.T&E.åmÿ.ÿs( */
- $"F1A4 AAA2 4FD2 507D 86D5 FF7F FA43 F49A" /* ñ¤ª¢OÒP}†Õÿ.úCôš */
- $"5049 0839 5964 8186 EE46 1867 158E 9E2C" /* PI.9Yd†îF.g.Žž, */
- $"D618 8FF5 D416 6838 6187 9CF7 21BC DE1F" /* Ö.õÔ.h8a‡œ÷!¼Þ. */
- $"F84F F4E9 ACDB ECD8 6CA6 6725 85B4 4049" /* øOôé¬ÛìØl¦g%…´@I */
- $"AA9E 4935 7E1F 54E7 B0D5 A026 B073 899B" /* ªžI5~.Tç°Õ &°s‰› */
- $"51C4 8C2E 483C B3BF 38A0 4BCF 2042 EE90" /* QÄŒ.H<³¿8 KÏ Bî */
- $"4E1B 8C94 420F 99A7 9EA1 7D96 12A3 8C8D" /* N.Œ”B.™§ž¡}–.£Œ */
- $"819B C97D C518 51CB 0D8A A7A1 7159 EB10" /* ›É}Å.QË.Ч¡qYë. */
- $"4A27 5CD0 0ED7 2688 5F74 CE10 DF6A 5B4F" /* J'\Ð.×&ˆ_tÎ.ßj[O */
- $"E370 A282 105D 2F43 6E74 6B07 05EC 880E" /* ãp¢‚.]/Cntk..ìˆ. */
- $"15AF 5118 9D27 327D 2552 9996 020B 2D9A" /* .¯Q.'2}%R™–..-š */
- $"9AFC 6849 6068 6491 42FA 889C 7949 285A" /* šühI`hd‘BúˆœyI(Z */
- $"7FFE 5B6D DAF2 7FFF 772D E08E B9E4 65A3" /* .þ[mÚò.ÿw-àŽ¹äe£ */
- $"B49A DDC8 FF52 8DA3 B318 F84F F4E9 99ED" /* ´šÝÈÿR£³.øOôé™í */
- $"48C4 CA7E BE77 2634 6A22 1FAD 4752 8D9B" /* HÄÊ~¾w&4j".­GR› */
- $"B935 0449 1A27 9EAB B000 C242 3BB7 72B7" /* ¹5.I.'ž«°.ÂB;·r· */
- $"3ACC B41F 0AC9 CFFD 58DA D99F 498A 21CF" /* :Ì´.ÂÉÏýXÚÙŸIŠ!Ï */
- $"50B8 A155 9BB3 B3DA 13FE 251F 14F2 3431" /* P¸¡U›³³Ú.þ%..ò41 */
- $"6DBF 2774 3EFC 55BB 9CB3 40A4 CA00 A112" /* m¿'t>üU»œ³@¤Ê.¡. */
- $"3E83 51D4 9D13 DE0D F86D 3384 AAE7 9074" /* >ƒQÔ.Þ.øm3„ªçt */
- $"F7CF 4509 F99A 70B2 2E74 43C3 1363 021F" /* ÷ÏEÆùšp².tCÃ.c.. */
- $"6482 E471 22FA 6265 2DF9 C302 43F8 9053" /* d‚äq"úbe-ùÃ.CøS */
- $"0AE9 15A2 28D4 FD7C 05AF C7B8 26D5 7C0F" /* Âé.¢(Ôý|.¯Ç¸&Õ|. */
- $"22E0 4735 518D BE4B 4E83 1EF8 3FFA BA23" /* "àG5Q¾KNƒ.ø?úº# */
- $"3AE8 F76B 1D92 2038 64C1 EA73 30FC CE72" /* :è÷k.’ 8dÁês0üÎr */
- $"0CA5 6697 157E 55C4 8BAE E703 6FF5 F743" /* .¥f—.~UÄ‹®ç.oõ÷C */
- $"B456 C85F 3BFF 2629 95B7 02F4 F580 A49B" /* ´VÈ_;ÿ&)•·.ôõ€¤› */
- $"1587 2316 D131 66C1 C6DB F3DC C409 D801" /* .‡#.Ñ1fÁÆÛóÜÄÆØ. */
- $"E2DA 30B6 73FD 99EF AA26 25D7 DF07 FBEB" /* âÚ0¶sý™ïª&%×ß.ûë */
- $"094E 2E8E BD11 3C49 81BA E6BE 7666 ECBE" /* ÆN.޽.<Iºæ¾vfì¾ */
- $"59D2 4ACC B4CE 3FAD 2173 25CB E42F 37B8" /* YÒJÌ´Î?­!s%Ëä/7¸ */
- $"F3CC 79EF 695C 10F4 0381 2D14 1B0F D632" /* óÌyïi\.ô.-...Ö2 */
- $"8A1E 9C29 F617 6A4B 204E A147 C08D 1AA5" /* Š.œ)ö.jK N¡GÀ.¥ */
- $"7418 DED9 DE83 A555 A75B AB00 C650 247F" /* t.ÞÙÞƒ¥U§[«.ÆP$. */
- $"0222 5558 731B 54DB 14F6 3A0E 1FAD A8D8" /* ."UXs.TÛ.ö:..­¨Ø */
- $"F327 DC8F AF3F 630B 3BA9 7933 8D30 458C" /* ó'ܯ?c.;©y30EŒ */
- $"4C2F 6E3A 0A64 DDC5 926A 71CB 2347 EE4D" /* L/n:ÂdÝÅ’jqË#GîM */
- $"647B D94D BE24 7F62 6A14 EBE2 696F 8735" /* d{ÙM¾$.bj.ëâio‡5 */
- $"A96F E268 6912 A4A9 3254 0293 CB09 0DC0" /* ©oâhi.¤©2T.“ËÆ.À */
- $"206B EB7B F6B9 0643 5E74 4F2C 555A AE2D" /* kë{ö¹.C^tO,UZ®- */
- $"B16B 7FA3 8ADE 7EAC 764F 9A20 BC94 05F1" /* ±k.£ŠÞ~¬vOš ¼”.ñ */
- $"9AAC 0118 36B8 6B30 D696 6E84 EEC2 5342" /* š¬..6¸k0Ö–n„îÂSB */
- $"03A8 EFD3 CB37 D50D F676 35DB AD6C 280A" /* .¨ïÓË7Õ.öv5Û­l( */
- $"DB04 D23A 0922 A2E3 5F45 EBD1 5C49 F6AA" /* Û.Ò:Æ"¢ã_EëÑ\Iöª */
- $"4579 1BA2 D94E D3F0 7A7E C24E 79B0 5D24" /* Ey.¢ÙNÓðz~ÂNy°]$ */
- $"B98E 23E7 4C4F 54D9 A3CE 389F 63F6 2426" /* ¹Ž#çLOTÙ£Î8Ÿcö$& */
- $"7087 D921 86D6 709F 768D 5684 BB90 47B7" /* p‡Ù!†ÖpŸvV„»G· */
- $"AC32 98D7 E247 3668 E954 8105 EE44 AF58" /* ¬2˜×âG6héT.îD¯X */
- $"13FF 573A 9F89 06C9 FB77 277E 08C9 09E9" /* .ÿW:Ÿ‰.Éûw'~.ÉÆé */
- $"B180 F96E C5AB 1E5D 3029 E229 CE1B B2AD" /* ±€ùnÅ«.]0)â)Î.²­ */
- $"BA11 DD98 0D9C 4C45 66DD 8553 3BA2 6F5B" /* º.ݘ.œLEfÝ…S;¢o[ */
- $"699B CEF3 48A7 6C31 63E6 E189 9C68 B9EC" /* i›ÎóH§l1cæá‰œh¹ì */
- $"A663 411F EBCB 41AB 8F7E 7EAD 87DA 5BF3" /* ¦cA.ëËA«~~­‡Ú[ó */
- $"AAC9 975B AC1F 712B F7ED DEBD 04C3 B85A" /* ªÉ—[¬.q+÷íÞ½.øZ */
- $"470D D74A B91D 0180 7BAB 4088 5671 6268" /* G.×J¹..€{«@ˆVqbh */
- $"5B4A 54FE C179 1600 7677 830B 0E81 EEB4" /* [JTþÁy..vwƒ..î´ */
- $"056E 79FF 8251 AB20 A6BC 15A5 E71F 7D4A" /* .nyÿ‚Q« ¦¼.¥ç.}J */
- $"2F6E 951A DE36 7A81 C704 9A4A F239 E1DC" /* /n•.Þ6zÇ.šJò9áÜ */
- $"FF6C DE49 B4C8 F6C1 F764 8D19 4686 DFC2" /* ÿlÞI´ÈöÁ÷d.F†ß */
- $"5C72 4A52 9784 F974 DCA4 A177 21DA 9869" /* \rJR—„ùtܤ¡w!Ú˜i */
- $"80A4 5BC6 FD54 A56B C7B1 4705 3A32 C896" /* €¤[ÆýT¥kDZG.:2È– */
- $"4539 25E5 90CC F228 B7F9 ADA5 CC2C 59CA" /* E9%åÌò(·ù­¥Ì,YÊ */
- $"D14D 4B86 9CC0 D367 7EF5 DB6D C2E1 06DB" /* ÑMK†œÀÓg~õÛmÂá.Û */
- $"58BC 0D97 DCFE 3CB1 EA45 C36F 1B60 83C9" /* X¼.—Üþ<±êEÃo.`ƒÉ */
- $"663F B883 83BA A69F 2653 0747 18C7 6D20" /* f?¸ƒƒº¦Ÿ&S.G.Çm */
- $"F2C7 6E01 47DA AB9D 2D83 D5CE 1E9C 779A" /* òÇn.GÚ«-ƒÕÎ.œwš */
- $"5FAE 6015 63DE 317A EFCA 7142 F3F8 A7E1" /* _®`.cÞ1zïÊqBóø§á */
- $"F739 60AB DF24 41BF EB6C AF15 7223 E56C" /* ÷9`«ß$A¿ël¯.r#ål */
- $"8D61 D9D1 C61F 8F8E 8435 6452 C45A 917B" /* aÙÑÆ.Ž„5dRÄZ‘{ */
- $"0856 B8BA 14E2 0A77 ABA0 E605 2E39 63EA" /* .V¸º.âÂw« æ..9cê */
- $"E7F5 4804 6535 7672 575F 37EA 9E69 1A1C" /* çõH.e5vrW_7êži.. */
- $"E380 CB7D C109 2D50 73EF 4119 54BE CBFE" /* ã€Ë}ÁÆ-PsïA.T¾Ëþ */
- $"4552 74A1 3E73 C457 1436 9DFF 3C25 8231" /* ERt¡>sÄW.6ÿ<%‚1 */
- $"2C25 ACE4 F084 E842 60E8 355D 22BE 6FEE" /* ,%¬äð„èB`è5]"¾oî */
- $"93F9 DDE6 DAED 4E44 545A FE4E 5EA4 0487" /* “ùÝæÚíNDTZþN^¤.‡ */
- $"36F1 52AF 8683 2DE8 F30B 72DE E807 2068" /* 6ñR¯†ƒ-èó.rÞè. h */
- $"742B 7262 BF7E 516C D41F CA56 9DE1 E3B8" /* t+rb¿~QlÔ.ÊVá㸠*/
- $"8D72 2993 C073 516D A343 DDE0 984D F06A" /* r)“ÀsQm£CÝà˜Mðj */
- $"CD83 D22D C161 30D7 2E9A FED4 4E85 5D2E" /* ̓Ò-Áa0×.šþÔN…]. */
- $"CF72 2181 7F23 BC37 FF83 C30D 43E0 DBC7" /* Ïr!.#¼7ÿƒÃ.CàÛÇ */
- $"A277 B4D9 4E68 1FB1 AF7B 6D8B 8F43 2A1B" /* ¢w´ÙNh.±¯{m‹C*. */
- $"9FE4 6CCC E826 C4AA 96C9 98A9 4D3B 981F" /* ŸälÌè&Ī–ɘ©M;˜. */
- $"8786 8633 89B0 2B42 4266 BC27 0098 D2B3" /* ‡††3‰°+BBf¼'.˜Ò³ */
- $"E8E4 0D2C 6E14 D34D 3613 4568 4A1E 8E5E" /* èä.,n.ÓM6.EhJ.Ž^ */
- $"E328 D89C 85D3 D8C2 C15B 3533 989F F015" /* ã(Øœ…ÓØÂÁ[53˜Ÿð. */
- $"1B49 871D 031B 2DBE D49E 880D A557 0694" /* .I‡...-¾Ôžˆ.¥W.” */
- $"60C3 47A1 CD2A 961B F73C 94A3 6B17 4268" /* `ÃG¡Í*–.÷<”£k.Bh */
- $"F766 81DC 33BC 8C1D 5571 D2D7 FB1C 9378" /* ÷fÜ3¼Œ.UqÒ×û.“x */
- $"01B7 BDCC 5DD0 9171 5FA1 50DA 7EBF 1586" /* .·½Ì]Бq_¡PÚ~¿.† */
- $"FA82 9E6F CBE4 0977 9C9C 2373 E789 5A3E" /* ú‚žoËäÆwœœ#sç‰Z> */
- $"8743 EB0E ED13 7955 DB28 2874 8065 2078" /* ‡Cë.í.yUÛ((t€e x */
- $"97A7 6C13 2283 729A CCF9 E449 A627 7652" /* —§l."ƒršÌùäI¦'vR */
- $"E821 2F1F 574E 6887 1830 6E01 5A8D 02FB" /* è!/.WNh‡.0n.Z.û */
- $"DB61 8EEF 4E08 B607 26FA 2B4C FF47 38FE" /* ÛaŽïN.¶.&ú+LÿG8þ */
- $"9B7C A3E4 DB46 F898 CFE9 8F3C 8717 2975" /* ›|£äÛFø˜Ïé<‡.)u */
- $"9BA2 582E 86D1 D882 C127 EFD7 E71A B5DD" /* ›¢X.†ÑØ‚Á'ï×ç.µÝ */
- $"7772 6391 2722 2884 AA0F 9C72 9A96 F4F8" /* wrc‘'"(„ª.œrš–ôø */
- $"BFF8 869A FD00 3B41 A8C7 DCD0 2834 270C" /* ¿ø†šý.;A¨ÇÜÐ(4'. */
- $"B93C 8702 5B16 8A32 0289 979B 0A35 3A7B" /* ¹<‡.[.Š2.‰—›Â5:{ */
- $"5870 6189 03C2 DD00 FAB2 B137 AB93 3EF5" /* Xpa‰.ÂÝ.ú²±7«“>õ */
- $"24E3 1FE1 A206 963E 1344 FE12 285A 5C52" /* $ã.á¢.–>.Dþ.(Z\R */
- $"692E D315 6C73 2CBE 7ADC 81BC EBC8 13EA" /* i.Ó.ls,¾zܼëÈ.ê */
- $"796B 6056 E9E7 D971 6E09 7086 252C 6A19" /* yk`VéçÙqnÆp†%,j. */
- $"7351 153D F4C4 FE01 6235 917F B203 171A" /* sQ.=ôÄþ.b5‘.²... */
- $"1822 B42B 9226 D163 5572 7E7E C508 BEBA" /* ."´+’&ÑcUr~~Å.¾º */
- $"D0D2 1C24 8D62 565D C183 F78D 4726 0541" /* ÐÒ.$bV]Áƒ÷G&.A */
- $"F829 10C7 1B21 E59C C4E5 7688 6268 FABC" /* ø).Ç.!åœÄåvˆbhú¼ */
- $"C0B9 6C02 8820 3F44 54A7 8C83 F14F 61B8" /* À¹l.ˆ ?DT§ŒƒñOa¸ */
- $"707C AB32 9D59 F01E D18A 37FC 40F9 5C59" /* p|«2Yð.ÑŠ7ü@ù\Y */
- $"EEA8 E442 FDC8 CA73 970F 6EE0 1348 AC8E" /* î¨äBýÈÊs—.nà.H¬Ž */
- $"9D65 4DA9 2820 AEDB A7F3 C1B4 8E3F 8780" /* eM©( ®Û§óÁ´Ž?‡€ */
- $"8DA9 F7D9 F116 DD30 778E 4FB6 49D3 AFE8" /* ©÷Ùñ.Ý0wŽO¶IÓ¯è */
- $"74B1 EB63 92B8 4210 3B22 3613 6784 41A2" /* t±ëc’¸B.;"6.g„A¢ */
- $"5953 1EFF 16A9 1769 9852 73D0 B6C2 3523" /* YS.ÿ.©.i˜RsжÂ5# */
- $"854B 1247 531D 47C5 7AFC 1B6B F0C4 2E2F" /* …K.GS.GÅzü.kðÄ./ */
- $"6C60 82C9 9C4D 2FAD 25A5 BEC6 8590 7388" /* l`‚ÉœM/­%¥¾Æ…sˆ */
- $"5D15 9A65 E013 D48B 7D9C 34B2 A617 75A8" /* ].šeà.Ô‹}œ4²¦.u¨ */
- $"8E8E 2D91 1AEC 26D5 8B9C D03C A02A A829" /* ŽŽ-‘.ì&Õ‹œÐ< *¨) */
- $"738D 9A4E 8F31 82A9 39B7 7CFE D412 810E" /* sšN1‚©9·|þÔ.. */
- $"1372 6D79 8D49 BAC1 9FFB 5D52 56AD 488F" /* .rmyIºÁŸû]RV­H */
- $"4E1D A232 7348 1FE2 483F AB9F A23C 0997" /* N.¢2sH.âH?«Ÿ¢<Æ— */
- $"678D 1AB7 7F66 8927 7DED 2A66 E03B 05C9" /* g.·.f‰'}í*fà;.É */
- $"0420 66A2 E0AE E1B9 259E 64C9 FF0E A7C7" /* . f¢à®á¹%ždÉÿ.§Ç */
- $"5E9D 69F4 DD50 394C 344E 9DA9 6BCA 3D9F" /* ^iôÝP9L4N©kÊ=Ÿ */
- $"8FA9 C156 3248 2310 8AB9 6131 B94F FF36" /* ©ÁV2H#.йa1¹Oÿ6 */
- $"DF00 9E80 5713 E9AD 3B07 879E C876 E063" /* ß.ž€W.é­;.‡žÈvàc */
- $"38D8 2776 3081 5810 1760 927C D93C EE88" /* 8Ø'v0X..`’|Ù<îˆ */
- $"518B 755A EBF1 B276 C65B 98DD 1421 8AA1" /* Q‹uZëñ²vÆ[˜Ý.!Š¡ */
- $"27D2 A8B2 5E3E B7B7 8F73 CDCB 9896 D80F" /* 'Ò¨²^>··s͢–Ø. */
- $"1D50 2E28 4F54 26A9 E68F 822C 3031 0A5B" /* .P.(OT&©æ‚,01Â[ */
- $"213A 8ED8 B1B8 C32C F5EF 6784 3641 A888" /* !:ŽØ±¸Ã,õïg„6A¨ˆ */
- $"1AF9 941B E9B2 42C0 D9BE AAD7 2727 9E13" /* .ù”.é²BÀÙ¾ª×''ž. */
- $"284F A530 1F62 679B 7860 E677 9E24 3663" /* (O¥0.bg›x`æwž$6c */
- $"E7D1 E4B5 D37B C274 9ECB CFA2 CC95 8A75" /* çÑäµÓ{ÂtžËϢ̕Šu */
- $"0C3A FB7D F074 1433 5EC7 1FC4 330E F221" /* .:û}ðt.3^Ç.Ä3.ò! */
- $"AE39 4A04 097F 4B21 27CD C193 39CB 3AB2" /* ®9J.Æ.K!'ÍÁ“9Ë:² */
- $"0B6E D8E0 54EA 0F75 15F9 D75D 0D82 624D" /* .nØàTê.u.ù×].‚bM */
- $"7D19 8E11 1AD0 764F CEA8 F0FE 2913 6841" /* }.Ž..ÐvOΨðþ).hA */
- $"89B8 CA62 C997 34B9 5950 4842 4F13 1ACD" /* ‰¸ÊbÉ—4¹YPHBO..Í */
- $"39AD 30CA 4ED2 A17D 0B09 206B 9426 EF50" /* 9­0ÊNÒ¡}.Æ k”&ïP */
- $"63C6 386E 74BB BDE0 420F 6154 5260 E1A2" /* cÆ8nt»½àB.aTR`ᢠ*/
- $"8546 3192 76D1 1F38 268E 7AC6 049F 321D" /* …F1’vÑ.8&ŽzÆ.Ÿ2. */
- $"CB51 35C7 067C 961B DA2F 4BCB E065 A8DB" /* ËQ5Ç.|–.Ú/KËàe¨Û */
- $"16C9 1F05 ABAF 93FF 333A F049 3161 6838" /* .É..«¯“ÿ3:ðI1ah8 */
- $"6E1A FEF2 564C 3F48 3800 BC9C F009 AF34" /* n.þòVL?H8.¼œðƯ4 */
- $"2241 15D4 764F 4764 CEDF 6D7D 2E9C 8141" /* "A.ÔvOGdÎßm}.œA */
- $"1E00 E109 D827 DDAA A47C 2854 9229 8998" /* ..áÆØ'ݪ¤|(T’)‰˜ */
- $"9175 1FFB 496B 36C7 3695 3631 390B 06E6" /* ‘u.ûIk6Ç6•619..æ */
- $"EB0D 3BA7 F1BE A2FF 6D3A 9FB6 FCFD ADEF" /* ë.;§ñ¾¢ÿm:Ÿ¶üý­ï */
- $"EDBA 3FDB 632F EDB1 BF6D BE7E DB9F 97ED" /* íº?Ûc/í±¿m¾~ÛŸ—í */
- $"45FD AB93 F6E8 7FED A7F7 DAC3 FC34 6F43" /* Eý«“öè.í§÷ÚÃü4oC */
- $"E1DB 5507 762F DB7E 5F51 DDF5 1DFE DD07" /* áÛU.v/Û~_QÝõ.þÝ. */
- $"E1FD A67F B4E6 7EDB 8BF6 AE3F B6BC D3E4" /* áý¦.´æ~Û‹ö®?¶¼Óä */
- $"D00B 0F87 A0FF 2AC3 3F6D 84F8 7475 99F2" /* Ð..‡ ÿ*Ã?m„øtu™ò */
- $"F382 BE95 100F 8FEE C1C8 D086 E345 E973" /* 󂾕..îÁÈІãEés */
- $"0FE4 06B6 7813 7115 B8D0 D91B C698 D10D" /* .ä.¶x.q.¸ÐÙ.ƘÑ. */
- $"A370 844F 9330 E047 0201 F880 D146 6522" /* £p„O“0àG..ø€ÑFe" */
- $"8E52 12DE 3D1A 9231 5315 682E 4706 8685" /* ŽR.Þ=.’1S.h.G.†… */
- $"DA39 C538 9828 7ED0 714F 3E27 532A 3840" /* Ú9Å8˜(~ÐqO>'S*8@ */
- $"C912 3E46 8205 3243 7835 7284 12D6 CCF5" /* É.>F‚.2Cx5r„.ÖÌõ */
- $"36AF 0975 8A27 4F44 3857 B5A3 160D 1391" /* 6¯ÆuŠ'OD8Wµ£...‘ */
- $"8005 2453 86CB 51B3 E493 EA9C 707F 7047" /* €.$S†ËQ³ä“êœp.pG */
- $"1DA8 1386 91D1 6105 7D84 1563 FC52 D5D3" /* .¨.†‘Ña.}„.cüRÕÓ */
- $"EDA7 D4A0 4AC1 BB4E 49D6 62F4 CA92 CE8E" /* í§Ô JÁ»NIÖbôÊ’ÎŽ */
- $"8DE0 84DC 418D ACE2 71AD 9206 3C98 3281" /* à„ÜA¬âq­’.<˜2 */
- $"104E A1F2 8982 6ED6 223E B67B BE6A C51F" /* .N¡ò‰‚nÖ">¶{¾jÅ. */
- $"4BF8 6C35 B6A4 5EC8 87BB 4834 7CF3 16AC" /* Køl5¶¤^ȇ»H4|ó.¬ */
- $"2453 B3DA 3503 94D6 2E70 2B6F 975E 21DB" /* $S³Ú5.”Ö.p+o—^!Û */
- $"F409 0368 9A2E DFB2 7A4B 9A6F 4165 1173" /* ôÆ.hš.ß²zKšoAe.s */
- $"A53E 329A 7925 FB80 9664 2C09 A9E5 715C" /* ¥>2šy%û€–d,Æ©åq\ */
- $"E42F 8E14 EC68 05A8 D565 53C2 9C98 86A2" /* ä/Ž.ìh.¨ÕeSœ˜†¢ */
- $"2C2D 6443 A1D0 A619 2320 6CD3 FE48 8006" /* ,-dC¡Ð¦.# lÓþH€. */
- $"FC0F 3690 DF76 1FD8 2E16 0705 D91F EEBE" /* ü.6ßv.Ø....Ù.î¾ */
- $"E961 32B9 E252 4F0E EE4A 6F73 AEBB 014A" /* éa2¹âRO.îJos®».J */
- $"8F45 1551 9123 7C3A 13F8 1B57 EB6A 0AFB" /* E.Q‘#|:.ø.WëjÂû */
- $"9AE9 65F5 9FDE 5F1C 7C23 84F1 6DCD CC52" /* šéeõŸÞ_.|#„ñmÍÌR */
- $"97DD 03E6 C571 0C23 F06B 9F21 2E2C 79D5" /* —Ý.æÅq.#ðkŸ!.,yÕ */
- $"1827 1436 E6FB C5FB BA11 617B 9B32 3DCD" /* .'.6æûÅûº.a{›2=Í */
- $"B0AD AA8F 53D0 2F20 849C D667 9436 A677" /* °­ªSÐ/ „œÖg”6¦w */
- $"38C9 1B5A 26E2 B4D4 29BB 2D9E 56D4 652D" /* 8É.Z&â´Ô)»-žVÔe- */
- $"9A12 FC7E FBD5 0075 3EC9 64FE D0CE 06A2" /* š.ü~ûÕ.u>ÉdþÐÎ.¢ */
- $"B63F 8731 DB8A 6917 26EA CCFC C1E6 10AA" /* ¶?‡1ÛŠi.&êÌüÁæ.ª */
- $"704E 20EA 7518 0416 6BBE 2867 9470 9FE6" /* pN êu...k¾(g”pŸæ */
- $"3D2A D178 6CD1 0B7D E518 4682 FC48 EA03" /* =*ÑxlÑ.}å.F‚üHê. */
- $"EFA0 ADEE B643 CDFD 796D C309 E13B 9DD3" /* ï ­î¶CÍýymÃÆá;Ó */
- $"82CC 1237 8D6B 9CB9 0438 AF1A 6190 136E" /* ‚Ì.7kœ¹.8¯.a.n */
- $"A170 6109 4BA8 FD0B 4C10 DE61 71A9 A5FF" /* ¡paÆK¨ý.L.Þaq©¥ÿ */
- $"5AD1 3895 15D0 912A BC62 5344 A7FD 7B9B" /* ZÑ8•.Б*¼bSD§ý{› */
- $"0360 8C71 DD04 20C7 4685 E6B7 7941 7BD7" /* .`ŒqÝ. ÇF…æ·yA{× */
- $"DBBB 3F61 742B D692 AD3D B778 6442 3DD1" /* Û»?at+Ö’­=·xdB=Ñ */
- $"A97E 1312 9AF4 05C1 7B33 9FE2 B3F5 D16C" /* ©~..šô.Á{3Ÿâ³õÑl */
- $"875D 7109 13EC BB96 0664 DF60 1958 8DE5" /* ‡]qÆ.ì»–.dß`.Xå */
- $"5B3F 3E75 9D21 0415 CE9C 3172 87C7 FF05" /* [?>u!..Μ1r‡Çÿ. */
- $"F787 4F14 E63B 4DCE 247D B3A3 475C 5336" /* ÷‡O.æ;MÎ$}³£G\S6 */
- $"C794 AF23 6415 68C6 B893 1B16 8C81 3F43" /* Ç”¯#d.hƸ“..Œ?C */
- $"C455 6EB8 8D5A 6919 4C3A D980 BFB1 3699" /* ÄUn¸Zi.L:Ù€¿±6™ */
- $"C790 C7D1 7B05 12AA 803A 172B DEF2 00CC" /* ÇÇÑ{..ª€:.+Þò.Ì */
- $"FF38 62C8 1815 1D3A F60D 2B9B 87A0 05C5" /* ÿ8bÈ...:ö.+›‡ .Å */
- $"3587 0181 8754 06D7 2CFC 78B8 0C65 D5BC" /* 5‡.‡T.×,üx¸.eÕ¼ */
- $"2903 C07C 0631 A0B9 E94E 192F DE4B 4924" /* ).À|.1 ¹éN./ÞKI$ */
- $"A4F0 BB9A 49C5 B751 38EB 7289 9806 FC5C" /* ¤ð»šIÅ·Q8ër‰˜.ü\ */
- $"D822 ED93 CA92 14B6 5056 017F 7826 CDE1" /* Ø"í“Ê’.¶PV..x&Íá */
- $"8401 9F6C A7F7 4AD5 E86F FDC3 05AF 6AE3" /* „.Ÿl§÷JÕèoýÃ.¯jã */
- $"5EED 07E3 E5ED 7EE7 FB97 0B99 E191 605B" /* ^í.ãåí~çû—.™á‘`[ */
- $"955A 6A3C 33C6 2BB8 9562 0E38 09C1 1ED9" /* •Zj<3Æ+¸•b.8ÆÁ.Ù */
- $"8914 73AF E9AA 7B2F 214E 7EEA 98E8 B976" /* ‰.s¯éª{/!N~ê˜è¹v */
- $"E058 E0B5 6DB4 5B1C F212 2C8E 0AE5 7100" /* àXàµm´[.ò.,ŽÂåq. */
- $"BC1E 84CD 0598 7CF9 EA4E 1E96 2B4A DE9E" /* ¼.„Í.˜|ùêN.–+JÞž */
- $"6CE9 E79B 0336 9059 E109 DF83 A2AE 9E74" /* léç›.6YáÆßƒ¢®žt */
- $"5BB1 0236 590C 66CD 0658 ECE5 50A2 EDDD" /* [±.6Y.fÍ.XìåP¢íÝ */
- $"D7BB DAF7 548B 7F21 2A40 7821 FDA2 62B6" /* ×»Ú÷T‹.!*@x!ý¢b¶ */
- $"C862 B0B2 96CF 27D5 EC9D F5C8 42D8 F42A" /* Èb°²–Ï'ÕìõÈBØô* */
- $"5962 F21A D191 6744 1AE2 64B4 6744 A1B2" /* Ybò.Ñ‘gD.âd´gD¡² */
- $"7625 FF0D F0CF A1F8 3273 C4B8 FCCE C2BC" /* v%ÿ.ðÏ¡ø2sĸüμ */
- $"EDD5 F0C6 765F 2446 5EF5 2195 04EE C94B" /* íÕðÆv_$F^õ!•.îÉK */
- $"C9C2 4F82 0D0F 6034 3560 64A8 C372 4E17" /* ÉÂO‚..`45`d¨ÃrN. */
- $"D4F6 B2DC 2162 A6DC 9B35 5F36 628E EA58" /* Ôö²Ü!b¦Ü›5_6bŽêX */
- $"B2EF D0B8 79FF 3F60 39DC 34C9 8DD1 C7DA" /* ²ïиyÿ?`9Ü4ÉÑÇÚ */
- $"BFFD 9220 B977 42CD 1F4E 00C7 1A7B F29F" /* ¿ý’ ¹wBÍ.N.Ç.{òŸ */
- $"9738 8D5E 3E5F BA1F D4BD 0592 2006 1216" /* —8^>_º.Ô½.’ ... */
- $"D478 DE72 171A A49D 9C4A 0691 CD59 6FB3" /* ÔxÞr..¤œJ.‘ÍYo³ */
- $"F3C5 B3CD DCC8 5794 133C 85B3 176A 0C6A" /* óųÍÜÈW”.<…³.j.j */
- $"323E C74F 7CE3 4042 38AB E9CA 5700 E39B" /* 2>ÇO|ã@B8«éÊW.ã› */
- $"26D3 62B7 59F8 966D A789 35AA C72D 9943" /* &Ób·Yø–m§‰5ªÇ-™C */
- $"C884 2E53 30B3 D351 EFCC 6BF8 9889 8AB6" /* È„.S0³ÓQïÌkø˜‰Š¶ */
- $"E284 F5A4 64BD F89F 98A4 8082 6292 48EB" /* â„õ¤d½øŸ˜¤€‚b’Hë */
- $"2039 4A80 D5D7 BEFC 2DC1 69A9 F484 9B4E" /* 9J€Õ×¾ü-Ái©ô„›N */
- $"94C9 6E87 31A6 6D4E 23DB 77A9 37D5 CEE9" /* ”Én‡1¦mN#Ûw©7ÕÎé */
- $"10B5 22DB 58B2 3DFB 973A E321 F02A 2985" /* .µ"ÛX²=û—:ã!ð*)… */
- $"AE7E F964 9A23 4B8D 90FD 75F4 9944 3CEB" /* ®~ùdš#Kýuô™D<ë */
- $"C5C5 B0BA DA1C AA0A B59A EFCA 903A 972B" /* ÅŰºÚ.ªÂµšïÊ:—+ */
- $"10E9 2A66 2BAB 3E63 8312 E494 A82C AEE8" /* .é*f+«>cƒ.䔨,®è */
- $"DE3B 902F 4DE5 A934 7FA5 59D8 B355 75C7" /* Þ;/Må©4.¥YسUuÇ */
- $"DC51 6208 6D60 DE89 F04A F698 FC35 5341" /* ÜQb.m`Þ‰ðJö˜ü5SA */
- $"A8C7 894B 5E8F 0638 0F21 36AB 23FF 37BF" /* ¨Ç‰K^.8.!6«#ÿ7¿ */
- $"CA6E C0CE 1C93 9BB1 FEA7 49E8 9BA5 7F32" /* ÊnÀÎ.“›±þ§I蛥.2 */
- $"4C9D C8BA 821C 1E07 F277 BE63 241C D5F6" /* LȺ‚...òw¾c$.Õö */
- $"07CB 7A98 E51E B0FC B312 223C 21BF 5DEE" /* .Ëz˜å.°ü³."<!¿]î */
- $"0229 A0EE 8B90 5918 5910 F6A6 EEB6 503D" /* .) î‹Y.Y.ö¦î¶P= */
- $"8E76 A3B6 E583 FEFF 5B3D F804 F6EE 956E" /* Žv£¶åƒþÿ[=ø.öî•n */
- $"FEE7 D95F 9D05 AE0B 4926 52B4 23C3 D17A" /* þçÙ_.®.I&R´#ÃÑz */
- $"FC0F CC41 1264 0956 8CA2 6A30 C0D0 275F" /* ü.ÌA.dÆVŒ¢j0ÀÐ'_ */
- $"0CE8 C646 CC49 EF38 CC94 8B6C 1737 9636" /* .èÆFÌIï8Ì”‹l.7–6 */
- $"4EA7 0FE7 217B F3F1 A10D 7E49 242E 6F19" /* N§.ç!{óñ¡.~I$.o. */
- $"A8CF 369A 44DE 6C99 A9D4 24DA 6909 62C3" /* ¨Ï6šDÞl™©Ô$ÚiÆbà */
- $"0C4C D4CD D80E 72E6 FF6B A90E 7080 977B" /* .LÔÍØ.ræÿk©.p€—{ */
- $"4BEB 6A2A 72BB 0574 45FB 1E12 6408 C966" /* Këj*r».tEû..d.Éf */
- $"A632 9AC7 E67D 82C9 3FED 1E27 C1FA C47A" /* ¦2šÇæ}‚É?í.'ÁúÄz */
- $"AFCF 5719 3BCA 3975 BE3A 550B 6DC9 91CC" /* ¯ÏW.;Ê9u¾:U.mÉ‘Ì */
- $"F28E 751C 1B20 E7BB 58FF 0D92 2BF7 DE26" /* òŽu.. ç»Xÿ.’+÷Þ& */
- $"DFE3 B230 78F7 C64E ADF8 7741 F45A E3BC" /* ßã²0x÷ÆN­øwAôZã¼ */
- $"5185 1323 1C74 3288 F720 5DB7 B5C9 1EFD" /* Q….#.t2ˆ÷ ]·µÉ.ý */
- $"C844 7159 7047 A9BA 6CA1 403E CE2E 3522" /* ÈDqYpG©ºl¡@>Î.5" */
- $"1088 A628 490C 5F8D 64C4 7E17 CBD3 290D" /* .ˆ¦(I._dÄ~.ËÓ). */
- $"91B1 B073 AD4A BF5B A1E9 6306 3E9A F87E" /* ‘±°s­J¿[¡éc.>šø~ */
- $"2DEC 7390 2CF5 3305 93C2 15DA 7FFF 7FC6" /* -ìs,õ3.“Â.Ú.ÿ.Æ */
- $"0578 C93E BF93 5B69 25D4 E0F9 5726 0D7E" /* .xÉ>¿“[i%ÔàùW&.~ */
- $"9C06 C76B 1BF5 3206 F26C 4F57 6A13 7488" /* œ.Çk.õ2.òlOWj.tˆ */
- $"07F4 1787 316E 19B5 2CB4 D7B8 23EE BF15" /* .ô.‡1n.µ,´×¸#î¿. */
- $"84F7 C141 CE7E 358F F83B 081D 2680 C5CB" /* „÷ÁAÎ~5ø;..&€ÅË */
- $"2002 0FFB D329 10E3 1880 E0F6 29FF 14F6" /* ..ûÓ).ã.€àö)ÿ.ö */
- $"1447 24FF 4BDD 371B 00F3 0334 6FE5 D217" /* .G$ÿKÝ7..ó.4oåÒ. */
- $"8E7D 3CCB EC04 D019 0583 0792 D4F4 59E5" /* Ž}<Ëì.Ð..ƒ.’ÔôYå */
- $"0914 52FB CE7A 2EFD B899 ED16 38FB E1D4" /* Æ.RûÎz.ý¸™í.8ûáÔ */
- $"3312 BAAE 3EF3 45B7 2A77 62F3 4787 8900" /* 3.º®>óE·*wbóG‡‰. */
- $"050D 5A64 92D3 64E7 7950 4234 FCC0 0EC6" /* ..Zd’ÓdçyPB4üÀ.Æ */
- $"004C 8652 616B B5FF 87F6 72D0 400B 9574" /* .L†Rakµÿ‡örÐ@.•t */
- $"7ADD 2EE6 F979 EE70 393F 5E65 09EC 561B" /* zÝ.æùyîp9?^eÆìV. */
- $"2FF4 F6FA 9226 2AA7 C2D2 4517 2258 15C7" /* /ôöú’&*§ÂÒE."X.Ç */
- $"D27E DE80 0000 0009 BB69 0154 3C66 FD24" /* Ò~Þ€...Æ»i.T<fý$ */
- $"D6C1 DFFC 41CF 26FD 27E3 9482 7299 C4A3" /* ÖÁßüAÏ&ý'㔂r™Ä£ */
- $"A4B0 4F99 5ED7 6507 C196 C060 D7BD 7BA6" /* ¤°O™^×e.Á–À`×½{¦ */
- $"A0A2 C1E7 0ECE 98C4 36F0 B006 0526 5FC4" /*  ¢Áç.ΘÄ6ð°..&_Ä */
- $"CDEF A25D CE59 7B6F 507F C409 957F 43E6" /* Íï¢]ÎY{oP.ÄÆ•.Cæ */
- $"20AB C4BE 33C2 E794 46B7 5341 D8C9 5487" /* «Ä¾3Âç”F·SAØÉT‡ */
- $"3000 A3E6 41BE 7D2A B553 6A8D C345 2E1E" /* 0.£æA¾}*µSjÃE.. */
- $"BF55 F536 52DD 101F D6C9 BB65 B7E4 0CFC" /* ¿Uõ6RÝ..ÖÉ»e·ä.ü */
- $"03D7 F641 F641 7A4F 8EE2 BA7A 352C ED91" /* .×öAöAzOŽâºz5,í‘ */
- $"9057 F893 C46F 62F7 A791 A8DE 8A25 BB17" /* Wø“Äob÷§‘¨ÞŠ%». */
- $"F164 F2ED 43E5 A2E2 17E9 C95D DE1C 45F4" /* ñdòíCå¢â.éÉ]Þ.Eô */
- $"3019 8090 809D D124 EE5C B48E 6C92 2A74" /* 0.€€Ñ$î\´Žl’*t */
- $"ACA0 4F0A 1777 70CF EBEC 112A 9035 16AB" /* ¬ OÂ.wpÏëì.*5.« */
- $"B36D 13D6 9F72 69CD E213 F146 6733 BAA3" /* ³m.ÖŸriÍâ.ñFg3º£ */
- $"0080 0000 0000 0000 0001 0151 0AD3 43F0" /* .€.........QÂÓCð */
- $"14A4 0000 61F0 20D9 9F3A 47FC 60A2 4780" /* .¤..að ÙŸ:Gü`¢G€ */
- $"F2D0 2A57 2C4C D349 5B9A 1BE3 0D39 80AD" /* òÐ*W,LÓI[š.ã.9€­ */
- $"72C4 873D 5028 F09E F0F5 700F B776 4B38" /* rć=P(ðžðõp.·vK8 */
- $"4FC6 7D26 AE5D 219E DDCE 4AA3 9AA9 FE19" /* OÆ}&®]!žÝÎJ£š©þ. */
- $"EC25 FEF0 0626 D259 8ECF 0364 6192 A000" /* ì%þð.&ÒYŽÏ.da’ . */
- $"0000 0000 0000 0000 0184 84B4 4FF0 1848" /* .........„„´Oð.H */
- $"4BC2 3700 0000 0000 0000 00B5 DA5E 3FF1" /* KÂ7........µÚ^?ñ */
- $"C9FC 9186 4A80 0000 0000 0000 0000 0000" /* Éü‘†J€.......... */
- $"0510 0FC3 251B 71C0 D918 64A8 0000 0000" /* ...Ã%.qÀÙ.d¨.... */
- $"0000 0000 0000 07E1 1EE1 F164 E11A 319D" /* .......á.áñdá.1 */
- $"3806 659F 8C35 7012 B17E 6096 52F0 8E96" /* 8.eŸŒ5p.±~`–RðŽ– */
- $"1438 1EBF 363A 49C9 51BD 3517 4ADA 7060" /* .8.¿6:IÉQ½5.JÚp` */
- $"0849 8F8B FCEC FD48 0000 54DF 4C0B E043" /* .I‹üìýH..TßL.àC */
- $"F3B6 1CEB 518A F2B1 5A9C 9500 0000 0000" /* ó¶.ëQŠò±Zœ•..... */
- $"0196 C058 0636 AF4B 041F 37EC DE6F 4B4E" /* .–ÀX.6¯K..7ìÞoKN */
- $"291D A2A6 3CB8 9BAC 4B0C 5017 9031 0EF1" /* ).¢¦<¸›¬K.P.1.ñ */
- $"3CF7 F63B 73A1 B4A6 9EA7 0513 C571 8EA8" /* <÷ö;s¡´¦ž§..Åqލ */
- $"5D0A 28FC DCB6 D27A 0000 0000 0159 D076" /* ]Â(üܶÒz.....YÐv */
- $"3D1E 84A9 1C76 876E 7B6B 8519 1F9F 01C6" /* =.„©.v‡n{k…..Ÿ.Æ */
- $"1A11 B2A2 4841 4D47 5463 5D18 2AFE 54F5" /* ..²¢HAMGTc].*þTõ */
- $"591E 5FF1 39C7 C0CD 0D20 F366 59DE FE22" /* Y._ñ9ÇÀÍ. ófYÞþ" */
- $"B12C 4608 009D F105 49C8 16B5 417A 6079" /* ±,F..ñ.IÈ.µAz`y */
- $"40B0 7E7A C4B3 83B8 485D 42B1 4000 0000" /* @°~zijƒ¸H]B±@... */
- $"0E9F 0340 5469 49BB 5767 B4BE 47AF 19B3" /* .Ÿ.@TiI»Wg´¾G¯.³ */
- $"4E69 B99F 25DF C3C0 1B9C 5455 41D2 F508" /* Ni¹Ÿ%ßÃÀ.œTUAÒõ. */
- $"9900 1F13 B43E C345 C4B3 C066 8A27 C3D3" /* ™...´>ÃEijÀfŠ'ÃÓ */
- $"7A8A 6368 2F2C 3F2F 5D43 59ED 5E40 9E4F" /* zŠch/,?/]CYí^@žO */
- $"59BB 6A03 B7F8 083A 021D F8F0 79AF 43B0" /* Y»j.·ø.:..øðy¯C° */
- $"2270 F775 B8D8 FB59 371A 8B22 9F0B 55FA" /* "p÷u¸ØûY7.‹"Ÿ.Uú */
- $"C9B1 5565 0914 AA67 2D9E 81B2 60FC 1333" /* ɱUeÆ.ªg-ž²`ü.3 */
- $"318F 21E9 97E4 1400 F69E F709 7AE3 82A5" /* 1!é—ä..öž÷Æzã‚¥ */
- $"C9DE 7D16 1DF8 EDF8 FC5E DB3E FC2A F822" /* ÉÞ}..øíøü^Û>ü*ø" */
- $"886E F247 9BC1 250E 905C 4AF7 4B22 3595" /* ˆnòG›Á%.\J÷K"5• */
- $"0835 2567 EEC1 C4C8 B70D D782 6A22 C9DA" /* .5%gîÁÄÈ·.ׂj"ÉÚ */
- $"ADA3 0370 EED9 E428 E163 963A E6F0 5D4A" /* ­£.pîÙä(ác–:æð]J */
- $"F42A D11F B46D 7FBC 2D87 4274 4756 896E" /* ô*Ñ.´m.¼-‡BtGV‰n */
- $"C489 80C0 62F6 88A8 184A 79BE 3068 A9AF" /* ĉ€Àböˆ¨.Jy¾0h©¯ */
- $"D703 390B 1A76 3136 B799 726A AAA8 C23D" /* ×.9..v16·™rjª¨Â= */
- $"EEB0 E0F1 49E1 A6B7 204F 7BF3 6E44 F25E" /* î°àñIᦷ O{ónDò^ */
- $"7E0A 5125 CA89 B477 15CD 83CC CD21 C6BE" /* ~ÂQ%ʉ´w.̓ÌÍ!ƾ */
- $"F20B 99F3 C30C 5113 2E0A FF7E 1034 1BFF" /* ò.™óÃ.Q..Âÿ~.4.ÿ */
- $"0378 72CF B0EE D132 2A2D 14A9 E37F 6B10" /* .xrϰîÑ2*-.©ã.k. */
- $"B5CE 0500 0000 0000 0000 0160 A7E3 A715" /* µÎ.........`§ã§. */
- $"0C13 DE44 025B 9720 0000 0000 0000 0001" /* ..ÞD.[— ........ */
- $"E0F5 5A21 77FB C1F6 EAF0 244A EE78 B6FA" /* àõZ!wûÁöêð$Jîx¶ú */
- $"1769 3D98 AA28 2EB6 9826 A16B D6B8 BA89" /* .i=˜ª(.¶˜&¡kÖ¸º‰ */
- $"26C6 25C9 9E66 FD9C 6D2D FCDA FCB9 6AB2" /* &Æ%Éžfýœm-üÚü¹j² */
- $"B42A 7008 5069 CB61 D530 B47A FCFF 7F95" /* ´*p.PiËaÕ0´züÿ.• */
- $"FA58 2D11 111A 53BF FB17 59E1 63E7 0FAD" /* úX-...S¿û.Yácç.­ */
- $"B016 A862 3107 8DF0 7112 DD6A B6E3 2477" /* °.¨b1.ðq.Ýj¶ã$w */
- $"3162 94F0 6826 75B0 D0B8 4C13 21C7 E4BC" /* 1b”ðh&u°Ð¸L.!Çä¼ */
- $"FB86 7A83 DF1C A4D9 C3B4 E3DE C334 1633" /* û†zƒß.¤ÙôãÞÃ4.3 */
- $"DC27 76B9 7ADF 50CA F95E C7C9 D5EB 402C" /* Ü'v¹zßPÊù^ÇÉÕë@, */
- $"276F A0B0 D88B CF4A 0FD2 380A E3E7 2BA5" /* 'o °Ø‹ÏJ.Ò8Âãç+¥ */
- $"DD24 A247 B631 75B1 6D3A 4C60 9BAB E4C5" /* Ý$¢G¶1u±m:L`›«äÅ */
- $"BBCB 2972 36B9 AC74 5FF5 B5DB 231B 95F3" /* »Ë)r6¹¬t_õµÛ#.•ó */
- $"7CFF 8E5F 86E9 1906 B3DF 75C7 0364 6192" /* |ÿŽ_†é..³ßuÇ.da’ */
- $"A000 0000 0000 0000 0000 003B B1A0 0000" /*  ..........;± .. */
- $"0000 0000 0000 0000 0000 0016 D51B CEEA" /* ............Õ.Îê */
- $"0406 C003 4E50 C0B8 8DB2 F37C FF8E 5F86" /* ..À.NPÀ¸²ó|ÿŽ_† */
- $"E919 06B3 DF75 C703 6461 92A0 0000 0000" /* é..³ßuÇ.da’ .... */
- $"0000 0000 0000 3BB1 A000 0000 0000 0000" /* ......;± ....... */
- $"0000 0000 0000 16D5 1BCE EA04 06C0 034E" /* .......Õ.Îê..À.N */
- $"50C0 B88D B2F4 4BED 0C57 2F64 38E7 DFE6" /* PÀ¸²ôKí.W/d8çßæ */
- $"95DB 93EF B9ED 1250 6A6A A6E3 4478 1E7E" /* •Û“ï¹í.Pjj¦ãDx.~ */
- $"F105 8E1B 961B 230C 9500 0000 0000 0C18" /* ñ.Ž.–.#.•....... */
- $"0EA3 5F13 6306 E1B5 4B22 3D26 79A1 06E4" /* .£_.c.áµK"=&y¡.ä */
- $"228F F320 0B74 8820 0000 0000 0000 0007" /* "ó .tˆ ........ */
- $"9F62 443B 9A51 EAB0 7C1A A374 E7F1 52F3" /* ŸbD;šQê°|.£tçñRó */
- $"3BB8 C1E0 5919 6C04 A2E2 1032 6917 1394" /* ;¸ÁàY.l.¢â.2i..” */
- $"CCBE 472A 0652 C144 6D1E 755C ECF9 9725" /* ̾G*.RÁDm.u\ìù—% */
- $"A84A 55AE 7A0E 6730 FCA7 B6E0 FF31 08C0" /* ¨JU®z.g0ü§¶àÿ1.À */
- $"3E76 4DDC 9E24 A60B C4A7 4CDD C221 1941" /* >vMÜž$¦.ħLÝÂ!.A */
- $"0810 2DE3 206F C551 4910 77AA 762A 1FF2" /* ..-ã oÅQI.wªv*.ò */
- $"D39A 0ADC 1089 90F8 D098 1E77 BDD1 AF74" /* ÓšÂÜ.‰øÐ˜.w½Ñ¯t */
- $"4DEF D00D 0B2C CA2F 9EDC 27C4 35F9 F924" /* MïÐ..,Ê/žÜ'Ä5ùù$ */
- $"67FF 74E5 A746 B627 6267 F6D0 9B94 22D4" /* gÿtå§F¶'bgöЛ”"Ô */
- $"5FFE DF67 A7A9 E3CA 02A5 44D1 E926 DCA4" /* _þßg§©ãÊ.¥DÑé&ܤ */
- $"7490 4AB8 E094 7037 FF7C 8CF7 2A9B B784" /* tJ¸à”p7ÿ|Œ÷*›·„ */
- $"794E 9026 D48F FF7F F013 AABF F874 63DA" /* yN&Ôÿ.ð.ª¿øtcÚ */
- $"0302 FBFA AA6A 31D5 E2DF 85F7 2ACD D98C" /* ..ûúªj1Õâß…÷*ÍÙŒ */
- $"175D 1243 F1C0 CEA2 344C B6FC ADCF C6AA" /* .].CñÀ΢4L¶ü­Ïƪ */
- $"5CAE FA82 783F 58DD 754D 5C63 A018 19F8" /* \®ú‚x?XÝuM\c ..ø */
- $"7EFE 8953 AE16 22B9 4ED7 43D2 8A0B FA52" /* ~þ‰S®."¹N×CÒŠ.úR */
- $"5703 08CA 555B E51E 307B 0565 E165 22F3" /* W..ÊU[å.0{.eáe"ó */
- $"7130 0CEC CA23 576D 8D58 BED1 FEB6 9A2F" /* q0.ìÊ#WmX¾Ñþ¶š/ */
- $"DCEA 3288 3EEC B12A D43C B191 2627 7723" /* Üê2ˆ>ì±*Ô<±‘&'w# */
- $"F40F 1B7A F1E3 9A7E 366D 7490 EE80 3570" /* ô..zñãš~6mtî€5p */
- $"CB59 D05D F384 AA96 71FE 68E8 4D32 F9D2" /* ËYÐ]󄪖qþhèM2ùÒ */
- $"48BC 7B03 EA3B 879E 2E96 671F 8098 CE76" /* H¼{.ê;‡ž.–g.€˜Îv */
- $"87D8 0336 5C88 91F4 3C69 D76B 4DEF 29DA" /* ‡Ø.6\ˆ‘ô<i×kMï)Ú */
- $"F378 1035 720A CE61 C2E3 5776 CA53 F43B" /* óx.5rÂÎaÂãWvÊSô; */
- $"4FCB 79E4 5164 1270 A23E 6048 2089 7B12" /* OËyäQd.p¢>`H ‰{. */
- $"BCA8 E157 DFD5 E879 C14C 1B1A 3431 2856" /* ¼¨áWßÕèyÁL..41(V */
- $"0E74 D87F 7691 A923 632A 5EBC 6E95 6A46" /* .tØ.v‘©#c*^¼n•jF */
- $"8E68 7118 3704 6E41 37CB C9AC 7F84 1005" /* Žhq.7.nA7Ëɬ.„.. */
- $"C308 7C90 C6E0 B56C 8CF8 3C33 A97E C46C" /* Ã.|ÆàµlŒø<3©~Äl */
- $"E373 91A9 4A3F 7331 481D 843F 0472 59DC" /* ãs‘©J?s1H.„?.rYÜ */
- $"0837 85BA 4867 C202 6BFC 7433 F093 530F" /* .7…ºHgÂ.küt3ð“S. */
- $"D721 8927 26CF AA6B B4E1 7981 FCE4 9F4E" /* ×!‰'&Ϫk´áyüäŸN */
- $"1105 9E7B 7F68 1CE7 D811 E270 FCA3 9CDE" /* ..ž{.h.çØ.âpü£œÞ */
- $"BFE6 48BA AC07 B55E 4E7F 5946 115B B1DC" /* ¿æHº¬.µ^N.YF.[±Ü */
- $"F694 3A9B EADD 7971 E0F1 B6E1 C6FF 4337" /* ö”:›êÝyqàñ¶áÆÿC7 */
- $"F543 A074 FC74 AD1F 45BF 7867 C472 7605" /* õC tüt­.E¿xgÄrv. */
- $"1786 E496 2D22 22BE 5760 9ACE A5C9 22B9" /* .†ä–-""¾W`šÎ¥É"¹ */
- $"9A14 4136 93E4 3E4A 715C 6F69 8447 5764" /* š.A6“ä>Jq\oi„GWd */
- $"D761 77A8 2C3F E200 ACAD 8331 11D0 ABE6" /* ×aw¨,?â.¬­ƒ1.Ыæ */
- $"EA7B 5A22 58CF 097E 732F 894B E99C 6BAF" /* ê{Z"XÏÆ~s/‰Kéœk¯ */
- $"B36C 68AA 5668 EF92 66E9 DDF9 FF78 DB89" /* ³lhªVhï’féÝùÿxÛ‰ */
- $"FC78 2032 99D9 62F0 1380 3FE8 41DF F341" /* üx 2™Ùbð.€?èAßóA */
- $"F1FD 7F08 CE2E F09A 9335 6735 0FAD 8093" /* ñý..Î.ðš“5g5.­€“ */
- $"B6B1 53A2 964F EA7E 72A2 9A29 794D 98F0" /* ¶±S¢–Oê~r¢š)yM˜ð */
- $"DD57 AE65 C61E DDEC BDB4 35C2 D050 E063" /* ÝW®eÆ.Ýì½´5ÂÐPàc */
- $"5F54 BCA5 928D 786D CAE3 8F96 BFEB 027E" /* _T¼¥’xmÊã–¿ë.~ */
- $"6BBC 8795 7C88 1A2C 9908 36A1 6CAB 9268" /* k¼‡•|ˆ.,™.6¡l«’h */
- $"EB0D 816F F34D 55F5 B562 BCFF 4190 EE42" /* ë.oóMUõµb¼ÿAîB */
- $"F195 E7F3 E220 7E51 74A2 FA23 23F7 20F0" /* ñ•çóâ ~Qt¢ú##÷ ð */
- $"985F 011C 34B8 C988 C519 C623 81BC D026" /* ˜_..4¸ÉˆÅ.Æ#¼Ð& */
- $"A8C5 B82C 7A7F 86F7 E60E 44F2 CD53 6FAB" /* ¨Å¸,z.†÷æ.DòÍSo« */
- $"2D69 1FD4 75B7 A011 80E7 09B3 B9CF 4503" /* -i.Ôu· .€çƳ¹ÏE. */
- $"F4A5 1DE3 AE8A 96F7 E245 0DF9 3859 24FA" /* ô¥.㮊–÷âE.ù8Y$ú */
- $"7B43 665F B15E D4D3 FB2A 666E FB6A 6CA8" /* {Cf_±^ÔÓû*fnûjl¨ */
- $"9CAF C052 D658 6DC3 BDD1 C752 21FA 6426" /* œ¯ÀRÖXmýÑÇR!úd& */
- $"857C D05D 41C2 0241 306C 6FD4 81E3 69F7" /* …|Ð]AÂ.A0loÔãi÷ */
- $"A6F5 227F 39F9 780E 829A 17A9 C649 2BF5" /* ¦õ".9ùx.‚š.©ÆI+õ */
- $"01DD E500 A973 E599 890C A548 CE34 2877" /* .Ýå.©s噉.¥HÎ4(w */
- $"D160 A2EE 4B3B CC7A 0C87 6723 51FD C222" /* Ñ`¢îK;Ìz.‡g#QýÂ" */
- $"9BFB E72D 2769 6250 2054 22C9 ABB2 3125" /* ›ûç-'ibP T"É«²1% */
- $"7DA0 73A3 C083 1AAD 90F2 F0A8 C22D 9DF5" /* } s£Àƒ.­òð¨Â-õ */
- $"3FFB 6B56 18BE 61A6 B198 F1BC 1E4E 0CFE" /* ?ûkV.¾a¦±˜ñ¼.N.þ */
- $"B323 8275 A644 CAC4 D36B 9AF9 FCC8 5DEC" /* ³#‚u¦DÊÄÓkšùüÈ]ì */
- $"292B CC9B A0B6 9148 09DF E46D 1B2C 4EDF" /* )+Ì› ¶‘HÆßäm.,Nß */
- $"EDB9 2DB4 BAD5 C50B 2115 C476 E09A F407" /* í¹-´ºÕÅ.!.Ävàšô. */
- $"5EE8 2E9F 870F A319 32D4 EBEC CB7B FDE9" /* ^è.Ÿ‡.£.2ÔëìË{ýé */
- $"FB5C 0D41 61F3 BA97 0F9E 558F 6E39 C213" /* û\.Aaóº—.žUn9Â. */
- $"3101 A5E8 ECEC 15E5 4F29 F69A 58CD D82D" /* 1.¥èìì.åO)öšXÍØ- */
- $"986E E8E0 6898 17CC 98C4 C851 AC75 9306" /* ˜nèàh˜.̘ÄÈQ¬u“. */
- $"5241 0350 E2EB 38CA 1682 6132 FF45 578A" /* RA.Pâë8Ê.‚a2ÿEWŠ */
- $"FA7F 7557 AC2C 9A18 3835 A62B 7D09 0992" /* ú.uW¬,š.85¦+}ÆÆ’ */
- $"EF78 BD49 5317 373A B07D 6420 DC30 5067" /* ïx½IS.7:°}d Ü0Pg */
- $"A659 F316 4436 8E8E 9786 1163 A6A5 B841" /* ¦Yó.D6ŽŽ—†.c¦¥¸A */
- $"99AA 4E1C 6163 309A 3C23 0208 FF4B 2967" /* ™ªN.ac0š<#..ÿK)g */
- $"B7F7 37E4 A337 D0DC C48A A742 FB2D C529" /* ·÷7ä£7ÐÜÄŠ§Bû-Å) */
- $"BC6C 5BBE BC5C 03B1 F87F D7EA F5AC B94B" /* ¼l[¾¼\.±ø.×êõ¬¹K */
- $"5A88 84AB E44E BE6A F337 96B0 7CB6 1140" /* Zˆ„«äN¾jó7–°|¶.@ */
- $"25CB 45D6 BE02 A9D4 7868 1EDD F660 7963" /* %ËEÖ¾.©Ôxh.Ýö`yc */
- $"B438 C030 3EA5 51FA F451 FA84 A6FF 2E5A" /* ´8À0>¥QúôQú„¦ÿ.Z */
- $"EA95 2300 C0F4 39AA 42BA 4120 4EEC AFDD" /* ê•#.Àô9ªBºA Nì¯Ý */
- $"20B4 6C42 0552 1177 6F1A AC6D FE8B 98E1" /* ´lB.R.wo.¬mþ‹˜á */
- $"D3FB F52E BCE3 5BB1 7235 F597 3E0D 8C46" /* Óûõ.¼ã[±r5õ—>.ŒF */
- $"7361 1E2A C081 CA97 C8EA CD3F E91D 823F" /* sa.*ÀÊ—ÈêÍ?é.‚? */
- $"73A7 5EA1 F641 9CBD 219D D7E4 EE0D 270E" /* s§^¡öAœ½!×äî.'. */
- $"14DF F756 B4E5 062C 8251 4AD0 B090 A0AF" /* .ß÷V´å.,‚QJа ¯ */
- $"CD2A 3C80 6068 C9CD C3D7 3D7F 258B 365A" /* Í*<€`hÉÍÃ×=.%‹6Z */
- $"5E1A 90DC D058 4ED9 DF50 6F40 07A9 2BDE" /* ^.ÜÐXNÙßPo@.©+Þ */
- $"8486 5404 AB9C E323 0C4E D3DB 8352 0C0F" /* „†T.«œã#.NÓÛƒR.. */
- $"CD59 A5F5 56CC 0BB2 B603 85C3 C709 7D6E" /* ÍY¥õVÌ.²¶.…ÃÇÆ}n */
- $"A10E 33C2 AE0F D52F 5AD7 2279 E6EB 7E6C" /* ¡.3®.Õ/Z×"yæë~l */
- $"1757 589D C6DC B4FD 470C FFD9" /* .WXÆÜ´ýG.ÿÙ */
-};
-
diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
deleted file mode 100644
index 495ec37f53..0000000000
--- a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns
deleted file mode 100644
index da5307e389..0000000000
--- a/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/firstlook-dmg/background.jpg b/indra/newview/installers/darwin/firstlook-dmg/background.jpg
deleted file mode 100644
index 55294dcc9a..0000000000
--- a/indra/newview/installers/darwin/firstlook-dmg/background.jpg
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r b/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r
deleted file mode 100644
index aa3cfb87d8..0000000000
--- a/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r
+++ /dev/null
@@ -1,6996 +0,0 @@
-data 'alis' (0) {
- $"0000 0000 0112 0002 0001 036D 6277 0000" /* ...........mbw.. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 C135 A717 482B 0000 0000" /* ......Á5§.H+.... */
- $"0002 0C41 7070 6C69 6361 7469 6F6E 7300" /* ...Applications. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 00E2 4F18 C2E8 9FB0 0000 0000 0000" /* ...âO.Â蟰...... */
- $"0000 FFFF FFFF 0000 0920 0000 0000 0000" /* ..ÿÿÿÿ..Æ ...... */
- $"0000 0000 0000 0000 0003 6D62 7700 0010" /* ..........mbw... */
- $"0008 0000 C136 0987 0000 0011 0008 0000" /* ....Á6Ƈ........ */
- $"C2E9 0220 0000 0001 0000 0002 0010 6D62" /* Âé. ..........mb */
- $"773A 4170 706C 6963 6174 696F 6E73 000E" /* w:Applications.. */
- $"001A 000C 0041 0070 0070 006C 0069 0063" /* .....A.p.p.l.i.c */
- $"0061 0074 0069 006F 006E 0073 000F 0008" /* .a.t.i.o.n.s.... */
- $"0003 006D 0062 0077 0012 000C 4170 706C" /* ...m.b.w....Appl */
- $"6963 6174 696F 6E73 0013 0001 2F00 FFFF" /* ications..../.ÿÿ */
- $"0000" /* .. */
-};
-
-
-data 'icns' (-16455) {
- $"6963 6E73 0001 B3AC 6973 3332 0000 0224" /* icns..³¬is32...$ */
- $"9F00 005F 8061 005D 8700 055D 9AA2 A0A4" /* Ÿ.._€a.]‡..]𢠤 */
- $"8986 0008 557D B3B2 B1B3 A881 8081 8104" /* ‰†..U}³²±³¨€. */
- $"826F 577E AF82 A801 B3AE 82AD 03AF 7B7A" /* ‚oW~¯‚¨.³®‚­.¯{z */
- $"A781 A203 9EB7 C89D 81A2 03A6 776E 9A80" /* §¢.ž·È¢.¦wnš€ */
- $"9705 959F D3DC A295 8097 5899 6C67 8F8D" /* —.•ŸÓÜ¢•€—X™lg */
- $"8E89 85C9 BCA9 C883 898D 8D8E 6561 8585" /* މ…ɼ©Èƒ‰Žea…… */
- $"83A8 B7F3 BAB4 DFB6 AA84 8585 605E 7B7D" /* ƒ¨·óº´ß¶ª„……`^{} */
- $"79D0 F9E0 F0F2 DAE1 D87C 7D7B 5D5B 7476" /* yÐùàðòÚáØ|}{][tv */
- $"7099 D876 7373 76CA 8A72 7673 5B5A 6D70" /* p™ØvssvÊŠrvs[Zmp */
- $"6B9B 816C 6F6F 67B3 C567 706C 5A59 686B" /* k›loog³ÅgplZYhk */
- $"6B67 686B 806A 056B 6F6A 6B67 5A88 5900" /* kghk€j.kojkgZˆY. */
- $"5882 598A 5801 0059 9F00 0482 8383 8480" /* X‚YŠX..YŸ..‚ƒƒ„€ */
- $"8700 057F B7BE BDC0 A786 0008 799E D0CE" /* ‡...·¾½À§†..yžÐÎ */
- $"CECF C5A1 A081 A105 A390 7AA0 D0CA 80C9" /* ÎÏÅ¡ ¡.£z ÐÊ€É */
- $"01CA D183 CE03 D09C 9ECD 81C9 03C7 D4DE" /* .ÊуÎ.МžÍÉ.ÇÔÞ */
- $"C681 C903 CD9A 94C5 80C2 05C1 C6E3 E9C8" /* ÆÉ.Íš”Å€Â.ÁÆãéÈ */
- $"C180 C20D C491 8DBD BBBC B9B6 DDD7 CCDD" /* Á€Â.Ä‘½»¼¹¶Ý×ÌÝ */
- $"B5B9 80BC 468B 87B4 B4B3 C8D1 F7D3 CFEA" /* µ¹€¼F‹‡´´³ÈÑ÷ÓÏê */
- $"D0C9 B4B4 B385 83AA ABA9 E0FB EAF5 F6E5" /* ÐÉ´´³…ƒª«©àûêõöå */
- $"EAE5 AAAB A981 80A0 A39E BAE4 A2A0 A1A2" /* ê媫©€ £žºä¢ ¡¢ */
- $"DAAF 9FA3 9F7F 7E97 9B97 B8A6 979A 9A94" /* Ú¯Ÿ£Ÿ.~—›—¸¦—šš” */
- $"CAD6 949B 977D 7D90 9493 9091 8293 0496" /* ÊÖ”›—}}”“‘‚“.– */
- $"9294 907D 8E7C 8A7B 0100 7C9F 0000 7A80" /* ’”}Ž|Š{..|Ÿ..z€ */
- $"7C00 7887 0005 77B1 B8B7 BBA0 8600 0871" /* |.x‡..w±¸·» †..q */
- $"97CB C9C8 CAC0 9B99 819A 049C 8972 99CA" /* —ËÉÈÊÀ›™š.œ‰r™Ê */
- $"82C3 00CB 83C8 03CA 9596 C681 C203 BFCF" /* ‚Ã.˃È.Ê•–ÆÂ.¿Ï */
- $"DABF 81C2 03C6 938C BD80 BA05 B9BF E0E7" /* Ú¿Â.Æ“Œ½€º.¹¿àç */
- $"C1B9 80BA 57BC 8985 B5B3 B3B0 ADD9 D2C6" /* Á¹€ºW¼‰…µ³³°­ÙÒÆ */
- $"D9AC B0B3 B3B4 827F ACAB AAC2 CCF6 CECA" /* Ù¬°³³´‚.¬«ªÂÌöÎÊ */
- $"E8CB C3AB ACAA 7D7B A1A3 A0DD FAE9 F4F5" /* èË묪}{¡£ Ýúéôõ */
- $"E3E8 E3A2 A3A0 7A78 989B 96B3 E29A 9898" /* ãè㢣 zx˜›–³âš˜˜ */
- $"9AD7 A897 9B97 7776 8F93 8FB2 9F8F 9292" /* š×¨—›—wv“²Ÿ’’ */
- $"8BC5 D28C 938F 7575 888C 8B89 8982 8B04" /* ‹ÅÒŒ“uuˆŒ‹‰‰‚‹. */
- $"8F8A 8C88 758E 748A 7301 0074 7338 6D6B" /* ŠŒˆuŽtŠs..ts8mk */
- $"0000 0108 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 1E24 2424 1600 0000 0000" /* .......$$$...... */
- $"0000 0000 0011 BDC8 C8C8 9600 0000 0000" /* ......½ÈÈÈ–..... */
- $"0000 0000 048C FFFF FFFF F5A7 9C9E 9E9E" /* .....Œÿÿÿÿõ§œžžž */
- $"9E9E 6003 8AFF FCFC FCFC FEFF FFFF FFFF" /* žž`.Šÿüüüüþÿÿÿÿÿ */
- $"FFFF FF7A 89FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿz‰ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF7A 73FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿzsÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF64 62FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdbÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF53 53FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿSSÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF45 48FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿEHÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF3C 41FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿ<Aÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FD35 3DFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿý5=ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FA30 3CFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿú0<ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FB2F 1247 4B4A 4A4A 4A4A 4A4A 4A4A" /* ÿÿû/.GKJJJJJJJJJ */
- $"4A4B 450F 0101 0201 0101 0101 0101 0101" /* JKE............. */
- $"0102 0001 696C 3332 0000 05AB FF00 BE00" /* ....il32...«ÿ.¾. */
- $"025A 7881 847F 0064 9200 0262 BBC4 83C2" /* .Zx„..d’..b»ÄƒÂ */
- $"02C7 8451 9000 0255 86BF 84BC 03BF A064" /* .Ç„Q..U†¿„¼.¿ d */
- $"6389 6400 6281 0003 5770 A2A2 85A1 01A3" /* c‰d.b..Wp¢¢…¡.£ */
- $"9D89 9B07 9C97 6758 005B 95AC 88A7 02A8" /* ‰›.œ—gX.[•¬ˆ§.¨ */
- $"A4A7 89A8 05AB 925A 61A7 AE88 AC03 ABCA" /* ¤§‰¨.«’Za§®ˆ¬.«Ê */
- $"AEAB 88AC 05AE A15E 5B9A A788 A503 A0D7" /* ®«ˆ¬.®¡^[š§ˆ¥. × */
- $"D79F 88A5 05A8 9559 5990 A288 9F04 9BAB" /* ןˆ¥.¨•YY¢ˆŸ.›« */
- $"FBAE 9C87 9F05 A28B 5857 879D 879A 0595" /* û®œ‡Ÿ.¢‹XW‡‡š.• */
- $"BDD6 E6E3 9487 9A05 9D82 5656 7F97 8594" /* ½Öæã”‡š.‚VV.—…” */
- $"0995 8FB3 F4CF B1FF AD90 9585 9405 977A" /* Æ•³ôϱÿ­•…”.—z */
- $"0000 7793 8690 078D CDF8 B886 E8E5 8B86" /* ..w“†.Íø¸†è勆 */
- $"9005 9372 0000 708F 828C 808B 0984 BBF7" /* .“r..p‚Œ€‹Æ„»÷ */
- $"C687 85AB FFA9 8580 8B82 8C05 8E6D 0000" /* Ƈ…«ÿ©…€‹‚Œ.Žm.. */
- $"6B8A 8287 0D88 8785 8FF3 FDA1 8186 84E5" /* kŠ‚‡.ˆ‡…óý¡†„å */
- $"E484 8684 8705 8868 0000 6685 8183 117E" /* 䄆„‡.ˆh..f…ƒ.~ */
- $"B3E3 D0D2 FFDC D4DF DDDB D2FD D0DE E2B7" /* ³ãÐÒÿÜÔßÝÛÒýÐÞâ· */
- $"8082 8304 6400 0062 8081 7F06 76C5 FFDB" /* €‚ƒ.d..b€..vÅÿÛ */
- $"F9F3 E381 FF06 F6D4 BFF4 FFD3 7882 7F03" /* ùóãÿ.öÔ¿ôÿÓx‚.. */
- $"6100 005F 827B 0675 B0D9 E1FF C8D8 82DF" /* a.._‚{.u°ÙáÿÈØ‚ß */
- $"05BF F3C9 DCB9 7681 7B04 7A5E 0000 5C82" /* .¿óÉܹv{.z^..\‚ */
- $"7706 786F 96FF E879 7281 7306 7278 C8C2" /* w.xo–ÿèyrs.rxÈÂ */
- $"7074 7880 7706 7875 5C00 005A 7382 7405" /* ptx€w.xu\..Zs‚t. */
- $"71C1 E19A 6D74 8173 0574 6BA2 FFAD 6C81" /* qÁášmts.tk¢ÿ­l */
- $"7406 7571 5B00 005A 6F81 7104 6F77 F2AF" /* t.uq[..Zoq.owò¯ */
- $"6984 7105 6E7E FAFB 836D 8071 0772 6D5A" /* i„q.n~úûƒm€q.rmZ */
- $"0000 586C 6F80 6E03 6C7B 9368 866E 0467" /* ..Xlo€n.l{“h†n.g */
- $"C3FA 8B69 806E 076F 6A59 0000 586A 6E81" /* Ãú‹i€n.ojY..Xjn */
- $"6D01 6C68 876D 036B 717D 6B81 6D07 6E69" /* m.lh‡m.kq}km.ni */
- $"5900 0058 666A 8E69 0168 6682 6903 6A65" /* Y..XfjŽi.hf‚i.je */
- $"5900 BD59 0000 9B59 9E00 FF00 BE00 027D" /* Y.½Y..›Yž.ÿ.¾..} */
- $"98A0 829E 029F 9E85 9200 0284 D5DE 83DC" /* ˜ ‚ž.Ÿž…’..„ÕÞƒÜ */
- $"02E0 A275 9000 0279 A7DB 84D8 03DB BD87" /* .à¢u..y§Û„Ø.Û½‡ */
- $"8689 8700 8581 0003 7A92 C0C0 85BF 01C0" /* †‰‡.…..z’ÀÀ…¿.À */
- $"BB89 B907 BAB4 887B 007E B7CC 88C7 01C8" /* »‰¹.º´ˆ{.~·ÌˆÇ.È */
- $"C68A C805 CBB2 7C84 CAD1 89CF 02DE CFCE" /* ÆŠÈ.˲|„ÊщÏ.ÞÏÎ */
- $"88CF 05D2 C380 7FBF CC88 CA03 C7E8 E5C6" /* ˆÏ.ÒÀ.¿ÌˆÊ.ÇèåÆ */
- $"88CA 05CD B87C 7CB7 CA88 C704 C4CD FCCD" /* ˆÊ.͸||·ÊˆÇ.ÄÍüÍ */
- $"C587 C705 CAB0 7A7A AFC7 87C4 05C1 D4E3" /* ŇÇ.ʰzz¯Ç‡Ä.ÁÔã */
- $"F0ED C087 C405 C8A8 7979 A7C4 85C0 09C1" /* ðíÀ‡Ä.Ȩyy§Ä…ÀÆÁ */
- $"BDD0 F7E1 D1FF CDBE C185 C005 C4A1 0000" /* ½Ð÷áÑÿ;Á…À.Ä¡.. */
- $"A0C1 86BD 07BA DEFB D5B7 F2EE B986 BD05" /*  Á†½.ºÞûÕ·ò½. */
- $"C09A 0000 9ABE 85BA 09B6 D4F9 DBB8 B6CD" /* Àš..š¾…ºÆ¶ÔùÛ¸¶Í */
- $"FFCA B785 BA05 BD94 0000 94B9 83B6 0EB4" /* ÿÊ·…º.½”..”¹ƒ¶.´ */
- $"B3B9 F7FE C4B0 B4B2 EFED B2B4 B4B5 82B6" /* ³¹÷þİ´²ïí²´´µ‚¶ */
- $"05B8 8F00 008E B481 B211 AFCD EBDF E0FF" /* .¸..Ž´².¯Íëßàÿ */
- $"E8E2 E9E8 E6E0 FEDF E8EA D0B0 81B2 05B3" /* èâéèæàþßèêа².³ */
- $"8A00 0089 AF81 AD06 A8D9 FFE7 FBF7 EB81" /* Š..‰¯­.¨Ùÿçû÷ë */
- $"FF06 F9E1 D3F8 FFE3 A980 AD05 AEAD 8600" /* ÿ.ùáÓøÿã©€­.®­†. */
- $"0086 82A9 06A5 CBE5 EAFF DAE5 82EA 05D3" /* .†‚©.¥ËåêÿÚå‚ê.Ó */
- $"F7DA E8D1 A680 A906 AAA7 8300 0082 A382" /* ÷ÚèѦ€©.ª§ƒ..‚£‚ */
- $"A405 9FB7 FFF0 A5A1 81A2 05A1 A5D9 D39F" /* ¤.Ÿ·ÿ𥡢.¡¥ÙÓŸ */
- $"A281 A406 A5A1 8000 0080 9F82 A004 9ED2" /* ¢¤.¥¡€..€Ÿ‚ .žÒ */
- $"E9BA 9B83 A004 9ABF FFC5 9A81 A007 A19C" /* 麛ƒ .š¿ÿÅš .¡œ */
- $"7F00 007E 999D 809B 059A 9FF6 C696 9C83" /* ...~™€›.šŸöÆ–œƒ */
- $"9B05 99A4 FBFB A799 809B 079C 977D 0000" /* ›.™¤ûû§™€›.œ—}.. */
- $"7C95 9980 9803 97A1 B295 8698 0494 D5FC" /* |•™€˜.—¡²•†˜.”Õü */
- $"AC95 8098 0799 937C 0000 7C93 9782 9600" /* ¬•€˜.™“|..|“—‚–. */
- $"9387 9603 9599 A295 8196 0797 917C 0000" /* “‡–.•™¢•–.—‘|.. */
- $"7B8E 928D 9102 9290 8F82 9103 928C 7B00" /* {Ž’‘.’‚‘.’Œ{. */
- $"BD7C 0000 9B7C 9E00 FF00 BE00 0275 9199" /* ½|..›|ž.ÿ.¾..u‘™ */
- $"8498 007E 9200 027D D0D9 83D7 02DB 9B6C" /* „˜.~’..}ÐÙƒ×.Û›l */
- $"9000 0271 A0D5 84D2 03D5 B67F 7E89 7F00" /* ..q Õ„Ò.Õ¶.~‰.. */
- $"7D81 0003 728B BBBB 85BA 02BB B6B3 88B4" /* }..r‹»»…º.»¶³ˆ´ */
- $"08B5 AF81 7300 76B0 C6C2 87C1 01C2 C089" /* .µ¯s.v°ÆÂ‡Á.ÂÀ‰ */
- $"C206 C3C5 AB75 7CC3 CA89 C801 DBC9 89C8" /* Â.ÃÅ«u|ÃʉÈ.ÛÉ‰È */
- $"05CB BD78 77B9 C588 C304 C0E5 E2BF C487" /* .˽xw¹ÅˆÃ.Àåâ¿Ä‡ */
- $"C305 C6B2 7574 B0C3 87C0 05BF BCC7 FCC7" /* Ã.Ʋut°Ã‡À.¿¼ÇüÇ */
- $"BE87 C005 C3A9 7272 A7BF 87BC 05B9 D0E1" /* ¾‡À.érr§¿‡¼.¹Ðá */
- $"EEEB B887 BC05 C0A1 7171 A0BC 86B8 07B5" /* î븇¼.À¡qq ¼†¸.µ */
- $"CBF6 DDCB FFC7 B586 B805 BB99 0000 98B9" /* ËöÝËÿǵ†¸.»™..˜¹ */
- $"86B5 07B2 DBFA D0AE F0EC B186 B505 B892" /* †µ.²ÛúЮð챆µ.¸’ */
- $"0000 91B5 82B2 80B1 09AC D0F9 D7AF ADC7" /* ..‘µ‚²€±Æ¬Ðùׯ­Ç */
- $"FFC4 AD80 B182 B205 B48C 0000 8BB1 81AD" /* ÿÄ­€±‚².´Œ..‹±­ */
- $"11AE ADAC ABB1 F6FD BDA8 ABAA EDEB A9AB" /* .®­¬«±öý½¨«ªíë©« */
- $"ACAC AE81 AD05 AF87 0000 86AB 81A9 11A6" /* ¬¬®­.¯‡..†«©.¦ */
- $"C8E9 DCDE FFE5 DFE7 E6E4 DDFE DCE6 E9CB" /* ÈéÜÞÿåßçæäÝþÜæéË */
- $"A781 A905 AA82 0000 81A6 81A5 069F D6FF" /* §©.ª‚..¦¥.ŸÖÿ */
- $"E4FA F6EA 81FF 06F8 DFCF F7FF E0A0 80A5" /* äúöêÿ.øßÏ÷ÿà €¥ */
- $"05A6 A47E 0000 7D82 A006 9BC6 E3E8 FFD6" /* .¦¤~..}‚ .›ÆãèÿÖ */
- $"E282 E805 CFF6 D7E6 CC9C 80A0 06A1 9E7B" /* â‚è.Ïö×æÌœ€ .¡ž{ */
- $"0000 7A9B 829C 0496 B1FF EF9D 8399 049C" /* ..z›‚œ.–±ÿ.œ */
- $"D6D0 969A 819C 069D 9979 0000 7897 8198" /* ÖЖšœ.™y..x—˜ */
- $"0597 95CF E7B4 9283 9704 91BA FFC0 9181" /* .—•Ïç´’ƒ—.‘ºÿÀ‘ */
- $"9807 9994 7700 0076 9295 8094 0493 98F5" /* ˜.™”w..v’•€”.“˜õ */
- $"C28E 8494 0592 9DFB FBA0 9180 9407 958F" /* ÂŽ„”.’ûû ‘€”.• */
- $"7500 0074 8E91 8090 038F 9AAC 8C86 9004" /* u..tŽ‘€.š¬Œ†. */
- $"8BD1 FBA6 8C80 9007 918B 7400 0074 8B8F" /* ‹Ñû¦Œ€.‘‹t..t‹ */
- $"808E 048F 8E8B 8E8F 848E 048F 8D91 9B8D" /* €Ž.ދބŽ.‘› */
- $"818E 078F 8974 0000 7487 8B8E 8A01 8987" /* Ž.‰t..t‡‹ŽŠ.‰‡ */
- $"828A 038B 8574 00BD 7400 009B 749E 006C" /* ‚Š.‹…t.½t..›tž.l */
- $"386D 6B00 0004 0800 0000 0000 0000 0000" /* 8mk............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0B76 8889 8989" /* ...........vˆ‰‰‰ */
- $"8989 8988 3800 0000 0000 0000 0000 0000" /* ‰‰‰ˆ8........... */
- $"0000 0000 0000 0000 0000 36FF FFFF FFFF" /* ..........6ÿÿÿÿÿ */
- $"FFFF FFFF A301 0000 0000 0000 0000 0000" /* ÿÿÿÿ£........... */
- $"0000 0000 0000 0000 0006 A4FF FFFF FFFF" /* ..........¤ÿÿÿÿÿ */
- $"FFFF FFFF DE59 3F40 4040 4040 4040 4040" /* ÿÿÿÿÞY?@@@@@@@@@ */
- $"4040 4033 0000 0000 1384 F8F3 F3F3 F3F3" /* @@@3.....„øóóóóó */
- $"F3F3 F3F3 F7F9 F7F7 F7F7 F7F7 F7F7 F7F7" /* óóóó÷ù÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F1 520D 001D E1FF FAFB FBFB FBFB" /* ÷÷÷ñR...áÿúûûûûû */
- $"FBFB FBFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ûûûûûûûûûûûûûûûû */
- $"FBFB FBFB FFCD 0E39 FFFF FFFF FFFF FFFF" /* ûûûûÿÍ.9ÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 1F26 F6FF FFFF FFFF FFFF" /* ÿÿÿÿÿø.&öÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE5 1318 ECFF FFFF FFFF FFFF" /* ÿÿÿÿÿå..ìÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD5 0A0F DDFF FFFF FFFF FFFF" /* ÿÿÿÿÿÕÂ.Ýÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC6 0206 D0FF FFFF FFFF FFFF" /* ÿÿÿÿÿÆ..Ðÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB6 0000 C2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¶..Âÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 0000 B2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¥..²ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF95 0000 A4FF FFFF FFFF FFFF" /* ÿÿÿÿÿ•..¤ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF87 0000 96FF FFFF FFFF FFFF" /* ÿÿÿÿÿ‡..–ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF7A 0000 8AFF FFFF FFFF FFFF" /* ÿÿÿÿÿz..Šÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6D 0000 7FFF FFFF FFFF FFFF" /* ÿÿÿÿÿm...ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF63 0000 77FF FFFF FFFF FFFF" /* ÿÿÿÿÿc..wÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5A 0000 6FFF FFFF FFFF FFFF" /* ÿÿÿÿÿZ..oÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF54 0000 69FF FFFF FFFF FFFF" /* ÿÿÿÿÿT..iÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4F 0000 65FF FFFF FFFF FFFF" /* ÿÿÿÿÿO..eÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4C 0000 64FF FFFF FFFF FFFF" /* ÿÿÿÿÿL..dÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4B 0000 61FF FFFF FFFF FFFF" /* ÿÿÿÿÿK..aÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF48 0004 2C6D 7574 7474 7474" /* ÿÿÿÿÿH..,muttttt */
- $"7474 7474 7474 7474 7474 7474 7474 7474" /* tttttttttttttttt */
- $"7474 7475 6824 0202 0D18 1C1C 1C1C 1C1C" /* tttuh$.......... */
- $"1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C" /* ................ */
- $"1C1C 1C1C 170C 0100 0103 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0301 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0069 6833 3200 0009 DEFF" /* .......ih32..ÆÞÿ */
- $"00FF 00FF 00AD 0001 5E66 8865 0261 5859" /* .ÿ.ÿ.­..^fˆe.aXY */
- $"9C00 025E A6BA 87B7 04B9 AE67 5659 9B00" /* œ..^¦º‡·.¹®gVY›. */
- $"0266 BABF 87BE 04BF BC70 5459 9A00 0252" /* .fº¿‡¾.¿¼pTYš..R */
- $"81BD 89BA 03BC 8652 5491 5585 0003 5580" /* ½‰º.¼†RT‘U…..U€ */
- $"B7BA 89B9 02BA B497 918F 0191 7683 0003" /* ·º‰¹.º´—‘.‘vƒ.. */
- $"5864 9399 8B97 0098 929B 039D 855F 5A80" /* Xd“™‹—.˜’›.…_Z€ */
- $"0002 649D A990 A500 A490 A509 A6A9 9B65" /* ..d©¥.¤¥Æ¦©›e */
- $"0000 85B4 AFAF 8EAE 03B0 AEAC AF8E AE07" /* ..…´¯¯Ž®.°®¬¯Ž®. */
- $"AFAF B280 0000 80AD 8FA9 04A8 B2E7 ACA8" /* ¯¯²€..€­©.¨²ç¬¨ */
- $"90A9 05AB 7A00 0076 A98F A604 A5A4 F1E0" /* ©.«z..v©¦.¥¤ñà */
- $"A08F A606 A7A6 7100 006D A390 A204 9DC8" /*  ¦.§¦q..m£¢.È */
- $"FFB9 9C8E A207 A3A0 6A00 0065 9D9F 8D9E" /* ÿ¹œŽ¢.£ j..eŸž */
- $"069F 9C96 A2FA EF9C 8E9E 079F 9A65 0000" /* .Ÿœ–¢úž.Ÿše.. */
- $"6097 9C8D 9B07 97A5 E2C6 D2FF C394 8D9B" /* `—œ›.—¥âÆÒÿÔ› */
- $"079C 9461 0000 5E90 988C 9709 959A D5CE" /* .œ”a..^˜Œ—Æ•šÕÎ */
- $"E4B2 FCF4 9A95 8C97 0799 8D5E 0000 5A8B" /* ä²üôš•Œ—.™^..Z‹ */
- $"968C 9409 8EC8 FFF6 C18D DDFF C78C 8C94" /* –Œ”ÆŽÈÿöÁÝÿÇŒŒ” */
- $"0796 875B 0000 5885 938B 910B 8F8F E5FF" /* .–‡[..X…“‹‘.åÿ */
- $"FFA9 87AA FFF7 988E 8B91 0793 8159 0000" /* ÿ©‡ªÿ÷˜Ž‹‘.“Y.. */
- $"577F 908B 8E0B 87CF D4D0 CA89 8D8B E0FF" /* W.‹Ž.‡ÏÔÐʉ‹àÿ */
- $"C786 8B8E 0790 7B58 0000 5779 8C86 8A81" /* dž‹Ž.{X..WyŒ†Š */
- $"8B0D 84A5 FFFF E38B 898B 85A8 FFF8 9387" /* ‹.„¥ÿÿ㋉‹…¨ÿø“‡ */
- $"818B 868A 078C 7557 0000 5674 8A85 8800" /* ‹†Š.ŒuW..VtŠ…ˆ. */
- $"8680 820E 8385 E4FF FFB9 7C83 8381 7FDD" /* †€‚.ƒ…äÿÿ¹|ƒƒ.Ý */
- $"FFC6 7E81 8200 8585 8807 8A71 5759 0056" /* ÿÆ~‚.……ˆ.ŠqWY.V */
- $"6F87 8485 1983 929F A3A0 94B0 FFFF E39D" /* o‡„….ƒ’Ÿ£ ”°ÿÿã */
- $"9F9E 9DA3 9AB0 FBF4 98A0 A09F A192 8484" /* Ÿž£š°ûô˜  Ÿ¡’„„ */
- $"8507 876D 5759 0056 6984 8482 197C A7EB" /* ….‡mWY.Vi„„‚.|§ë */
- $"FBF1 C2EC FFFB C1ED F2F6 ECFB EDD9 DBFF" /* ûñÂìÿûÁíòöìûíÙÛÿ */
- $"D4EE F0F6 F6B7 7C84 8207 8369 5700 5956" /* Ôîðöö·|„‚.ƒiW.YV */
- $"6481 847F 0979 A3FF FFEB CCFF FFD5 E084" /* d„.Æy£ÿÿëÌÿÿÕà„ */
- $"FF03 C8F1 BCC4 80FF 01C0 7785 7F06 6557" /* ÿ.Èñ¼Ä€ÿ.Àw…..eW */
- $"5959 5661 7E84 7D08 76A3 FFFF C3F4 FFF5" /* YYVa~„}.v£ÿÿÃôÿõ */
- $"CB85 FF08 EDA8 CCC0 F2FF FFC1 7485 7D06" /* Ë…ÿ.í¨ÌÀòÿÿÁt…}. */
- $"6358 5959 575E 7B84 7A09 7692 D0BE D6FF" /* cXYYW^{„zÆv’оÖÿ */
- $"FFC2 B9D0 84CF 08CD B9FF F1B1 CED0 A574" /* ÿ¹ЄÏ.͹ÿñ±ÎÐ¥t */
- $"847A 0679 6058 5959 585D 8678 0776 6A9C" /* „z.y`XYYX]†x.vjœ */
- $"FFFF F081 7086 7106 75D1 D89D 6A71 7484" /* ÿÿðp†q.uÑØjqt„ */
- $"7808 7976 5E58 5959 585B 7486 7505 73B9" /* x.yv^XYYX[t†u.s¹ */
- $"F5FF AC6D 8775 0570 8CEB F889 6F85 7508" /* õÿ¬m‡u.pŒëø‰o…u. */
- $"7672 5C58 5959 5859 7285 7306 6F8A E1C6" /* vr\XYYXYr…s.oŠáÆ */
- $"C176 7287 7306 7179 EEFF E173 7184 7308" /* Ávr‡s.qyîÿásq„s. */
- $"7470 5B58 5959 5859 7085 7205 6B97 FFE7" /* tp[XYYXYp…r.k—ÿç */
- $"776E 8972 0569 C6FF FFB4 6A84 7202 736E" /* wn‰r.iÆÿÿ´j„r.sn */
- $"5A81 5901 586D 856F 0567 B9D9 786B 7089" /* ZY.Xm…o.g¹Ùxkp‰ */
- $"6F06 6993 FFFF F173 6D83 6F01 706B 8259" /* o.i“ÿÿñsmƒo.pk‚Y */
- $"0157 6B85 6E03 6C8C 7269 8B6E 066D 6BD3" /* .Wk…n.lŒri‹n.mkÓ */
- $"FFCB 6C6D 836E 026F 6958 8159 0256 6A6E" /* ÿËlmƒn.oiXY.Vjn */
- $"856D 0169 6B8D 6D04 6A73 8A6D 6B84 6D02" /* …m.ikm.jsŠmk„m. */
- $"6E68 5881 5902 566A 6E98 6D02 6B67 6C85" /* nhXY.Vjn˜m.kgl… */
- $"6D02 6E68 5881 5902 5665 69A3 6802 6963" /* m.nhXY.Vei£h.ic */
- $"5881 5901 5858 A559 0058 B059 0000 AB59" /* XY.XX¥Y.X°Y..«Y */
- $"8000 A959 DF00 FF00 FF00 FF00 AD00 0081" /* €.©Yß.ÿ.ÿ.ÿ.­.. */
- $"8987 0283 7B7C 9C00 0280 C1D3 87D1 04D2" /* ‰‡.ƒ{|œ..€ÁÓ‡Ñ.Ò */
- $"C787 7A7C 9B00 0288 D4DA 87D9 04DA D68F" /* LJz|›..ˆÔÚ‡Ù.ÚÖ */
- $"787C 9A00 0276 A2D8 89D6 02D7 A476 9278" /* x|š..v¢Ø‰Ö.פv’x */
- $"8500 0379 A2D3 D789 D503 D6D0 B5AD 90AE" /* …..y¢Ó׉Õ.Öе­® */
- $"01B0 9683 0003 7C87 B1B7 8BB5 00B6 92B9" /* .°–ƒ..|‡±·‹µ.¶’¹ */
- $"03BA A282 7D80 0003 87BD C8C5 90C4 00C5" /* .º¢‚}€..‡½ÈÅÄ.Å */
- $"8FC4 08C5 C8B9 8700 00A7 D6D1 90D0 01CD" /* Ä.Åȹ‡..§ÖÑÐ.Í */
- $"CF90 D006 D1D3 A000 00A3 D18F CD04 CCD1" /* ÏÐ.ÑÓ ..£ÑÍ.ÌÑ */
- $"EECC CC90 CD05 CF9B 0000 9ACE 90CB 03CA" /* îÌÌÍ.Ï›..šÎË.Ê */
- $"F7E9 C68F CB07 CCCB 9300 0091 C9C9 8FC8" /* ÷éÆË.ÌË“..‘ÉÉÈ */
- $"04C6 DFFF D2C5 8EC8 07C9 C68D 0000 8BC5" /* .ÆßÿÒÅŽÈ.ÉÆ..‹Å */
- $"C78D C606 C7C5 BFC7 FDF3 C38E C607 C7C0" /* ÇÆ.ÇÅ¿ÇýóÃŽÆ.ÇÀ */
- $"8800 0086 C0C5 8DC4 07C2 C7EB DAE4 FFD9" /* ˆ..†ÀÅÄ.ÂÇëÚäÿÙ */
- $"C08D C407 C6BC 8400 0082 BBC4 8CC2 09C1" /* ÀÄ.Ƽ„..‚»ÄŒÂÆÁ */
- $"C2E2 DEED D1FD F7C1 C18C C207 C4B6 8100" /* ÂâÞíÑý÷ÁÁŒÂ.Ķ. */
- $"007F B5C2 8CC0 09BC DBFF F8D7 BBEA FFDB" /* ..µÂŒÀƼÛÿø×»êÿÛ */
- $"BA8C C007 C2B0 7E00 007C B0C0 8BBE 0BBD" /* ºŒÀ.°~..|°À‹¾.½ */
- $"BAED FFFF CCB8 CCFF F9BF BC8B BE07 C0AA" /* ºíÿÿ̸Ìÿù¿¼‹¾.Àª */
- $"7C00 007B ABBF 8BBC 0BB7 DEE1 DFDF B9BB" /* |..{«¿‹¼.·Þáßß¹» */
- $"BAED FFDA B78B BC07 BFA5 7B00 007A A5BC" /* ºíÿÚ·‹¼.¿¥{..z¥¼ */
- $"89B9 0EBA B6C6 FFFF ECB9 B9BA B6CB FFFA" /* ‰¹.º¶Æÿÿì¹¹º¶Ëÿú */
- $"BCB8 8AB9 07BC 9F7A 0000 799F B984 B601" /* ¼¸Š¹.¼Ÿz..yŸ¹„¶. */
- $"B7B5 82B3 0CEC FFFF D4AF B3B3 B2B1 EAFF" /* ·µ‚³.ìÿÿÔ¯³³²±êÿ */
- $"D9B0 81B3 01B5 B784 B607 B899 797C 0079" /* Ù°³.µ·„¶.¸™y|.y */
- $"99B7 84B4 13B3 B9BE C1C0 B9CB FFFF EDBE" /* ™·„´.³¹¾ÁÀ¹Ëÿÿí¾ */
- $"BFBE BEC1 BCCB FCF7 BB80 BF02 C0B9 B384" /* ¿¾¾Á¼Ëü÷»€¿.À¹³„ */
- $"B407 B694 797C 0079 93B4 84B1 19AD C7F1" /* ´.¶”y|.y“´„±.­Çñ */
- $"FBF5 D6F1 FFFD D5F2 F5F8 F1FB F2E4 E7FF" /* ûõÖñÿýÕòõøñûòäçÿ */
- $"E2F3 F4F8 F8D0 AD84 B107 B290 7A00 7C79" /* âóôøøÐ­„±.²z.|y */
- $"8DB0 84AE 09AA C3FF FFF2 DCFF FFE2 E984" /* °„®ÆªÃÿÿòÜÿÿâé„ */
- $"FF03 D9F6 D1D8 80FF 01D6 A985 AE06 8C7A" /* ÿ.ÙöÑØ€ÿ.Ö©…®.Œz */
- $"7C7C 7989 AD84 AB08 A7C3 FFFF D5F7 FFF8" /* ||y‰­„«.§ÃÿÿÕ÷ÿø */
- $"DA85 FF08 F2C2 DAD3 F6FF FFD7 A583 AB08" /* Ú…ÿ.òÂÚÓöÿÿ×¥ƒ«. */
- $"ACAA 897A 7C7C 7A86 A984 A809 A5B7 E0D3" /* ¬ª‰z||z†©„¨Æ¥·àÓ */
- $"E2FF FFD6 D0E0 84DF 08DD CFFF F5CB DFE0" /* âÿÿÖÐà„ß.ÝÏÿõËßà */
- $"C3A4 83A8 07A9 A686 7A7C 7C7A 8386 A506" /* 䃨.©¦†z||zƒ†¥. */
- $"A39B BAFF FFF5 AA87 A006 A3DF E2BA 9BA1" /* £›ºÿÿõª‡ .£ß⺛¡ */
- $"A284 A507 A6A2 837B 7C7C 7B82 87A2 059F" /* ¢„¥.¦¢ƒ{||{‚‡¢.Ÿ */
- $"CCF8 FFC7 9C87 A205 9EAF F0F9 AD9E 85A2" /* ÌøÿÇœ‡¢.ž¯ðù­ž…¢ */
- $"08A3 9F81 7B7C 7C7B 7F9D 859F 069C AEE8" /* .£Ÿ{||{.…Ÿ.œ®è */
- $"D4D3 A09E 879F 069D A3F4 FFE8 9D9E 849F" /* ÔÓ ž‡Ÿ.£ôÿèž„Ÿ */
- $"09A0 9B7F 7B7C 7C7B 7E9A 9D84 9C05 98B5" /* Æ ›.{||{~š„œ.˜µ */
- $"FFEE 9F99 899C 0596 D7FF FFC9 9684 9C09" /* ÿ‰œ.–×ÿÿÉ–„œÆ */
- $"9D97 7E7B 7C7C 7B7C 989B 849A 0494 CCE4" /* —~{||{|˜›„š.”Ìä */
- $"A097 8A9A 0695 B3FF FFF4 9C99 839A 019B" /*  —Šš.•³ÿÿôœ™ƒš.› */
- $"9482 7C02 7B95 9984 9803 97AD 9B95 8B98" /* ”‚|.{•™„˜.—­›•‹˜ */
- $"0697 96E0 FFDA 9797 8398 0199 9282 7C02" /* .—–àÿÚ——ƒ˜.™’‚|. */
- $"7A93 9785 9601 9395 8D96 0494 9AAB 9695" /* z“—…–.“•–.”š«–• */
- $"8496 0297 8F7B 817C 027A 9297 9896 0294" /* „–.—{|.z’—˜–.” */
- $"9295 8596 0297 8F7B 817C 027A 8C91 A390" /* ’•…–.—{|.zŒ‘£ */
- $"0291 897A 817C 017B 7BA5 7C00 7BB0 7C00" /* .‘‰z|.{{¥|.{°|. */
- $"00AB 7C80 00A9 7CDF 00FF 00FF 00FF 00AD" /* .«|€.©|ß.ÿ.ÿ.ÿ.­ */
- $"0000 7A89 8002 7C73 749C 0002 79BC CE87" /* ..z‰€.|stœ..y¼Î‡ */
- $"CC04 CDC2 8172 749B 0002 80CF D587 D304" /* Ì.ÍÂrt›..€ÏÕ‡Ó. */
- $"D4D1 8870 749A 0002 6E9B D288 D003 D1D2" /* Ôшptš..n›ÒˆÐ.ÑÒ */
- $"9E6E 9270 8500 0371 9BCE D289 D002 D1CB" /* žn’p…..q›ÎÒ‰Ð.ÑË */
- $"AF91 A801 AA90 8300 0474 80AC B2AF 8AB0" /* ¯‘¨.ªƒ..t€¬²¯Š° */
- $"02B1 B3B4 90B3 03B5 9D7A 7580 0002 80B7" /* .±³´³.µzu€..€· */
- $"C3A4 BF09 C0C3 B57F 0000 A0CF CACA 8DC9" /* ä¿ÆÀõ... ÏÊÊÉ */
- $"04CA CAC6 C8CA 8EC9 07CA CACD 9900 009C" /* .ÊÊÆÈÊŽÉ.ÊÊÍ™..œ */
- $"CA8F C604 C5CB EDC5 C58F C606 C7C8 9400" /* ÊÆ.ÅËíÅÅÆ.ÇÈ”. */
- $"0093 C790 C403 C3F6 E7BF 8FC4 07C5 C48B" /* .“ÇÄ.Ãöç¿Ä.ÅÄ‹ */
- $"0000 8AC2 C28F C104 BEDA FFCE BE8E C107" /* ..ŠÂÂÁ.¾ÚÿξŽÁ. */
- $"C2BF 8600 0083 BEC0 8DBF 06C0 BEB8 C1FC" /* ¿†..ƒ¾À¿.À¾¸Áü */
- $"F3BC 8EBF 07C0 BA81 0000 7EB9 BE8D BD07" /* 󼎿.Àº..~¹¾½. */
- $"BAC0 E9D6 E1FF D5B8 8DBD 07BF B57C 0000" /* ºÀéÖáÿÕ¸½.¿µ|.. */
- $"7AB3 BC8C BA09 B9BB DFDB EBCB FDF7 BAB9" /* z³¼ŒºÆ¹»ßÛëËý÷º¹ */
- $"8CBA 07BC AE79 0000 77AE B98C B709 B3D7" /* Œº.¼®y..w®¹Œ·Æ³× */
- $"FFF8 D3B2 E8FF D7B1 8CB7 07B9 A876 0000" /* ÿøÓ²èÿ×±Œ·.¹¨v.. */
- $"74A9 B78A B50C B6B5 B2EC FFFF C6AF C6FF" /* t©·Šµ.¶µ²ìÿÿƯÆÿ */
- $"F9B8 B48B B507 B7A3 7400 0073 A3B6 8BB3" /* ù¸´‹µ.·£t..s£¶‹³ */
- $"0BAE DBDE DDDB B0B3 B1EA FFD7 AE8B B307" /* .®ÛÞÝÛ°³±êÿ×®‹³. */
- $"B59D 7300 0072 9CB3 8AB0 04AD C0FF FFEA" /* µs..rœ³Š°.­Àÿÿê */
- $"80B0 05AD C4FF F9B4 AF8A B007 B397 7200" /* €°.­Äÿù´¯Š°.³—r. */
- $"0071 97B1 85AE 00AC 80AA 0EAB AAEA FFFF" /* .q—±…®.¬€ª.«ªêÿÿ */
- $"CFA6 AAAA A9A7 E7FF D5A7 81AA 00AC 85AE" /* Ϧªª©§çÿÕ§ª.¬…® */
- $"07B0 9171 7400 7191 AE84 AB13 AAB2 B9BB" /* .°‘qt.q‘®„«.ª²¹» */
- $"BAB2 C6FF FFEB B7B9 B8B7 BBB6 C5FC F7B5" /* º²Æÿÿë·¹¸·»¶Åü÷µ */
- $"80B9 01BA B285 AB07 AD8C 7174 0070 8BAB" /* €¹.º²…«.­Œqt.p‹« */
- $"84A8 19A4 C1EF FBF4 D2F0 FFFC D1F1 F4F8" /* „¨.¤ÁïûôÒðÿüÑñôø */
- $"F0FB F1E2 E5FF DFF2 F3F8 F8CB A484 A807" /* ðûñâåÿßòóøøË¤„¨. */
- $"A988 7200 7471 85A7 84A5 09A1 BDFF FFF0" /* ©ˆr.tq…§„¥Æ¡½ÿÿð */
- $"D9FF FFE0 E784 FF03 D6F5 CDD4 80FF 01D2" /* Ùÿÿàç„ÿ.ÖõÍÔ€ÿ.Ò */
- $"9F85 A506 8472 7474 7181 A484 A208 9EBD" /* Ÿ…¥.„rttq¤„¢.ž½ */
- $"FFFF D2F6 FFF7 D785 FF08 F1BD D8CF F6FF" /* ÿÿÒöÿ÷×…ÿ.ñ½ØÏöÿ */
- $"FFD3 9C83 A208 A3A2 8172 7474 727E A084" /* ÿÓœƒ¢.£¢rttr~ „ */
- $"9F09 9CB0 DDCF DFFF FFD2 CCDD 84DC 08DA" /* ŸÆœ°ÝÏßÿÿÒÌÝ„Ü.Ú */
- $"CBFF F4C6 DCDD BE9B 839F 08A0 9E7E 7274" /* ËÿôÆÜݾ›ƒŸ. ž~rt */
- $"7472 7C9D 849C 089D 9B93 B5FF FFF4 A397" /* tr|„œ.›“µÿÿô£— */
- $"8598 0897 9BDD E0B4 9398 9A9D 839C 089D" /* …˜.—›Ýà´“˜šƒœ. */
- $"9A7B 7374 7473 7998 8699 0597 C8F7 FFC1" /* š{sttsy˜†™.—È÷ÿÁ */
- $"9387 9905 96A9 EEF9 A695 8599 089A 9679" /* “‡™.–©îù¦•…™.š–y */
- $"7374 7473 7795 8596 0693 A7E6 D1D0 9895" /* sttsw•…–.“§æÑИ• */
- $"8796 0695 9BF3 FFE7 9595 8496 0897 9377" /* ‡–.•›óÿç••„–.—“w */
- $"7374 7473 7693 8595 058F B0FF ED98 9289" /* sttsv“…•.°ÿ혒‰ */
- $"9505 8ED4 FFFF C58E 8495 0996 9076 7374" /* •.ŽÔÿÿÅŽ„•Æ–vst */
- $"7473 7490 9384 9204 8BC8 E299 8F8A 9206" /* tst“„’.‹È♊’. */
- $"8DAD FFFF F494 9183 9202 938C 7581 7402" /* ­ÿÿô”‘ƒ’.“Œut. */
- $"738D 9184 9003 8EA7 938D 8B90 068F 8EDD" /* s‘„.ާ“‹.ŽÝ */
- $"FFD7 8E8F 8390 0191 8A82 7402 728B 8F85" /* ÿ׎ƒ.‘Š‚t.r‹… */
- $"8E01 8B8D 8D8E 048C 93A4 8E8D 848E 028F" /* Ž.‹Ž.Œ“¤Ž„Ž. */
- $"8773 8174 0272 8B8F 988E 028C 8A8D 858E" /* ‡st.r‹˜Ž.ŒŠ…Ž */
- $"028F 8773 8174 0272 8489 A388 0289 8173" /* .‡st.r„‰£ˆ.‰s */
- $"8174 0173 73A5 7400 73B0 7400 00AB 7480" /* t.ss¥t.s°t..«t€ */
- $"00A9 74DF 0068 386D 6B00 0009 0800 0000" /* .©tß.h8mk..Æ.... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 002E 4549 4A4A 4A4A 4A4A 4A4A 4A4A" /* ....EIJJJJJJJJJJ */
- $"3B0A 0400 0000 0000 0000 0000 0000 0000" /* ;Â.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 2FF9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ../ùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FD52 0802 0000 0000 0000 0000 0000 0000" /* ýR.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 4DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Mÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FF7E 1306 0000 0000 0000 0000 0000 0000" /* ÿ~.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0002 ABFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..«ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFBB 2C11 0B0B 0B0B 0B0B 0B0B 0B0B 0B0B" /* ÿ»,............. */
- $"0B0B 0B0B 0B0B 0903 0000 0000 0000 0000" /* ......Æ......... */
- $"08B2 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF DFCC CCCC CCCC CCCC CCCC CCCC CCCC" /* ÿÿßÌÌÌÌÌÌÌÌÌÌÌÌÌ */
- $"CCCC CCCC CCCC CBC9 8000 0000 0000 0026" /* ÌÌÌÌÌÌËÉ€......& */
- $"71F2 EDEE EFEF EFEF EFEF EFEF EFEF EFEF" /* qòíîïïïïïïïïïïïï */
- $"EFEF F4F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ïïô÷÷÷÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F7 F7F7 F7F5 CE41 2000 0000 5EF7" /* ÷÷÷÷÷÷÷õÎA ...^÷ */
- $"FFF8 F8F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ÿøøùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F8 FAFF EE41 0000 C4FF" /* ùùùùùùùøúÿîA..Äÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFA1 0000 B6FF" /* ÿÿÿÿÿÿÿÿÿÿÿ¡..¶ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF91 0000 A2FF" /* ÿÿÿÿÿÿÿÿÿÿÿ‘..¢ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF7A 0000 8FFF" /* ÿÿÿÿÿÿÿÿÿÿÿz..ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF68 0000 79FF" /* ÿÿÿÿÿÿÿÿÿÿÿh..yÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF57 0000 5EFF" /* ÿÿÿÿÿÿÿÿÿÿÿW..^ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF48 0000 4BFF" /* ÿÿÿÿÿÿÿÿÿÿÿH..Kÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FD3B 0000 3FFE" /* ÿÿÿÿÿÿÿÿÿÿý;..?þ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF F62F 0000 33F8" /* ÿÿÿÿÿÿÿÿÿÿö/..3ø */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF ED23 0000 27F2" /* ÿÿÿÿÿÿÿÿÿÿí#..'ò */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF DE1A 0000 1FE9" /* ÿÿÿÿÿÿÿÿÿÿÞ....é */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF CE10 0000 1ADF" /* ÿÿÿÿÿÿÿÿÿÿÎ....ß */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF C10B 0100 14D5" /* ÿÿÿÿÿÿÿÿÿÿÁ....Õ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF B509 0100 0FCD" /* ÿÿÿÿÿÿÿÿÿÿµÆ...Í */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF AA07 0001 0BC2" /* ÿÿÿÿÿÿÿÿÿÿª.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF A005 0101 09B3" /* ÿÿÿÿÿÿÿÿÿÿ ...Ƴ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 9504 0101 08A6" /* ÿÿÿÿÿÿÿÿÿÿ•....¦ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8D04 0101 069A" /* ÿÿÿÿÿÿÿÿÿÿ....š */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8505 0101 0691" /* ÿÿÿÿÿÿÿÿÿÿ…....‘ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7D05 0101 078B" /* ÿÿÿÿÿÿÿÿÿÿ}....‹ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7606 0101 0885" /* ÿÿÿÿÿÿÿÿÿÿv....… */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7106 0102 0881" /* ÿÿÿÿÿÿÿÿÿÿq.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6D07 0102 0A7E" /* ÿÿÿÿÿÿÿÿÿÿm...Â~ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6A08 0102 0B7B" /* ÿÿÿÿÿÿÿÿÿÿj....{ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6709 0102 0C7C" /* ÿÿÿÿÿÿÿÿÿÿgÆ...| */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 670A 0102 0C75" /* ÿÿÿÿÿÿÿÿÿÿgÂ...u */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 600B 0102 113A" /* ÿÿÿÿÿÿÿÿÿÿ`....: */
- $"7B85 8585 8585 8585 8585 8585 8585 8585" /* {……………………………………… */
- $"8585 8585 8585 8585 8585 8585 8585 8585" /* ………………………………………… */
- $"8585 8585 8585 8585 8574 310F 0101 0B1E" /* ………………………t1..... */
- $"2B34 3535 3535 3535 3535 3535 3535 3535" /* +455555555555555 */
- $"3535 3535 3535 3535 3535 3535 3535 3535" /* 5555555555555555 */
- $"3535 3535 3535 3535 332A 1C0A 0100 040C" /* 555555553*.Â.... */
- $"1418 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1813 0B03 0000 0002" /* ................ */
- $"0304 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0402 0100 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0069 7433" /* .............it3 */
- $"3200 0025 F700 0000 00FF 00FF 00FF 00FF" /* 2..%÷....ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 59D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.ŸY× */
- $"00A6 59D3 0001 5959 8000 9D58 8459 D000" /* .¦YÓ..YY€.X„YÐ. */
- $"0359 5900 569F 5901 5658 8359 D000 0257" /* .YY.VŸY.VXƒYÐ..W */
- $"6287 9D95 0494 917F 5E58 8359 CD00 0459" /* b‡•.”‘.^XƒYÍ..Y */
- $"005C 9ABA 9EBC 03B9 AE85 5883 59CD 0004" /* .\šºž¼.¹®…XƒYÍ.. */
- $"5900 6EB3 BE9E BF04 BEB6 9D62 5782 59CD" /* Y.n³¾ž¿.¾¶bW‚YÍ */
- $"0003 5900 74B6 A0BE 03B8 9F63 5782 59CC" /* ..Y.t¶ ¾.¸ŸcW‚YÌ */
- $"0004 5959 547A B8A0 BC03 B7A0 6357 8359" /* ..YYTz¸ ¼.· cWƒY */
- $"CB00 0459 5954 88B9 A0BB 03B7 A366 56B8" /* Ë..YYTˆ¹ ».·£fV¸ */
- $"5995 0005 5959 005B A0B9 A0BA 03B8 AA73" /* Y•..YY.[ ¹ º.¸ªs */
- $"55BA 5992 0006 5959 0053 7BB4 B9A0 BA04" /* UºY’..YY.S{´¹ º. */
- $"B9B2 905A 56BA 5990 0006 5959 0054 73AB" /* ¹²ZVºY..YY.Ts« */
- $"B8A2 B903 B5AB 865E B756 0300 5859 598E" /* ¸¢¹.µ«†^·V..XYYŽ */
- $"0007 5959 005A 83AD B6B7 A2B8 04B7 B4AD" /* ..YY.Zƒ­¶·¢¸.·´­ */
- $"9B87 B57D 047B 725D 0059 8D00 0759 5900" /* ›‡µ}.{r].Y..YY. */
- $"5A8F B2B6 B6A4 B704 B6B5 B4B2 B1B4 B003" /* Z²¶¶¤·.¶µ´²±´°. */
- $"ADA0 7600 8059 8900 8159 0355 77AC B0E2" /* ­ v.€Y‰.Y.Uw¬°â */
- $"B103 AFA4 7D56 8259 8600 0159 5980 0003" /* ±.¯¤}V‚Y†..YY€.. */
- $"5279 9697 E298 0496 9073 5456 8000 0159" /* Ry–—â˜.–sTV€..Y */
- $"5984 0008 5900 5457 6268 686D 7284 73A1" /* Y„..Y.TWbhhmr„s¡ */
- $"74B9 7309 706C 6868 6763 5900 5959 8200" /* t¹sÆplhhgcY.YY‚. */
- $"0759 0052 6E96 A4A7 A8E7 A980 A706 A6A0" /* .Y.Rn–¤§¨ç©€§.¦  */
- $"8E6A 5759 5982 0002 536F A782 B0E5 AF81" /* ŽjWYY‚..So§‚°å¯ */
- $"B006 AFAF AB99 6A00 5980 0004 5900 5A9B" /* °.¯¯«™j.Y€..Y.Z› */
- $"AEF0 AF0B AEA6 895B 0059 0000 5900 6CA7" /* ®ð¯.®¦‰[.Y..Y.l§ */
- $"B4AE 03AF ABAE AFB7 AE0A A996 6500 5900" /* ´®.¯«®¯·®Â©–e.Y. */
- $"0059 5470 A7B3 AD05 AEA8 A299 A8AE B6AD" /* .YTp§³­.®¨¢™¨®¶­ */
- $"0AA8 9666 0059 0059 5900 6CA3 B4AB 05A6" /* ¨–f.Y.YY.l£´«.¦ */
- $"EDE9 99A7 ACB5 AB0A A692 6200 5900 5959" /* íé™§¬µ«Â¦’b.Y.YY */
- $"0063 9EB3 A905 A8A8 ECFF E195 B6A9 0BA3" /* .cž³©.¨¨ìÿá•¶©.£ */
- $"8D5F 5859 0059 5900 6099 A7B3 A806 A4DC" /* _XY.YY.`™§³¨.¤Ü */
- $"FFFF CA96 AAB4 A80B A187 5B58 5900 5959" /* ÿÿÊ–ª´¨.¡‡[XY.YY */
- $"005C 94A6 B3A7 01A3 C580 FF02 AD9D A8B3" /* .\”¦³§.£Å€ÿ.­¨³ */
- $"A70B 9F82 5A58 5900 5959 5857 8DA5 B3A6" /* §.Ÿ‚ZXY.YYXW¥³¦ */
- $"07A4 AEF8 FFFF ED97 A4B2 A603 A59C 7C58" /* .¤®øÿÿí—¤²¦.¥œ|X */
- $"8359 0257 87A3 B4A4 01A1 E180 FF02 CB94" /* ƒY.W‡£´¤.¡á€ÿ.Ë” */
- $"A6B1 A403 A399 7657 8359 0254 80A1 B4A2" /* ¦±¤.£™vWƒY.T€¡´¢ */
- $"019D C180 FF03 FEA4 9BA3 B0A2 03A1 9672" /* .Á€ÿ.þ¤›£°¢.¡–r */
- $"5783 5902 547A 9FB4 A202 A0A6 F380 FF02" /* WƒY.TzŸ´¢. ¦ó€ÿ. */
- $"E192 A3B0 A203 A094 6D56 8359 0255 759D" /* á’£°¢. ”mVƒY.Uu */
- $"B5A0 019B D381 FF02 B495 A1AF A006 9D90" /* µ .›Óÿ.´•¡¯ . */
- $"6957 5959 0080 5902 546D 9BB1 9E00 9F80" /* iWYY.€Y.Tm›±ž.Ÿ€ */
- $"A002 9CAF FD80 FF02 EF93 9DAF 9E06 9B8C" /*  .œ¯ý€ÿ.ž.›Œ */
- $"6657 5959 0080 5902 5568 97B0 9D07 9F95" /* fWYY.€Y.Uh—°.Ÿ• */
- $"8A89 8B98 9CE2 81FF 02C3 8F9E AE9D 0699" /* Љ‹˜œâÿ.Þ®.™ */
- $"8861 5759 5900 8059 0256 6494 AF9C 089D" /* ˆaWYY.€Y.Vd”¯œ. */
- $"8C9E D0DD C793 8CBC 81FF 02F7 9899 AE9C" /* ŒžÐÝÇ“Œ¼ÿ.÷˜™®œ */
- $"0697 855F 5859 5900 8059 0257 5E91 AF9B" /* .—…_XYY.€Y.W^‘¯› */
- $"0195 B781 FF03 F69B 96ED 81FF 02CE 8B9C" /* .•·ÿ.ö›–íÿ.΋œ */
- $"AD9B 0D95 815D 5859 5900 0059 5957 5B8C" /* ­›.•]XYY..YYW[Œ */
- $"98AD 9903 9889 9AD8 81FF 02E0 89C4 81FF" /* ˜­™.˜‰šØÿ.à‰Äÿ */
- $"02FD 9E93 AD99 0D93 7C5A 5859 5900 0059" /* .ýž“­™.“|ZXYY..Y */
- $"5958 5987 96AC 970C 9889 D3CE 88A1 E8FF" /* YXY‡–¬—.˜‰ÓΈ¡èÿ */
- $"FFF9 9B9D F481 FF02 D788 98AC 9702 9079" /* ÿù›ôÿ.׈˜¬—.y */
- $"5A80 5901 0000 8059 0255 8395 AB96 0D97" /* Z€Y...€Y.Uƒ•«–.— */
- $"8DA4 FFFF F6B2 84B4 F6FB A28E CC82 FF02" /* ¤ÿÿö²„´öû¢ŽÌ‚ÿ. */
- $"A28F 97AB 9601 8E75 8159 0100 0080 5902" /* ¢—«–.ŽuY...€Y. */
- $"547F 94AB 9502 9688 E481 FF07 E99E 8CBC" /* T.”«•.–ˆäÿ.鞌¼ */
- $"9991 A2F8 81FF 02DD 8896 AA95 0394 8D71" /* ™‘¢øÿ.݈–ª•.”q */
- $"5880 5901 0000 8059 0255 7993 AA94 0295" /* X€Y...€Y.Uy“ª”.• */
- $"87B4 84FF 05D4 8C93 948F D182 FF02 A68C" /* ‡´„ÿ.ÔŒ“”Ñ‚ÿ.¦Œ */
- $"95A9 9403 938A 6D57 8059 0700 0059 595A" /* •©”.“ŠmW€Y...YYZ */
- $"5374 91AA 9302 908C F284 FF06 DD92 9293" /* St‘ª“.Œò„ÿ.Ý’’“ */
- $"8FA4 FB81 FF01 E086 AA93 0391 876A 5780" /* ¤ûÿ.à†ª“.‘‡jW€ */
- $"5907 0000 5959 5A53 6F8F A991 0292 87CA" /* Y...YYZSo©‘.’‡Ê */
- $"84FF 02F8 A18D 8091 018D D782 FF02 A788" /* „ÿ.ø¡€‘.ׂÿ.§ˆ */
- $"92A8 9103 8F84 6757 8059 0100 0080 5902" /* ’¨‘.„gW€Y...€Y. */
- $"556B 8DA9 9002 8E85 DB84 FF01 C78A 8190" /* Uk©.Ž…Û„ÿ.ÇŠ */
- $"028B A8FE 81FF 01E2 84A9 9003 8E82 6357" /* .‹¨þÿ.â„©.Ž‚cW */
- $"8059 0100 0080 5902 5466 8CA8 9005 9186" /* €Y...€Y.TfŒ¨.‘† */
- $"AB85 A6EE 81FF 02EE 958E 8190 028F 8CDC" /* «…¦îÿ..ŒÜ */
- $"82FF 02AA 8591 A790 038D 7F62 5880 5901" /* ‚ÿ.ª…‘§..bX€Y. */
- $"0000 8059 0254 618A A78E 0C8F 84A5 FFF0" /* ..€Y.TaЧŽ.„¥ÿð */
- $"A480 BBF9 FFFF B688 838E 0189 A982 FF01" /* ¤€»ùÿÿ¶ˆƒŽ.‰©‚ÿ. */
- $"E583 A88E 038B 7C5F 5880 5901 0000 8059" /* 僨Ž.‹|_X€Y...€Y */
- $"0256 5F87 A78D 028C 83E8 80FF 06DF 9087" /* .V_‡§.Œƒè€ÿ.߇ */
- $"D4E0 8C8C 838D 028C 8ADE 82FF 02AB 838E" /* ÔàŒŒƒ.ŒŠÞ‚ÿ.«ƒŽ */
- $"A68D 038A 7A5D 5880 5901 0000 8059 0257" /* ¦.Šz]X€Y...€Y.W */
- $"5C84 A68C 028D 7EB7 83FF 03C9 8B8E 8B85" /* \„¦Œ.~·ƒÿ.ɋދ… */
- $"8C01 87AA 82FF 01E6 82A7 8C03 8877 5C58" /* Œ.‡ª‚ÿ.æ‚§Œ.ˆw\X */
- $"8059 0100 0080 5902 5757 81A6 8A02 878A" /* €Y...€Y.WW¦Š.‡Š */
- $"F584 FF01 CB83 868A 0289 88E0 82FF 02A8" /* õ„ÿ.˃†Š.‰ˆà‚ÿ.¨ */
- $"808B A58A 0386 735B 5880 5901 0000 8059" /* €‹¥Š.†s[X€Y...€Y */
- $"0258 557F A58A 028B 7BC9 84FF 02F6 9987" /* .XU.¥Š.‹{É„ÿ.ö™‡ */
- $"878A 0184 AB82 FF01 E580 A68A 0285 715A" /* ‡Š.„«‚ÿ.倦Š.…qZ */
- $"8159 0100 0081 5902 577B 88A3 8902 8A81" /* Y...Y.W{ˆ£‰.Š */
- $"9685 FF01 BF82 8889 0288 87E0 82FF 02A7" /* –…ÿ.¿‚ˆ‰.ˆ‡à‚ÿ.§ */
- $"7F8A A489 0183 6F82 5901 0000 8159 0254" /* .Ф‰.ƒo‚Y...Y.T */
- $"7787 A488 017A DC84 FF02 EA8C 8689 8801" /* w‡¤ˆ.zÜ„ÿ.ꌆ‰ˆ. */
- $"82A9 82FF 01E3 7EA4 8802 8781 6C82 5901" /* ‚©‚ÿ.ã~¤ˆ.‡l‚Y. */
- $"0000 8159 0151 7497 860E 8784 8686 8486" /* ..Y.Qt—†.‡„††„† */
- $"8684 8685 8486 877B A685 FF11 AD7D 8685" /* †„†…„†‡{¦…ÿ.­}†… */
- $"8486 8584 8784 8487 8485 8783 83DF 82FF" /* „†…„‡„„‡„…‡ƒƒß‚ÿ */
- $"0FA4 7D87 8584 8785 8487 8485 8784 8586" /* .¤}‡…„‡…„‡„…‡„…† */
- $"8596 8602 7F69 5881 5901 0000 8059 035A" /* …–†..iXY...€Y.Z */
- $"5170 8496 850E 8182 7F7F 827F 8082 7E81" /* Qp„–….‚..‚.€‚~ */
- $"8280 837E EC84 FF12 DB7E 817F 8082 7E81" /* ‚€ƒ~ì„ÿ.Û~.€‚~ */
- $"827E 8182 7E82 817E 827B A682 FF10 E07B" /* ‚~‚~‚~‚{¦‚ÿ.à{ */
- $"8380 827E 8181 7E82 817E 8280 7F81 8494" /* ƒ€‚~~‚~‚€.„” */
- $"8503 847D 6758 8159 0100 0080 5903 5A53" /* ….„}gXY...€Y.ZS */
- $"6E84 9585 0E82 90FB BCAC FFA4 B9FF 9BD3" /* n„•….‚û¼¬ÿ¤¹ÿ›Ó */
- $"FC97 7BB9 84FF 14FC 91AA FFA8 BFFF 92D1" /* ü—{¹„ÿ.ü‘ªÿ¨¿ÿ’Ñ */
- $"FB92 E5ED 87F4 DC95 FFCB 73DF 82FF 0FA0" /* û’åí‡ôÜ•ÿËsß‚ÿ.  */
- $"79DC F889 E5ED 90F6 D88F FFC7 AAC2 7D94" /* yÜø‰åíöØÿǪÂ}” */
- $"8503 847C 6558 8159 0100 0080 5903 5A52" /* ….„|eXY...€Y.ZR */
- $"6983 9584 0E81 92FF BCAA FFC4 D2FF 96D4" /* iƒ•„.’ÿ¼ªÿÄÒÿ–Ô */
- $"FF9A 82F8 84FF 14C6 78CE FFA6 BFFF B6E4" /* ÿš‚ø„ÿ.ÆxÎÿ¦¿ÿ¶ä */
- $"FF8D E8F9 AFFE DE91 FFE3 899E 82FF 0FDB" /* ÿèù¯þÞ‘ÿ㉞‚ÿ.Û */
- $"74E2 FFB1 F3F0 8AFA E9B4 FFC8 A6C7 7C94" /* tâÿ±óðŠúé´ÿȦÇ|” */
- $"8403 8379 6258 8159 0100 0080 5903 5A51" /* „.ƒybXY...€Y.ZQ */
- $"6581 9582 047F 90FF D5C8 81FF 04BB E5F9" /* e•‚..ÿÕÈÿ.»åù */
- $"86CA 84FF 06F2 82D6 FFFF C6D6 80FF 02FC" /* †Ê„ÿ.ò‚ÖÿÿÆÖ€ÿ.ü */
- $"B5EF 80FF 06E9 B8FF FFFA 8AD6 82FF 0196" /* µï€ÿ.é¸ÿÿúŠÖ‚ÿ.– */
- $"C680 FF02 F4B4 FA80 FF03 DCC9 C57A 9482" /* Æ€ÿ.ô´ú€ÿ.ÜÉÅz”‚ */
- $"0381 7761 5881 5901 0000 8059 035A 5262" /* .waXY...€Y.ZRb */
- $"7F95 8102 7E8F FA85 FF01 B190 85FF 01AC" /* .•.~ú…ÿ.±…ÿ.¬ */
- $"9A90 FF01 C494 82FF 02D5 8DF9 87FF 01BF" /* šÿ.Ä”‚ÿ.Õù‡ÿ.¿ */
- $"7994 8103 8075 5F58 8159 0100 0081 5902" /* y”.€u_XY...Y. */
- $"5461 7D95 8002 7D8E FA84 FF02 E779 DD84" /* Ta}•€.}Žú„ÿ.çyÝ„ */
- $"FF02 E47C E690 FF02 FC8A D281 FF02 FC8C" /* ÿ.ä|æÿ.üŠÒÿ.üŒ */
- $"C787 FF01 BF77 9480 037E 725E 5881 5901" /* LJÿ.¿w”€.~r^XY. */
- $"0000 8159 0254 5D7C 957F 027C 8EFA 84FF" /* ..Y.T]|•..|Žú„ÿ */
- $"019C A285 FF01 97AD 92FF 01C7 8F80 FF04" /* .œ¢…ÿ.—­’ÿ.Ç€ÿ. */
- $"FBC0 748B F986 FF01 BE76 947F 037D 715C" /* ûÀt‹ù†ÿ.¾v”..}q\ */
- $"5881 5901 0000 8159 0254 597B 957F 027C" /* XY...Y.TY{•..| */
- $"8EFA 83FF 02D7 7BEF 84FF 02D1 7EF4 92FF" /* Žúƒÿ.×{ï„ÿ.Ñ~ô’ÿ */
- $"09FE 8CC9 F8CB 8C64 9F83 C386 FF01 BE76" /* ÆþŒÉøËŒdŸƒÃ†ÿ.¾v */
- $"947F 037C 6F5B 5881 5901 0000 8159 0355" /* ”..|o[XY...Y.U */
- $"5779 7E94 7D02 7A8C FA82 FF02 FD8A B884" /* Wy~”}.zŒú‚ÿ.ýЏ„ */
- $"FF02 FA86 C094 FF09 CF74 7C64 7FCB FFC0" /* ÿ.ú†À”ÿÆÏt|d.ËÿÀ */
- $"80F7 85FF 01BD 7494 7D02 7A6D 5B82 5901" /* €÷…ÿ.½t”}.zm[‚Y. */
- $"0000 8159 0256 5677 957C 0279 8BFA 82FF" /* ..Y.VVw•|.y‹ú‚ÿ */
- $"02C3 82FB 84FF 02BB 86FE 95FF 088C 99D5" /* .Âû„ÿ.»†þ•ÿ.Œ™Õ */
- $"FCFF FFFA 7FBC 85FF 01BD 7394 7C02 796B" /* üÿÿú.¼…ÿ.½s”|.yk */
- $"5A82 5901 0000 8159 0257 5575 957B 0277" /* Z‚Y...Y.WUu•{.w */
- $"8BFA 81FF 02F4 7DCE 84FF 02EE 7BD6 96FF" /* ‹úÿ.ô}΄ÿ.î{Ö–ÿ */
- $"01D0 A782 FF02 C47B F484 FF01 BC72 947B" /* .Ч‚ÿ.Ä{ô„ÿ.¼r”{ */
- $"0178 6983 5901 0000 8159 0258 5272 957A" /* .xiƒY...Y.XRr•z */
- $"0877 8AE8 EEEC ECF2 AA91 85FF 02A8 92F2" /* .wŠèîììòª‘…ÿ.¨’ò */
- $"95EC 03ED ED93 DC81 FF03 FD83 B2F2 82EC" /* •ì.íí“Üÿ.ýƒ²ò‚ì */
- $"02F3 B573 947A 0176 6783 5901 0000 8159" /* .óµs”z.vgƒY...Y */
- $"0258 5070 9679 007A 817F 027E 71E3 84FF" /* .XPp–y.z..~qã„ÿ */
- $"03DF 797F 8096 7F02 8078 A382 FF02 C970" /* .ßy.€–..€x£‚ÿ.Ép */
- $"8083 7F00 7D95 7902 7565 5882 5901 0000" /* €ƒ..}•y.ueX‚Y... */
- $"8159 0258 4F6F 9779 8077 0278 69AB 85FF" /* Y.XOo—y€w.xi«…ÿ */
- $"029B 7378 9977 0178 DF81 FF02 B468 7583" /* .›sx™w.xßÿ.´huƒ */
- $"7700 7895 7902 7464 5882 5901 0000 8259" /* w.x•y.tdX‚Y...‚Y */
- $"0150 6D9A 7802 747A F384 FF02 CD72 779A" /* .Pmšx.tzó„ÿ.Írwš */
- $"7808 71A0 FFFF D98C 8FC6 6D9C 7801 7363" /* x.q ÿÿÙŒÆmœx.sc */
- $"8359 0100 0082 5901 516B 9A77 016B C484" /* ƒY...‚Y.Qkšw.kÄ„ */
- $"FF02 F68A 729B 770A 7677 9B8A 80BD FDFF" /* ÿ.öŠr›wÂvw›Š€½ýÿ */
- $"9C6A 789A 7702 7261 5882 5901 0000 8159" /* œjxšw.raX‚Y...Y */
- $"035A 4F68 7598 7602 737B F184 FF01 B96E" /* .ZOhu˜v.s{ñ„ÿ.¹n */
- $"9D76 0371 85D7 FB80 FF02 F076 719A 7602" /* v.q…×û€ÿ.ðvqšv. */
- $"7060 5882 5901 0000 8159 035A 4E66 7498" /* p`X‚Y...Y.ZNft˜ */
- $"7504 7380 77C3 FE81 FF02 E97B 729D 7502" /* u.s€wÃþÿ.é{ru. */
- $"727F EF82 FF01 CD66 9A75 026F 5E58 8259" /* r.ï‚ÿ.Ífšu.o^X‚Y */
- $"0100 0081 5903 5A4D 6473 9774 0672 76EE" /* ...Y.ZMds—t.rvî */
- $"CC73 83DA 80FF 01A4 6C9F 7401 6CBE 83FF" /* ÌsƒÚ€ÿ.¤lŸt.l¾ƒÿ */
- $"02A5 6575 9874 026D 5C58 8259 0100 0081" /* .¥eu˜t.m\X‚Y... */
- $"5902 5A4D 6298 730B 6F82 FAFF F9AD 6A97" /* Y.ZMb˜s.o‚úÿù­j— */
- $"F1DC 7172 9F73 016D 9283 FF03 F981 6B74" /* ñÜqrŸs.m’ƒÿ.ùkt */
- $"9773 026C 5B58 8259 0100 0081 5902 5A4D" /* —s.l[X‚Y...Y.ZM */
- $"6098 7301 6C94 81FF 04EC 957B 8470 A073" /* `˜s.l”ÿ.ì•{„p s */
- $"0271 75E7 83FF 02DD 6972 9773 026B 5C58" /* .quçƒÿ.Ýir—s.k\X */
- $"8259 0100 0081 5902 5A50 5F98 7201 69A8" /* ‚Y...Y.ZP_˜r.i¨ */
- $"83FF 019B 69A2 7201 6ABF 84FF 02AF 6473" /* ƒÿ.›i¢r.j¿„ÿ.¯ds */
- $"9672 026A 5B58 8259 0100 0081 5903 5A51" /* –r.j[X‚Y...Y.ZQ */
- $"5D70 9771 0167 BD81 FF02 F6A1 6FA3 7101" /* ]p—q.g½ÿ.ö¡o£q. */
- $"6B94 84FF 02F7 7B6D 9671 0169 5A83 5901" /* k”„ÿ.÷{m–q.iZƒY. */
- $"0000 8159 035A 505B 6F97 7101 69D5 80FF" /* ..Y.ZP[o—q.iÕ€ÿ */
- $"03E8 8B68 70A3 7102 6F74 E984 FF02 BC65" /* .è‹hp£q.oté„ÿ.¼e */
- $"7294 7102 7067 5883 5901 0000 8159 035A" /* r”q.pgXƒY...Y.Z */
- $"5059 6F96 7007 6F6F E7FF FFD4 7A69 A670" /* PYo–p.ooçÿÿÔzi¦p */
- $"0168 BD84 FF02 EC71 6E94 7002 6F67 5883" /* .h½„ÿ.ìqn”p.ogXƒ */
- $"5901 0000 8159 035A 5058 6E96 6F06 6C79" /* Y...Y.ZPXn–o.ly */
- $"F7FF BD6E 6BA7 6F02 6A8B FD83 FF02 FC83" /* ÷ÿ½nk§o.j‹ýƒÿ.üƒ */
- $"6B94 6F02 6E66 5783 5901 0000 8159 035A" /* k”o.nfWƒY...Y.Z */
- $"5056 6D96 6E05 688E FBA5 676C A86E 026D" /* PVm–n.hŽû¥gl¨n.m */
- $"6AD0 83FF 02F5 7D6B 946E 026D 6456 8359" /* jЃÿ.õ}k”n.mdVƒY */
- $"0100 0081 5903 5A4F 556C 966D 0468 9294" /* ...Y.ZOUl–m.h’” */
- $"656C AA6D 0268 87F8 82FF 01BC 6995 6D02" /* elªm.h‡ø‚ÿ.¼i•m. */
- $"6C63 5683 5901 0000 8159 035A 5054 6C97" /* lcVƒY...Y.ZPTl— */
- $"6D01 6C68 AD6D 0866 9EF7 FFFF F3B1 6C6B" /* m.lh­m.fž÷ÿÿó±lk */
- $"956D 026C 6256 8359 0100 0081 5903 5A50" /* •m.lbVƒY...Y.ZP */
- $"546C CA6D 0667 81A6 9D7A 666C 966D 026C" /* TlÊm.g¦zfl–m.l */
- $"6256 8359 0100 0081 5903 5A51 536C CB6D" /* bVƒY...Y.ZQSlËm */
- $"0369 6565 6998 6D02 6C62 5783 5901 0000" /* .ieei˜m.lbWƒY... */
- $"8159 035A 5152 6AEA 6C02 6B61 5783 5901" /* Y.ZQRjêl.kaWƒY. */
- $"0000 8159 035A 5252 6AEA 6C02 6B61 5783" /* ..Y.ZRRjêl.kaWƒ */
- $"5901 0000 8159 035A 5252 6AEA 6C02 6B61" /* Y...Y.ZRRjêl.ka */
- $"5783 5901 0000 8159 035A 5352 6AEA 6C02" /* WƒY...Y.ZSRjêl. */
- $"6B61 5783 5900 0082 5903 5A54 5168 EA6B" /* kaWƒY..‚Y.ZTQhêk */
- $"0269 5E56 8359 0000 8359 0257 4D5E EA63" /* .i^VƒY..ƒY.WM^êc */
- $"0260 5756 8359 0100 0082 5902 5A55 53EA" /* .`WVƒY...‚Y.ZUSê */
- $"5601 5556 8459 0100 00FB 5901 0000 FB59" /* V.UV„Y...ûY...ûY */
- $"0100 00FB 5901 0000 FB59 0100 00FA 5981" /* ...ûY...ûY...úY */
- $"00F9 5982 00F7 5983 00F6 5986 00F3 59FF" /* .ùY‚.÷Yƒ.öY†.óYÿ */
- $"00FF 0000 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ...ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00DF 009F 7CD7 00A6 7CD3" /* .ÿ.ÿ.ÿ.ß.Ÿ|×.¦|Ó */
- $"0001 7C7C 8000 9D7B 847C D000 037C 7C00" /* ..||€.{„|Ð..||. */
- $"7C9F 7F01 7B7B 837C D000 027B 88A5 9EB0" /* |Ÿ..{{ƒ|Ð..{ˆ¥ž° */
- $"03AC 9D81 7B83 7CCD 0004 7C00 81B3 D09E" /* .¬{ƒ|Í..|.³Ðž */
- $"D302 D0C3 A184 7CCD 0004 7C00 8FCA D79F" /* Ó.Ðá„|Í..|.Êן */
- $"D803 CEB4 837A 827C CD00 037C 0095 CEA0" /* Ø.δƒz‚|Í..|.•Π */
- $"D803 D1B7 847A 827C CC00 047C 7C78 9BD0" /* Ø.Ñ·„z‚|Ì..||x›Ð */
- $"A0D7 03D1 B884 7A83 7CCB 0004 7C7C 79A8" /*  ×.Ѹ„zƒ|Ë..||y¨ */
- $"D3A0 D703 D2BC 867A B87C 9500 057C 7C00" /* Ó ×.Ò¼†z¸|•..||. */
- $"81BD D5A0 D603 D3C3 9278 BA7C 9200 067C" /* ½Õ Ö.ÓÃ’xº|’..| */
- $"7C00 799D CED5 A0D6 04D4 CBAC 7D79 BA7C" /* |.yÎÕ Ö.Ôˬ}yº| */
- $"9000 067C 7C00 7B97 C5D3 A2D5 03D1 C4A3" /* ..||.{—ÅÓ¢Õ.ÑÄ£ */
- $"8280 7AB4 7B03 007B 7C7C 8E00 077C 7C00" /* ‚€z´{..{||Ž..||. */
- $"81A4 C8D2 D4A2 D505 D4D0 C8B7 A69F B19E" /* ¤ÈÒÔ¢Õ.ÔÐÈ·¦Ÿ±ž */
- $"079F 9F9E 9D94 8100 7C8D 0007 7C7C 0081" /* .ŸŸž”.|..||. */
- $"ADCD D3D3 A4D4 03D3 D2D0 CE80 CCB2 CB03" /* ­ÍÓÓ¤Ô.ÓÒÐ΀̲Ë. */
- $"C7B9 9500 807C 8900 817C 037A 98C6 CDE2" /* ǹ•.€|‰.|.z˜ÆÍâ */
- $"CE03 CCBE 9B7A 827C 8600 017C 7C80 0002" /* Î.̾›z‚|†..||€.. */
- $"7697 B181 B403 B5B5 B4B4 9EB5 01B4 B4B6" /* v—±´.µµ´´žµ.´´¶ */
- $"B506 B4B4 B3AA 9177 7980 0001 7C7C 8400" /* µ.´´³ª‘wy€..||„. */
- $"097C 0078 7D87 8B8B 8D94 95E2 960A 9592" /* Æ|.x}‡‹‹”•â–•’ */
- $"8E8C 8B8B 867D 007C 7C82 0009 7C00 7892" /* ŽŒ‹‹†}.||‚.Æ|.x’ */
- $"B5C1 C4C5 C6C6 81C7 03C6 C6C7 C79E C601" /* µÁÄÅÆÆÇ.ÆÆÇÇžÆ. */
- $"C7C7 82C6 01C7 C7AC C683 C70A C6C6 C4C3" /* ÇÇ‚Æ.ÇǬƃÇÂÆÆÄà */
- $"C3BD AB8C 7A7C 7C82 0005 7893 C5CE CFD0" /* ý«Œz||‚..x“ÅÎÏÐ */
- $"E9CF 08D0 D0CF CEC9 B58B 007C 8000 047C" /* éÏ.ÐÐÏÎɵ‹.|€..| */
- $"0080 B9CE F0D0 0CCF C5A7 7E00 7C00 007C" /* .€¹ÎðÐ.Ïŧ~.|..| */
- $"008F C5CE B3CF 03D0 CDCF D0B7 CF0A C9B2" /* .ÅγÏ.ÐÍÏзÏÂɲ */
- $"8600 7C00 007C 7894 C6B3 CF05 D0CB BEBA" /* †.|..|x”ƳÏ.Ð˾º */
- $"CCD0 B6CF 0ACA B487 007C 007C 7C00 8FC4" /* ÌжÏÂÊ´‡.|.||.Ä */
- $"B4CE 05C9 F2ED B9CC CFB5 CE0B C8B1 8400" /* ´Î.Éòí¹ÌϵÎ.ȱ„. */
- $"7C00 7C7C 0089 C0CC B3CD 05CC F3FF E7B9" /* |.||.‰À̳Í.Ìóÿç¹ */
- $"CEB5 CD0B C5AC 817B 7C00 7C7C 0085 BCCB" /* εÍ.Ŭ{|.||.…¼Ë */
- $"B3CC 06C9 EAFF FFD8 BDCE B4CC 0BC4 A77D" /* ³Ì.ÉêÿÿؽδÌ.ħ} */
- $"7B7C 007C 7C00 81B6 CAB3 CC01 C9DC 80FF" /* {|.||.¶Ê³Ì.ÉÜ€ÿ */
- $"02C6 C4CD B2CC 0DCB C1A3 7D7B 7C00 7C7C" /* .ÆÄͲÌ.ËÁ£}{|.|| */
- $"7B7D B1C9 CBB2 CA07 C9CF FBFF FFF1 BACB" /* {}±É˲Ê.ÉÏûÿÿñºË */
- $"B2CA 03C9 BE9D 7B83 7C02 7BAB C8B4 CA01" /* ²Ê.ɾ{ƒ|.{«È´Ê. */
- $"C8ED 80FF 02D9 BCCB B1CA 03C9 BC98 7A83" /* Èí€ÿ.ټ˱Ê.ɼ˜zƒ */
- $"7C02 7AA5 C6B4 C901 C6DA 80FF 03FD C1C4" /* |.z¥Æ´É.ÆÚ€ÿ.ýÁÄ */
- $"CAB0 C903 C7B9 957A 837C 0279 9FC4 B4C8" /* ʰÉ.ǹ•zƒ|.yŸÄ´È */
- $"02C7 CAF7 80FF 02E8 B8C9 B0C8 03C5 B68F" /* .ÇÊ÷€ÿ.è¸É°È.Ŷ */
- $"7A83 7C02 799A C2B5 C701 C4E4 81FF 02CA" /* zƒ|.yšÂµÇ.Ääÿ.Ê */
- $"BFC8 AFC7 06C4 B38B 7A7C 7C00 807C 0278" /* ¿È¯Ç.ij‹z||.€|.x */
- $"93C0 B1C6 00C7 80C8 02C4 CFFD 80FF 01F2" /* “À±Æ.Ç€È.ÄÏý€ÿ.ò */
- $"B8B0 C606 C2AF 897A 7C7C 0080 7C02 798F" /* ¸°Æ.¯‰z||.€|.y */
- $"BEB0 C607 C8C0 B4B2 B6C3 C6ED 81FF 02D4" /* ¾°Æ.ÈÀ´²¶ÃÆíÿ.Ô */
- $"BBC7 AEC6 06C1 AC84 7A7C 7C00 807C 0279" /* »Ç®Æ.Á¬„z||.€|.y */
- $"8BBB AFC5 08C6 B6BA DCE5 D5B3 BAD8 81FF" /* ‹»¯Å.ƶºÜåÕ³ºØÿ */
- $"02F9 BBC4 AEC5 06C0 A982 7B7C 7C00 807C" /* .ù»Ä®Å.À©‚{||.€| */
- $"027A 85B7 AEC4 02C5 C1CE 81FF 03F7 BAC1" /* .z…·®Ä.ÅÁÎÿ.÷ºÁ */
- $"F481 FF02 DCB7 C6AD C40D BDA5 817B 7C7C" /* ôÿ.Ü·Æ­Ä.½¥{|| */
- $"0000 7C7C 7A83 B4C3 ADC4 03C3 B3BE E981" /* ..||zƒ´Ã­Ä.ó¾é */
- $"FF02 E8B6 DC81 FF02 FDBE C0AD C40D BCA1" /* ÿ.è¶Üÿ.ý¾À­Ä.¼¡ */
- $"7E7B 7C7C 0000 7C7C 7B80 B0C2 ACC3 0CC4" /* ~{||..||{€°Â¬Ã.Ä */
- $"B5DD DAAE C4F2 FFFF FAC2 C5F8 81FF 02E2" /* µÝÚ®ÄòÿÿúÂÅøÿ.â */
- $"B5C4 ACC3 01B9 9D81 7C07 0000 7C7C 7B7C" /* µÄ¬Ã.¹|...||{| */
- $"ABC0 ABC1 0DC2 BCC1 FFFF F7C7 ACD0 FBFC" /* «À«Á.¼Áÿÿ÷ǬÐûü */
- $"C7BC E082 FF02 C0BD C2AB C101 B79A 817C" /* Ǽà‚ÿ.À½Â«Á.·š| */
- $"0100 0080 7C02 7BA7 BFAB C102 C2B2 EB81" /* ...€|.{§¿«Á.²ë */
- $"FF07 EDB9 B3D7 C3BF C7FA 81FF 02E6 B3C2" /* ÿ.í¹³×ÿÇúÿ.æ³Â */
- $"AAC1 03C0 B595 7B80 7C01 0000 807C 027A" /* ªÁ.Àµ•{€|...€|.z */
- $"A3BE AAC0 02C1 B6CA 84FF 05DE B8C0 C0BD" /* £¾ªÀ.Á¶Ê„ÿ.Þ¸ÀÀ½ */
- $"E382 FF02 C2BA C1A9 C003 BFB2 927A 807C" /* ã‚ÿ.ºÁ©À.¿²’z€| */
- $"0100 0080 7C02 789D BCAA BF02 BEB3 F584" /* ...€|.x¼ª¿.¾³õ„ */
- $"FF06 EBBF BEBF BDC9 FC81 FF02 E8B2 C0A9" /* ÿ.뿾¿½Éüÿ.è²À© */
- $"BF03 BEB0 8F7A 807C 0100 0080 7C02 7898" /* ¿.¾°z€|...€|.x˜ */
- $"BAA9 BE02 BFB5 D984 FF02 FBC7 BC80 BE01" /* º©¾.¿µÙ„ÿ.ûǼ€¾. */
- $"BBE7 82FF 02C3 B7BF A8BE 03BC AD8B 7A80" /* »ç‚ÿ.÷¿¨¾.¼­‹z€ */
- $"7C01 0000 807C 0278 95B9 A9BD 02BC B3E9" /* |...€|.x•¹©½.¼³é */
- $"84FF 01DD B981 BD02 BACB FE81 FF02 EAB0" /* „ÿ.ݹ½.ºËþÿ.ê° */
- $"BEA8 BD03 BAAA 887A 807C 0100 0080 7C02" /* ¾¨½.ºªˆz€|...€|. */
- $"7890 B8A8 BD05 BEB2 C1AC C7F6 81FF 02F4" /* x¸¨½.¾²Á¬Çöÿ.ô */
- $"C0BC 82BD 01BB EA82 FF02 C4B6 BEA7 BD03" /* À¼‚½.»ê‚ÿ.;§½. */
- $"BAA8 867A 807C 0100 0080 7C02 788B B5A7" /* º¨†z€|...€|.x‹µ§ */
- $"BC0C BDB5 C1FF F2BD AAD5 FCFF FFD3 B983" /* ¼.½µÁÿò½ªÕüÿÿÓ¹ƒ */
- $"BC01 B9CC 82FF 02EB AFBD A7BC 03B8 A584" /* ¼.¹Ì‚ÿ.믽§¼.¸¥„ */
- $"7B80 7C01 0000 807C 0279 88B3 A8BC 01AE" /* {€|...€|.yˆ³¨¼.® */
- $"ED80 FF06 E5B1 B1E6 ECBB BB84 BC01 B9EB" /* í€ÿ.å±±æì»»„¼.¹ë */
- $"82FF 02C5 B4BD A6BC 03B7 A381 7B80 7C01" /* ‚ÿ.Å´½¦¼.·£{€|. */
- $"0000 807C 027A 85B1 A6BB 02BC AFCC 82FF" /* ..€|.z…±¦».¼¯Ì‚ÿ */
- $"04FE D6AF BBBA 85BB 01B7 CC82 FF02 ECAE" /* .þÖ¯»º…».·Ì‚ÿ.ì® */
- $"BCA6 BB03 B5A0 807B 807C 0100 0080 7C03" /* ¼¦».µ €{€|...€|. */
- $"7A80 ADB9 A5BA 02B8 B0F7 84FF 01DE B486" /* z€­¹¥º.¸°÷„ÿ.Þ´† */
- $"BA02 B9B8 EB82 FF02 C3B2 BBA5 BA03 B39C" /* º.¹¸ë‚ÿ.ò»¥º.³œ */
- $"7F7B 807C 0100 0080 7C03 7B7E AAB7 A4B8" /* .{€|...€|.{~ª·¤¸ */
- $"02BA ABD8 84FF 02F9 C1B6 87B8 01B5 CC82" /* .º«Ø„ÿ.ùÁ¶‡¸.µÌ‚ */
- $"FF02 EBAC B9A5 B803 B199 7D7B 807C 0100" /* ÿ.묹¥¸.±™}{€|.. */
- $"0080 7C03 7B7D A7B6 A4B7 02B2 B7FE 84FF" /* .€|.{}§¶¤·.²·þ„ÿ */
- $"01D7 B388 B702 B6B6 EB82 FF02 C2B0 B8A4" /* .׳ˆ·.¶¶ë‚ÿ.°¸¤ */
- $"B701 AF96 827C 0100 0081 7C02 7BA3 B5A3" /* ·.¯–‚|...|.{£µ£ */
- $"B602 B7A8 E584 FF02 F1B8 B589 B601 B3CA" /* ¶.·¨å„ÿ.ñ¸µ‰¶.³Ê */
- $"82FF 02EA AAB7 A4B6 01AD 9382 7C01 0000" /* ‚ÿ.ꪷ¤¶.­“‚|... */
- $"817C 0278 9FB4 97B5 0DB4 B5B6 B4B6 B5B4" /* |.xŸ´—µ.´µ¶´¶µ´ */
- $"B6B5 B4B6 B6AD C085 FF11 CCB0 B6B5 B4B6" /* ¶µ´¶¶­À…ÿ.̰¶µ´¶ */
- $"B5B4 B6B5 B4B6 B4B5 B6B3 B4EB 82FF 0EC0" /* µ´¶µ´¶´µ¶³´ë‚ÿ.À */
- $"AFB6 B5B4 B6B4 B4B6 B4B5 B6B4 B5B6 97B5" /* ¯¶µ´¶´´¶´µ¶´µ¶—µ */
- $"01AB 9082 7C01 0000 817C 0278 9CB3 95B5" /* .«‚|...|.xœ³•µ */
- $"0FB6 AFA7 A9AA A7AA AAA7 ABA9 A7AC B1A9" /* .¶¯§©ª§ªª§«©§¬±© */
- $"F084 FF12 E9AA A6AA AAA7 ABA9 A7AB A8A8" /* ð„ÿ.骦ªª§«©§«¨¨ */
- $"ACA8 A8AB A7A5 C882 FF0F E8A8 B2A8 A8AB" /* ¬¨¨«§¥È‚ÿ.訲¨¨« */
- $"A8A8 ACA8 A9AC A7A9 AAAB 95B5 03B4 A98E" /* ¨¨¬¨©¬§©ª«•µ.´©Ž */
- $"7B81 7C01 0000 817C 0278 99B2 95B4 0EB3" /* {|...|.x™²•´.³ */
- $"B7F9 D2C7 FFC1 CEFF BCE1 FABB AACD 84FF" /* ·ùÒÇÿÁÎÿ¼áú»ªÍ„ÿ */
- $"14FD BAC6 FFC5 D3FF B7DF F9B7 EBF2 B0F6" /* .ýºÆÿÅÓÿ·ßù·ëò°ö */
- $"E6B9 FDDA A7EB 82FF 0FBD AAE6 F8B0 EBF1" /* æ¹ýÚ§ë‚ÿ.½ªæø°ëñ */
- $"B5F7 E3B4 FED9 C5D5 AF94 B403 B3A7 8B7B" /* µ÷ã´þÙÅÕ¯”´.³§‹{ */
- $"817C 0100 0081 7C02 7794 B195 B30E B1B9" /* |...|.w”±•³.±¹ */
- $"FFD2 C7FF D3DE FFBA E3FF BDAA F984 FF14" /* ÿÒÇÿÓÞÿºãÿ½ªù„ÿ. */
- $"DBA2 DAFF C4D4 FFCA EBFE B4EF FBC4 FEE9" /* Û¢ÚÿÄÔÿÊëþ´ïûÄþé */
- $"B6FF EAAB C082 FF0F E4A3 ECFF C5F6 F5B2" /* ¶ÿê«À‚ÿ.ä£ìÿÅöõ² */
- $"FBEF C8FF DAC4 DAAE 94B3 03B2 A589 7B81" /* ûïÈÿÚÄÚ®”³.²¥‰{ */
- $"7C01 0000 807C 037D 7690 AE95 B104 AFB7" /* |...€|.}v®•±.¯· */
- $"FFE0 D681 FF04 CDEC FCAE D884 FF06 F7AC" /* ÿàÖÿ.Íìü®Ø„ÿ.÷¬ */
- $"E0FF FFD4 E180 FF02 FDC9 F380 FF06 EFCA" /* àÿÿÔá€ÿ.ýÉó€ÿ.ïÊ */
- $"FFFF FAAE E582 FF01 B6DA 80FF 02F7 C7FB" /* ÿÿú®å‚ÿ.¶Ú€ÿ.÷Çû */
- $"80FF 03E5 D6D9 AC94 B103 B0A2 877B 817C" /* €ÿ.åÖÙ¬”±.°¢‡{| */
- $"0100 0081 7C02 768D AC95 B002 AEB7 FB85" /* ...|.v¬•°.®·û… */
- $"FF01 CDB1 85FF 01C9 B890 FF01 D5B8 82FF" /* ÿ.ͱ…ÿ.ɸÿ.Õ¸‚ÿ */
- $"02E0 B3FC 87FF 01D5 AA94 B003 AE9F 857B" /* .à³ü‡ÿ.Õª”°.®Ÿ…{ */
- $"817C 0100 0081 7C02 788A AB95 AF02 ADB6" /* |...|.xŠ«•¯.­¶ */
- $"FB84 FF02 F0A5 E584 FF02 EEA6 EC90 FF02" /* û„ÿ.ð¥å„ÿ.î¦ìÿ. */
- $"FCAE E281 FF02 FCB4 DB87 FF01 D5A9 94AF" /* ü®âÿ.ü´Û‡ÿ.Õ©”¯ */
- $"03AC 9D83 7B81 7C01 0000 817C 0278 86A9" /* .¬ƒ{|...|.x†© */
- $"95AD 02AB B4FB 84FF 01BE BD85 FF01 BAC3" /* •­.«´û„ÿ.¾½…ÿ.ºÃ */
- $"92FF 01D6 B480 FF04 FCD8 A4B3 FB86 FF01" /* ’ÿ.Ö´€ÿ.üؤ³û†ÿ. */
- $"D4A7 94AD 03AB 9A81 7B81 7C01 0000 817C" /* Ô§”­.«š{|...| */
- $"0278 83A7 95AC 02AA B3FB 83FF 02E5 A3F2" /* .xƒ§•¬.ª³ûƒÿ.å£ò */
- $"84FF 02E1 A5F6 92FF 09FD AEDC FBDE B595" /* „ÿ.á¥ö’ÿÆý®ÜûÞµ• */
- $"B6A9 D886 FF01 D3A6 94AC 03A9 9880 7B81" /* ¶©Ø†ÿ.Ó¦”¬.©˜€{ */
- $"7C01 0000 817C 0278 80A5 95AC 02AA B3FB" /* |...|.x€¥•¬.ª³û */
- $"82FF 02FE B0CB 84FF 02FC ADD0 94FF 09DB" /* ‚ÿ.þ°Ë„ÿ.ü­Ð”ÿÆÛ */
- $"A1A8 95A2 D6FF D1AA FA85 FF01 D3A6 94AC" /* ¡¨•¢ÖÿѪú…ÿ.Ó¦”¬ */
- $"03A8 967F 7B81 7C01 0000 817C 0279 7FA3" /* .¨–.{|...|.y.£ */
- $"95AB 02A9 B2FB 82FF 02D7 A7FB 84FF 02D2" /* •«.©²û‚ÿ.×§û„ÿ.Ò */
- $"AAFD 95FF 08AD B4DD FCFF FFFA A5D3 85FF" /* ªý•ÿ.­´Ýüÿÿú¥Ó…ÿ */
- $"01D3 A594 AB03 A694 7E7B 817C 0100 0081" /* .Ó¥”«.¦”~{|... */
- $"7C02 7A7D A095 A902 A7B1 FB81 FF02 F8A5" /* |.z} •©.§±ûÿ.ø¥ */
- $"DA84 FF02 F4A4 E096 FF01 DCC2 82FF 02D3" /* Ú„ÿ.ô¤à–ÿ.Ü‚ÿ.Ó */
- $"A5F8 84FF 01D2 A394 A902 A491 7D82 7C01" /* ¥ø„ÿ.Ò£”©.¤‘}‚|. */
- $"0000 817C 027A 7A9E 95A8 08A6 B1EF F3F2" /* ..|.zzž•¨.¦±ïóò */
- $"F2F6 C6B0 85FF 02C5 B4F5 95F2 03F3 F2B5" /* òöư…ÿ.Å´õ•ò.óòµ */
- $"E881 FF03 FCA7 CCF6 82F2 02F7 CDA3 94A8" /* èÿ.ü§Ìö‚ò.÷Í£”¨ */
- $"01A3 8F83 7C01 0000 817C 027B 779C 96A7" /* .£ƒ|...|.{wœ–§ */
- $"00A8 82AB 019C E984 FF03 E9A6 AAAC 96AB" /* .¨‚«.œé„ÿ.馪¬–« */
- $"02AC A6C1 82FF 02D8 A0AC 83AB 00A9 95A7" /* .¬¦Á‚ÿ.Ø ¬ƒ«.©•§ */
- $"01A1 8D83 7C01 0000 817C 037B 7699 A595" /* .¡ƒ|...|.{v™¥• */
- $"A600 A580 A402 A599 C085 FF02 BCA1 A599" /* ¦.¥€¤.¥™À…ÿ.¼¡¥™ */
- $"A401 A5E9 81FF 02CB 96A3 83A4 00A5 95A6" /* ¤.¥éÿ.Ë–£ƒ¤.¥•¦ */
- $"029F 8A7B 827C 0100 0082 7C02 7596 A399" /* .ŸŠ{‚|...‚|.u–£™ */
- $"A402 A29F F584 FF01 DDA0 9BA4 09A0 BFFF" /* ¤.¢Ÿõ„ÿ.Ý ›¤Æ ¿ÿ */
- $"FFE6 ADAB D299 A59B A402 9D88 7B82 7C01" /* ÿæ­«Ò™¥›¤.ˆ{‚|. */
- $"0000 827C 0276 94A2 98A3 02A4 98D1 84FF" /* ..‚|.v”¢˜£.¤˜Ñ„ÿ */
- $"02F9 AFA0 9CA3 09A4 B9A9 A0CB FCFF B599" /* .ù¯ œ£Æ¤¹© Ëüÿµ™ */
- $"A49A A302 9C87 7B82 7C01 0000 827C 0275" /* ¤š£.œ‡{‚|...‚|.u */
- $"92A2 98A3 02A1 A4F5 84FF 01CF 9E9D A303" /* ’¢˜£.¡¤õ„ÿ.Ïž£. */
- $"A0A9 DEFB 80FF 02F3 9CA0 9AA3 029B 867B" /*  ©Þû€ÿ.󜠚£.›†{ */
- $"827C 0100 0081 7C03 7D74 8FA1 97A2 05A3" /* ‚|...|.}t¡—¢.£ */
- $"9FA0 9ED6 FE81 FF02 F0A6 A09D A202 A0A9" /* Ÿ žÖþÿ.𦠢. © */
- $"F382 FF01 D893 9AA2 0299 837B 827C 0100" /* ó‚ÿ.Ø“š¢.™ƒ{‚|.. */
- $"0081 7C03 7D73 8D9F 97A0 069F 9FF1 D697" /* .|.}sŸ— .ŸŸñÖ— */
- $"A6E6 80FF 01C1 9B9F A001 9BD2 83FF 02BB" /* ¦æ€ÿ.Á›Ÿ .›Òƒÿ.» */
- $"94A1 98A0 0297 827B 827C 0100 0081 7C03" /* ”¡˜ .—‚{‚|...|. */
- $"7D72 8A9E 979F 0B9D A6FB FFF9 BF91 B6F6" /* }rŠž—Ÿ.¦ûÿù¿‘¶ö */
- $"E69E 9E9F 9F01 9BB4 83FF 03FA A199 A096" /* æžžŸŸ.›´ƒÿ.ú¡™ – */
- $"9F03 9E95 807B 827C 0100 0081 7C03 7D72" /* Ÿ.ž•€{‚|...|.}r */
- $"889D 979E 0199 B281 FF04 EFAD 9EA9 9CA0" /* ˆ—ž.™²ÿ.ï­ž©œ  */
- $"9E02 9D9F EE83 FF01 E492 979E 039D 9480" /* ž.Ÿîƒÿ.ä’—ž.”€ */
- $"7B82 7C01 0000 817C 037D 7487 9B97 9D01" /* {‚|...|.}t‡›—. */
- $"96BF 82FF 02FE B697 A29D 0198 D184 FF02" /* –¿‚ÿ.þ¶—¢.˜Ñ„ÿ. */
- $"C191 9E95 9D03 9C92 7F7B 827C 0100 0081" /* Á‘ž•.œ’.{‚|... */
- $"7C03 7D75 849A 979C 0194 CE81 FF02 F8BD" /* |.}u„š—œ.”Îÿ.ø½ */
- $"9BA3 9C01 98B4 84FF 02F8 9D99 959C 039B" /* ›£œ.˜´„ÿ.ø™•œ.› */
- $"907E 7B82 7C01 0000 817C 037D 7482 9997" /* ~{‚|...|.}t‚™— */
- $"9B01 94DF 80FF 03EE AD95 9AA3 9B02 9A9D" /* ›.”߀ÿ.î­•š£›.š */
- $"EF84 FF02 CC91 9C94 9B03 9A8F 7C7B 827C" /* ï„ÿ.Ì‘œ”›.š|{‚| */
- $"0100 0081 7C03 7D74 8098 979A 0697 ECFF" /* ...|.}t€˜—š.—ìÿ */
- $"FFE0 A195 A69A 0195 D084 FF02 F098 9994" /* ÿà¡•¦š.•Єÿ.𘙔 */
- $"9A02 998D 7B83 7C01 0000 817C 037D 737E" /* š.™{ƒ|...|.}s~ */
- $"9896 9A06 989F F9FF D099 97A7 9A02 96AD" /* ˜–š.˜ŸùÿЙ—§š.–­ */
- $"FD83 FF02 FCA6 9794 9A02 998D 7B83 7C01" /* ýƒÿ.ü¦—”š.™{ƒ|. */
- $"0000 817C 037D 737D 9796 9905 95AD FCBE" /* ..|.}s}—–™.•­ü¾ */
- $"9498 A999 0196 DD83 FF02 F7A3 9794 9902" /* ”˜©™.–݃ÿ.÷£—”™. */
- $"988C 7A83 7C01 0000 817C 037D 737B 9696" /* ˜Œzƒ|...|.}s{–– */
- $"9803 95B0 B392 AB98 0294 AAF9 82FF 01CF" /* ˜.•°³’«˜.”ªù‚ÿ.Ï */
- $"9595 9802 978A 7A83 7C01 0000 817C 037D" /* ••˜.—Šzƒ|...|.} */
- $"747B 9498 9700 94AD 9708 93B9 F9FF FFF6" /* t{”˜—.”­—.“¹ùÿÿö */
- $"C797 9695 9702 9688 7983 7C01 0000 817C" /* Ç—–•—.–ˆyƒ|...| */
- $"037D 7479 93CA 9606 92A4 BEB8 9F91 9596" /* .}ty“Ê–.’¤¾¸Ÿ‘•– */
- $"9602 9588 7983 7C01 0000 817C 037D 7478" /* –.•ˆyƒ|...|.}tx */
- $"93CB 9603 9390 9193 9896 0294 8779 837C" /* “Ë–.“‘“˜–.”‡yƒ| */
- $"0100 0081 7C03 7D75 7892 EA95 0293 8679" /* ...|.}ux’ê•.“†y */
- $"837C 0100 0081 7C03 7D75 7892 EA95 0293" /* ƒ|...|.}ux’ê•.“ */
- $"8679 837C 0100 0081 7C03 7D76 7792 EA95" /* †yƒ|...|.}vw’ê• */
- $"0293 8679 837C 0100 0081 7C03 7D76 7792" /* .“†yƒ|...|.}vw’ */
- $"EA95 0293 8579 837C 0000 827C 037D 7776" /* ê•.“…yƒ|..‚|.}wv */
- $"8FEA 9402 9182 7883 7C00 0083 7C03 7A70" /* ê”.‘‚xƒ|..ƒ|.zp */
- $"8288 E989 0285 7A79 837C 0100 0082 7C02" /* ‚ˆé‰.…zyƒ|...‚|. */
- $"7D78 76EA 7901 7779 847C 0100 00FB 7C01" /* }xvêy.wy„|...û|. */
- $"0000 FB7C 0100 00FB 7C01 0000 FB7C 0100" /* ..û|...û|...û|.. */
- $"00FA 7C81 00F9 7C82 00F7 7C83 00F6 7C86" /* .ú|.ù|‚.÷|ƒ.ö|† */
- $"00F3 7CFF 00FF 0000 00FF 00FF 00FF 00FF" /* .ó|ÿ.ÿ...ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 74D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.Ÿt× */
- $"00A6 74D3 0001 7474 8000 9D73 8474 D000" /* .¦tÓ..tt€.s„tÐ. */
- $"0374 7400 749E 7702 7673 7283 74D0 0003" /* .tt.tžw.vsrƒtÐ.. */
- $"7381 9FAB 9DAC 03A8 977A 7383 74CD 0004" /* sŸ«¬.¨—zsƒtÍ.. */
- $"7400 79AF CC9E CF03 CCBF 9B73 8374 CD00" /* t.y¯ÌžÏ.Ì¿›sƒtÍ. */
- $"0474 0088 C6D2 9FD3 03CA AF7C 7282 74CD" /* .t.ˆÆÒŸÓ.ʯ|r‚tÍ */
- $"0003 7400 8EC9 A0D3 03CC B27D 7282 74CC" /* ..t.ŽÉ Ó.̲}r‚tÌ */
- $"0004 7474 7094 CBA0 D203 CCB3 7C72 8374" /* ..ttp”Ë Ò.̳|rƒt */
- $"CB00 0474 7471 A1CE A0D1 03CC B67F 72B8" /* Ë..ttq¡Î Ñ.̶.r¸ */
- $"7495 0005 7474 0078 B7D0 A0D1 03CE BE8B" /* t•..tt.x·Ð Ñ.ξ‹ */
- $"70BA 7492 0006 7474 0070 96C9 CFA0 D004" /* pºt’..tt.p–ÉÏ Ð. */
- $"CFC6 A675 71BA 7490 0006 7474 0072 8FC0" /* ÏÆ¦uqºt..tt.rÀ */
- $"CDA2 CF03 CBBF 9D7A B672 0473 0073 7474" /* Í¢Ï.Ë¿z¶r.s.stt */
- $"8E00 0674 7400 799D C3CD A3CF 04CE CAC3" /* Ž..tt.yÃÍ£Ï.ÎÊà */
- $"B2A0 B598 0496 8D79 0074 8D00 0774 7400" /* ² µ˜.–y.t..tt. */
- $"79A8 C8CE CEA4 CF03 CECD CBC9 B5C7 03C3" /* y¨ÈÎΤÏ.ÎÍËɵÇ.à */
- $"B58F 0080 7489 0081 7403 7192 C1C8 E2C9" /* µ.€t‰.t.q’ÁÈâÉ */
- $"03C7 B995 7282 7486 0001 7474 8000 026E" /* .ǹ•r‚t†..tt€..n */
- $"91AC E3AF 04AE A58A 6F71 8000 0174 7484" /* ‘¬ã¯.®¥Šoq€..tt„ */
- $"0008 7400 7075 8085 8487 8E80 8FAA 9000" /* ..t.pu€…„‡Ž€ª. */
- $"8FB0 9080 8F09 8B87 8584 847F 7600 7474" /* °€Æ‹‡…„„.v.tt */
- $"8200 0774 0070 8BAF BCBF C0E7 C109 C0BF" /* ‚..t.p‹¯¼¿ÀçÁÆÀ¿ */
- $"BEBE B8A6 8572 7474 8200 0370 8DC0 C9EE" /* ¾¾¸¦…rtt‚..pÀÉî */
- $"CA05 C9C4 B185 0074 8000 0474 0078 B4C8" /* Ê.Éı….t€..t.x´È */
- $"F0CA 0CC9 BFA1 7600 7400 0074 0088 BFC8" /* ðÊ.É¿¡v.t..t.ˆ¿È */
- $"B3C9 03CA C7C9 CAB7 C90A C3AD 7F00 7400" /* ³É.ÊÇÉÊ·ÉÂí..t. */
- $"0074 708C C0B3 C805 C9C3 B8B3 C4C9 B6C8" /* .tpŒÀ³È.Éø³ÄÉ¶È */
- $"0AC3 AE7F 0074 0074 7400 88BD B4C7 05C2" /* Âî..t.tt.ˆ½´Ç. */
- $"F1EC B2C4 C8B5 C70B C1AB 7C00 7400 7474" /* ñì²ÄȵÇ.Á«|.t.tt */
- $"0082 BAC6 B3C7 04C6 F2FF E6B3 B6C7 0BC0" /* .‚ºÆ³Ç.Æòÿæ³¶Ç.À */
- $"A67A 7374 0074 7400 7DB5 C5B3 C606 C3E7" /* ¦zst.tt.}µÅ³Æ.Ãç */
- $"FFFF D5B6 C8B4 C60B BDA1 7573 7400 7474" /* ÿÿÕ¶È´Æ.½¡ust.tt */
- $"0079 B0C4 B3C5 01C2 D880 FF02 C0BD C6B2" /* .y°Ä³Å.ÂØ€ÿ.À½Æ² */
- $"C50C C4BB 9D75 7374 0074 7473 75AA C2B3" /* Å.Ä»ust.ttsuªÂ³ */
- $"C406 C3C9 FAFF FFF0 B3B3 C403 C3B8 9673" /* Ä.ÃÉúÿÿð³³Ä.ø–s */
- $"8474 01A5 C1B4 C301 C1EB 80FF 02D6 B4C5" /* „t.¥Á´Ã.Áë€ÿ.Ö´Å */
- $"B1C3 03C2 B591 7283 7402 719E BFB4 C201" /* ±Ã.µ‘rƒt.qž¿´Â. */
- $"BFD5 80FF 03FD BBBD C3B0 C203 C0B2 8E72" /* ¿Õ€ÿ.ý»½Ã°Â.À²Žr */
- $"8374 0270 99BD B4C1 02C0 C4F6 80FF 02E6" /* ƒt.p™½´Á.ÀÄö€ÿ.æ */
- $"B1C2 B0C1 03BE AF87 7283 7402 7193 BBB5" /* ±Â°Á.¾¯‡rƒt.q“»µ */
- $"C001 BCE1 81FF 02C6 B7C1 AFC0 06BD AC84" /* À.¼áÿ.Æ·Á¯À.½¬„ */
- $"7274 7400 8074 0270 8CB9 B1BF 00C0 80C1" /* rtt.€t.pŒ¹±¿.À€Á */
- $"02BD CAFD 80FF 01F1 B1B0 BF06 BBA9 8172" /* .½Êý€ÿ.ñ±°¿.»©r */
- $"7474 0080 7402 7088 B7B0 BF07 C1B9 ACAB" /* tt.€t.pˆ·°¿.Á¹¬« */
- $"AEBC BEEB 81FF 02D1 B3C0 AEBF 06BA A67C" /* ®¼¾ëÿ.ѳÀ®¿.º¦| */
- $"7274 7400 8074 0271 83B4 AFBE 08BF AFB4" /* rtt.€t.qƒ´¯¾.¿¯´ */
- $"D9E3 D2AD B1D3 81FF 02F8 B4BC AEBE 06B8" /* ÙãÒ­±Óÿ.ø´¼®¾.¸ */
- $"A27A 7374 7400 8074 0372 7DB1 BCAE BD01" /* ¢zstt.€t.r}±¼®½. */
- $"B9CA 81FF 03F6 B4B9 F381 FF02 D8AF BEAD" /* ¹Êÿ.ö´¹óÿ.د¾­ */
- $"BD0D B69F 7973 7474 0000 7474 727A ADBB" /* ½.¶Ÿystt..ttrz­» */
- $"ADBC 03BB ABB7 E681 FF02 E6AE D881 FF02" /* ­¼.»«·æÿ.æ®Øÿ. */
- $"FDB7 B8AD BC0D B49A 7673 7474 0000 7474" /* ý·¸­¼.´švstt..tt */
- $"7378 A9BA ACBB 0CBC ACDB D7A6 BDF0 FFFF" /* sx©º¬».¼¬Ûצ½ðÿÿ */
- $"FABA BEF7 81FF 02DF ACBC ACBB 01B2 9781" /* úº¾÷ÿ.߬¼¬».²— */
- $"7407 0000 7474 7374 A4B8 ABB9 0DBA B3BB" /* t...ttst¤¸«¹.º³» */
- $"FFFF F7C2 A4CB FAFC C0B4 DC82 FF02 BAB4" /* ÿÿ÷¤ËúüÀ´Ü‚ÿ.º´ */
- $"BAAB B901 B093 8174 0100 0080 7402 729F" /* º«¹.°“t...€t.rŸ */
- $"B6AB B902 BAAA E981 FF07 ECB3 ABD1 BBB6" /* ¶«¹.ºªéÿ.쳫ѻ¶ */
- $"C0FA 81FF 02E4 AABA AAB9 03B8 AD8E 7380" /* Àúÿ.䪺ª¹.¸­Žs€ */
- $"7401 0000 8074 0272 9BB6 AAB8 02B9 ADC6" /* t...€t.r›¶ª¸.¹­Æ */
- $"84FF 05DC AFB7 B8B4 E082 FF02 BCB1 B9A9" /* „ÿ.ܯ·¸´à‚ÿ.¼±¹© */
- $"B803 B6AB 8A72 8074 0100 0080 7402 7095" /* ¸.¶«Šr€t...€t.p• */
- $"B4AA B602 B5AB F484 FF06 E9B6 B5B6 B4C2" /* ´ª¶.µ«ô„ÿ.é¶µ¶´Â */
- $"FC81 FF02 E6A9 B7A9 B603 B5A8 8872 8074" /* üÿ.æ©·©¶.µ¨ˆr€t */
- $"0100 0080 7402 6F91 B3A9 B602 B7AD D684" /* ...€t.o‘³©¶.·­Ö„ */
- $"FF02 FAC0 B480 B601 B3E4 82FF 02BD AFB7" /* ÿ.úÀ´€¶.³ä‚ÿ.½¯· */
- $"A8B6 03B4 A584 7280 7401 0000 8074 0270" /* ¨¶.´¥„r€t...€t.p */
- $"8DB2 A9B6 02B4 ACE7 84FF 01D9 B181 B602" /* ²©¶.´¬ç„ÿ.Ù±¶. */
- $"B3C5 FE81 FF02 E8A8 B7A8 B603 B3A3 8172" /* ³Åþÿ.訷¨¶.³£r */
- $"8074 0100 0080 7402 7087 B0A8 B505 B6AA" /* €t...€t.p‡°¨µ.¶ª */
- $"BDA4 C1F5 81FF 02F3 B8B4 82B5 01B2 E782" /* ½¤Áõÿ.ó¸´‚µ.²ç‚ */
- $"FF02 BFAD B6A7 B503 B2A1 7F72 8074 0100" /* ÿ.¿­¶§µ.²¡.r€t.. */
- $"0080 7402 7083 ADA7 B40C B5AC BBFF F2B8" /* .€t.pƒ­§´.µ¬»ÿò¸ */
- $"A2D0 FBFF FFCE B083 B401 B1C5 82FF 02EA" /* ¢Ðûÿÿΰƒ´.±Å‚ÿ.ê */
- $"A7B5 A7B4 03B0 9E7C 7380 7401 0000 8074" /* §µ§´.°ž|s€t...€t */
- $"0271 80AB A8B3 01A5 EC80 FF06 E4AA A9E2" /* .q€«¨³.¥ì€ÿ.䪩â */
- $"EAB2 B284 B301 B1E8 82FF 02BF ABB4 A6B3" /* ê²²„³.±è‚ÿ.¿«´¦³ */
- $"03AE 9B79 7380 7401 0000 8074 0272 7DA8" /* .®›ys€t...€t.r}¨ */
- $"A6B2 02B3 A6C8 82FF 04FE D3A8 B2B1 85B2" /* ¦².³¦È‚ÿ.þÓ¨²±…² */
- $"01AE C582 FF02 EAA6 B3A6 B203 AC98 7873" /* .®Å‚ÿ.꦳¦².¬˜xs */
- $"8074 0100 0080 7403 7278 A5B0 A5B1 02AF" /* €t...€t.rx¥°¥±.¯ */
- $"A9F7 84FF 01DA AB86 B102 B0AF E982 FF02" /* ©÷„ÿ.Ú«†±.°¯é‚ÿ. */
- $"BEA9 B2A5 B103 AB95 7773 8074 0100 0080" /* ¾©²¥±.«•ws€t...€ */
- $"7403 7276 A2AF A4B0 02B1 A2D5 84FF 02F8" /* t.rv¢¯¤°.±¢Õ„ÿ.ø */
- $"BAAE 87B0 01AC C682 FF02 EAA4 B1A5 B003" /* º®‡°.¬Æ‚ÿ.ꤱ¥°. */
- $"A991 7573 8074 0100 0080 7402 7375 9FA4" /* ©‘us€t...€t.suŸ¤ */
- $"AE03 AFA9 B0FE 84FF 01D3 AA88 AE02 ADAD" /* ®.¯©°þ„ÿ.Óªˆ®.­­ */
- $"E982 FF02 BCA7 AFA4 AE01 A78E 8274 0100" /* é‚ÿ.¼§¯¤®.§Ž‚t.. */
- $"0081 7402 729B ADA3 AE02 AFA0 E384 FF02" /* .t.r›­£®.¯ ã„ÿ. */
- $"F0B0 AD89 AE01 AAC4 82FF 02E9 A2AF A4AE" /* ð°­‰®.ªÄ‚ÿ.颯¤® */
- $"01A5 8C82 7401 0000 8174 0270 98AC 97AD" /* .¥Œ‚t...t.p˜¬—­ */
- $"0DAC ADAE ACAE ADAC AEAD ACAE AEA4 BB85" /* .¬­®¬®­¬®­¬®®¤»… */
- $"FF11 C7A7 AEAD ACAE ADAC AEAC ACAE ACAD" /* ÿ.ǧ®­¬®­¬®¬¬®¬­ */
- $"AEAB ABE9 82FF 0EBB A6AE ADAC AEAC ACAE" /* ®««é‚ÿ.»¦®­¬®¬¬® */
- $"ACAD AEAC ADAE 97AD 01A3 8982 7401 0000" /* ¬­®¬­®—­.£‰‚t... */
- $"8174 0270 94AA 95AC 0FAD A79F A1A2 9FA2" /* t.p”ª•¬.­§Ÿ¡¢Ÿ¢ */
- $"A29F A2A1 9FA4 A9A1 EF84 FF12 E6A2 9FA2" /* ¢Ÿ¢¡Ÿ¤©¡ï„ÿ.梟¢ */
- $"A1A0 A3A1 A0A2 A0A0 A3A0 A0A2 9F9D C282" /* ¡ £¡ ¢  £  ¢ŸÂ‚ */
- $"FF10 E6A0 A9A0 A0A2 A0A0 A2A0 A1A3 A0A1" /* ÿ.æ ©  ¢  ¢ ¡£ ¡ */
- $"A2A2 AB94 AC03 ABA1 8673 8174 0100 0081" /* ¢¢«”¬.«¡†st... */
- $"7402 7091 A995 AB0E A9AF FACE C2FF BCCA" /* t.p‘©•«.©¯úÎÂÿ¼Ê */
- $"FFB6 DEFA B4A1 C884 FF14 FDB2 C0FF BFCF" /* ÿ¶Þú´¡È„ÿ.ý²Àÿ¿Ï */
- $"FFAF DCFA AFEA F1A8 F5E4 B2FE D79D E982" /* ÿ¯Üú¯êñ¨õä²þ×é‚ */
- $"FF0F B8A1 E4F8 A9EA F0AE F7E0 ACFF D5C0" /* ÿ.¸¡äø©êð®÷à¬ÿÕÀ */
- $"D1A5 94AB 03AA 9F84 7381 7401 0000 8174" /* Ñ¥”«.ªŸ„st...t */
- $"026F 8CA8 95A9 0EA7 B1FF CEC2 FFD0 DBFF" /* .oŒ¨•©.§±ÿÎÂÿÐÛÿ */
- $"B3E0 FFB6 A2F9 84FF 14D7 99D8 FFBE D0FF" /* ³àÿ¶¢ù„ÿ.×™Øÿ¾Ðÿ */
- $"C5E9 FFAC EEFA C0FE E7B0 FFE8 A3B9 82FF" /* Åéÿ¬îúÀþç°ÿ裹‚ÿ */
- $"0FE2 99EA FFC1 F5F4 ABFB EDC4 FFD7 BED6" /* .â™êÿÁõô«ûíÄÿ×¾Ö */
- $"A394 A903 A89C 8173 8174 0100 0080 7403" /* £”©.¨œst...€t. */
- $"756E 88A6 95A8 04A6 B0FF DDD3 81FF 04C9" /* unˆ¦•¨.¦°ÿÝÓÿ.É */
- $"EBFB A6D5 84FF 06F6 A3DE FFFF D1DE 80FF" /* ëû¦Õ„ÿ.ö£ÞÿÿÑÞ€ÿ */
- $"02FD C4F2 80FF 06EE C6FF FFFA A7E2 82FF" /* .ýÄò€ÿ.îÆÿÿú§â‚ÿ */
- $"01B0 D780 FF02 F6C3 FB80 FF03 E3D3 D5A2" /* .°×€ÿ.öÃû€ÿ.ãÓÕ¢ */
- $"94A8 03A7 9A7F 7381 7401 0000 8074 0375" /* ”¨.§š.st...€t.u */
- $"6E85 A495 A702 A5AF FA85 FF01 C7AB 85FF" /* n…¤•§.¥¯ú…ÿ.Ç«…ÿ */
- $"01C4 B290 FF01 D1B1 82FF 02DD ACFB 87FF" /* .IJÿ.ѱ‚ÿ.ݬû‡ÿ */
- $"01D1 A194 A703 A598 7D73 8174 0100 0081" /* .Ñ¡”§.¥˜}st... */
- $"7402 7082 A295 A602 A4AE FB84 FF02 EF9C" /* t.p‚¢•¦.¤®û„ÿ.ïœ */
- $"E484 FF02 EC9E EB90 FF02 FCA7 DF81 FF02" /* ä„ÿ.ìžëÿ.ü§ßÿ. */
- $"FCAD D787 FF01 D0A0 94A6 03A3 957B 7381" /* ü­×‡ÿ.Р”¦.£•{s */
- $"7401 0000 8174 0270 7EA1 95A6 02A4 AEFB" /* t...t.p~¡•¦.¤®û */
- $"84FF 01B8 B885 FF01 B4BF 92FF 01D4 AD80" /* „ÿ.¸¸…ÿ.´¿’ÿ.Ô­€ */
- $"FF04 FCD4 9CAC FA86 FF01 D0A0 94A6 03A3" /* ÿ.üÔœ¬ú†ÿ.Р”¦.£ */
- $"937A 7381 7401 0000 8174 0270 7B9F 95A4" /* “zst...t.p{Ÿ•¤ */
- $"02A2 ACFA 83FF 02E3 9BF1 84FF 02DE 9EF5" /* .¢¬úƒÿ.ã›ñ„ÿ.Þžõ */
- $"92FF 09FD A8D9 FADB AD8B B1A1 D486 FF01" /* ’ÿÆý¨ÙúÛ­‹±¡Ô†ÿ. */
- $"CF9E 94A4 03A1 9178 7381 7401 0000 8174" /* Ïž”¤.¡‘xst...t */
- $"0270 779D 95A3 02A1 ACFA 82FF 02FD A9C7" /* .pw•£.¡¬ú‚ÿ.ý©Ç */
- $"84FF 02FC A5CD 94FF 09D9 989F 8B9B D3FF" /* „ÿ.ü¥Í”ÿÆÙ˜Ÿ‹›Óÿ */
- $"CDA1 F985 FF01 CF9D 94A3 03A0 8E77 7381" /* Í¡ù…ÿ.Ï”£. Žws */
- $"7401 0000 8174 0271 779A 95A2 02A0 ABFA" /* t...t.qwš•¢. «ú */
- $"82FF 02D4 A0FB 84FF 02CE A2FD 95FF 08A6" /* ‚ÿ.Ô û„ÿ.΢ý•ÿ.¦ */
- $"AEDB FCFF FFFA 9ECF 85FF 01CE 9C94 A203" /* ®ÛüÿÿúžÏ…ÿ.Μ”¢. */
- $"9E8C 7673 8174 0100 0081 7402 7275 9895" /* žŒvst...t.ru˜• */
- $"A102 9FAA FA81 FF02 F79D D784 FF02 F29C" /* ¡.Ÿªúÿ.÷ׄÿ.òœ */
- $"DE96 FF01 DABD 82FF 02D0 9DF8 84FF 01CE" /* Þ–ÿ.Ú½‚ÿ.Ðø„ÿ.Î */
- $"9A94 A102 9C8A 7582 7401 0000 8174 0272" /* š”¡.œŠu‚t...t.r */
- $"7196 959F 089D A9EE F2F1 F1F6 C0AA 85FF" /* q–•Ÿ.©îòññöÀª…ÿ */
- $"02C0 ADF5 95F1 03F2 F1AE E681 FF03 FCA0" /* .À­õ•ñ.òñ®æÿ.ü  */
- $"C7F5 82F1 02F6 C89A 949F 029A 8775 8274" /* Çõ‚ñ.öÈš”Ÿ.š‡u‚t */
- $"0100 0081 7402 736F 9396 9E00 9F82 A201" /* ...t.so“–ž.Ÿ‚¢. */
- $"93E8 84FF 03E8 9EA2 A396 A202 A39D BB82" /* “è„ÿ.螢£–¢.£»‚ */
- $"FF02 D597 A383 A200 A195 9E01 9985 8374" /* ÿ.Õ—£ƒ¢.¡•ž.™…ƒt */
- $"0100 0081 7403 736E 929D 959E 009D 809C" /* ...t.sn’•ž.€œ */
- $"029D 91BC 84FF 03FE B599 9D99 9C01 9DE7" /* .‘¼„ÿ.þµ™™œ.ç */
- $"81FF 02C7 8D9B 839C 009D 959E 0198 8383" /* ÿ.Ç›ƒœ.•ž.˜ƒƒ */
- $"7401 0000 8274 016E 8F9A 9C02 9A98 F484" /* t...‚t.nšœ.š˜ô„ */
- $"FF01 DA99 9B9C 0997 B9FF FFE4 A7A6 CF91" /* ÿ.Ú™›œÆ—¹ÿÿ䧦ϑ */
- $"9D9B 9C02 9681 7382 7401 0000 8274 026F" /* ›œ.–s‚t...‚t.o */
- $"8C9A 989B 029C 90CF 84FF 02F8 A998 9D9B" /* Œš˜›.œÏ„ÿ.ø©˜› */
- $"08B3 A39A C8FC FFB0 919C 9A9B 0294 8073" /* .³£šÈüÿ°‘œš›.”€s */
- $"8274 0100 0082 7402 6D8A 9998 9A02 989C" /* ‚t...‚t.mŠ™˜š.˜œ */
- $"F484 FF01 CB94 9D9A 0397 A2DD FB80 FF02" /* ô„ÿ.Ë”š.—¢Ýû€ÿ. */
- $"F294 979A 9A02 927E 7382 7401 0000 8174" /* ò”—šš.’~s‚t...t */
- $"0375 6B87 9898 9904 969A 96D2 FE81 FF02" /* .uk‡˜˜™.–š–Òþÿ. */
- $"EF9E 979D 9902 97A1 F382 FF02 D68A 9A99" /* ïž—™.—¡ó‚ÿ.ÖŠš™ */
- $"9902 917C 7382 7401 0000 8174 0375 6A85" /* ™.‘|s‚t...t.uj… */
- $"9797 9806 9798 F1D3 8F9F E480 FF01 BB92" /* ——˜.—˜ñÓŸä€ÿ.»’ */
- $"9F98 0192 CF83 FF02 B68A 9998 9802 8F7B" /* Ÿ˜.’σÿ.¶Š™˜˜.{ */
- $"7382 7401 0000 8174 0375 6A82 9597 960B" /* s‚t...t.uj‚•—–. */
- $"939F FBFF F9BB 89B0 F5E4 9595 9F96 0192" /* “Ÿûÿù»‰°õä••Ÿ–.’ */
- $"AD83 FF03 FA9B 9097 9796 028D 7973 8274" /* ­ƒÿ.ú›——–.ys‚t */
- $"0100 0081 7403 756A 8195 9796 0191 AC81" /* ...t.uj•—–.‘¬ */
- $"FF04 EEA8 97A2 94A0 9602 9597 EC83 FF01" /* ÿ.¢” –.•—ìƒÿ. */
- $"E28A 9796 0395 8C78 7382 7401 0000 8174" /* ⊗–.•Œxs‚t...t */
- $"0375 6C7F 9497 9501 8EBB 82FF 02FE B28E" /* .ul.”—•.Ž»‚ÿ.þ²Ž */
- $"A295 018F CE84 FF02 BD89 9695 9503 948B" /* ¢•.΄ÿ.½‰–••.”‹ */
- $"7873 8274 0100 0081 7403 756D 7D92 9794" /* xs‚t...t.um}’—” */
- $"018C CB81 FF02 F8B8 93A3 9401 90AE 84FF" /* .ŒËÿ.ø¸“£”.®„ÿ */
- $"02F7 9691 9594 0393 8A77 7382 7401 0000" /* .÷–‘•”.“Šws‚t... */
- $"8174 0375 6C7B 9197 9301 8CDD 80FF 02ED" /* t.ul{‘—“.ŒÝ€ÿ.í */
- $"A78D A493 0292 96EE 84FF 02C8 8894 9493" /* §¤“.’–î„ÿ.Ȉ””“ */
- $"0392 8875 7382 7401 0000 8174 0375 6C79" /* .’ˆus‚t...t.uly */
- $"9096 9207 9190 EBFF FFDE 9A8D A692 018C" /* –’.‘ëÿÿÞš¦’.Œ */
- $"CC84 FF02 EF91 9194 9201 9186 8474 0100" /* Ì„ÿ.ï‘‘”’.‘†„t.. */
- $"0081 7403 756B 7790 9692 0690 97F8 FFCC" /* .t.ukw–’.—øÿÌ */
- $"918E A792 028E A6FD 83FF 02FC 9F8F 9492" /* ‘ާ’.ަýƒÿ.üŸ”’ */
- $"0191 8584 7401 0000 8174 0375 6B75 8E96" /* .‘…„t...t.ukuŽ– */
- $"9005 8BA7 FCBA 8B8E A990 018D DB83 FF02" /* .‹§üº‹Ž©.Ûƒÿ. */
- $"F79B 8D94 9002 8F83 7383 7401 0000 8174" /* ÷›”.ƒsƒt...t */
- $"0375 6C74 8E96 9004 8CAA AD89 8FAA 9002" /* .ultŽ–.Œª­‰ª. */
- $"8CA3 F982 FF01 CB8C 9590 028F 8373 8374" /* Œ£ù‚ÿ.ËŒ•.ƒsƒt */
- $"0100 0081 7403 756B 728D 988F 008B AD8F" /* ...t.ukr˜.‹­ */
- $"088A B4F9 FFFF F6C3 8E8E 958F 028E 8172" /* .Š´ùÿÿöÃŽŽ•.Žr */
- $"8374 0100 0081 7403 756C 718C CA8E 068A" /* ƒt...t.ulqŒÊŽ.Š */
- $"9DBA B398 898D 968E 028D 8072 8374 0100" /* º³˜‰–Ž.€rƒt.. */
- $"0081 7403 756C 718B CB8E 038B 8888 8B98" /* .t.ulq‹ËŽ.‹ˆˆ‹˜ */
- $"8E02 8C80 7283 7401 0000 8174 0375 6D71" /* Ž.Œ€rƒt...t.umq */
- $"8BEA 8E02 8C80 7283 7401 0000 8174 0375" /* ‹êŽ.Œ€rƒt...t.u */
- $"6D70 8AEA 8D02 8B7F 7283 7401 0000 8174" /* mpŠê.‹.rƒt...t */
- $"0375 6E70 8AEA 8D02 8B7E 7283 7401 0000" /* .unpŠê.‹~rƒt... */
- $"8174 0375 6E70 8AEA 8D02 8B7E 7283 7400" /* t.unpŠê.‹~rƒt. */
- $"0082 7403 756F 6E88 EA8C 0289 7B71 8374" /* .‚t.uonˆêŒ.‰{qƒt */
- $"0000 8374 0372 697B 81E9 8202 7E73 7283" /* ..ƒt.ri{é‚.~srƒ */
- $"7401 0000 8274 0475 706E 7172 E671 0372" /* t...‚t.upnqræq.r */
- $"7270 7284 7401 0000 FB74 0100 00FB 7401" /* rpr„t...ût...ût. */
- $"0000 FB74 0100 00FB 7401 0000 FA74 8100" /* ..ût...ût...út. */
- $"F974 8200 F774 8300 F674 8600 F374 FF00" /* ùt‚.÷tƒ.öt†.ótÿ. */
- $"FF00 0000 7438 6D6B 0000 4008 0000 0000" /* ÿ...t8mk..@..... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0101 0101 0202 0202 0202 0202 0202 0202" /* ................ */
- $"0202 0202 0202 0202 0202 0202 0202 0101" /* ................ */
- $"0101 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0102 0202" /* ................ */
- $"0304 0505 0606 0606 0606 0606 0606 0606" /* ................ */
- $"0606 0606 0606 0606 0606 0606 0606 0505" /* ................ */
- $"0503 0302 0100 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0001 0100 0000" /* ................ */
- $"0204 0506 0707 0707 0707 0707 0707 0707" /* ................ */
- $"0707 0707 0707 0707 0707 0707 0707 0606" /* ................ */
- $"090A 0805 0302 0100 0000 0000 0000 0000" /* ÆÂ.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0101 001C 2F31" /* ............../1 */
- $"3436 383A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A" /* 468::::::::::::: */
- $"3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A34" /* :::::::::::::::4 */
- $"120B 0F0B 0704 0201 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0004 8FF3 FAF9" /* ............óúù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA" /* ùùùùùùùùùùùùùùúú */
- $"C433 1112 0C07 0402 0100 0000 0000 0000" /* Ä3.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 0067 FFFF FFFF" /* ...........gÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFC3 201A 130C 0703 0100 0000 0000 0000" /* ÿÃ ............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 00A9 FFFF FFFF" /* ...........©ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFF8 4A20 1B11 0A05 0200 0000 0000 0000" /* ÿøJ ..Â......... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0002 00B6 FFFF FFFF" /* ...........¶ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFB 5928 2216 0D07 0200 0000 0000 0000" /* ÿûY("........... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0103 07CC FFFF FFFF" /* ...........Ìÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFD 6231 291B 1109 0401 0000 0000 0000" /* ÿýb1)..Æ........ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0201 21F0 FFFF FFFF" /* ..........!ðÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 7337 2F21 160D 0704 0303 0303 0303" /* ÿÿs7/!.......... */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0302 0201 0100" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0001 0500 69FF FFFF FFFF" /* ..........iÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 9A38 3628 1C14 0E0A 0909 0909 0909" /* ÿÿš86(...ÂÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0807 0604 0302" /* ÆÆÆÆÆÆÆÆÆÆ...... */
- $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0203 0021 DFFF FFFF FFFF" /* .........!ßÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF E653 312D 231B 1512 1011 1010 1010" /* ÿÿæS1-#......... */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 0E0C 0A08 0504" /* ............Â... */
- $"0301 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0002 0200 34D3 FFFF FFFF FFFF" /* ........4Óÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFD6 6E40 312A 2522 2121 2121 2121" /* ÿÿÿÖn@1*%"!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2120 1E1B 1814 0D00" /* !!!!!!!!! ...... */
- $"0203 0100 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0102 006C F4FF FFFF FFFF FFFF" /* .......lôÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FEE8 DAD9 D9D8 D8D8 D8D8 D8D8" /* ÿÿÿÿþèÚÙÙØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D7D7 D6D5 D5A9" /* ØØØØØØØØØØ××ÖÕÕ© */
- $"1E00 0200 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0001 0300 71FF FFFF FFFF FFFF FFFF" /* ......qÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"8500 0402 0100 0000 0000 0000 0000 0000" /* …............... */
- $"0001 0203 0317 E1FF FFFF FFFF FFFF FFFF" /* ......áÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"9E03 0905 0302 0100 0000 0000 0000 0000" /* ž.Æ............. */
- $"0201 0000 002C E4E8 E8E9 EAEB ECEC EDED" /* .....,äèèéêëììíí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED ECEC ECEC ECEC ECEC ECEC ECEC" /* ííííìììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEB EAE9 E8F4" /* ìììììììììììëêéèô */
- $"8E02 0400 0000 0202 0000 0000 0000 0002" /* Ž............... */
- $"0012 6297 A3A9 BBBD C0C4 C7CA CCCD CECE" /* ..b—£©»½ÀÄÇÊÌÍÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CDCD CCCC CCCC CBCB CBCB CBCB" /* ÎÎÎÎÍÍÌÌÌÌËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBC9 C8C5 C2C0" /* ËËËËËËËËËËËÉÈÅÂÀ */
- $"B5A6 A5A1 8236 0002 0100 0000 0000 0100" /* µ¦¥¡‚6.......... */
- $"35DC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 5Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFE 8901 0101 0000 0000 001B" /* ÿÿÿÿÿþ‰......... */
- $"DFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF73 0002 0000 0001 0082" /* ÿÿÿÿÿÿÿs.......‚ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE4 1800 0100 0001 00C0" /* ÿÿÿÿÿÿÿä.......À */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4500 0200 0002 02C6" /* ÿÿÿÿÿÿÿÿE......Æ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4C00 0200 0103 00B3" /* ÿÿÿÿÿÿÿÿL......³ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFE 3D00 0300 0104 009C" /* ÿÿÿÿÿÿÿþ=......œ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFF4 2C04 0400 0105 0087" /* ÿÿÿÿÿÿÿô,......‡ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE8 2007 0400 0105 0073" /* ÿÿÿÿÿÿÿè ......s */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFD9 1808 0400 0105 015C" /* ÿÿÿÿÿÿÿÙ.......\ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFC7 0E0A 0401 0105 034A" /* ÿÿÿÿÿÿÿÇ.Â.....J */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFB5 0A0A 0402 0105 043C" /* ÿÿÿÿÿÿÿµÂÂ.....< */
- $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFA1 080A 0402 0105 062B" /* ÿÿÿÿÿÿÿ¡.Â.....+ */
- $"F2FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF8E 050A 0402 0104 0720" /* ÿÿÿÿÿÿÿŽ.Â..... */
- $"E7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF7C 0609 0300 0104 0817" /* ÿÿÿÿÿÿÿ|.Æ...... */
- $"D8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF68 0709 0300 0104 0A0E" /* ÿÿÿÿÿÿÿh.Æ....Â. */
- $"C8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF55 0809 0300 0104 0A0A" /* ÿÿÿÿÿÿÿU.Æ....ÂÂ */
- $"B7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF47 0909 0300 0104 0A07" /* ÿÿÿÿÿÿÿGÆÆ....Â. */
- $"A4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF F638 0B08 0300 0004 0A05" /* ÿÿÿÿÿÿö8......Â. */
- $"91FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF EE2B 0C08 0300 0004 0905" /* ÿÿÿÿÿÿî+......Æ. */
- $"81FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF E224 0D08 0300 0003 0906" /* ÿÿÿÿÿÿâ$......Æ. */
- $"71FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF D51C 0E08 0300 0003 0907" /* ÿÿÿÿÿÿÕ.......Æ. */
- $"5EFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF C714 0F07 0200 0003 0908" /* ÿÿÿÿÿÿÇ.......Æ. */
- $"4FFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF B811 0E07 0200 0003 090A" /* ÿÿÿÿÿÿ¸.......ÆÂ */
- $"43FD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Cýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF A70E 0F07 0200 0003 080B" /* ÿÿÿÿÿÿ§......... */
- $"34F5 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 4õÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 960C 0E06 0200 0002 080D" /* ÿÿÿÿÿÿ–......... */
- $"29EB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* )ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 850C 0E07 0200 0003 080E" /* ÿÿÿÿÿÿ…......... */
- $"22E0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* "àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 760D 0E06 0200 0003 080F" /* ÿÿÿÿÿÿv......... */
- $"1BD3 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 650E 0E06 0200 0002 080F" /* ÿÿÿÿÿÿe......... */
- $"14C7 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 580E 0D06 0200 0002 070F" /* ÿÿÿÿÿÿX......... */
- $"11B9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 4E10 0D06 0100 0002 070F" /* ÿÿÿÿÿÿN......... */
- $"10AB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 4211 0D06 0200 0002 070F" /* ÿÿÿÿÿøB......... */
- $"0D9B FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF1 3513 0D06 0200 0002 080F" /* ÿÿÿÿÿñ5......... */
- $"0C8D FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE9 2E13 0D05 0100 0002 070F" /* ÿÿÿÿÿé.......... */
- $"0D81 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFDF 2914 0D06 0100 0002 070F" /* ÿÿÿÿÿß)......... */
- $"0E73 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD4 2215 0C06 0100 0002 070F" /* ÿÿÿÿÿÔ"......... */
- $"0F64 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC9 1C16 0C05 0100 0002 070F" /* ÿÿÿÿÿÉ.......... */
- $"1058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFBD 1A15 0C05 0100 0002 070F" /* ÿÿÿÿÿ½.......... */
- $"114F FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB2 1815 0C05 0100 0002 070E" /* ÿÿÿÿÿ².......... */
- $"1246 FAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Fúÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 1615 0C05 0100 0002 070E" /* ÿÿÿÿÿ¥.......... */
- $"133B F4FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .;ôÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF98 1515 0C05 0100 0002 060E" /* ÿÿÿÿÿ˜.......... */
- $"1533 EEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .3îÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF8D 1515 0B05 0100 0002 070E" /* ÿÿÿÿÿ.......... */
- $"152F E6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ./æÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF82 1615 0B05 0100 0002 070E" /* ÿÿÿÿÿ‚.......... */
- $"1629 DDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .)Ýÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF77 1615 0B05 0100 0002 060E" /* ÿÿÿÿÿw.......... */
- $"1624 D5FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Õÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6B 1715 0B05 0100 0002 060E" /* ÿÿÿÿÿk.......... */
- $"1720 CCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* . Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF61 1815 0B05 0100 0002 060E" /* ÿÿÿÿÿa.......... */
- $"181D C3FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5B 1914 0B05 0100 0002 060E" /* ÿÿÿÿÿ[.......... */
- $"181C BAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ºÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FE54 1A14 0B05 0100 0002 070E" /* ÿÿÿÿþT.......... */
- $"181B B0FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..°ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F94C 1B15 0B04 0100 0002 060E" /* ÿÿÿÿùL.......... */
- $"181A A6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F544 1C15 0B05 0100 0002 070E" /* ÿÿÿÿõD.......... */
- $"1819 9DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F13D 1D14 0B04 0100 0002 060E" /* ÿÿÿÿñ=.......... */
- $"1819 95FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..•ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF EB3A 1D14 0B05 0100 0002 070E" /* ÿÿÿÿë:.......... */
- $"1819 8EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Žÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF E537 1E14 0B05 0100 0002 070E" /* ÿÿÿÿå7.......... */
- $"181A 86FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..†ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF DF34 1E14 0B05 0100 0002 070E" /* ÿÿÿÿß4.......... */
- $"181B 7EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..~ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D930 1F15 0B05 0100 0002 070E" /* ÿÿÿÿÙ0.......... */
- $"181B 78FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..xÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D32D 1F15 0B05 0100 0002 070F" /* ÿÿÿÿÓ-.......... */
- $"191C 71FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..qÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF CE29 2015 0B05 0100 0002 070F" /* ÿÿÿÿÎ) ......... */
- $"191D 6AFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..jÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C828 2015 0B05 0100 0002 070F" /* ÿÿÿÿÈ( ......... */
- $"191D 65FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..eÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C328 2015 0B05 0100 0002 070F" /* ÿÿÿÿÃ( ......... */
- $"191E 61FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..aÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF BE28 2115 0B05 0100 0002 070F" /* ÿÿÿÿ¾(!......... */
- $"191F 5DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..]ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B827 2115 0C05 0100 0002 070F" /* ÿÿÿÿ¸'!......... */
- $"1920 5AFE FFFF FFFF FFFF FFFF FFFF FFFF" /* . Zþÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B427 2115 0C05 0100 0003 0710" /* ÿÿÿÿ´'!......... */
- $"1A21 58FD FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Xýÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B026 2115 0C05 0100 0003 0810" /* ÿÿÿÿ°&!......... */
- $"1A21 55FB FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Uûÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF AC26 2116 0C05 0200 0003 0810" /* ÿÿÿÿ¬&!......... */
- $"1A22 52F9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ."Rùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A826 2215 0C05 0100 0003 0810" /* ÿÿÿÿ¨&"......... */
- $"1A23 4FF7 FFFF FFFF FFFF FFFF FFFF FFFF" /* .#O÷ÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A426 2316 0D06 0200 0003 0811" /* ÿÿÿÿ¤&#......... */
- $"1B24 4DF6 FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Möÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A126 2316 0D06 0200 0003 0911" /* ÿÿÿÿ¡&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9F26 2317 0D06 0200 0003 0912" /* ÿÿÿÿŸ&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9E26 2317 0D06 0200 0003 0912" /* ÿÿÿÿž&#.......Æ. */
- $"1C26 4BF4 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Kôÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9D27 2317 0D06 0200 0004 0912" /* ÿÿÿÿ'#.......Æ. */
- $"1C26 4AF3 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Jóÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9C27 2417 0D06 0200 0104 0912" /* ÿÿÿÿœ'$.......Æ. */
- $"1C26 47F2 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Gòÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9A27 2417 0D06 0200 0103 0911" /* ÿÿÿÿš'$.......Æ. */
- $"1B27 37D1 FFFF FFFF FFFF FFFF FFFF FFFF" /* .'7Ñÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 7329 2316 0D06 0200 0003 0810" /* ÿÿÿÿs)#......... */
- $"1A27 2F59 B7C6 C6C7 C7C7 C7C7 C7C7 C7C7" /* .'/Y·ÆÆÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C5 C689 372D 2015 0C06 0200 0003 070E" /* ÇÅÆ‰7- ......... */
- $"1723 3037 3C46 4C4F 5050 5050 5050 5050" /* .#07<FLOPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"4D49 4138 352A 1D13 0A05 0100 0003 060C" /* MIA85*..Â....... */
- $"141E 2934 3D44 494C 4D4E 4E4E 4E4E 4E4E" /* ..)4=DILMNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4D" /* NNNNNNNNNNNNNNNM */
- $"4B46 4039 2F24 1910 0904 0100 0002 050A" /* KF@9/$..Æ...... */
- $"1018 212B 3339 3D40 4142 4242 4242 4242" /* ..!+39=@ABBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4140" /* BBBBBBBBBBBBBBA@ */
- $"3F3B 352F 261D 140D 0703 0100 0002 0407" /* ?;5/&........... */
- $"0C12 1920 272C 2F32 3233 3333 3333 3333" /* ... ',/223333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3332" /* 3333333333333332 */
- $"302D 2924 1D16 0F09 0502 0100 0001 0305" /* 0-)$...Æ........ */
- $"080D 1217 1C1F 2223 2425 2525 2525 2525" /* ......"#$%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2524" /* %%%%%%%%%%%%%%%$ */
- $"2221 1E19 1510 0B07 0402 0000 0000 0103" /* "!.............. */
- $"0609 0C10 1315 1718 1919 1919 1919 1919" /* .Æ.............. */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1918" /* ................ */
- $"1716 1411 0E0A 0704 0201 0000 0000 0002" /* .....Â.......... */
- $"0305 0709 0B0D 0E0F 0F0F 0F0F 0F0F 0F0F" /* ...Æ............ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0D 0C0A 0806 0402 0100 0000 0000 0001" /* ...Â............ */
- $"0103 0304 0607 0708 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0707 0605 0403 0201 0000 0000 0000 0000" /* ................ */
- $"0001 0102 0202 0203 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0202 0202 0201 0100 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 6963 3038" /* ............ic08 */
- $"0000 5CBD 0000 000C 6A50 2020 0D0A 870A" /* ..\½....jP .‡ */
- $"0000 0014 6674 7970 6A70 3220 0000 0000" /* ....ftypjp2 .... */
- $"6A70 3220 0000 004F 6A70 3268 0000 0016" /* jp2 ...Ojp2h.... */
- $"6968 6472 0000 0100 0000 0100 0004 0707" /* ihdr............ */
- $"0100 0000 000F 636F 6C72 0100 0000 0000" /* ......colr...... */
- $"1000 0000 2263 6465 6600 0400 0000 0000" /* ...."cdef....... */
- $"0100 0300 0100 0000 0100 0000 0200 0200" /* ................ */
- $"0000 0300 0000 006A 7032 63FF 4FFF 5100" /* .......jp2cÿOÿQ. */
- $"3200 0000 0001 0000 0001 0000 0000 0000" /* 2............... */
- $"0000 0000 0001 0000 0001 0000 0000 0000" /* ................ */
- $"0000 0000 0407 0101 0701 0107 0101 0701" /* ................ */
- $"01FF 5200 0C00 0000 0101 0504 0400 01FF" /* .ÿR............ÿ */
- $"5C00 1320 5058 5860 5858 6058 5860 5858" /* \.. PXX`XX`XX`XX */
- $"5850 5058 FF64 0011 0001 4B61 6B61 6475" /* XPPXÿd....Kakadu */
- $"2D76 352E 322E 31FF 9000 0A00 0000 005B" /* -v5.2.1ÿ.Â....[ */
- $"D000 01FF 93CF C100 1507 F18D 1991 E793" /* Ð..ÿ“ÏÁ...ñ.‘ç“ */
- $"D8B4 6B7C 459C 4F68 E4BF E0FF 0D3D C2DF" /* Ø´k|EœOhä¿àÿ.=Âß */
- $"FC16 8F7F 6C3A 7FEA ACD5 8632 D1AD 37A6" /* ü..l:.ê¬Õ†2Ñ­7¦ */
- $"22E3 4753 734F 3BFA 0372 1596 A8F1 7183" /* "ãGSsO;ú.r.–¨ñqƒ */
- $"2F17 0A65 C5C2 6A8E C0F9 1000 39CE 9180" /* /.ÂeÅÂjŽÀù..9Α€ */
- $"AE4A F551 B521 2839 FEE4 4D31 9F98 9F17" /* ®JõQµ!(9þäM1Ÿ˜Ÿ. */
- $"29F2 C91D 3B35 397E 15A1 8246 C3EA 3107" /* )òÉ.;59~.¡‚FÃê1. */
- $"5630 A744 5105 404A C843 0AE4 304B 4FE9" /* V0§DQ.@JÈCÂä0KOé */
- $"81E4 4C91 DF64 6885 8D23 6517 B254 DE23" /* äL‘ßdh…#e.²TÞ# */
- $"6101 3C94 9245 923D 4F4C 0F02 784C F319" /* a.<”’E’=OL..xLó. */
- $"CFC0 FC11 7EC2 D9C4 3907 5FDC 553A F1E1" /* ÏÀü.~ÂÙÄ9._ÜU:ñá */
- $"F2BC 6420 59D8 7D25 F42A 5BA5 8E8E 7166" /* ò¼d YØ}%ô*[¥ŽŽqf */
- $"AD5D 5C91 CC75 1452 ACDA 64CA 3249 CCE3" /* ­]\‘Ìu.R¬ÚdÊ2IÌã */
- $"6874 83E2 633E 64E7 8159 4AA2 FD3C 638D" /* htƒâc>dçYJ¢ý<c */
- $"F978 C3ED 328F C0F2 1F81 A80C BB81 9421" /* ùxÃí2Àò.¨.»”! */
- $"980D F457 0EA7 7782 676F 2AB3 EE8F 99C2" /* ˜.ôW.§w‚go*³î™Â */
- $"2221 9D95 8C80 C3A8 91F3 4C08 6A03 DE45" /* "!•Œ€Ã¨‘óL.j.ÞE */
- $"A985 9B7B 9ED3 A9A4 D929 A97F A125 FE22" /* ©…›{žÓ©¤Ù)©.¡%þ" */
- $"A893 77F3 EF0F C15C 3969 A153 3A7C 3110" /* ¨“wóï.Á\9i¡S:|1. */
- $"7A9C 9227 D2F6 BCA8 1A04 0219 8F36 21B7" /* zœ’'Òö¼¨....6!· */
- $"B37C 2AB6 678A 1675 BA9E 03B4 53BA 33B9" /* ³|*¶gŠ.uºž.´Sº3¹ */
- $"06AD 96D8 BDBC BFC8 5134 C040 7EBA B756" /* .­–ؽ¼¿ÈQ4À@~º·V */
- $"E619 DC67 BC83 BB39 AA42 65E1 5BBC 45B4" /* æ.Üg¼ƒ»9ªBeá[¼E´ */
- $"ECB6 E6ED D098 3C9F E17B 876D A039 553E" /* ì¶æíИ<Ÿá{‡m 9U> */
- $"5CF9 2D3F 6F47 4854 7085 62C1 C65D C07C" /* \ù-?oGHTp…bÁÆ]À| */
- $"86A0 3E43 500F 90D0 4787 8CE8 726C 5109" /* † >CP.ÐG‡ŒèrlQÆ */
- $"FD68 8099 E8FE 2A66 2F02 78F5 C78B 6A34" /* ýh€™èþ*f/.xõÇ‹j4 */
- $"0A9E 25FE 0DE3 E3C8 BD7B 3530 98D5 CF03" /* ž%þ.ããȽ{50˜ÕÏ. */
- $"CE64 A57D 620C 87C5 65B4 7BE1 34BC 3058" /* Îd¥}b.‡Åe´{á4¼0X */
- $"572A 9EBF 5E0C 5A01 80A3 B334 DF5A E1B8" /* W*ž¿^.Z.€£³4ßZḠ*/
- $"08C3 5C30 2CC4 C1F5 1341 F516 40FA 8A00" /* .Ã\0,ÄÁõ.Aõ.@úŠ. */
- $"477D B516 AD2F 4DD3 BE8C 58F0 7C77 A236" /* G}µ.­/MÓ¾ŒXð|w¢6 */
- $"DD43 6611 D582 F050 DC31 59D0 194D A6FD" /* ÝCf.Õ‚ðPÜ1YÐ.M¦ý */
- $"652E FA16 4BA7 25FE 0DE3 E3D9 B950 06E2" /* e.ú.K§%þ.ããÙ¹P.â */
- $"3A8A DA86 827A 4C68 5798 55FC FD46 A583" /* :ŠÚ†‚zLhW˜UüýF¥ƒ */
- $"064D 8FB0 29D9 8DAD 53CC 5229 B675 ACAB" /* .M°)Ù­SÌR)¶u¬« */
- $"8EED 34BC 2F12 142E 446C 0DF7 0BC3 D6E7" /* Ží4¼/...Dl.÷.ÃÖç */
- $"A086 8D72 6AE7 9270 B97C D981 C7F1 C38A" /*  †rjç’p¹|ÙÇñÊ */
- $"47EE E585 FC19 FCE3 668C C7E0 471F 813C" /* Gîå…ü.üãfŒÇàG.< */
- $"3F02 0005 B422 0345 FC66 9A91 446D DDCA" /* ?...´".Eüfš‘DmÝÊ */
- $"449B CCDB 8E8F A0B8 3942 A8FC 6409 F7F3" /* D›ÌÛŽ ¸9B¨üdÆ÷ó */
- $"ED01 353A 2B01 1B0C 2939 619B 9890 94E7" /* í.5:+...)9a›˜”ç */
- $"5FDA 75F2 7323 BF3A 7AED 757E 42D6 C336" /* _Úuòs#¿:zíu~BÖÃ6 */
- $"E74E 6B5F 2D43 4780 CA1C C462 6507 4801" /* çNk_-CG€Ê.Äbe.H. */
- $"EDEF 5B2A 7297 8FC6 1E13 E7FA 56B5 4279" /* íï[*r—Æ..çúVµBy */
- $"5BB4 B307 F4DE E273 4FC3 E9B1 72C3 EDA2" /* [´³.ôÞâsOÃé±rÃí¢ */
- $"A3F0 A9E0 FB5D C018 B35C 8B45 CD63 99FE" /* £ð©àû]À.³\‹EÍc™þ */
- $"11FB 8993 21D1 BA8B 69EB 5CB9 F258 468F" /* .û‰“!Ѻ‹ië\¹òXF */
- $"73D4 6804 C6E6 045E AE54 954C D0E5 D836" /* sÔh.Ææ.^®T•LÐåØ6 */
- $"EA0D DB9A 2806 36FA B3E9 5973 789D 6591" /* ê.Ûš(.6ú³éYsxe‘ */
- $"1EC2 F271 E9E2 5681 C542 A2FC F4EF 8111" /* .ÂòqéâVÅB¢üôï. */
- $"59D5 FC91 9749 52A3 EA37 B239 4939 8625" /* YÕü‘—IR£ê7²9I9†% */
- $"F248 18D2 075A 80A1 8005 9ED2 437F C705" /* òH.Ò.Z€¡€.žÒC.Ç. */
- $"2BFD 308C F1F0 E1BC 8FDA F5D5 50D9 9770" /* +ý0Œñðá¼ÚõÕPÙ—p */
- $"7EF5 213F 91F6 5B8B 189D EE67 70EF F40A" /* ~õ!?‘ö[‹.îgpïôÂ */
- $"2E24 C54B F37D 4941 FCD2 7779 5C8B 59CC" /* .$ÅKó}IAüÒwy\‹YÌ */
- $"F284 3377 A496 0399 6F17 47AC B5EA 3A84" /* ò„3w¤–.™o.G¬µê:„ */
- $"844E DC13 D058 BE9F 1BBE 8CE0 E615 D2E1" /* „NÜ.ÐX¾Ÿ.¾Œàæ.Òá */
- $"88A5 9DA6 9FB4 4EDE B804 ED14 A7EA 54E0" /* ˆ¥¦Ÿ´NÞ¸.í.§êTà */
- $"5A87 311B 5E69 70F5 EDA3 2E78 8862 7603" /* Z‡1.^ipõí£.xˆbv. */
- $"7761 094D 4A69 5AB0 A9BB 3F4F 92BE 205B" /* waÆMJiZ°©»?O’¾ [ */
- $"A226 24D5 C8B2 CCF7 E064 31C7 E727 6E2C" /* ¢&$ÕȲÌ÷àd1Çç'n, */
- $"D6A1 347F 41CD 5F70 E1C0 1AFC 4FBC 81A9" /* Ö¡4.AÍ_páÀ.üO¼© */
- $"A884 F03A CD84 B581 1F03 A523 838B 8038" /* ¨„ð:Í„µ..¥#ƒ‹€8 */
- $"02F4 6DE8 98FC EDD6 B331 21F7 4AC5 A31E" /* .ômè˜üíÖ³1!÷JÅ£. */
- $"9EB4 E770 D465 386E 18A6 D1BE EF6D B008" /* ž´çpÔe8n.¦Ñ¾ïm°. */
- $"63E6 1066 1374 4D10 3270 8C7F F297 F91D" /* cæ.f.tM.2pŒ.ò—ù. */
- $"DA61 677B 29FD A878 B122 E33C 17E3 8ED1" /* Úag{)ý¨x±"ã<.ãŽÑ */
- $"FB8E 4407 8B82 32AD 1B50 09DF BDA8 C80E" /* ûŽD.‹‚2­.PÆß½¨È. */
- $"7E28 ED9D A005 4297 B9C1 8D66 CA77 C41D" /* ~(í .B—¹ÁfÊwÄ. */
- $"41C5 E3B3 F94D 96E5 1308 7C59 1EB8 0871" /* AÅã³ùM–å..|Y.¸.q */
- $"C7A4 FED7 47F2 F800 6889 A21D 1FF4 9E93" /* Ǥþ×Gòø.h‰¢..ôž“ */
- $"1321 7377 D96E 86F5 A0CB EB17 C77A 81C0" /* .!swÙn†õ Ëë.ÇzÀ */
- $"7C8D A01F 0E91 00F9 1D00 94FD 4D32 E5DB" /* | ..‘.ù..”ýM2åÛ */
- $"0482 DEB8 CF1C 792A EA3B DECA 4470 4898" /* .‚Þ¸Ï.y*ê;ÞÊDpH˜ */
- $"81C0 5457 FE66 63DD CAF3 0B98 08E1 DC3F" /* ÀTWþfcÝÊó.˜.áÜ? */
- $"CF68 7F31 9BEE 73EF A3A5 8D57 8969 EEC3" /* Ïh.1›îsW‰iîà */
- $"0F13 3ED9 390D FC4C B37F C4F7 01E4 B115" /* ..>Ù9.üL³.Ä÷.ä±. */
- $"E9F9 9526 00FA 10D0 0D64 4CC5 8481 D231" /* éù•&.ú.Ð.dLÅ„Ò1 */
- $"DE6D 483E 8046 7F58 5BD3 1FFC CF82 297A" /* ÞmH>€F.X[Ó.üÏ‚)z */
- $"88A1 7E78 0668 3222 9E8B A287 30A3 DB10" /* ˆ¡~x.h2"ž‹¢‡0£Û. */
- $"A77F A842 87FC 164E 92B8 96DF 4920 EEC2" /* §.¨B‡ü.N’¸–ßI î */
- $"47B6 83F1 F68F 9309 63CE FAAC 3C8F 9FCF" /* G¶ƒñö“ÆcÎú¬<ŸÏ */
- $"A166 9621 ADC0 0ABB 7F1A 7E3C A4AD 3755" /* ¡f–!­À»..~<¤­7U */
- $"E2D8 E26D CAD1 6F24 F808 BC0D E94B EEBC" /* âØâmÊÑo$ø.¼.éKî¼ */
- $"D601 C1F5 30C1 F53B C0FA 97C0 90E6 901B" /* Ö.Áõ0Áõ;Àú—Àæ. */
- $"71C2 1EAB 8A4C 52A4 4431 058C DFB9 4148" /* qÂ.«ŠLR¤D1.Œß¹AH */
- $"185C 1E93 01C6 82D3 C81B 6398 8173 189D" /* .\.“.Æ‚ÓÈ.c˜s. */
- $"F73C 4887 5155 0C95 0088 4C69 0A27 3F39" /* ÷<H‡QU.•.ˆLiÂ'?9 */
- $"8CCA 32D8 1FD7 A3F4 CDD8 6275 5E7E 3619" /* ŒÊ2Ø.×£ôÍØbu^~6. */
- $"8D18 68C9 D2C7 0FCB 18EA FB01 5A68 4A52" /* .hÉÒÇ.Ë.êû.ZhJR */
- $"3C08 5313 5ED2 9B7D 31B5 953C 2F92 22F7" /* <.S.^Ò›}1µ•</’"÷ */
- $"3764 04E8 A9A6 C747 8DFD 9730 01DD 82E1" /* 7d.試ÇGý—0.Ý‚á */
- $"B08A FD72 7C33 A9BF AFEA 7188 AC4B 2B45" /* °Šýr|3©¿¯êqˆ¬K+E */
- $"BBB2 7826 6704 5864 9BAF 91FC 6BD3 E9D7" /* »²x&g.Xd›¯‘ükÓé× */
- $"0E30 E428 0FB2 4836 F94F 7CB9 3723 72A2" /* .0ä(.²H6ùO|¹7#r¢ */
- $"AB4C C0EB ED8F 823B B8D6 C4A6 E4B5 B41C" /* «LÀëí‚;¸ÖĦ䵴. */
- $"B0FC 0171 880F E77C 1EF8 9645 A8B4 969A" /* °ü.qˆ.ç|.ø–E¨´–š */
- $"5420 86B9 71CE 0DE5 7A40 B41A DD85 6B30" /* T †¹qÎ.åz@´.Ý…k0 */
- $"F02A 3B61 92B4 7A95 269E BF9F DDB3 9FB7" /* ð*;a’´z•&ž¿ŸÝ³Ÿ· */
- $"746B 1514 C89D 391B F835 73B8 0F1C 2567" /* tk..È9.ø5s¸..%g */
- $"A0C2 6B37 DFCE 5F4C 1DCD FD79 5CDA A8FF" /*  Âk7ßÎ_L.Íýy\Ú¨ÿ */
- $"0603 9014 308F AEB3 EDB7 D721 1709 3897" /* ...0®³í·×!.Æ8— */
- $"D3AB 181E 53BE 4025 3492 41C2 5EC7 BFC0" /* Ó«..S¾@%4’AÂ^Ç¿À */
- $"EA12 19D0 6158 530B A57B 8A2B 8DFF 18AF" /* ê..ÐaXS.¥{Š+ÿ.¯ */
- $"7651 65CF CD26 3F05 987E 0760 9C3C E3A6" /* vQeÏÍ&?.˜~.`œ<㦠*/
- $"86C0 DAB4 C6ED 7F19 8034 85FE DA7E 7963" /* †ÀÚ´Æí..€4…þÚ~yc */
- $"AFF2 9CBE 6AAA B6BB B2D3 6F41 BB45 B1EB" /* ¯òœ¾jª¶»²ÓoA»E±ë */
- $"9CC2 8803 907A 5CE1 F2D9 AF69 FF22 7DE8" /* œÂˆ.z\áòÙ¯iÿ"}è */
- $"D328 C2A1 0F97 2EE2 9575 E0E6 A665 B85A" /* Ó(¡.—.â•uàæ¦e¸Z */
- $"C5D7 6FA0 FE24 BC68 9D74 6CEB C4F9 615C" /* Å×o þ$¼htlëÄùa\ */
- $"4F34 48B3 7A64 2540 B64F EFBE 8D0F E427" /* O4H³zd%@¶Oï¾.ä' */
- $"4CCA 6DB3 83AC C5F6 EE52 7A43 8172 41E4" /* LÊm³ƒ¬ÅöîRzCrAä */
- $"2CE3 DF2F 1496 97DE 6AD1 2FFF 7E52 D993" /* ,ãß/.–—ÞjÑ/ÿ~RÙ“ */
- $"8AF9 AAA3 B192 0991 BFAE 4829 001E 963B" /* Šùª£±’Æ‘¿®H)..–; */
- $"019C 8A5D 78E8 6A56 F78C B81A F4D0 6312" /* .œŠ]xèjV÷Œ¸.ôÐc. */
- $"C0C4 A9BF 7CA5 75D9 9C23 F3EA 4F39 B325" /* ÀÄ©¿|¥uÙœ#óêO9³% */
- $"F6DE 6EF4 7D48 A279 8EA9 5395 0FBC C63F" /* öÞnô}H¢yŽ©S•.¼Æ? */
- $"679F CE93 2206 ECA9 079C 2BB7 D094 6A7B" /* gŸÎ“".ì©.œ+·Ð”j{ */
- $"1077 277F 88A6 21AE 84C3 EDD4 38FC 36B2" /* .w'.ˆ¦!®„ÃíÔ8ü6² */
- $"1F86 8F00 8F56 8825 7713 9061 800A A4CD" /* .†.Vˆ%w.a€Â¤Í */
- $"E3D3 0F3C B0AC 0C87 E368 8544 F251 5C39" /* ãÓ.<°¬.‡ãh…DòQ\9 */
- $"7D90 1BEF 7805 D624 7380 0A19 E093 3058" /* }.ïx.Ö$s€Â.à“0X */
- $"1C90 467F 5C70 4932 3947 4A95 A450 36C8" /* .F.\pI29GJ•¤P6È */
- $"D4D5 CA85 9922 FA12 D0D8 96CA 9A2F 40A2" /* ÔÕÊ…™"ú.ÐØ–Êš/@¢ */
- $"F105 054F 8C56 C164 85B5 C4E6 3EAB D76A" /* ñ..OŒVÁd…µÄæ>«×j */
- $"A227 4F09 072C 4682 9B0F 995C 7551 94E7" /* ¢'OÆ.,F‚›.™\uQ”ç */
- $"419A 0098 0283 19E8 0489 687B 4F66 B74C" /* Aš.˜.ƒ.è.‰h{Of·L */
- $"7F59 C07A A552 B04D 628F E401 E55C A4ED" /* .YÀz¥R°Mbä.å\¤í */
- $"390F C34D 81BB 9F88 0C50 F50F 9FBD A377" /* 9.ÃM»Ÿˆ.Põ.Ÿ½£w */
- $"F538 3F9C E243 FF47 D346 87F2 444B C479" /* õ8?œâCÿGÓF‡òDKÄy */
- $"F6B3 1C76 5125 F487 0FAF 294A DA20 EC56" /* ö³.vQ%ô‡.¯)JÚ ìV */
- $"07AB DE07 14C2 1721 F3E0 D687 1F67 039D" /* .«Þ..Â.!óàÖ‡.g. */
- $"461F 0D82 9CAA B2D4 DFC6 6AA5 D31E 4D01" /* F..‚œª²Ô߯j¥Ó.M. */
- $"5AC2 B2BD FD97 7D6E 00D1 7ADF 377C 15A7" /* Z²½ý—}n.Ñzß7|.§ */
- $"9681 C7B2 8168 D706 425B 35EF 7298 C053" /* –Dzh×.B[5ïr˜ÀS */
- $"E198 B5E2 B835 712B 1AD8 BA77 CF86 83A3" /* ᘵâ¸5q+.غwφƒ£ */
- $"B0B9 C5E6 F37A A3DE D93B 8EC8 132F A52A" /* °¹Åæóz£ÞÙ;ŽÈ./¥* */
- $"AB20 E166 F719 7130 6482 5BE2 605B D78E" /* « áf÷.q0d‚[â`[׎ */
- $"672D 7AE6 3906 DA75 0E3D 1962 8A60 9294" /* g-zæ9.Úu.=.bŠ`’” */
- $"1FC8 C0F3 216D 815D 4DDE 5DDE D8AB 3F9C" /* .ÈÀó!m]MÞ]ÞØ«?œ */
- $"7F9F 24B3 7BBF CCB9 2F80 19B6 70AE 1B3D" /* .Ÿ$³{¿Ì¹/€.¶p®.= */
- $"C71A 1F7C 81D2 639F 0D03 24EA D4B1 D351" /* Ç..|ÒcŸ..$êÔ±ÓQ */
- $"DD10 FBD5 EA3F 4957 A7ED 04C6 384D C10F" /* Ý.ûÕê?IW§í.Æ8MÁ. */
- $"8A55 0C03 694F 0D18 70D8 0AC3 33C0 17D1" /* ŠU..iO..pØÂÃ3À.Ñ */
- $"73BB E85F 5204 090F FDFE 8AC5 9AD6 22D5" /* s»è_R.Æ.ýþŠÅšÖ"Õ */
- $"CA31 A6DE EF44 D910 B34A 0E59 7866 536F" /* Ê1¦ÞïDÙ.³J.YxfSo */
- $"9B0B A341 3AB8 C06C C64F 3F86 8160 DFB9" /* ›.£A:¸ÀlÆO?†`ß¹ */
- $"A709 59D8 88C3 3316 9FFA F83F 5120 E40E" /* §ÆY؈Ã3.Ÿúø?Q ä. */
- $"4DEA C88F C418 37F6 4C0B 7606 9632 EEC5" /* MêÈÄ.7öL.v.–2îÅ */
- $"6380 FB25 A69F AAE2 0888 B722 008F 35CB" /* c€û%¦Ÿªâ.ˆ·".5Ë */
- $"F6A7 90BF D0DB 6367 A14B 5A86 EE98 FD18" /* ö§¿ÐÛcg¡KZ†î˜ý. */
- $"A629 1BAB 3BE2 920D E99D BEC2 88B4 F909" /* ¦).«;â’.é¾Âˆ´ùÆ */
- $"66B1 535D 3940 AF78 8200 0C46 142A EA2A" /* f±S]9@¯x‚..F.*ê* */
- $"A991 95E8 FD2B D30B 0E4A 76E2 A97B FAA7" /* ©‘•èý+Ó..Jvâ©{ú§ */
- $"97E2 9B30 54FA 5E97 962A 7E83 5711 A707" /* —â›0Tú^—–*~ƒW.§. */
- $"2A21 3729 2046 9C41 8282 A161 E5F6 AB24" /* *!7) FœA‚‚¡aåö«$ */
- $"3324 74CF 1AF6 C935 D884 0008 DC18 663C" /* 3$tÏ.öÉ5Ø„..Ü.f< */
- $"3A00 25E4 92D7 8F23 4C07 3C63 DB6E 4924" /* :.%ä’×#L.<cÛnI$ */
- $"7362 34C9 2F1D 105B 97E2 03BF 648F C21C" /* sb4É/..[—â.¿dÂ. */
- $"C6AC 3657 2C72 ADAA 2889 0623 6A5D ACEC" /* Ƭ6W,r­ª(‰.#j]¬ì */
- $"3210 738F 51F5 CC65 9EA9 7AD3 95CB B265" /* 2.sQõÌež©zӕ˲e */
- $"D54E 6E1D E2A7 2673 E6C2 C247 2FFD C10E" /* ÕNn.â§&sæÂÂG/ýÁ. */
- $"5FC5 C1E1 2511 5C8F 6063 92AB E4B9 8212" /* _ÅÁá%.\`c’«ä¹‚. */
- $"3643 6D53 2492 3E58 3E71 15E3 A3B7 AB2A" /* 6CmS$’>X>q.㣷«* */
- $"A998 FE5A 74DB 537A CE3D CD46 49B6 DB6D" /* ©˜þZtÛSzÎ=ÍFI¶Ûm */
- $"B6DB 6DB2 8EE9 1D6F 6480 8613 D8D2 7D8F" /* ¶Ûm²Žé.od€†.ØÒ} */
- $"5615 3EAB B25B 722D ECB8 ED12 70F2 BA06" /* V.>«²[r-ì¸í.pòº. */
- $"E5A2 45C1 547C F861 A7D5 8E1C 08BC 346B" /* å¢EÁT|øa§ÕŽ..¼4k */
- $"2730 C670 2FD8 F159 6ABE 2092 ED98 AC34" /* '0Æp/ØñYj¾ ’혬4 */
- $"B4CA 8565 90CF 0034 6E68 F777 9672 F29D" /* ´Ê…eÏ.4nh÷w–rò */
- $"4621 6E73 9C90 5C3D A8DB F5B0 CACF A63E" /* F!nsœ\=¨Ûõ°ÊϦ> */
- $"861E 8B9E F490 8E15 69BC A01D EF59 E898" /* †.‹žôŽ.i¼ .ïYè˜ */
- $"7040 B817 5AA9 BFB1 09A0 FE74 D2F7 BEA8" /* p@¸.Z©¿±Æ þtÒ÷¾¨ */
- $"A4F3 FEAC 38A4 409E B504 9CC9 EAA3 533B" /* ¤óþ¬8¤@žµ.œÉê£S; */
- $"153D F710 FC9E 2055 A395 C374 2AF9 E7C5" /* .=÷.üž U£•Ãt*ùçÅ */
- $"E1E8 7F74 3CDB D568 B606 A9D5 B7AE E207" /* áè.t<ÛÕh¶.©Õ·®â. */
- $"947E 2E65 1C27 336D 927A 4F86 5422 0E04" /* ”~.e.'3m’zO†T".. */
- $"42C7 668A 9403 EAB7 21A3 C9F1 18BC 5380" /* BÇfŠ”.ê·!£Éñ.¼S€ */
- $"BED7 07B5 F9B1 B798 8727 D54A 7A6E E493" /* ¾×.µù±·˜‡'ÕJznä“ */
- $"5271 F27D 7C35 DCEE D0BC CB31 C1FB 879F" /* Rqò}|5ÜîмË1Áû‡Ÿ */
- $"E074 9EB9 D7BE C9ED D2C8 BD00 C7FC D05B" /* àtž¹×¾ÉíÒȽ.ÇüÐ[ */
- $"2B2C 9647 A924 9F22 A06D 62B4 A946 77B7" /* +,–G©$Ÿ" mb´©Fw· */
- $"AD6D 60EE C841 997D A7E8 7AD2 AFA8 EEC4" /* ­m`îÈA™}§èzÒ¯¨îÄ */
- $"D61F FC06 FD7A E761 AA33 0F74 A08F 8E5B" /* Ö.ü.ýzçaª3.t Ž[ */
- $"B7C0 7C9A 1201 F0F5 6403 E4D0 60D8 92D9" /* ·À|š..ðõd.äÐ`Ø’Ù */
- $"84ED 064F 1B29 D7A7 1D77 F4B3 61D6 2651" /* „í.O.)×§.wô³aÖ&Q */
- $"329E 2CA5 53B4 956D 1061 3A3A A73B FC8E" /* 2ž,¥S´•m.a::§;üŽ */
- $"DD3C 60C9 F855 32FB 3C04 6287 50F7 6BB3" /* Ý<`ÉøU2û<.b‡P÷k³ */
- $"B84A 05A6 3145 A832 3BBC CA56 115B 9D7F" /* ¸J.¦1E¨2;¼ÊV.[. */
- $"8ADB 5660 429D 1FF6 4E6D 4899 EFDA 592F" /* ŠÛV`B.öNmH™ïÚY/ */
- $"19DC 9790 802A 1C17 2250 ADEC 0312 2C23" /* .Ü—€*.."P­ì..,# */
- $"223B 1EC8 482C 6E26 DD67 528F 7CDC 1841" /* ";.ÈH,n&ÝgR|Ü.A */
- $"DBCB CF9E 6D26 B564 4FD4 0AB5 DA0B ADE2" /* ÛËÏžm&µdOÔµÚ.­â */
- $"C129 D895 00FF 105B 0D0B F4DB 286A B347" /* Á)Ø•.ÿ.[..ôÛ(j³G */
- $"A261 30A9 0A9B 7A0D 585B 3991 3217 6FF7" /* ¢a0©Â›z.X[9‘2.o÷ */
- $"A368 D6A8 E862 161A 3584 613E 04D9 DBCB" /* £hÖ¨èb..5„a>.ÙÛË */
- $"4D96 66A3 B736 F802 D67A 309F 04E6 AFD8" /* M–f£·6ø.Öz0Ÿ.æ¯Ø */
- $"888E A8A5 4461 F1F0 1B6B 2DC4 0DFE C676" /* ˆŽ¨¥Dañð.k-Ä.þÆv */
- $"8D4E 3750 C3E6 C233 EFC5 368B 6113 5B53" /* N7PÃæÂ3ïÅ6‹a.[S */
- $"08E0 C259 1B88 AA0C 74B0 862E 1024 BB3F" /* .àÂY.ˆª.t°†..$»? */
- $"2816 B320 715C 5DFA 9FF0 CBC3 6A85 777A" /* (.³ q\]úŸðËÃj…wz */
- $"23CB F89B D813 6706 313E 2CF5 A163 0848" /* #Ëø›Ø.g.1>,õ¡c.H */
- $"94C9 3288 B556 53DD 2A45 2302 F28E 7ED1" /* ”É2ˆµVSÝ*E#.òŽ~Ñ */
- $"B5A0 67C8 53BB 4CE4 45D9 317F 92AB B13B" /* µ gÈS»LäEÙ1.’«±; */
- $"7246 F6DE 5348 49C9 42A1 CA62 64B0 209E" /* rFöÞSHIÉB¡Êbd° ž */
- $"43F2 DF7C 9BBC 097F C94A EA52 8D01 ADEF" /* Còß|›¼Æ.ÉJêR.­ï */
- $"5241 7C9B 2876 75F4 D748 AF9D 6FBB 3306" /* RA|›(vuô×H¯o»3. */
- $"0AD1 3953 6C99 5BB7 F1F5 1C1F BCE7 CA83" /* ÂÑ9Sl™[·ñõ..¼çʃ */
- $"08C1 6811 FBC5 AE18 343C C6F5 E515 F9CF" /* .Áh.ûÅ®.4<Æõå.ùÏ */
- $"FE48 C6E9 956E 6712 DDCA D62C 7F37 6DFE" /* þHÆé•ng.ÝÊÖ,.7mþ */
- $"2465 A8EE 1BAF E106 CA62 101F 0144 31DC" /* $e¨î.¯á.Êb...D1Ü */
- $"029E ED0F 9E47 F22E 0C17 0D31 E60B 1662" /* .ží.žGò....1æ..b */
- $"C1F5 5C90 7D5A 6D03 EAB6 C0C8 1653 E821" /* Áõ\}Zm.ê¶ÀÈ.Sè! */
- $"5860 ED0B C711 39E5 E5C8 268D 2246 E3FB" /* X`í.Ç.9ååÈ&"Fãû */
- $"68A4 3B12 A487 350D FE94 3722 65AC 949B" /* h¤;.¤‡5.þ”7"e¬”› */
- $"2526 7CD5 0E28 E093 CFE8 314C BE18 5B60" /* %&|Õ.(à“Ïè1L¾.[` */
- $"827E 154B 9609 2536 F890 A361 BA29 8211" /* ‚~.K–Æ%6ø£aº)‚. */
- $"AF42 BEC6 1BCB CE6D 2910 8083 C890 D7FF" /* ¯B¾Æ.ËÎm).€ƒÈ×ÿ */
- $"6F04 CEF4 F47C 0D92 00BD D90F 4095 0A48" /* o.Îôô|.’.½Ù.@•ÂH */
- $"4DC6 210C 351D 34A5 5FDA E576 1E1B 1684" /* MÆ!.5.4¥_Úåv...„ */
- $"F2A0 B30A 589C 1DBC 4831 E906 0D67 0CDD" /* ò ³ÂXœ.¼H1é..g.Ý */
- $"876B 994F 6D66 47DD AF40 7158 4385 738E" /* ‡k™OmfGݯ@qXC…sŽ */
- $"82F8 E637 9B5C 7389 0AA5 2A04 D105 5E88" /* ‚øæ7›\s‰Â¥*.Ñ.^ˆ */
- $"C2A2 2943 E125 6C2F 0AD1 1E5C AF1F CFF6" /* ¢)Cá%l/ÂÑ.\¯.Ïö */
- $"B39B C799 0F39 6151 6625 BB66 C3C3 418B" /* ³›Ç™.9aQf%»fÃÃA‹ */
- $"90A4 F6F7 BD30 7A04 88E6 0F8A 3F0B FF2C" /* ¤ö÷½0z.ˆæ.Š?.ÿ, */
- $"D18B 1D88 1442 EB54 A6FC D226 251A 015D" /* Ñ‹.ˆ.BëT¦üÒ&%..] */
- $"4DA8 32CA 371B 86EB 4E89 1415 9A41 6AD2" /* M¨2Ê7.†ëN‰..šAjÒ */
- $"1F0F 7656 41E5 B874 72E7 5F88 ABDA 28D7" /* ..vVAå¸trç_ˆ«Ú(× */
- $"37D5 EE40 567F F751 2591 01A3 03B9 EFCD" /* 7Õî@V.÷Q%‘.£.¹ïÍ */
- $"E0A8 8CC8 8C8E 0945 3036 453A 1787 59C4" /* à¨ŒÈŒŽÆE06E:.‡YÄ */
- $"B99C 02D2 D5F6 1B5E E34C 551E 8C43 9A20" /* ¹œ.ÒÕö.^ãLU.ŒCš */
- $"981D 0B44 C6D1 E6AA 2B92 5F33 8016 C4F1" /* ˜..DÆÑæª+’_3€.Äñ */
- $"7AA6 E605 4676 A533 1D38 6ADA 9BC6 2C13" /* z¦æ.Fv¥3.8jÚ›Æ,. */
- $"385A 3DCE 7E2E B9A1 81BB 27C6 AFF8 FF5D" /* 8Z=Î~.¹¡»'Ưøÿ] */
- $"A511 4C25 DC70 082C B597 3EC4 004C D4B8" /* ¥.L%Üp.,µ—>Ä.LÔ¸ */
- $"BE6A B79D EF70 2610 B57B FEFE 6ACC 9EEE" /* ¾j·ïp&.µ{þþjÌžî */
- $"B94A 73A8 4B30 C207 7391 789E C0FE 6992" /* ¹Js¨K0Â.s‘xžÀþi’ */
- $"AB13 E2AA FF53 4B22 A338 0EA3 B476 D732" /* «.âªÿSK"£8.£´v×2 */
- $"EDA3 2009 3422 B4AA 64DE 26C3 5894 D6DD" /* í£ Æ4"´ªdÞ&ÃX”ÖÝ */
- $"F7A9 5A3B 6F31 5D2C EC22 1FAC 928B 647F" /* ÷©Z;o1],ì".¬’‹d. */
- $"1600 A961 11C3 FD11 E594 81F9 E0AC 20D4" /* ..©a.Ãý.å”ùà¬ Ô */
- $"0DCA 9CE0 FF14 3BE3 3010 00E1 9DFE F0C8" /* .Êœàÿ.;ã0..áþðÈ */
- $"70E7 D3A5 A7F9 884E 6941 CBCB FEBE 0C27" /* pçÓ¥§ùˆNiAËËþ¾.' */
- $"B3F5 BAA4 3068 BFC1 DB20 1E5F 9E83 BF7D" /* ³õº¤0h¿ÁÛ ._žƒ¿} */
- $"8EA3 8FB0 F355 FF02 DED2 5CC8 2B4D 4DA5" /* Ž£°óUÿ.ÞÒ\È+MM¥ */
- $"8122 C96A CDAB B130 2D35 B73E 2EE9 0AA9" /* "ÉjÍ«±0-5·>.é© */
- $"7DB8 B81D 7B0A 776B DFF3 2B02 1F6A EF5B" /* }¸¸.{Âwkßó+..jï[ */
- $"E6A6 177F D8C0 1C3B A88C 2154 18F3 BFB3" /* æ¦..ØÀ.;¨Œ!T.ó¿³ */
- $"F7EF 1249 860B F87F 60D6 AE06 B5B2 7824" /* ÷ï.I†.ø.`Ö®.µ²x$ */
- $"E601 91D7 1436 80CF 054C 9691 1321 B299" /* æ.‘×.6€Ï.L–‘.!²™ */
- $"11F3 2BA3 51F6 447E 1BC0 28CB 666B 9BA0" /* .ó+£QöD~.À(Ëfk›  */
- $"425A E39B 066C 1B7C 340B 950A BDCC E05D" /* BZã›.l.|4.•½Ìà] */
- $"C8DC 568C BDC6 54E9 0AA2 2D89 6E22 37E4" /* ÈÜVŒ½ÆTé¢-‰n"7ä */
- $"3508 39CC EE8F 8EE6 F926 626B E33F 4A06" /* 5.9ÌîŽæù&bkã?J. */
- $"4CD1 AE16 9063 3119 5554 58CA BB53 4A73" /* LѮ.c1.UTXʻSJs */
- $"AA2B 2A71 B86B 3E95 BED6 D9D2 9D59 3E60" /* ª+*q¸k>•¾ÖÙÒY>` */
- $"C5D1 FA4C E6A7 880F 30D8 A679 6467 697E" /* ÅÑúL槈.0ئydgi~ */
- $"F327 EAA4 E0D1 01F9 9B74 AAA1 6CDD 7DA7" /* ó'ê¤àÑ.ù›tª¡lÝ}§ */
- $"D2AB C9CB 63D6 D3DF C778 C6ED 71A5 0571" /* Ò«ÉËcÖÓßÇxÆíq¥.q */
- $"C7E1 4EC7 E16C 43F0 75B1 3C9E 91EA AAAC" /* ÇáNÇálCðu±<ž‘ꪬ */
- $"9A2E A47E 8DF0 873E 2275 3F71 F986 DF3D" /* š.¤~ð‡>"u?qù†ß= */
- $"DBE5 1F4C 0D83 C3F5 F2D4 5A7C 0BFB E4FC" /* Ûå.L.ƒÃõòÔZ|.ûäü */
- $"C83E D8A4 FAF4 F589 09F2 4909 40AA 2AA8" /* È>ؤúôõ‰ÆòIÆ@ª*¨ */
- $"C190 BE4D D484 1408 6EAD 722F 6BA6 7502" /* Á¾MÔ„..n­r/k¦u. */
- $"A53F 1B9A BE86 841A FC60 53F3 8AE9 2E4C" /* ¥?.𾆄.ü`SóŠé.L */
- $"4B8E 1D09 F47C 3BAA CFB7 80DE 6A41 F007" /* KŽ.Æô|;ªÏ·€ÞjAð. */
- $"80A3 413A C568 5C02 6166 E8AF 9B6C EF86" /* €£A:Åh\.af诛lï† */
- $"F178 273B A803 89E9 520A ACFC 0E98 6198" /* ñx';¨.‰éR¬ü.˜a˜ */
- $"6ECE D094 76D1 8AF8 1035 D0C8 B9E5 ECC9" /* nÎДvÑŠø.5ÐȹåìÉ */
- $"08E6 748A F28B B0E0 F9AB 71B4 7971 9626" /* .ætŠò‹°àù«q´yq–& */
- $"5397 5D5A 31CB 5F9E 7C98 8300 72B1 2C67" /* S—]Z1Ë_ž|˜ƒ.r±,g */
- $"A38D 0C02 C603 C0C2 2000 E528 0CAA 9472" /* £..Æ.À .å(.ª”r */
- $"3115 8C05 0EE6 3F33 3F6D B6DB 64C7 AAB2" /* 1.Œ..æ?3?m¶ÛdǪ² */
- $"94EA DD85 D3DF F14E FF3F D3A2 778B 3749" /* ”êÝ…ÓßñNÿ?Ó¢w‹7I */
- $"B31B 6DB6 C5B6 5311 C782 3FCF 2880 6695" /* ³.m¶Å¶S.Ç‚?Ï(€f• */
- $"085A 35C2 3938 420E 8705 50BD 51C3 BD21" /* .Z5Â98B.‡.P½Qý! */
- $"41B9 C3ED 3A76 367F 40F5 DA53 3618 DF7A" /* A¹Ãí:v6.@õÚS6.ßz */
- $"EE11 B2D6 D9AD 4351 7D8F BC5A 7217 9352" /* î.²ÖÙ­CQ}¼Zr.“R */
- $"D43F 54B9 F618 3E0E 5FF8 1599 CD00 5489" /* Ô?T¹ö.>._ø.™Í.T‰ */
- $"459D 1B65 0538 7A92 D8EC 6AD5 E756 776E" /* E.e.8z’ØìjÕçVwn */
- $"5B66 A07C 36D6 A4B0 2E00 21E0 ABFC 2AB8" /* [f |6Ö¤°..!à«ü*¸ */
- $"F387 5784 0DB9 1978 67FE DEFF 0CCC CCCC" /* ó‡W„.¹.xgþÞÿ.ÌÌÌ */
- $"CCCC CCCC CCCC CCD3 5F84 850A F245 C370" /* ÌÌÌÌÌÌÌÓ_„…ÂòEÃp */
- $"786E 76C5 56A5 8C9B FC7F 6869 3085 EB26" /* xnvÅV¥Œ›ü.hi0…ë& */
- $"6162 A234 8BF4 868D 0BA5 77FA 56D2 31FD" /* ab¢4‹ô†.¥wúVÒ1ý */
- $"7436 0147 944C 2AAE C8C1 DE46 2A3A 2449" /* t6.G”L*®ÈÁÞF*:$I */
- $"EAD0 8E9E FF0B 129F 7F9C 1436 A6BC 10E6" /* êÐŽžÿ..Ÿ.œ.6¦¼.æ */
- $"3116 7A98 5FF6 97E9 FC84 7136 FEA5 C122" /* 1.z˜_ö—éü„q6þ¥Á" */
- $"E58F 44D6 D7A4 0AD3 E9B4 7C91 B833 1F91" /* åDÖפÂÓé´|‘¸3.‘ */
- $"5F0F D8F7 8A80 6560 B332 081A C68D 0FF9" /* _.Ø÷Š€e`³2..Æ.ù */
- $"899F 2CC7 E1D6 FC7E 1DEB C3ED EA04 F55D" /* ‰Ÿ,ÇáÖü~.ëÃíê.õ] */
- $"017D B775 48A1 A844 EAB2 8E3A 5FF2 20AF" /* .}·uH¡¨D겎:_ò ¯ */
- $"6231 D1B0 D4D9 D308 999B 09F2 95B1 7071" /* b1ѰÔÙÓ.™›Æò•±pq */
- $"F57C 1F1E 7960 4639 6A62 5BC6 9E5A D45D" /* õ|..y`F9jb[ÆžZÔ] */
- $"F339 9597 BF1B 62EB D128 B3D8 9BD3 52BF" /* ó9•—¿.bëÑ(³Ø›ÓR¿ */
- $"0703 43F9 E1C7 940E EA41 F4B1 75E4 891F" /* ..CùáÇ”.êAô±uä‰. */
- $"09A4 D439 7DFF 6AB7 EB4F 1253 A9C0 8BBE" /* ƤÔ9}ÿj·ëO.S©À‹¾ */
- $"40A0 3CE6 965D F886 A9EF 7E69 712D 41C2" /* @ <æ–]ø†©ï~iq-A */
- $"0062 6917 5D06 6548 9FD6 1470 4A0C 8545" /* .bi.].eHŸÖ.pJ.…E */
- $"8417 6C73 0C2D DF44 0E4A D5F9 7443 D629" /* „.ls.-ßD.JÕùtCÖ) */
- $"E62D DE53 CCFA EAEA E08A F0E1 9D37 9616" /* æ-ÞSÌúêêàŠðá7–. */
- $"C0DA 1FD4 6A42 6CE6 1D10 AB6A 911A 19D2" /* ÀÚ.ÔjBlæ..«j‘..Ò */
- $"47A0 4AC5 6A3C 12FF 0FE8 3AFB 7DFD 3D27" /* G JÅj<.ÿ.è:û}ý=' */
- $"42C6 E2BA 6DDE D1ED 21CE 1EA0 F444 055B" /* BÆâºmÞÑí!Î. ôD.[ */
- $"122A 41EE D8C1 144C B39C 0EEA 014E 7448" /* .*AîØÁ.L³œ.ê.NtH */
- $"0B72 7C2C 92B6 0CAC 3CB5 ADA7 8BF8 0C56" /* .r|,’¶.¬<µ­§‹ø.V */
- $"1DD5 B763 907F 6B60 8A85 ED4A F87D FBDC" /* .Õ·c.k`Š…íJø}ûÜ */
- $"391D 822B CBF5 7266 0E6B B2D4 32DE 606C" /* 9.‚+Ëõrf.k²Ô2Þ`l */
- $"014E 64BF F969 E3A5 C8E4 09EC B205 6391" /* .Nd¿ùiã¥ÈäÆì².c‘ */
- $"3081 96F5 9A80 0599 50D2 38FF 635B 9C35" /* 0–õš€.™PÒ8ÿc[œ5 */
- $"97CF A325 D94F B8E1 A794 EABC DA8A 7CC3" /* —Ï£%ÙO¸á§”ê¼ÚŠ|à */
- $"8713 2EBB 1EA6 69B0 9A72 A93D 874A 1F30" /* ‡..».¦i°šr©=‡J.0 */
- $"4C7B B341 B8CF F61E 7CEE 60CC E9B0 6D85" /* L{³A¸Ïö.|î`Ìé°m… */
- $"4F96 977D F85D F85A 08AF 46EF F259 FD70" /* O–—}ø]øZ.¯FïòYýp */
- $"E364 C54D 1F3D C951 B1DD 2CB4 8B94 9350" /* ãdÅM.=ÉQ±Ý,´‹”“P */
- $"8FFC CD4E D39E 2FF5 DC65 9DB7 2133 6E97" /* üÍNÓž/õÜe·!3n— */
- $"9705 2AA6 2625 534E B2A2 D775 FCFA 60E0" /* —.*¦&%SN²¢×uüú`à */
- $"4929 3681 2E72 5087 F3CD FB3A 6386 36A2" /* I)6.rP‡óÍû:c†6¢ */
- $"5E62 8705 57E4 8441 1986 1487 E88F C834" /* ^b‡.Wä„A.†.‡èÈ4 */
- $"C59D D57C CCA2 D56F 3889 44AC 0E4D 0E88" /* ÅÕ|Ì¢Õo8‰D¬.M.ˆ */
- $"2592 A50A F98D DF1D 17F2 78BD D4AB FDB4" /* %’¥Âùß..òx½Ô«ý´ */
- $"4249 FBDE 3E56 BE58 B587 88B4 8D75 299F" /* BIûÞ>V¾Xµ‡ˆ´u)Ÿ */
- $"4C92 6D9A 6B17 6153 9A65 4770 E0EC BBEF" /* L’mšk.aSšeGpàì»ï */
- $"2F91 8C35 8FFA 04AF 880C D9B6 204A D65E" /* /‘Œ5ú.¯ˆ.Ù¶ JÖ^ */
- $"68DD DBE7 63BC E1C5 CCDD E994 3796 10EF" /* hÝÛçc¼áÅÌÝé”7–.ï */
- $"354D C0E7 7A72 E57E EFAC 7C75 E4CE F47F" /* 5MÀçzrå~ï¬|uäÎô. */
- $"2E82 A8D0 6401 3CC4 1ACC 4513 1211 DCC9" /* .‚¨Ðd.<Ä.ÌE...ÜÉ */
- $"BD7A 47CA F093 83C7 38EB 866D 1ED5 AC6C" /* ½zGÊð“ƒÇ8ë†m.Õ¬l */
- $"FF01 C348 CFA1 2532 DAD5 2BDD 8CCC 71C1" /* ÿ.ÃHÏ¡%2ÚÕ+ÝŒÌqÁ */
- $"1208 75AA 308B 4796 A89E 0EAF AB67 422A" /* ..uª0‹G–¨ž.¯«gB* */
- $"AA43 8162 68BC 9878 8578 419C AB2E 9518" /* ªCbh¼˜x…xAœ«.•. */
- $"A9E0 4298 DB46 36D7 ADD0 DE21 DC41 AEA7" /* ©àB˜ÛF6×­ÐÞ!ÜA®§ */
- $"A05D 795D AB14 E247 6750 3EA8 0A31 5A06" /*  ]y]«.âGgP>¨Â1Z. */
- $"FAEC AD07 ECF7 C636 A068 22AA E179 7613" /* úì­.ì÷Æ6 h"ªáyv. */
- $"30F9 831C 0AFA 38C0 E20B 96A9 464E B57A" /* 0ùƒ.Âú8Àâ.–©FNµz */
- $"5AF3 D612 DC70 2A8D 1D09 C7C9 967F 7F7B" /* ZóÖ.Üp*.ÆÇÉ–..{ */
- $"F47F 4017 A722 9853 37C2 DE55 34CF 104E" /* ô.@.§"˜S7ÂÞU4Ï.N */
- $"9DD3 35DF DEE2 589C FAF1 07DE 1803 86B1" /* Ó5ßÞâXœúñ.Þ..†± */
- $"2DE6 6B46 FC45 F24E 8718 3B6E D557 8008" /* -ækFüEòN‡.;nÕW€. */
- $"FF3B 8EC2 28BD 6146 3EF6 A0FB 0BCA 37C1" /* ÿ;ŽÂ(½aF>ö û.Ê7Á */
- $"749B 49F2 F419 9EC5 DC0A A6DE 0CFC 1BD2" /* t›Iòô.žÅܦÞ.ü.Ò */
- $"AAF5 4920 1AB3 842A 1813 606E 97CD 0EC2" /* ªõI .³„*..`n—Í. */
- $"50D4 84CD F427 569F 776D 940A A6F7 68D7" /* PÔ„Íô'VŸwm”¦÷h× */
- $"2A18 4C6D 2056 D254 1226 7F3C 1ED0 7AB8" /* *.Lm VÒT.&.<.Ðz¸ */
- $"BEFE 2050 50E6 C5FB 173C 1857 FF7F 86D9" /* ¾þ PPæÅû.<.Wÿ.†Ù */
- $"6CE3 E235 1AFA CBB4 D2BE 4E64 9713 B880" /* lãâ5.úË´Ò¾Nd—.¸€ */
- $"0C41 2E14 401B D14F 5BA4 AD20 7060 C05E" /* .A..@.ÑO[¤­ p`À^ */
- $"2011 000E C557 2951 009C A584 6178 50E8" /* ...ÅW)Q.œ¥„axPè */
- $"6E0D 922F BFF7 EC41 A907 0D2B EF09 3CE0" /* n.’/¿÷ìA©..+ïÆ<à */
- $"6344 B3D6 742A 0448 042D 44C3 390B 089B" /* cD³Öt*.H.-DÃ9..› */
- $"B0FF 2877 1C62 BE1E AC48 09B0 4667 19BC" /* °ÿ(w.b¾.¬HưFg.¼ */
- $"319D 1FEA ABB5 1EE9 02D8 C845 A20C 2E3F" /* 1.ꫵ.é.ØÈE¢..? */
- $"7010 FA38 E2A0 1F01 2933 0557 19BD 9DCD" /* p.ú8â ..)3.W.½Í */
- $"5486 F044 5838 C953 CC32 2DF8 6A04 30ED" /* T†ðDX8ÉSÌ2-øj.0í */
- $"2C42 0A7D 1B38 7F94 4936 5908 39F1 424F" /* ,BÂ}.8.”I6Y.9ñBO */
- $"2BFF 7F46 F53E 11D3 DA1E 41B4 67AB 296E" /* +ÿ.Fõ>.ÓÚ.A´g«)n */
- $"0B59 6213 9E16 1568 8787 ED75 8822 A102" /* .Yb.ž..h‡‡íuˆ"¡. */
- $"DAAC D7D6 FA63 ED91 52D2 E98C 6EEB ABBB" /* Ú¬×Öúcí‘RÒéŒnë«» */
- $"5465 7C7C 0CEB 3016 0CC6 5793 D7FF 7FFB" /* Te||.ë0..ÆW“×ÿ.û */
- $"34E7 7BDE 794E 6D8C 392D 051A 478B 4AD7" /* 4ç{ÞyNmŒ9-..G‹J× */
- $"028C 3119 EDCA 833C 2F1B A23A 5C69 908F" /* .Œ1.íʃ</.¢:\i */
- $"6F17 C143 83FF 31A8 709D 7BFA B0E4 A884" /* o.ÁCƒÿ1¨p{ú°ä¨„ */
- $"E3DC 88CC DF54 C132 6671 A0D0 B4C3 7721" /* ã܈ÌßTÁ2fq Ð´Ãw! */
- $"B5F0 84FF 0FDA 1588 5865 1B6B 94E3 9B46" /* µð„ÿ.Ú.ˆXe.k”ã›F */
- $"5CA1 7767 09F4 3448 2242 114C 2705 2C38" /* \¡wgÆô4H"B.L'.,8 */
- $"4565 F286 ABC2 AFF5 809D 0C5B BB5E 009C" /* Eeò†«Â¯õ€.[»^.œ */
- $"FCBA BC4C 84FF 45EF F42B 3F8E DEE0 A531" /* üº¼L„ÿEïô+?ŽÞà¥1 */
- $"DBBB 2113 7C30 8BB7 76FF 7E55 E6BC 012B" /* Û»!.|0‹·vÿ~Uæ¼.+ */
- $"EBDE EF62 0981 DCE1 AC6E 5AD7 D8AD 0560" /* ëÞïbÆÜá¬nZר­.` */
- $"5B36 3A62 5B57 3E03 75AC 25FB B396 1086" /* [6:b[W>.u¬%û³–.† */
- $"5EF0 4C11 ACE0 90D2 6568 EB55 75AB FF24" /* ^ðL.¬àÒehëUu«ÿ$ */
- $"54B8 0E77 3110 5C67 3138 8369 5BEA 3458" /* T¸.w1.\g18ƒi[ê4X */
- $"7FFE 6000 9940 0044 18C6 1A34 14B6 9CD2" /* .þ`.™@.D.Æ.4.¶œÒ */
- $"C039 2A00 00CC 8F27 9EFE FF80 1CAA 8000" /* À9*..Ì'žþÿ€.ª€. */
- $"0000 0000 D9B1 C1D0 BFE1 D01D 2DD4 E3DF" /* ....Ù±ÁпáÐ.-Ôãß */
- $"949B 6DB6 DB6D B83D 6B98 82BC 446D 0CB3" /* ”›m¶Ûm¸=k˜‚¼Dm.³ */
- $"55A5 C140 D9E5 5E98 37AF 0E38 4474 B8DC" /* U¥Á@Ùå^˜7¯.8Dt¸Ü */
- $"FCFA B14E BD14 730B DAA0 4B18 1B4D 81E7" /* üú±N½.s.Ú K..Mç */
- $"B8A8 26E7 EFB0 8272 4619 2A00 0000 0000" /* ¸¨&çï°‚rF.*..... */
- $"0000 0000 0000 060D CD91 05BE 3A07 80DE" /* ........Í‘.¾:.€Þ */
- $"29D6 2680 7867 5359 9411 F430 48D9 A22D" /* )Ö&€xgSY”.ô0HÙ¢- */
- $"DF74 0855 C0C4 C5AA D3F4 FC40 5815 C5FC" /* ßt.UÀÄŪÓôü@X.Åü */
- $"B741 3001 FF7F FDC6 00B8 F1BA FEC9 B662" /* ·A0.ÿ.ýÆ.¸ñºþɶb */
- $"4973 2EE9 5029 E237 296D D4A4 04DE 4DB9" /* Is.éP)â7)mÔ¤.ÞM¹ */
- $"5305 FD42 9A82 6842 EF09 9DA2 201D C6EF" /* S.ýBš‚hBïÆ¢ .Æï */
- $"4078 4FC3 038C B201 A1C0 0791 7B09 CF18" /* @xOÃ.Œ².¡À.‘{ÆÏ. */
- $"D61B DABD 0409 372B F69D 3CF8 E2E1 31A1" /* Ö.Ú½.Æ7+ö<øâá1¡ */
- $"023B B0FD 60B3 3933 16F2 C716 9259 82F8" /* .;°ý`³93.òÇ.’Y‚ø */
- $"77BB 3A47 46D2 D998 7AA1 01E1 DF78 8000" /* w»:GFÒÙ˜z¡.áßx€. */
- $"0000 0001 D8FD 4FB2 C620 0000 005A CD78" /* ....ØýO²Æ ...ZÍx */
- $"B755 53CD E910 3B50 96A8 4000 0000 0003" /* ·USÍé.;P–¨@..... */
- $"FD6F 5DD1 31D8 A087 6BC5 09F3 E81E B49F" /* ýo]Ñ1Ø ‡kÅÆóè.´Ÿ */
- $"5A88 0DB9 2492 4924 9234 EE49 0E46 EE5B" /* Zˆ.¹$’I$’4îI.Fî[ */
- $"8D2A E866 7AD0 1F3C 936D 50EF 6EF5 FDE7" /* *èfzÐ.<“mPïnõýç */
- $"BFFE 6EFF 82AD 0EDF 556D B01D C573 CA68" /* ¿þnÿ‚­.ßUm°.ÅsÊh */
- $"985A F307 82C5 D933 4C26 B9EE EEF7 D4C6" /* ˜Zó.‚ÅÙ3L&¹îî÷ÔÆ */
- $"BFB5 4130 F610 4AFE 602E 3723 0C95 0000" /* ¿µA0ö.Jþ`.7#.•.. */
- $"0000 0000 0000 0000 0002 7F7E DE44 DDEB" /* ...........~ÞDÝë */
- $"B8B1 0AB8 BA80 7F79 D59C 851A 0244 B8D1" /* ¸±Â¸º€.yÕœ…..D¸Ñ */
- $"6B92 AB1A 4997 5556 C0C7 5935 05AD B380" /* k’«.I—UVÀÇY5.­³€ */
- $"318D A387 1E5F 1523 0170 B5DB D9FA 0E80" /* 1£‡._.#.pµÛÙú.€ */
- $"7342 6634 1E36 FB10 615A 1862 FF53 1545" /* sBf4.6û.aZ.bÿS.E */
- $"C795 B42C 8282 534C 3AFD D370 7621 820E" /* Ç•´,‚‚SL:ýÓpv!‚. */
- $"9EDA AF3A 476B 3537 E327 52DE 4A99 73D1" /* žÚ¯:Gk57ã'RÞJ™sÑ */
- $"0718 7C16 82D5 99A5 32DD 0E83 9C4F 60F8" /* ..|.‚Õ™¥2Ý.ƒœO`ø */
- $"0743 325D 2056 84FF 06BC C6BB 338C 64CF" /* .C2] V„ÿ.¼Æ»3ŒdÏ */
- $"B7B9 C4C7 9800 E4DA EE0A 6636 DEE8 B8F8" /* ·¹Äǘ.äÚîÂf6Þè¸ø */
- $"739E 1EBD 408C C620 9790 A337 E987 2E54" /* sž.½@ŒÆ —£7é‡.T */
- $"DD4A E501 C0BF 44E6 E8EF ACCF 028F 253C" /* ÝJå.À¿Dæèï¬Ï.%< */
- $"F466 FA92 BEE6 A066 F4B6 5B41 CA80 3567" /* ôfú’¾æ fô¶[AÊ€5g */
- $"A079 E31D CEE9 CD64 0AED 265D E591 B98C" /*  yã.ÎéÍdÂí&]呹Œ */
- $"DF22 C203 3C43 E1D8 5D64 CA99 E6C7 EF30" /* ß"Â.<CáØ]dÊ™æÇï0 */
- $"68AF F4C9 97D5 F961 48CF 954C 2832 33A3" /* h¯ôÉ—ÕùaHÏ•L(23£ */
- $"0088 1417 0D84 DDE1 23FA C81D 487D C9AB" /* .ˆ...„Ýá#úÈ.H}É« */
- $"F239 ABB4 24E0 6694 291C 885C 23CE F212" /* ò9«´$àf”).ˆ\#Îò. */
- $"29F4 5656 7DD1 182A 2C11 AAEF 7534 24EE" /* )ôVV}Ñ.*,.ªïu4$î */
- $"9886 347F 28AD 6952 0A82 E9A4 6AA9 9390" /* ˜†4.(­iR‚é¤j©“ */
- $"06A8 EF47 527A EDF2 894B 5234 A900 82B1" /* .¨ïGRzíò‰KR4©.‚± */
- $"724D 791B 676C BC97 B3A5 94F7 137E FE8D" /* rMy.gl¼—³¥”÷.~þ */
- $"50F5 C1EE 0C5B 1F3D CEF4 DD64 709C 095B" /* PõÁî.[.=ÎôÝdpœÆ[ */
- $"A51A B239 3EC3 C9BA 39EC DBE2 FB9A 3C6F" /* ¥.²9>Ãɺ9ìÛâûš<o */
- $"BBC4 DE3E C5AF 0043 DC2D AE64 C0A7 2039" /* »ÄÞ>ů.CÜ-®dÀ§ 9 */
- $"A6C9 6079 72D6 0BC7 C501 A3A4 5EF4 A060" /* ¦É`yrÖ.ÇÅ.£¤^ô ` */
- $"C46E FCB9 1958 AD83 1176 0776 81C2 13C2" /* Änü¹.X­ƒ.v.vÂ. */
- $"DF08 4A76 137F DC5C 4867 0493 EE96 8373" /* ß.Jv..Ü\Hg.“î–ƒs */
- $"4644 13A4 F789 39FF 813B D226 575A 5A18" /* FD.¤÷‰9ÿ;Ò&WZZ. */
- $"3AF5 4B88 2747 3D47 681F 9670 0069 DD02" /* :õKˆ'G=Gh.–p.iÝ. */
- $"4252 ADB0 D6FB F1F1 1432 C24B D920 7290" /* BR­°Öûññ.2ÂKÙ r */
- $"3709 3D60 15D9 0C49 23EC 77F8 F791 F132" /* 7Æ=`.Ù.I#ìwø÷‘ñ2 */
- $"046E 0D05 9AFA 210A 9992 29D9 7AA6 F18E" /* .n..šú!™’)Ùz¦ñŽ */
- $"E245 75E0 018F BCEB 8D1B C2D0 083E 985F" /* âEuà.¼ë.ÂÐ.>˜_ */
- $"B791 554D F5F5 AD71 E064 75E6 1F3A D463" /* ·‘UMõõ­qàduæ.:Ôc */
- $"9A59 0A43 3457 BD7C 44A7 5C5E 9D19 C5D8" /* šYÂC4W½|D§\^.ÅØ */
- $"5880 C2CC 5DF0 2964 C0FD ABA1 004B 008D" /* X€ÂÌ]ð)dÀý«¡.K. */
- $"5205 7F2E 0843 E484 2D37 9C34 2425 7AFF" /* R....Cä„-7œ4$%zÿ */
- $"7021 D907 B6E1 F5E5 02C3 F3DD 44C8 2252" /* p!Ù.¶áõå.ÃóÝDÈ"R */
- $"0649 3C1A 1A80 449A 64D1 1720 76D6 4987" /* .I<..€DšdÑ. vÖI‡ */
- $"B4B1 E749 E899 BF69 5B35 F925 2EE6 6CE6" /* ´±çI虿i[5ù%.ælæ */
- $"B4FD CEB3 54C0 7C9D 4380 F93B 5701 F274" /* ´ýγTÀ|C€ù;W.òt */
- $"C4F3 CC20 F972 1FD1 56B3 911D 2995 5FC9" /* ÄóÌ ùr.ÑV³‘.)•_É */
- $"1F35 BAE0 9AC7 3082 1372 C1D5 4B23 D79E" /* .5ºàšÇ0‚.rÁÕK#מ */
- $"EF63 A93F 8E74 26FB AC68 CDBE BD3E 9720" /* ïc©?Žt&û¬h;½>— */
- $"DF71 956D 5D26 559E 2795 2F1B F798 7821" /* ßq•m]&Už'•/.÷˜x! */
- $"F3CB 1E6F 2351 11BD 0EFF 19B2 40A2 1C7F" /* óË.o#Q.½.ÿ.²@¢.. */
- $"267D D302 F6AE 5410 1E96 40DC 386E CB7B" /* &}Ó.ö®T..–@Ü8nË{ */
- $"7EA3 5CF7 46BA 8758 D0EE 12B3 34DF 46FE" /* ~£\÷Fº‡XÐî.³4ßFþ */
- $"517B E0F8 7E28 83A5 E93A C06D 7C3F 254B" /* Q{àø~(ƒ¥é:Àm|?%K */
- $"53DF 91ED F6AB FD0A 53A0 5257 F9B8 E8B7" /* Sß‘íö«ýÂS RWù¸è· */
- $"5A14 6036 C6DA E3FE C29D 799F 8B43 46D6" /* Z.`6ÆÚãþÂyŸ‹CFÖ */
- $"94DF 1954 073C 7C30 40F4 A00D 93D4 AADF" /* ”ß.T.<|0@ô .“ﻧ */
- $"4839 EF36 F92A 3758 97CE 955A 3521 3CB5" /* H9ï6ù*7X—ΕZ5!<µ */
- $"8269 30A7 2A93 6A40 07BE DCC3 50B6 C86B" /* ‚i0§*“j@.¾ÜÃP¶Èk */
- $"CE9A AF28 3B80 4FE6 873C DB8E A29C 15DC" /* Κ¯(;€Oæ‡<ÛŽ¢œ.Ü */
- $"81A8 F841 4F77 6237 7267 55C4 1289 2DA1" /* ¨øAOwb7rgUÄ.‰-¡ */
- $"8392 424A 398F 9FA7 8DBE 2CC6 44E9 A005" /* ƒ’BJ9Ÿ§¾,ÆDé . */
- $"0E57 6638 ADDD 9F15 D32E 13A9 F752 67BA" /* .Wf8­ÝŸ.Ó..©÷Rgº */
- $"9F1D 753C 0023 2BC1 2C48 19AF FF28 66E6" /* Ÿ.u<.#+Á,H.¯ÿ(fæ */
- $"0A05 1D62 536F C372 7DEC 5069 B44D AFD4" /* Â..bSoÃr}ìPi´M¯Ô */
- $"BE3C 9C16 161E 95B4 89E7 B034 4524 E373" /* ¾<œ...•´‰ç°4E$ãs */
- $"D4A2 2F82 F1BB 8F20 7861 0F95 7CDF C184" /* Ô¢/‚ñ» xa.•|ßÁ„ */
- $"5B65 6015 001B F6BD 5D52 D4BC 3A42 FD56" /* [e`...ö½]RÔ¼:BýV */
- $"D48F 3358 7432 09BD FF19 625D 3A11 13DA" /* Ô3Xt2ƽÿ.b]:..Ú */
- $"F222 12E8 5A1B 12BF 9B3B A234 A367 8FB6" /* ò".èZ..¿›;¢4£g¶ */
- $"4BF2 EE99 DB11 5D13 7021 71B4 2280 A1BC" /* Kòî™Û.].p!q´"€¡¼ */
- $"2AEF ECB5 D7EC 047C 0860 9676 78B1 CA76" /* *ïìµ×ì.|.`–vx±Êv */
- $"9AFB C995 D4EB 900A AD98 6423 E572 B68C" /* šûÉ•Ôë­˜d#år¶Œ */
- $"A271 A30B D157 8E95 8250 29BB 0323 E26C" /* ¢q£.ÑWŽ•‚P)».#âl */
- $"9223 91C7 0CD4 F0B0 442E 1BD3 1473 C699" /* ’#‘Ç.Ôð°D..Ó.sÆ™ */
- $"2D1C 8791 C699 920E 72C0 0D3E F6E9 9E2B" /* -.‡‘Æ™’.rÀ.>öéž+ */
- $"60B6 A87F 6CBE 146C 1224 90FC BF7B C6A9" /* `¶¨.l¾.l.$ü¿{Æ© */
- $"090E 3EAD C89D 5065 414B 3A1C F271 9327" /* Æ.>­ÈPeAK:.òq“' */
- $"D490 CD2B FBB3 BEFF 768D 4601 635B A746" /* ÔÍ+û³¾ÿvF.c[§F */
- $"8A4B 0981 8B8F EA85 D255 2113 8792 CC76" /* ŠKÆ‹ê…ÒU!.‡’Ìv */
- $"DE84 B950 C5F4 A4C1 D4EF 7D52 CC74 CCEE" /* Þ„¹PÅô¤ÁÔï}RÌtÌî */
- $"B40E B94F 9467 15CA 1DE0 3557 BF09 D787" /* ´.¹O”g.Ê.à5W¿Æ×‡ */
- $"ED66 345A E153 B4DC EF7C 2952 3161 5A99" /* íf4ZáS´Üï|)R1aZ™ */
- $"A193 D5EB 40F5 1300 65FA 8DFD 621A AE94" /* ¡“Õë@õ..eúýb.®” */
- $"30CD 6D25 A0FC 942E 37AC 52C8 CEAD 2D1F" /* 0Ím% ü”.7¬RÈέ-. */
- $"87D5 D078 F173 F5AD 7A56 DD1B 10C3 F9BF" /* ‡ÕÐxñsõ­zVÝ..Ãù¿ */
- $"69C1 9E6B E021 A0C7 84BF D87A 8AA8 327C" /* iÁžkà! Ç„¿ØzЍ2| */
- $"7D48 0D97 E584 FF7F AE07 2001 BF6C 2691" /* }H.—å„ÿ.®. .¿l&‘ */
- $"3032 E118 8741 42AD 7709 3086 8488 F9D3" /* 02á.‡AB­wÆ0†„ˆùÓ */
- $"0353 D79E 2E21 8F21 46CC 005C DA8A 0229" /* .Sמ.!!FÌ.\ÚŠ.) */
- $"A56B A72A C69E FCF7 7558 5D72 0050 2BDE" /* ¥k§*Æžü÷uX]r.P+Þ */
- $"0F36 E4F0 C744 89FC 37F0 7ECA F488 FE8C" /* .6äðÇD‰ü7ð~ÊôˆþŒ */
- $"1B6B 0158 B34D 1EA6 9B1F 154E FF79 01D4" /* .k.X³M.¦›..Nÿy.Ô */
- $"725F D9CF D9BF CCFF 439D 8F5C A92D D20D" /* r_ÙÏÙ¿ÌÿC\©-Ò. */
- $"0613 88F8 5C1C B6BD 07B9 9078 151D 8353" /* ..ˆø\.¶½.¹x..ƒS */
- $"0E68 8495 D521 92D8 E92D CF9B 10E6 ABDC" /* .h„•Õ!’Øé-Ï›.æ«Ü */
- $"53D9 DFB2 F2AF F964 14E3 74D6 3D64 01E2" /* SÙß²ò¯ùd.ãtÖ=d.â */
- $"FAFB 2D0B D303 DCF7 7718 E6CF 30DB 3FAE" /* úû-.Ó.Ü÷w.æÏ0Û?® */
- $"2873 3339 54A3 1E48 04D2 FDF2 E863 6201" /* (s39T£.H.Òýòècb. */
- $"01D1 182C 4C2A D85D AE26 DE15 9796 494C" /* .Ñ.,L*Ø]®&Þ.—–IL */
- $"82EA B4C0 2D3C 3D3E 1732 2ACA AC27 B7DB" /* ‚ê´À-<=>.2*ʬ'·Û */
- $"5CED 6F9D 3EDB FF04 5E83 BE60 1636 AE2C" /* \ío>Ûÿ.^ƒ¾`.6®, */
- $"754D 2928 7128 ACFD 15E8 C1A0 30A5 1063" /* uM)(q(¬ý.èÁ 0¥.c */
- $"1E6F 10F7 A946 B9B4 D921 5DB3 113F 332E" /* .o.÷©F¹´Ù!]³.?3. */
- $"61B8 AB3D 2F87 E081 C9D9 32B7 1060 785A" /* a¸«=/‡àÉÙ2·.`xZ */
- $"EFDD F472 0283 E235 4D42 E903 A06B 51CB" /* ïÝôr.ƒâ5MBé. kQË */
- $"39DC A412 A492 918E 235E F57C E4CE 4E0F" /* 9ܤ.¤’‘Ž#^õ|äÎN. */
- $"6BE6 7036 FA8A 7B2C 21FE 60B1 6FCA 7654" /* kæp6úŠ{,!þ`±oÊvT */
- $"C9FD DCDF E497 B2A6 D6D5 87ED 9D3B 5B86" /* ÉýÜßä—²¦ÖÕ‡í;[† */
- $"DA51 6B5B AE3E 520B 1DB3 5A6B 2B4D A777" /* ÚQk[®>R..³Zk+M§w */
- $"4F13 A04C 7D4F 819B 1FEB 086D 5F34 6643" /* O. L}O›.ë.m_4fC */
- $"0208 693A D70C 55B2 7A07 BC27 3A41 B739" /* ..i:×.U²z.¼':A·9 */
- $"C1F5 7425 07D5 D74C 1F56 F680 F1C4 B0CB" /* Áõt%.Õ×L.Vö€ñÄ°Ë */
- $"F3E0 DE80 53FC 256D EFD0 6B64 028C EC70" /* óàÞ€Sü%mïÐkd.Œìp */
- $"4973 06D4 242C DAAA 8373 DFAC B0C9 14A1" /* Is.Ô$,Úªƒs߬°É.¡ */
- $"BFBC 0BB4 E250 919E 3D2B B388 3A89 FB02" /* ¿¼.´âP‘ž=+³ˆ:‰û. */
- $"9796 86E6 20F8 C26C 8120 349C 757A 6875" /* —–†æ øÂl 4œuzhu */
- $"F63E AE68 84C3 03A3 6F64 F9EE F892 2CF8" /* ö>®h„Ã.£odùîø’,ø */
- $"61C1 B13A E941 0D67 DA36 4C05 9565 DC85" /* aÁ±:éA.gÚ6L.•eÜ… */
- $"D7F8 6EB9 D903 D428 F59A 3EBF C73E 5E95" /* ×øn¹Ù.Ô(õš>¿Ç>^• */
- $"764D 15FB 98F2 BECE 0FC8 EA3C 4E51 E1DD" /* vM.û˜ò¾Î.Èê<NQáÝ */
- $"5253 CE7A 2D16 8527 AF8E 9A17 757A A42F" /* RSÎz-.…'¯Žš.uz¤/ */
- $"6CA9 6BB3 7787 D84F 8E20 EA1F FB2D 15E3" /* l©k³w‡ØOŽ ê.û-.ã */
- $"0D2C 45A8 8C80 7DA1 89DB 5F46 F3FB 2871" /* .,E¨Œ€}¡‰Û_Fóû(q */
- $"539E 8CCA 5C03 EF20 B6B5 4956 EB82 172C" /* SžŒÊ\.ï ¶µIVë‚., */
- $"AB28 0D6D 4DF9 1F61 6F8D 61FE E962 778D" /* «(.mMù.aoaþébw */
- $"0C8E EC55 3BDC EC81 C9D1 E7D5 A811 C69A" /* .ŽìU;ÜìÉÑçÕ¨.Æš */
- $"6186 BC2C 75B4 DD3D C207 1151 4C3B 4175" /* a†¼,u´Ý=Â..QL;Au */
- $"942E 2ACF D3C7 7122 9D89 31B3 0918 EDC0" /* ”.*ÏÓÇq"‰1³Æ.íÀ */
- $"9D45 75D8 DE61 5036 6D9F 3373 4827 7ADE" /* EuØÞaP6mŸ3sH'zÞ */
- $"1BD1 16E8 8905 37D4 D811 1077 B359 0FF6" /* .Ñ.è‰.7ÔØ..w³Y.ö */
- $"0460 F360 20A5 B532 3418 142A B432 C2E9" /* .`ó` ¥µ24..*´2Âé */
- $"A0D6 DB04 317D 28F3 C893 AAE3 19B1 5742" /*  ÖÛ.1}(óÈ“ªã.±WB */
- $"7BF6 615C 0EAC F35E 0CD4 B142 A289 5458" /* {öa\.¬ó^.Ô±B¢‰TX */
- $"D699 1584 46FF 7174 758F B1F8 F540 F427" /* Ö™.„Fÿqtu±øõ@ô' */
- $"A496 8795 E66B 3DDC FB80 D0B8 9411 7240" /* ¤–‡•æk=Üû€Ð¸”.r@ */
- $"0374 54DC B2CA C982 BD5E FD06 4B02 5E8D" /* .tTܲÊÉ‚½^ý.K.^ */
- $"A958 79AA 5BE6 B5A2 76C3 7C23 0D45 6768" /* ©Xyª[æµ¢vÃ|#.Egh */
- $"D726 8259 FD2E E5CE 9B70 0600 22E7 82A3" /* ×&‚Yý.åΛp.."ç‚£ */
- $"8E14 9626 C4EC EED9 E7D8 13C9 623F 3DEB" /* Ž.–&ÄìîÙçØ.Éb?=ë */
- $"357B E617 A43A C9D4 328A C30A FF45 71BA" /* 5{æ.¤:ÉÔ2ŠÃÂÿEqº */
- $"1F8B 3945 8E06 0CF0 4749 0840 6F5A EDDB" /* .‹9EŽ..ðGI.@oZíÛ */
- $"29AC E877 27BD 6C8C A131 8A1C 9228 0FC5" /* )¬èw'½lŒ¡1Š.’(.Å */
- $"A029 D1A1 324D EFCE EB3F 2B92 150D FB8C" /*  )Ñ¡2MïÎë?+’..ûŒ */
- $"5399 1ABD D375 08BF 8F3F E788 684D 3064" /* S™.½Óu.¿?çˆhM0d */
- $"70B4 A733 4AB6 239A DC03 724F C8B8 F1BB" /* p´§3J¶#šÜ.rOȸñ» */
- $"8F1F A795 FF18 8256 0050 FF74 EDF1 3D05" /* .§•ÿ.‚V.Pÿtíñ=. */
- $"6CB0 E566 9272 E493 C085 3D06 3116 4ECE" /* l°åf’rä“À…=.1.NÎ */
- $"402D 329F 4BBB 2598 A7CF BEE1 333D 9019" /* @-2ŸK»%˜§Ï¾á3=. */
- $"61BB 1A29 2616 E907 2CD6 F64C 456F 9881" /* a».)&.é.,ÖöLEo˜ */
- $"725B 5C38 A40D 60D3 6B4F FDF1 87D7 4786" /* r[\8¤.`ÓkOýñ‡×G† */
- $"29BF CAEB 223A 044D 0F61 FDE6 0A3E 7727" /* )¿Êë":.M.aýæÂ>w' */
- $"DDEE 0A95 231F 04AC B6EF D134 C09D 1540" /* Ýî•#..¬¶ïÑ4À.@ */
- $"0E94 57E2 8418 C208 1F26 7396 96A0 D08F" /* .”Wâ„.Â..&s–– Ð */
- $"0CC0 40C8 C596 39BA 0CAE A6ED F8E8 7D6B" /* .À@ÈÅ–9º.®¦íøè}k */
- $"A76C 391B 6113 555F 62E0 6E14 5D27 E7BC" /* §l9.a.U_bàn.]'ç¼ */
- $"EDB7 D038 DED2 7BEE FC9D 6211 241E 0795" /* í·Ð8ÞÒ{îüb.$..• */
- $"9CDE 1607 B4C7 828E 24D2 4E9F FCA0 36EA" /* œÞ..´Ç‚Ž$ÒNŸü 6ê */
- $"004C C960 1680 01CE 7FF6 A201 EDAB 1ADF" /* .LÉ`.€.Î.ö¢.í«.ß */
- $"80D8 4524 390C 23DD EA8E 062C 5DDB 3C57" /* €ØE$9.#ÝêŽ.,]Û<W */
- $"BAEC 18E5 1ECE 91D7 A40E 08ED 23EA 55B6" /* ºì.å.Αפ..í#êU¶ */
- $"AA2C F48A 7B0E 8CAE 90DD 5840 41FF 7F4C" /* ª,ôŠ{.Œ®ÝX@Aÿ.L */
- $"47AD E774 87C4 9AB1 9CAD E633 DECD 3E36" /* G­çt‡Äš±œ­æ3ÞÍ>6 */
- $"00C2 0E05 134F 4802 3846 3575 1902 676D" /* .Â...OH.8F5u..gm */
- $"1006 D8AE 0D5F 1934 78F6 0721 F3C4 1000" /* ..Ø®._.4xö.!óÄ.. */
- $"8991 FA85 45B5 37A9 5A0C 54EE 014B 297B" /* ‰‘ú…Eµ7©Z.Tî.K){ */
- $"52F2 5ADD 7422 C97B EAA9 D291 45A7 A44A" /* RòZÝt"É{ê©Ò‘E§¤J */
- $"40FE AE73 5086 C7D3 85FD D734 67F2 8909" /* @þ®sP†ÇÓ…ý×4gò‰Æ */
- $"506D 36D8 2361 990C 802F A59E B603 9C94" /* Pm6Ø#a™.€/¥ž¶.œ” */
- $"F7BD AED9 8518 8651 DFFE 3D0E E920 E874" /* ÷½®Ù….†Qßþ=.é èt */
- $"FEB0 EE3C 3242 C249 4704 EEA8 9EFA DC61" /* þ°î<2BÂIG.úÜa */
- $"49C6 929E 2A9D 51CD FE0A FF02 3DDB 01EC" /* IÆ’ž*QÍþÂÿ.=Û.ì */
- $"80E8 630A B0C8 C9FC 7693 C60B 07E8 5D2F" /* €èc°ÈÉüv“Æ..è]/ */
- $"B97A 9F04 444E C836 DD68 FF12 EC9C 7E4F" /* ¹zŸ.DNÈ6Ýhÿ.ìœ~O */
- $"3CE9 83A8 191A 1E61 05F8 90FF 67E8 011A" /* <部...a.øÿgè.. */
- $"71EA 3EE8 AFBD 6328 ED84 9807 788D F3BC" /* qê>诽c(턘.xó¼ */
- $"2FA0 A210 7FFF 1D02 2519 4EC7 2A80 7FD0" /* / ¢..ÿ..%.NÇ*€.Ð */
- $"2064 A8F4 CC78 5EC8 88AF F1AB 868B 9F8D" /* d¨ôÌx^Ȉ¯ñ«†‹Ÿ */
- $"883E 3FDA D188 FBB7 3AFC 0C72 E01A CEF3" /* ˆ>?Úшû·:ü.rà.Îó */
- $"21E1 1718 4FDB 9A43 3767 424A 639B DFFE" /* !á..OÛšC7gBJc›ßþ */
- $"CA5F 7BA9 8F82 3EA6 6D4E 6986 6945 80DE" /* Ê_{©‚>¦mNi†iE€Þ */
- $"8274 4927 166A 6062 DF1D 0A72 F23B FA5A" /* ‚tI'.j`bß.Ârò;úZ */
- $"4DE4 5D19 54FC 488B 5237 FF5F 7B81 62C5" /* Mä].TüH‹R7ÿ_{bÅ */
- $"F6B7 B580 3016 11B6 22CF 63B8 428A D39A" /* ö·µ€0..¶"Ïc¸BŠÓš */
- $"5AC3 80FF 7310 8386 FF54 F361 304F 3BB5" /* ZÀÿs.ƒ†ÿTóa0O;µ */
- $"A7EB 0419 7DFB 6E56 20A8 3670 9018 9CB3" /* §ë..}ûnV ¨6p.œ³ */
- $"4B35 7082 32A7 E917 9CF8 FF7F FF80 0A6C" /* K5p‚2§é.œøÿ.ÿ€Âl */
- $"A48C 447E 3ECF 411D 89E4 F923 373B DCBE" /* ¤ŒD~>ÏA.‰äù#7;ܾ */
- $"2CE8 6580 0F87 1A23 1D93 62AE 48EF DEB8" /* ,èe€.‡.#.“b®HïÞ¸ */
- $"5DE8 DB68 1CA3 8D4B D3FE A476 7B3D ACAA" /* ]èÛh.£KÓþ¤v{=¬ª */
- $"284F 83EB 428F A201 D122 CB1A CCB2 C1FE" /* (OƒëB¢.Ñ"Ë.̲Áþ */
- $"367F 60D3 155D 8C00 22D8 ED33 D56B 1DE2" /* 6.`Ó.]Œ."Øí3Õk.â */
- $"98B0 A4A9 E041 2BF1 AA58 E78D 47E5 929F" /* ˜°¤©àA+ñªXçGå’Ÿ */
- $"85DA 699E C45A 0064 B931 CF2B 4169 44F0" /* …ÚižÄZ.d¹1Ï+AiDð */
- $"4B4F 083B 3D7C B2B2 D87B 785E 91A8 C614" /* KO.;=|²²Ø{x^‘¨Æ. */
- $"6EE6 A63C C8A7 B9E3 839D E245 4128 3BF9" /* næ¦<ȧ¹ãƒâEA(;ù */
- $"98CD 0C23 72EB E3A9 D21F 1BC2 4E13 274B" /* ˜Í.#rëã©Ò..ÂN.'K */
- $"19C8 CB39 5E7A D218 FBDB 0C42 51A1 1203" /* .ÈË9^zÒ.ûÛ.BQ¡.. */
- $"C0EB CDC2 9249 E461 1DE4 3DB6 FDFE 1334" /* ÀëÍÂ’Iäa.ä=¶ýþ.4 */
- $"1952 8231 CD71 A170 C55B 1FD0 6706 57F0" /* .R‚1Íq¡pÅ[.Ðg.Wð */
- $"282D 09A2 0893 A5BA 0314 43DD 32AF 3478" /* (-Æ¢.“¥º..CÝ2¯4x */
- $"EF6C 15F0 55C9 6A47 ECFE 3F3F 4DB4 5ED8" /* ïl.ðUÉjGìþ??M´^Ø */
- $"EFF8 8CA5 71F9 6669 078C 550C 943A 7046" /* ïøŒ¥qùfi.ŒU.”:pF */
- $"C031 6CE2 4681 4177 2913 CFE7 D857 C62A" /* À1lâFAw).ÏçØWÆ* */
- $"4652 88E2 8830 DF42 9C3D 2D76 E710 A8F1" /* FRˆâˆ0ßBœ=-vç.¨ñ */
- $"3626 45F2 55CC 008C EAB8 B891 A5F3 1AD2" /* 6&EòUÌ.Œê¸¸‘¥ó.Ò */
- $"AB11 6C48 3F18 40C0 51F0 DB88 0BD1 168C" /* «.lH?.@ÀQðÛˆ.Ñ.Œ */
- $"2E54 2DA6 CC60 BB05 4700 2C4E 179B 271B" /* .T-¦Ì`».G.,N.›'. */
- $"688C 1EE9 4D9A C781 8108 296B FE4F 028A" /* hŒ.éMšÇ.)kþO.Š */
- $"63D6 6EDF 6FEB FC17 BDFE 7A70 B48E D94E" /* cÖnßoëü.½þzp´ŽÙN */
- $"D985 3384 1BD2 B4C9 5213 B0D1 041B 876C" /* Ù…3„.Ò´ÉR.°Ñ..‡l */
- $"131C 4A9C 947B A79C A466 9779 E7C9 D2E1" /* ..Jœ”{§œ¤f—yçÉÒá */
- $"4E9F 0509 30E0 1115 E5C7 CAED 197B 818A" /* NŸ.Æ0à..åÇÊí.{Š */
- $"324D 8F8E ED44 BF44 5340 D647 1776 B983" /* 2MŽíD¿DS@ÖG.v¹ƒ */
- $"6D8C 88B1 6976 F7EB AFDB 6638 CAD3 F275" /* mŒˆ±iv÷ë¯Ûf8ÊÓòu */
- $"D93A 6CD3 9D6E C617 3969 D8E5 3059 947B" /* Ù:lÓnÆ.9iØå0Y”{ */
- $"6AFA 0E9B A19C 24C9 E1DC 089D 3545 89E4" /* jú.›¡œ$ÉáÜ.5E‰ä */
- $"E860 FB54 068C B464 EE9B 66B7 F267 34CF" /* è`ûT.Œ´dî›f·òg4Ï */
- $"1276 C6B2 47E6 8284 300B D1A9 1409 0C93" /* .vƲGæ‚„0.Ñ©.Æ.“ */
- $"E36A 8095 409A 7352 FF7A 0F50 A5E2 E678" /* ãj€•@šsRÿz.P¥âæx */
- $"C195 0898 E51E EB15 8D7A E918 29A6 D5CE" /* Á•.˜å.ë.zé.)¦ÕÎ */
- $"4DBC 978B 2CAA 9BA7 8727 EA1C 1C7A 6CC2" /* M¼—‹,ª›§‡'ê..zl */
- $"D172 DDF5 4BD4 9C69 607B 609F AEC8 FD84" /* ÑrÝõKÔœi`{`Ÿ®Èý„ */
- $"1DDA A076 C7E1 A7B1 F86C BC7E 1720 EB83" /* .Ú vÇá§±øl¼~. ëƒ */
- $"095B F1C8 7239 10FD 6A26 D10E 534B E257" /* Æ[ñÈr9.ýj&Ñ.SKâW */
- $"B691 5D92 6949 E7D8 7470 AA8C 421F F945" /* ¶‘]’iIçØtpªŒB.ùE */
- $"99F6 9492 B806 E264 47B0 4EF5 6206 734E" /* ™ö”’¸.âdG°Nõb.sN */
- $"944B 102F A688 23A4 EAB0 CCEA 0017 0156" /* ”K./¦ˆ#¤ê°Ìê...V */
- $"A8C9 2A3F FF49 4137 E23A 09D0 97BB 0E5F" /* ¨É*?ÿIA7â:ÆÐ—»._ */
- $"E2A2 2247 4980 6A20 B443 3E0B 0465 B9EF" /* â¢"GI€j ´C>..e¹ï */
- $"C490 B954 3AEA ABB7 3D53 111D 8897 551C" /* ĹT:ê«·=S..ˆ—U. */
- $"B865 1EA2 33F2 AD50 D488 1D6D 9733 27F3" /* ¸e.¢3ò­PÔˆ.m—3'ó */
- $"78AC C946 FB3C 4D2F 6580 1B3A 3368 3D54" /* x¬ÉFû<M/e€.:3h=T */
- $"55DF 6B52 1A54 9010 C4D2 12C8 D497 9CDB" /* UßkR.T.ÄÒ.ÈÔ—œÛ */
- $"173A 0609 66F1 C6C0 FD02 47A0 B2E2 D2E6" /* .:.ÆfñÆÀý.G ²âÒæ */
- $"096E F870 0776 4898 2F2B 84CF BA83 D656" /* Ænøp.vH˜/+„ϺƒÖV */
- $"7F77 79FF 0F1D 2A6E 03C6 4D0F E3EF D23B" /* .wyÿ..*n.ÆM.ãïÒ; */
- $"6F82 5F72 6701 98DF 5A63 DA7B 0ABC 75E2" /* o‚_rg.˜ßZcÚ{¼uâ */
- $"382D 0D93 3C8C 5308 19EA EF8D 7922 CD36" /* 8-.“<ŒS..êïy"Í6 */
- $"ED21 EB4D 3D77 5A8A 1380 E238 22E5 84AA" /* í!ëM=wZŠ.€â8"優 */
- $"4488 7DCE 91A0 CB4B 67FA 74AF EA3D 1C8E" /* Dˆ}Α ËKgút¯ê=.Ž */
- $"9279 611D FD02 D08F D952 B05D 2C11 B545" /* ’ya.ý.ÐÙR°],.µE */
- $"5F17 FF5C 1E9C 6A77 DA2F A474 B20C F5A2" /* _.ÿ\.œjwÚ/¤t².õ¢ */
- $"B2D4 176F 97E4 CE9E B576 C3E0 0F3D ECB9" /* ²Ô.o—äΞµvÃà.=ì¹ */
- $"7B35 DEBB 5ABA 9738 36F8 524D 74D8 08FF" /* {5Þ»Zº—86øRMtØ.ÿ */
- $"29A7 9B08 5B43 7C17 FB53 234E 4806 B0C3" /* )§›.[C|.ûS#NH.°Ã */
- $"AF3A FF38 CCAF FEAA C60F D103 32AC 7D7F" /* ¯:ÿ8̯þªÆ.Ñ.2¬}. */
- $"D2B8 51C1 7B7D 56FD 7CFB D2B5 C55B 7C7D" /* Ò¸QÁ{}Vý|ûÒµÅ[|} */
- $"7D30 10C2 4181 3358 5DD6 4625 4FFC EA30" /* }0.ÂA3X]ÖF%Oüê0 */
- $"3402 194F 6D0B 53D8 3C64 54AE E8DA 7874" /* 4..Om.SØ<dT®èÚxt */
- $"7FF1 DE25 3147 0AF0 D5B6 7BF7 88DD 5199" /* .ñÞ%1GÂðÕ¶{÷ˆÝQ™ */
- $"611E 526D B6DB 6DB6 DB69 9C6E 7A40 821D" /* a.Rm¶Ûm¶Ûiœnz@‚. */
- $"4416 6952 04BB 9C0A F19B 2C62 E698 A4F5" /* D.iR.»œÂñ›,b昤õ */
- $"9B83 3C59 8217 0000 0034 8080 DB92 4924" /* ›ƒ<Y‚....4€€Û’I$ */
- $"9249 247D 32D0 9B20 73FF 7E44 A49A 44BB" /* ’I$}2Л sÿ~D¤šD» */
- $"EB45 3E31 A4A0 C0CC BBC0 B29E 7771 4FDE" /* ëE>1¤ ÀÌ»À²žwqOÞ */
- $"1679 23F1 DE12 5574 68E3 60A1 9C00 CBEC" /* .y#ñÞ.Uthã`¡œ.Ëì */
- $"9C44 9009 0000 08DE 28C3 2776 AAA2 829A" /* œDÆ...Þ(Ã'vª¢‚š */
- $"05E0 47E9 0001 48A9 672C 0775 EE58 F075" /* .àGé..H©g,.uîXðu */
- $"7458 B48A 5455 DB33 3524 BE73 1D7C E223" /* tX´ŠTUÛ35$¾s.|â# */
- $"4EC4 732C EC4B 128D 341C 790C 00A2 1309" /* NÄs,ìK.4.y..¢.Æ */
- $"2D0B 5EA7 B07B C82C 976B 68C2 642A F095" /* -.^§°{È,—khÂd*ð• */
- $"A1C4 010E C94E D8A9 34BB FD3E 2B2F 92EC" /* ¡Ä..ÉNØ©4»ý>+/’ì */
- $"30E1 A7B3 040B C920 3FFF 7FA1 317B 90F7" /* 0á§³..É ?ÿ.¡1{÷ */
- $"C744 40B8 8325 4036 82FB 0C6C D800 19C4" /* ÇD@¸ƒ%@6‚û.lØ..Ä */
- $"2631 C4B8 3160 8649 2492 4924 9248 A747" /* &1ĸ1`†I$’I$’H§G */
- $"3D41 A17D 23A6 9AC7 9000 0000 0000 0000" /* =A¡}#¦šÇ....... */
- $"0000 0019 1A70 8823 BB21 7C62 4556 F257" /* .....pˆ#»!|bEVòW */
- $"62C0 CF0B 72EE F37E 64EC 43C2 AE04 9F58" /* bÀÏ.rîó~dìC®.ŸX */
- $"94DC E128 91EC BAA2 DADD 57A7 D5F7 1972" /* ”Üá(‘캢ÚÝW§Õ÷.r */
- $"7543 9A9A 0DB3 C3FD 42E0 19A3 8F45 7FDF" /* uCšš.³ÃýBà.£E.ß */
- $"CEB1 A7E5 8A09 5B4A F9E6 294B C5DC 80C9" /* α§åŠÆ[Jùæ)KÅÜ€É */
- $"9AEE 0729 374F 04FD 79D6 7170 D940 14F0" /* šî.)7O.ýyÖqpÙ@.ð */
- $"830F 0B71 50E7 3C76 97AF 0F71 A32D DC5A" /* ƒ..qPç<v—¯.q£-ÜZ */
- $"28A9 FE90 6CC0 9484 30D1 FCCD 4991 0758" /* (©þlÀ”„0ÑüÍI‘.X */
- $"BE36 B1DE 3A2E B6F8 2756 C568 2A7F D038" /* ¾6±Þ:.¶ø'VÅh*.Ð8 */
- $"2397 6E8F 32E0 C1AC 3736 32A3 C18E 13C4" /* #—n2àÁ¬762£ÁŽ.Ä */
- $"D298 8703 F9AF E24B A630 0627 6E63 ED70" /* Ò˜‡.ù¯âK¦0.'ncíp */
- $"0662 A833 6515 7225 C79D 8C1F 7410 45BF" /* .b¨3e.r%ÇŒ.t.E¿ */
- $"5019 F088 7C6C 43FC AE88 B794 5847 505F" /* P.ðˆ|lCü®ˆ·”XGP_ */
- $"2B73 6E58 E20E 18A2 01B4 DF7F F5BD D4BC" /* +snXâ..¢.´ß.õ½Ô¼ */
- $"B259 706B 754E 9740 BBF2 54FC FCB8 B293" /* ²YpkuN—@»òTüü¸²“ */
- $"4CEA 3670 D04B 8C42 B7C2 314D 1F53 956B" /* Lê6pÐKŒB·Â1M.S•k */
- $"CB14 9D05 8288 E7F0 D4FF 70AE EFB7 A10B" /* Ë..‚ˆçðÔÿp®ï·¡. */
- $"EDDE 3CFE 1B9D 7DBA 7B7D BD13 DF6F 45B8" /* íÞ<þ.}º{}½.ßoE¸ */
- $"FE1A 077D B444 FAB6 46FB 75FC E8AB DECC" /* þ..}´Dú¶Fûuüè«ÞÌ */
- $"AF0D 6C8A C695 8734 8A7A 5A21 F65D 05F6" /* ¯.lŠÆ•‡4ŠzZ!ö].ö */
- $"A417 27AC 998E 3646 07A8 0055 19DC B524" /* ¤.'¬™Ž6F.¨.U.ܵ$ */
- $"D2F2 842C DF9F BECA C26B C9C9 D0FD CA3B" /* Òò„,ߟ¾ÊÂkÉÉÐýÊ; */
- $"DB1B 3F81 F6A7 4465 001E 5552 4D0D 3BF3" /* Û.?ö§De..URM.;ó */
- $"0140 A2E9 7D63 8456 F9C7 665D F7FC 2DBF" /* .@¢é}c„VùÇf]÷ü-¿ */
- $"1B41 0667 7939 1B16 4997 5584 3CFE 81B9" /* .A.gy9..I—U„<þ¹ */
- $"C4A8 B346 EC6D E726 2560 5CB8 8B84 7699" /* Ĩ³Fìmç&%`\¸‹„v™ */
- $"3999 2CA0 91D9 A05A C96C 660C 267B 74A0" /* 9™, ‘Ù ZÉlf.&{t  */
- $"B935 73EB D464 D860 2694 7584 A4D4 DC52" /* ¹5sëÔdØ`&”u„¤ÔÜR */
- $"D136 D49A 1BEA 53F5 AE2F C19E 44E9 BA0A" /* Ñ6Ôš.êSõ®/ÁžDéºÂ */
- $"5D83 6587 7792 3DCB 449A B33E 4632 A395" /* ]ƒe‡w’=ËDš³>F2£• */
- $"57A3 0EC0 B3A3 969D 9DF0 6ACC 859F FF7F" /* W£.À³£–ðjÌ…Ÿÿ. */
- $"FF27 DAA0 AF8E 216C E5D8 874A 530F 555E" /* ÿ'Ú ¯Ž!l娇JS.U^ */
- $"AF3F E231 5BAF F7B6 8E73 5742 2717 4031" /* ¯?â1[¯÷¶ŽsWB'.@1 */
- $"175D 5FDA F402 B756 AEAE 7E7E BFEE CE68" /* .]_Úô.·V®®~~¿îÎh */
- $"7878 870D 01C2 C2A4 61D5 64E3 E195 B914" /* xx‡..¤aÕdãᕹ. */
- $"A45F FF52 DC14 F5E9 E037 65E3 5477 62A5" /* ¤_ÿRÜ.õéà7eãTwb¥ */
- $"3EEC CA32 6558 5965 8B6E 3F13 9DB2 1361" /* >ìÊ2eXYe‹n?.².a */
- $"8426 9FD7 B329 4E75 FF1D 9B78 9735 4B1B" /* „&Ÿ×³)Nuÿ.›x—5K. */
- $"D80E 1781 192F 6777 8F94 F6A2 5016 726D" /* Ø.../gw”ö¢P.rm */
- $"1E0D D2CB 6F87 B3C6 09A2 1FE3 915E 8943" /* ..ÒËo‡³ÆÆ¢.ã‘^‰C */
- $"FE6C 6743 4733 D5BC A9DD 5338 C9E1 AF50" /* þlgCG3Õ¼©ÝS8Éá¯P */
- $"3634 C26C 0C1F 94E7 50B2 4310 DD62 4F09" /* 64Âl..”çP²C.ÝbOÆ */
- $"ABCD 7821 8B7B 7B87 2EEA 25A1 9D3C 55CC" /* «Íx!‹{{‡.ê%¡<UÌ */
- $"0644 1B14 3456 2E32 C013 815C 66C7 0526" /* .D..4V.2À.\fÇ.& */
- $"E24D CE15 B8FB 5D8B 0506 E30A 1D6A E2ED" /* âMÎ.¸û]‹..ãÂ.jâí */
- $"6145 D124 0EC9 1FAB 4E50 06C2 9DA5 8F6C" /* aEÑ$.É.«NP.Â¥l */
- $"C072 D11E BFEE DFE6 F6C7 12F4 E89C 35B7" /* ÀrÑ.¿îßæöÇ.ôèœ5· */
- $"097E 2E25 393F CEA3 03C6 D3C7 DED5 3882" /* Æ~.%9?Σ.ÆÓÇÞÕ8‚ */
- $"ED26 A3FD 9130 95B5 F3FA D31A 691F 8E09" /* í&£ý‘0•µóúÓ.i.ŽÆ */
- $"BFA8 7D7B 85BD B179 5C20 2855 1268 F9AF" /* ¿¨}{…½±y\ (U.hù¯ */
- $"553D 939E 6FC6 C67E 4611 F88C BBD4 773C" /* U=“žoÆÆ~F.øŒ»Ôw< */
- $"5F16 D598 D5C5 E649 B66E FD8D A2D7 9807" /* _.Õ˜ÕÅæI¶ný¢×˜. */
- $"EDA2 4621 2CF5 DDE3 C078 6455 1C29 3A07" /* í¢F!,õÝãÀxdU.):. */
- $"E992 C5DE 8D33 041B 83C6 56F6 7C95 168E" /* é’ÅÞ3..ƒÆVö|•.Ž */
- $"6127 40D2 DE11 CFF2 3379 DC22 20E3 5E1B" /* a'@ÒÞ.Ïò3yÜ" ã^. */
- $"DE83 DBB5 5B8A 8572 3DF2 2890 DC56 BE6E" /* ÞƒÛµ[Š…r=ò(ÜV¾n */
- $"D15F 9396 ECD4 725F 2E18 7616 394A 64C3" /* Ñ_“–ìÔr_..v.9Jdà */
- $"FDAA E6F2 3D6D 46BC B270 5B8F ACB4 9CAE" /* ýªæò=mF¼²p[¬´œ® */
- $"0D0D 3F29 6A02 1E92 347A E406 A52D 111A" /* ..?)j..’4zä.¥-.. */
- $"2E79 0340 1D82 C861 0C40 1963 3397 A4FD" /* .y.@.‚Èa.@.c3—¤ý */
- $"A998 0B63 E30A 7AA3 A5BC 8A8E 9CD0 4795" /* ©˜.cãÂz£¥¼ŠŽœÐG• */
- $"7538 7FB2 EC9A 952C CE29 C80F 369C 4E8D" /* u8.²ìš•,Î)È.6œN */
- $"8000 1C55 D5F3 E2AD 812E 4FAA AC2C D9BB" /* €..UÕóâ­.Oª¬,Ù» */
- $"F4CD 5568 5643 826F 3A38 91BD 6F70 92D3" /* ôÍUhVC‚o:8‘½op’Ó */
- $"23EC DB91 0FC4 C3BB 7542 023B 85F0 36C3" /* #ìÛ‘.ÄûuB.;…ð6à */
- $"8BF6 F6F8 4E77 EEE5 851F 219A CF99 7D9E" /* ‹ööøNwîå….!šÏ™}ž */
- $"856D A687 BC63 8E39 0407 B007 D184 10BD" /* …m¦‡¼cŽ9..°.Ñ„.½ */
- $"D9EF ACB1 B75A 46FA F95E 42DF 377B E2F7" /* Ùבּ·ZFúù^Bß7{â÷ */
- $"BEF2 357A 861C F486 B3F7 57E1 D39B 095B" /* ¾ò5z†.ô†³÷WáÓ›Æ[ */
- $"40C0 925C 0CA1 7885 CFEA 48B7 33E9 E8DE" /* @À’\.¡x…ÏêH·3éèÞ */
- $"D178 1E15 91D1 F6C5 BC87 CB7E CCC6 DEDE" /* Ñx..‘Ñöż‡Ë~ÌÆÞÞ */
- $"B017 A4C1 0B0F DD17 660E CB97 C098 C773" /* °.¤Á..Ý.f.Ë—À˜Çs */
- $"8A0A F4DB 59BD A218 055E 5348 05D8 B304" /* ŠÂôÛY½¢..^SH.س. */
- $"9F23 E1B1 0754 6DA2 FF33 34CB 2B12 7114" /* Ÿ#á±.Tm¢ÿ34Ë+.q. */
- $"62D2 4CA8 8091 CD34 8467 2752 B77A AA5B" /* bÒL¨€‘Í4„g'R·zª[ */
- $"15FC 2E56 7A29 9351 B6A4 AEE5 B56D 354D" /* .ü.Vz)“Q¶¤®åµm5M */
- $"3ED2 FA71 25E9 F887 B187 BADB B11B 2E01" /* >Òúq%éø‡±‡ºÛ±... */
- $"93B3 4206 45ED 7238 3F80 1441 50CA CCBA" /* “³B.Eír8?€.APÊ̺ */
- $"EF59 3BC5 4236 2ABF 9150 7335 49C5 0216" /* ïY;ÅB6*¿‘Ps5IÅ.. */
- $"F97B D5A5 1EF5 A69D 8B34 C25B 73E1 DA52" /* ù{Õ¥.õ¦‹4Â[sáÚR */
- $"79E5 9EB1 9CB1 0952 B3F5 E221 D426 4759" /* yåž±œ±ÆR³õâ!Ô&GY */
- $"D5CF 2D18 CC2A 270A 859D F10C 8108 52FF" /* ÕÏ-.Ì*'Â…ñ..Rÿ */
- $"2A7D D39E EFFD 568C 2DB3 7BD5 62D0 2403" /* *}ÓžïýVŒ-³{ÕbÐ$. */
- $"69D1 A4B6 2D24 E485 973D F6A5 E6DC 1DB5" /* iѤ¶-$ä…—=ö¥æÜ.µ */
- $"BF0B E185 5592 E3A0 6046 E050 5151 9546" /* ¿.á…U’ã `FàPQQ•F */
- $"17F7 0CF6 222F 17E0 40E5 3EF5 74EE BAB6" /* .÷.ö"/.à@å>õt */
- $"55BD 76C1 DD80 39C8 BAE0 37B8 398A B370" /* U½vÁÝ€9Ⱥà7¸9гp */
- $"D400 0C29 5DC9 94FF 069B 36E2 CD79 195F" /* Ô..)]É”ÿ.›6âÍy._ */
- $"5B9B 1237 1F18 C560 C901 F9A4 184B 7570" /* [›.7..Å`É.ù¤.Kup */
- $"433E 75BE 0297 C641 7D9B 7092 8D64 96F5" /* C>u¾.—ÆA}›p’d–õ */
- $"D70C 9B66 71D3 09B1 F635 0FC3 0B49 7D6E" /* ×.›fqÓÆ±ö5.Ã.I}n */
- $"660C 8E1D 0257 672B 97EE C2A5 7B84 729E" /* f.Ž..Wg+—îÂ¥{„rž */
- $"6516 585E 354F 2E22 88A7 A515 B945 3745" /* e.X^5O."ˆ§¥.¹E7E */
- $"F6A5 5CB2 E212 10AD AB6F 07F5 FDA3 09EB" /* ö¥\²â..­«o.õý£Æë */
- $"A053 313B 9A8E 757D E132 D483 DC78 0882" /*  S1;šŽu}á2ÔƒÜx.‚ */
- $"A63C 95E0 036C 4626 F66B 5F6C 39A1 9401" /* ¦<•à.lF&ök_l9¡”. */
- $"7276 4DCE 4487 7D8C 12A3 B713 9139 AC0A" /* rvMÎD‡}Œ.£·.‘9¬Â */
- $"18AD 4DFD 2A3D 69E7 E76E 593C 8DAB FD56" /* .­Mý*=iççnY<«ýV */
- $"F959 BA6B FBA3 2853 D610 4DB0 7A30 3A09" /* ùYºkû£(SÖ.M°z0:Æ */
- $"916B DFF7 B3B4 F8D3 9619 0FD9 8FBC FC6B" /* ‘kß÷³´øÓ–..Ù¼ük */
- $"D73D ABD2 4C41 6AD0 6584 AF19 3074 AF6E" /* ×=«ÒLAjÐe„¯.0t¯n */
- $"369C BEB1 76D5 D311 6172 F157 D522 DDED" /* 6œ¾±vÕÓ.arñWÕ"Ýí */
- $"D4ED 0230 0BB5 E881 0E6B 9C4F 111F 4F6E" /* Ôí.0.µè.kœO..On */
- $"7CAD 4745 7BBF DA70 A9C4 051E FDEA 206C" /* |­GE{¿Úp©Ä..ýê l */
- $"9983 0E2D 4A4A A4DE 82E9 DAAF 5748 37AE" /* ™ƒ.-JJ¤Þ‚éÚ¯WH7® */
- $"4046 DCCB 0D1A 80DA 1804 20E2 F7CF AD69" /* @FÜË..€Ú.. â÷Ï­i */
- $"F9D8 5106 D02D 16E9 4437 9560 B618 1126" /* ùØQ.Ð-.éD7•`¶..& */
- $"95A2 4B23 89C4 78EE 898E D80C 8E49 5201" /* •¢K#‰ÄxØ.ŽIR. */
- $"2095 ABAF 9CA5 0F8E CB22 00D4 4289 59B3" /* •«¯œ¥.ŽË".ÔB‰Y³ */
- $"1835 1395 8AE5 3A88 7185 E7DD 57F3 4CE4" /* .5.•Šå:ˆq…çÝWóLä */
- $"1465 C878 6B72 7146 2AF1 F053 5B31 7697" /* .eÈxkrqF*ñðS[1v— */
- $"7300 A777 3919 099E BD1C 79C3 24C4 A355" /* s.§w9.Æž½.yÃ$Ä£U */
- $"0C88 C727 1831 D498 E513 47A5 F25F DDBE" /* .ˆÇ'.1Ô˜å.G¥ò_ݾ */
- $"46E7 40B5 EBCC 080F 6915 3FDF EDB9 A9B1" /* Fç@µëÌ..i.?ßí¹©± */
- $"39ED D794 60E1 A5A2 0EEC 7A09 46BF 201E" /* 9í×”`ᥢ.ìzÆF¿ . */
- $"311F EEEE 88EF C6C1 C10D E238 50C9 7F01" /* 1.îîˆïÆÁÁ.â8PÉ.. */
- $"DFF1 17BA D8F4 0017 47E7 75F2 4D82 679E" /* ßñ.ºØô..GçuòM‚gž */
- $"6867 60A4 6222 77B9 319B 186D FCB3 168A" /* hg`¤b"w¹1›.mü³.Š */
- $"EAF3 C227 1082 D7ED 2C70 E619 8676 0186" /* êóÂ'.‚×í,pæ.†v.† */
- $"8C23 5DE5 D4A0 61CB CDE4 AED5 E008 6F3C" /* Œ#]åÔ aËÍä®Õà.o< */
- $"D894 AC14 6FEC 5D4C C2FF 3A6C 512F E475" /* Ø”¬.oì]LÂÿ:lQ/äu */
- $"FCB8 DFA4 EB46 2DF4 E133 5858 364B 54E1" /* ü¸ß¤ëF-ôá3XX6KTá */
- $"A6E1 5D0C 157E D987 DF95 B1FB 3723 4F2F" /* ¦á]..~هߕ±û7#O/ */
- $"C9BF C6D4 D979 412E D0EB B285 8DFF 7CAC" /* É¿ÆÔÙyA.Ðë²…ÿ|¬ */
- $"F1BF 1825 8B89 9992 3848 C666 4184 4906" /* ñ¿.%‹‰™’8HÆfA„I. */
- $"0D61 6B58 9355 A5D9 C940 B6F2 6918 82E1" /* .akX“U¥ÙÉ@¶òi.‚á */
- $"FF7D 4F5F FE94 5208 650B B780 0D2B DD4F" /* ÿ}O_þ”R.e.·€.+ÝO */
- $"5874 3627 2353 6328 06B9 908C 6C95 D898" /* Xt6'#Sc(.¹Œl•ؘ */
- $"8C24 1D0F 641B 7763 CFBE E88A BB05 8639" /* Œ$..d.wcϾ芻.†9 */
- $"D91C 4A38 3A3F 75C6 61BD BFED CA10 2A73" /* Ù.J8:?uÆa½¿íÊ.*s */
- $"E3C5 E85C BF5B 0346 2105 4286 300D D812" /* ãÅè\¿[.F!.B†0.Ø. */
- $"8BE4 DAE4 292B A765 338E 7E42 50F1 8046" /* ‹äÚä)+§e3Ž~BPñ€F */
- $"3FDC 1A85 4616 61E5 7321 18D9 5AB9 8903" /* ?Ü.…F.aås!.ÙZ¹‰. */
- $"90BD 6F89 E7D0 35D1 0AA3 BBAE 3CF8 A7B7" /* ½o‰çÐ5Ñ£»®<ø§· */
- $"73C8 8B94 B409 16EC 60A6 E819 BCA7 BA66" /* sÈ‹”´Æ.ì`¦è.¼§ºf */
- $"2245 524C 718C 635D E4F7 ACA0 02C3 E0A7" /* "ERLqŒc]ä÷¬ .Ãà§ */
- $"B542 0FF5 7029 FF4D 1D88 E3B3 D657 802B" /* µB.õp)ÿM.ˆã³ÖW€+ */
- $"8068 9BD4 B17F 9A6B CC1C 4B53 246F 81E5" /* €h›Ô±.škÌ.KS$oå */
- $"9168 48EC 4B44 3FFF 7B8B 5777 5677 134E" /* ‘hHìKD?ÿ{‹WwVw.N */
- $"1B8E 8C91 429F CE85 86EF 62B4 71AF EAE7" /* .ŽŒ‘BŸÎ…†ïb´q¯êç */
- $"E333 7BD3 2825 7230 C950 0000 1B8D 8BA6" /* ã3{Ó(%r0ÉP...‹¦ */
- $"04C1 56DC 30F0 619E DD6C D196 C91E 1ED4" /* .ÁVÜ0ðažÝlÑ–É..Ô */
- $"1285 94A8 F775 05A9 3440 78FF 7E52 8833" /* .…”¨÷u.©4@xÿ~Rˆ3 */
- $"E8A1 A4E4 4580 38DD ADE1 3BD5 AD19 74E6" /* 衤äE€8Ý­á;Õ­.tæ */
- $"EEA1 B4B1 0B0B 9BE9 08EC DB78 E6AA 37E5" /* î¡´±..›é.ìÛxæª7å */
- $"AD06 72A6 51FC 0004 4737 BF1A 89FF 7E11" /* ­.r¦Qü..G7¿.‰ÿ~. */
- $"0A68 EAD7 BDA5 4D5B 2C8D 0C7A 952E 2190" /* Âhê×½¥M[,.z•.! */
- $"8451 1B38 CEFD 2835 5ADD BDA2 01C2 A3D6" /* „Q.8Îý(5Zݽ¢.壅 */
- $"6046 4BD8 41DF D8B6 D9B1 1F96 5FF8 CC56" /* `FKØAߨ¶Ù±.–_øÌV */
- $"A63B 6E14 5035 26D6 946D 1F59 4D17 5507" /* ¦;n.P5&Ö”m.YM.U. */
- $"85F7 2DAF A737 4E30 9097 2E2E DAF8 37D1" /* …÷-¯§7N0—..Úø7Ñ */
- $"D987 4E59 ABFD CDF3 AAC3 30D1 8616 FAB3" /* Ù‡NY«ýÍóªÃ0ц.ú³ */
- $"2914 92AA 6913 C36F 66DA 4B0B 18FE DD55" /* ).’ªi.ÃofÚK..þÝU */
- $"1D2A 3F00 D80C 2423 D923 95C6 E11D 0069" /* .*?.Ø.$#Ù#•Æá..i */
- $"B5C9 0803 0907 B950 13DF 48EC F794 3D36" /* µÉ..Æ.¹P.ßHì÷”=6 */
- $"5249 2492 4924 9249 2489 9EF6 DC36 9A6B" /* RI$’I$’I$‰žöÜ6šk */
- $"1751 415E A37F 47EC A4EA 67AC A222 733C" /* .QA^£.Gì¤êg¬¢"s< */
- $"467D 1FFE C727 E6AA 6E99 C584 A87E DFFF" /* F}.þÇ'æªn™Å„¨~ßÿ */
- $"7FC3 7592 8204 71A2 6088 C38B 6E65 868E" /* .Ãu’‚.q¢`ˆÃ‹ne†Ž */
- $"5A3F FF7F F919 4069 CF10 A302 5125 525C" /* Z?ÿ.ù.@iÏ.£.Q%R\ */
- $"A443 88AF 4104 7807 1410 84BA E955 76E8" /* ¤Cˆ¯A.x...„ºéUvè */
- $"5F35 B612 A668 5694 9249 2492 4924 9249" /* _5¶.¦hV”’I$’I$’I */
- $"2492 4924 4C25 1941 A4EB 1996 7A28 19C1" /* $’I$L%.A¤ë.–z(.Á */
- $"A1B0 01D7 ACB2 3F83 42DC D154 27C9 F11F" /* ¡°.׬²?ƒBÜÑT'Éñ. */
- $"FC46 90B1 89C4 F78A 4C6F 5C2A 833D 8425" /* üF±‰Ä÷ŠLo\*ƒ=„% */
- $"D837 CA14 E4C7 7F8A 9833 99B7 E589 1376" /* Ø7Ê.äÇ.Š˜3™·å‰.v */
- $"C867 FF1D 200A 4C9B 624E 68E3 11AE C8AF" /* Ègÿ. ÂL›bNhã.®È¯ */
- $"1723 C741 CEAC 16CE C548 72FF 15CD 3E67" /* .#ÇAά.ÎÅHrÿ.Í>g */
- $"AF2C 323F 0FD0 6752 4973 55BD CC10 05B4" /* ¯,2?.ÐgRIsU½Ì..´ */
- $"AB3F 9302 00C3 EE70 1BA4 B650 FAB2 5821" /* «?“..Ãîp.¤¶Pú²X! */
- $"3856 3872 1B02 7D70 F1F9 0B28 A9DC CAE7" /* 8V8r..}pñù.(©ÜÊç */
- $"D9E7 6252 A768 A7DE 0FB1 FCB1 F54B 98C4" /* ÙçbR§h§Þ.±ü±õK˜Ä */
- $"7B6E 5E24 BC53 F945 741F 66A0 A51E EE5A" /* {n^$¼SùEt.f ¥.îZ */
- $"2A0D B951 4EEE A88B 4F2F C326 F326 1D12" /* *.¹QNO/Ã&ó&.. */
- $"524A 9E48 CC53 44EF C54F 1737 8505 46CF" /* RJžHÌSDïÅO.7….FÏ */
- $"351E 4354 05C7 C832 2A7D 8899 D009 E617" /* 5.CT.ÇÈ2*}ˆ™ÐÆæ. */
- $"0334 305D 9497 D845 E6D3 2CD2 178F 1316" /* .40]”—ØEæÓ,Ò... */
- $"65AD 239E 2ED5 ECCB 402A E728 09B5 E847" /* e­#ž.ÕìË@*ç(ƵèG */
- $"65BD 3F31 CAC5 F9D8 6606 B8AF 4F84 89FE" /* e½?1ÊÅùØf.¸¯O„‰þ */
- $"9004 4730 30BC E58F 5FB3 38CF 36B9 38FC" /* .G00¼å_³8Ï6¹8ü */
- $"FB9D 07EA D13F 9DB9 7185 0E88 0E3B 06E5" /* û.êÑ?¹q….ˆ.;.å */
- $"D476 CFCA 1587 3067 9257 B5DF 1E83 E7FF" /* ÔvÏÊ.‡0g’Wµß.ƒçÿ */
- $"7FFF 7FFF 0E68 E181 AC15 B980 2AFB 1D80" /* .ÿ.ÿ.há¬.¹€*û.€ */
- $"C5BB A88D E36A 4DC5 94CF 6DB2 0694 F977" /* Å»¨ãjMÅ”Ïm².”ùw */
- $"D708 02D1 F380 6773 016A CA84 3B1C 6A33" /* ×..Ñó€gs.jÊ„;.j3 */
- $"5AAC BA2D FEC5 7542 51FC 68D0 CDDD EA44" /* Z¬º-þÅuBQühÐÍÝêD */
- $"788E 2F96 D80C F159 FF45 3316 1494 A7F5" /* xŽ/–Ø.ñYÿE3..”§õ */
- $"98B4 FC39 0062 D59B 52A6 32CB F97C ABD6" /* ˜´ü9.bÕ›R¦2Ëù|«Ö */
- $"42AE AE46 6AA7 D986 0A4E DCDD 717E 8B7C" /* B®®Fj§Ù†ÂNÜÝq~‹| */
- $"8FB8 B396 65A6 83FF 6A4A A5C1 597F 70AF" /* ¸³–e¦ƒÿjJ¥ÁY.p¯ */
- $"DC96 E2EC 0C1D 7A00 3428 2C60 DE32 8DB8" /* Ü–âì..z.4(,`Þ2¸ */
- $"1604 C249 5E82 1F5B 6C23 E562 B2D4 754E" /* ..ÂI^‚.[l#åb²ÔuN */
- $"7F73 442A 25D3 C42A 6A6D 5D09 0E8C 2E67" /* .sD*%ÓÄ*jm]Æ.Œ.g */
- $"95EC 08FE B505 8B5A A4A8 0000 0000 0000" /* •ì.þµ.‹Z¤¨...... */
- $"0000 0000 6121 26B3 27C3 AEC0 FF52 2FEE" /* ....a!&³'îÀÿR/î */
- $"D4F3 92BB 06E2 ABE4 35DC A278 9084 B2F0" /* Ôó’».â«ä5Ü¢x„²ð */
- $"EE1A ADB2 F770 3D4E 120A FD01 B042 CD00" /* î.­²÷p=N.Âý.°BÍ. */
- $"B9C2 B661 40B0 E5FC DC59 59F0 61C5 53A7" /* ¹Â¶a@°åüÜYYðaÅS§ */
- $"7AC1 7EDC 77B7 1C84 0F9A E321 389C E693" /* zÁ~Üw·.„.šã!8œæ“ */
- $"AC98 5160 DDD0 C9A9 BE17 ED52 A10A 300C" /* ¬˜Q`ÝÐÉ©¾.íR¡Â0. */
- $"88ED BB5A 80DA C23B 1196 0C7C 6BA8 D4EA" /* ˆí»Z€ÚÂ;.–.|k¨Ôê */
- $"4FAB 08A9 EBE3 1CC9 6782 F6A9 85A4 1829" /* O«.©ëã.Ég‚ö©…¤.) */
- $"48BB D188 41E8 65BA 28BB 8AC1 8368 DC2F" /* H»ÑˆAèeº(»ŠÁƒhÜ/ */
- $"B2DE 61FE 95C0 BD88 C027 9CD9 3819 8A81" /* ²Þaþ•À½ˆÀ'œÙ8.Š */
- $"20FF 616C DEAE C6EA 15A3 D12F 764A B4E2" /* ÿalÞ®Æê.£Ñ/vJ´â */
- $"ECA3 AF32 36FF 29B0 E3CD 5046 527E 39B7" /* 죯26ÿ)°ãÍPFR~9· */
- $"921A ABF8 F0CB 7040 5FCD A182 4C57 986D" /* ’.«øðËp@_Í¡‚LW˜m */
- $"1115 DD94 687C 3663 7CFB 6C40 642D C8CA" /* ..Ý”h|6c|ûl@d-ÈÊ */
- $"1117 B5A9 8025 123D 9406 58F9 96B5 321E" /* ..µ©€%.=”.Xù–µ2. */
- $"7646 4BFD 48DE 0B9B DBEF B79F B6C7 031E" /* vFKýHÞ.›Ûï·Ÿ¶Ç.. */
- $"1D3B 1D18 B35D 2813 5601 3924 6AE1 FC21" /* .;..³](.V.9$jáü! */
- $"60B9 0B9F 6B4B AFB9 15D8 C57A 5345 7461" /* `¹.ŸkK¯¹.ØÅzSEta */
- $"0EF9 4B6B 88D1 7833 02DF 4FB8 DBEC 836A" /* .ùKkˆÑx3.ßO¸Ûìƒj */
- $"BEA7 3972 93C0 F973 37B5 C84F 1655 031C" /* ¾§9r“Àùs7µÈO.U.. */
- $"674D 741E 308E E3BA 6684 5BB0 4506 AB40" /* gMt.0Žãºf„[°E.«@ */
- $"14DE BFF2 9B38 4026 C5C2 3A44 FDFF 25CB" /* .Þ¿ò›8@&ÅÂ:Dýÿ%Ë */
- $"072E 1D99 62E3 22B8 DE8D 9CF1 79FA 1D38" /* ...™bã"¸Þœñyú.8 */
- $"8900 17CB A72B 8124 7EAF CF2F FC8D 34D6" /* ‰..˧+$~¯Ï/ü4Ö */
- $"E0AC 58ED 8BC1 0DAA 7964 FB91 BF08 EFA6" /* à¬Xí‹Á.ªydû‘¿.ï¦ */
- $"42FF 7FFF 7FE3 AF13 7C4B 1CF4 D643 3CD3" /* Bÿ.ÿ.ã¯.|K.ôÖC<Ó */
- $"5F1A 08BB 7C56 5CFB 6D27 04DE C66A 9AF1" /* _..»|V\ûm'.ÞÆjšñ */
- $"2053 D4B2 EE60 44FF 2A89 1FFC DFCC 57C1" /* SÔ²î`Dÿ*‰.üßÌWÁ */
- $"3800 1290 7854 7902 FF7A 9A36 D71E F8D1" /* 8..xTy.ÿzš6×.øÑ */
- $"D439 471B D02F 4A39 E5BC D25F FDF0 8B54" /* Ô9G.Ð/J9å¼Ò_ýð‹T */
- $"AE0A 3677 2625 B286 7DEC 8FF7 2457 2B25" /* ®Â6w&%²†}ì÷$W+% */
- $"C066 2A4E A605 EE16 7244 CCFD D3D3 FDA1" /* Àf*N¦.î.rDÌýÓÓý¡ */
- $"F3B8 76C3 1C5F 491C 0165 8735 D71D 19AD" /* ó¸vÃ._I..e‡5×..­ */
- $"9BB1 A40D E5BA 9D1C E34B B71C 9CF0 EC7A" /* ›±¤.åº.ãK·.œðìz */
- $"5E87 C4F0 A326 0913 9E2C 6517 50A3 E72B" /* ^‡Äð£&Æ.ž,e.P£ç+ */
- $"87FE D348 2E5D 0A00 0000 0000 0000 0000" /* ‡þÓH.]Â......... */
- $"0002 2C86 A73D 4030 2FE4 D32C 2B56 C74C" /* ..,†§=@0/äÓ,+VÇL */
- $"0869 A5C9 151A 69B9 9390 DA50 4411 8FFF" /* .i¥É..i¹“ÚPD.ÿ */
- $"4938 4E36 F9DD 09FB E4A0 C339 2431 ED8B" /* I8N6ùÝÆûä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FF4F E2A2 F01A C90F 02E3 51CD B477" /* #fÿOâ¢ð.É..ãQÍ´w */
- $"2230 690A B47C E28B 463C 2E88 7579 7943" /* "0i´|â‹F<.ˆuyyC */
- $"5055 6D0A EEC5 F3BF 2404 37D8 EFE1 71AC" /* PUmÂîÅó¿$.7Øïáq¬ */
- $"6AFE A3E4 A7EB 28BF BFFE 4373 E5FF 7E4A" /* jþ£ä§ë(¿¿þCsåÿ~J */
- $"2D5D 1ED3 6D78 1657 9914 A061 7958 972C" /* -].Ómx.W™. ayX—, */
- $"56FB D5B0 1FFD A18B 7A29 0C81 295B DF7C" /* VûÕ°.ý¡‹z).)[ß| */
- $"83E3 CD36 0E66 7E2B D8FA 3096 AA44 7F9B" /* ƒãÍ6.f~+Øú0–ªD.› */
- $"F0B9 EA48 8CC7 0FFF 7E1C F394 CC5B 6A25" /* ð¹êHŒÇ.ÿ~.ó”Ì[j% */
- $"FD4C CECC 630B 38B7 D621 F081 73EE 9D40" /* ýLÎÌc.8·Ö!ðsî@ */
- $"7FAD FADD 8111 6492 599E DD2C 3600 FF6C" /* .­úÝ.d’YžÝ,6.ÿl */
- $"5A8D B0B8 2AE7 668D C5A0 826B FA0D C5B1" /* Z°¸*çfÅ ‚kú.ű */
- $"6873 D749 B533 9627 C2F6 4922 63F7 8944" /* hs×Iµ3–'ÂöI"c÷‰D */
- $"15C5 A1F9 8539 A21A 1CEB 1C2D 7D1B 0516" /* .Å¡ù…9¢..ë.-}... */
- $"FD6C 5D4F 92A3 14D9 126F C5FC 4116 B499" /* ýl]O’£.Ù.oÅüA.´™ */
- $"D878 D889 9123 D3C8 4637 36E3 8644 6F0B" /* Øx؉‘#ÓÈF76ã†Do. */
- $"D2C6 A599 B793 1367 B548 23BD 8836 11E5" /* ÒÆ¥™·“.gµH#½ˆ6.å */
- $"C323 7AD5 0534 3D05 A4E6 70B3 0376 2B0C" /* Ã#zÕ.4=.¤æp³.v+. */
- $"A964 173B F0BC 2A52 7FE4 2A53 85C2 22B2" /* ©d.;ð¼*R.ä*S…Â"² */
- $"B83F 7185 FB4C 3769 5B3E 4A24 E7E1 D0FD" /* ¸?q…ûL7i[>J$çáÐý */
- $"9B17 8737 FE8B E4C7 9FC1 0E30 D904 D0C5" /* ›.‡7þ‹äÇŸÁ.0Ù.ÐÅ */
- $"D2F5 05E4 3CD6 5FA7 B9AF FB98 755E 0BAF" /* Òõ.ä<Ö_§¹¯û˜u^.¯ */
- $"E4EE 408D A8BE 5E58 07A6 059D 1B33 37F3" /* äî@¨¾^X.¦..37ó */
- $"8D14 871A 7FC6 43ED 6A6F 8F41 9681 095E" /* .‡..ÆCíjoA–Æ^ */
- $"EE46 5BA4 1E15 F5F2 3063 E524 A62A 7C7F" /* îF[¤..õò0cå$¦*|. */
- $"0E38 5D00 A378 8F6D 3861 2088 EDD7 AC24" /* .8].£xm8a ˆí׬$ */
- $"D3B6 B052 DE10 357D B65A 1414 4596 8E3D" /* Ó¶°RÞ.5}¶Z..E–Ž= */
- $"97E3 D838 9ACC 3C84 AF82 EA8D 8BD3 0180" /* —ãØ8šÌ<„¯‚ê‹Ó.€ */
- $"1582 0654 BB61 1047 ACA1 29D3 7CFA 00C8" /* .‚.T»a.G¬¡)Ó|ú.È */
- $"BABC 146B 250C 8D19 8A4E A8B3 50D6 B986" /* º¼.k%..ŠN¨³PÖ¹† */
- $"2AD6 CEFA 02D6 AE11 FF7C B0A2 E6E0 30E9" /* *ÖÎú.Ö®.ÿ|°¢æà0é */
- $"D904 4C03 3BC1 8B68 5892 30B8 7D69 C2D6" /* Ù.L.;Á‹hX’0¸}iÂÖ */
- $"A9F8 56A2 7417 1E31 186F 09A1 4C11 6DCA" /* ©øV¢t..1.oÆ¡L.mÊ */
- $"A62E 5FCC F59A CCE8 6A29 B0DF E2BC E8BF" /* ¦._ÌõšÌèj)°ßâ¼è¿ */
- $"92DF 70C1 8B09 21DF 1440 1684 4413 2A60" /* ’ßpÁ‹Æ!ß.@.„D.*` */
- $"E033 6D92 8573 E63C 2746 6F40 D8F0 D0C9" /* à3m’…sæ<'Fo@ØðÐÉ */
- $"10AF 85A2 CFBF 373B B250 85E4 C1D3 85D2" /* .¯…¢Ï¿7;²P…äÁÓ…Ò */
- $"E167 1222 DF4A 67D9 B3D6 55B4 B047 8675" /* ág."ßJgÙ³ÖU´°G†u */
- $"C803 6AE5 E5AE AF92 C4B7 591A A040 98AC" /* È.jå宯’Ä·Y. @˜¬ */
- $"4412 45F8 BBC8 6482 F7BD 81B2 98FE 9D0B" /* D.Eø»Èd‚÷½²˜þ. */
- $"DAB1 2959 952C 9115 3504 9A24 BBA4 A04C" /* Ú±)Y•,‘.5.š$»¤ L */
- $"4125 5810 54F5 C268 63C2 1DB9 11CF 85BB" /* A%X.TõÂhcÂ.¹.Ï…» */
- $"D941 F5A1 0239 DED3 856D BBE5 7CF3 49C3" /* ÙAõ¡.9ÞÓ…m»å|óIà */
- $"C9CF 1BD1 A953 F58A F9AF E704 E70E 43B7" /* ÉÏ.Ñ©SõŠù¯ç.ç.C· */
- $"2B51 BE14 4FF3 262C 914B 90AF F2A9 E060" /* +Q¾.Oó&,‘K¯ò©à` */
- $"6A24 6553 B776 C48D 19AD ECD3 2DD3 8ECF" /* j$eS·vÄ.­ìÓ-ÓŽÏ */
- $"9EC7 8A0D 97F4 3C69 6E56 0881 1136 C147" /* žÇŠ.—ô<inV..6ÁG */
- $"E7D3 6FE5 A0C6 D7DC BCB0 76AC C4F8 DD65" /* çÓoå Æ×ܼ°v¬ÄøÝe */
- $"A5F9 02BF 2BFD 9A2C 354D 24C2 E088 6B63" /* ¥ù.¿+ýš,5M$Âàˆkc */
- $"E514 C014 E8F4 F5C2 B529 74FB EC02 032B" /* å.À.èôõµ)tûì..+ */
- $"A54B 696E B602 7D58 4542 824D BD8C 40FA" /* ¥Kin¶.}XEB‚M½Œ@ú */
- $"F675 5CD4 71C9 058E 7062 0E1B 10CC 72A9" /* öu\ÔqÉ.Žpb...Ìr© */
- $"95B8 C5FD 7EAF 995C 62ED DDE4 6579 3181" /* •¸Åý~¯™\bíÝäey1 */
- $"8BA1 A02B 1559 F5BC E9C9 914D 8CEB D7D8" /* ‹¡ +.Yõ¼éÉ‘MŒëר */
- $"7D81 20C0 A609 18D2 B679 7C08 FB00 E4C6" /* } À¦Æ.Ò¶y|.û.äÆ */
- $"2797 518E 32CE 67CE 3C8E 6796 A832 F712" /* '—QŽ2ÎgÎ<Žg–¨2÷. */
- $"0037 059C 96CD 85A0 98E6 5D20 05F2 EC61" /* .7.œ–Í… ˜æ] .òìa */
- $"335D AFFF 14BC 3EF9 0779 7A53 BAA4 F47A" /* 3]¯ÿ.¼>ù.yzSº¤ôz */
- $"6926 DAD2 72F9 5D4B 1014 8BD5 A4FA 68EA" /* i&ÚÒrù]K..‹Õ¤úhê */
- $"D9F9 F684 BFD5 F2ED FB9E 4C18 91C3 FF17" /* Ùùö„¿ÕòíûžL.‘Ãÿ. */
- $"2D17 D99A DE29 FE6E 63A4 C901 8642 9357" /* -.ÙšÞ)þnc¤É.†B“W */
- $"3120 4386 1938 E7D2 572D 0C59 E3C9 7FED" /* 1 C†.8çÒW-.YãÉ.í */
- $"30FA E54A CEF8 A94C F92D AF19 76EA 3372" /* 0úåJÎø©Lù-¯.vê3r */
- $"B4E1 E7C5 8239 A4AC A247 4838 55E8 EB9B" /* ´áçÅ‚9¤¬¢GH8Uèë› */
- $"DE7D 94E9 DBD7 07FB D488 1672 E61D 9E4C" /* Þ}”éÛ×.ûÔˆ.ræ.žL */
- $"6DF2 97D5 4936 F89A 5CBC D37A 8C2C F7ED" /* mò—ÕI6øš\¼ÓzŒ,÷í */
- $"9755 19F2 0350 AB2E D851 F0B7 78B5 9770" /* —U.ò.P«.ØQð·xµ—p */
- $"4DF3 4212 9C9C CA3B 403A BA7B D497 9410" /* MóB.œœÊ;@:º{Ô—”. */
- $"04C6 288B 5058 5DC9 EB79 AB85 622C 9A55" /* .Æ(‹PX]Éëy«…b,šU */
- $"2DA7 C113 9315 7CAE D84E 6B50 4062 AE94" /* -§Á.“.|®ØNkP@b®” */
- $"8F5E 7969 4BA5 56B2 E881 8C02 ED3B 5259" /* ^yiK¥V²èŒ.í;RY */
- $"24CE C98A 4348 12B1 314F E3E3 B6A3 4E61" /* $ÎÉŠCH.±1Oãã¶£Na */
- $"A426 6350 E380 B0B5 DEFF 64CF 72D6 D4B9" /* ¤&cP〰µÞÿdÏrÖÔ¹ */
- $"907C 9BE0 7E4D 39F9 2BB7 C3DE D7C3 DCD8" /* |›à~M9ù+·ÃÞ×ÃÜØ */
- $"1F93 775F 0F44 DF0F A717 C3E9 D603 F269" /* .“w_.Dß.§.ÃéÖ.òi */
- $"FBE1 D36F 87B3 6F87 B280 E8AB DECC AF0D" /* ûáÓo‡³o‡²€è«Þ̯. */
- $"6C8A C695 8734 87EB A75F 5130 05EC 9BA8" /* lŠÆ•‡4‡ë§_Q0.웨 */
- $"78DB 85A2 680C 75A0 EDD1 4AA2 7E1B BAFF" /* xÛ…¢h.u íÑJ¢~.ºÿ */
- $"5AFC FD6C 3E36 A6D9 923A 2DCE 24BC 35EF" /* Züýl>6¦Ù’:-Î$¼5ï */
- $"27F4 8813 7CC4 0141 3CD9 9568 BFE6 BBB3" /* 'ôˆ.|Ä.A<Ù•h¿æ»³ */
- $"219B 0442 5227 3796 635D 0DE7 499A A701" /* !›.BR'7–c].çIš§. */
- $"7F74 FB13 F9DF E737 08AB 0A91 3D9E B77D" /* .tû.ùßç7.«Â‘=ž·} */
- $"E616 57BB 8BAF 7A0D 1B28 42E6 D653 6BD3" /* æ.W»‹¯z..(BæÖSkÓ */
- $"D7A8 9A2B 0905 6198 8809 E5D0 D0A4 F589" /* רš+Æ.a˜ˆÆåÐФõ‰ */
- $"3D04 8161 C4CB 7BC9 96E2 9DA4 1C59 C982" /* =.aÄË{É–â¤.YÉ‚ */
- $"4705 B1BE 1E05 E391 5E89 43FE 6C67 4342" /* G.±¾..ã‘^‰CþlgCB */
- $"636F 80C5 6A98 16E6 6B80 27C8 D0D9 B28C" /* co€Åj˜.æk€'ÈÐÙ²Œ */
- $"6FD4 E109 61AB 8FCB D4CB 19ED 2BE7 B510" /* oÔáÆa«ËÔË.í+çµ. */
- $"C0E8 5883 0642 92A1 6094 7E45 5D3F 819A" /* ÀèXƒ.B’¡`”~E]?š */
- $"4B6F AE8E ED0B 4B30 ABB1 2789 5C58 EEFD" /* Ko®Ží.K0«±'‰\Xîý */
- $"06C9 EF2B 2A12 1731 7581 4428 C72D 2501" /* .Éï+*..1uD(Ç-%. */
- $"2C14 0DA4 2C98 035F FEA8 51A2 0E61 4C50" /* ,..¤,˜._þ¨Q¢.aLP */
- $"4A65 60DE FA1C F36C 62D9 A3FA 93A6 4CAC" /* Je`Þú.ólbÙ£ú“¦L¬ */
- $"C1D0 079D 912F A133 724B 13CC AFF4 1382" /* ÁÐ.‘/¡3rK.̯ô.‚ */
- $"D61F 8AF2 A48B CCA6 5D66 4F61 E6BE 657B" /* Ö.Šò¤‹Ì¦]fOaæ¾e{ */
- $"7F5B 6F20 397A BBC2 3F23 86DF 2355 4A18" /* .[o 9z»Â?#†ß#UJ. */
- $"15DB CB3E 201F FF7C 4AC9 C764 B098 CA46" /* .ÛË> .ÿ|JÉÇd°˜ÊF */
- $"C2CF 44C6 42E7 D30A FD05 380F 6BD3 24C1" /* ÂÏDÆBçÓÂý.8.kÓ$Á */
- $"3998 C5C1 E7D5 0E2C 8D50 7FBB 7A11 6CB7" /* 9˜ÅÁçÕ.,P.»z.l· */
- $"B80F 5A84 44BE E746 C43C 6B5D F055 7A3B" /* ¸.Z„D¾çFÄ<k]ðUz; */
- $"77CB BFA9 2B73 06AF 9C8B AF37 F600 E568" /* wË¿©+s.¯œ‹¯7ö.åh */
- $"EE70 09D2 B0A7 C201 94D9 AC58 E9A2 9D53" /* îpÆÒ°§Â.”Ù¬Xé¢S */
- $"94C0 D1C9 E379 E453 E4C7 27C5 C3F8 1161" /* ”ÀÑÉãyäSäÇ'ÅÃø.a */
- $"D631 3F3C 0CFE 13A3 F6EB 3048 F049 CF11" /* Ö1?<.þ.£öë0HðIÏ. */
- $"5962 65AE 5D8E F911 A2E2 7787 6C78 F63C" /* Ybe®]Žù.¢âw‡lxö< */
- $"E24C ED5B F634 B2B9 9DDF 51B0 94B9 1ABF" /* âLí[ö4²¹ßQ°”¹.¿ */
- $"BE93 4236 35A6 613E 3D1B C8FD 0587 27C7" /* ¾“B65¦a>=.Èý.‡'Ç */
- $"F936 55E0 D0CE BF1A 50D8 51CE 6253 0293" /* ù6UàÐο.PØQÎbS.“ */
- $"1958 3FA2 BF6C 54A5 B158 4236 7F88 7DE4" /* .X?¢¿lT¥±XB6.ˆ}ä */
- $"C231 6D0B 62F1 2C6C 1A1D F8AA 0317 C52D" /* Â1m.bñ,l..øª..Å- */
- $"D9D5 0B61 312B A074 B2B8 1905 FCF9 A102" /* ÙÕ.a1+ t²¸..üù¡. */
- $"6188 616D 74E6 8232 245D 9C8A 4FD8 E2FD" /* aˆamtæ‚2$]œŠOØâý */
- $"0C6C 8F2E 5C82 5724 C542 3AE5 BA0A EE0B" /* .l.\‚W$ÅB:åºÂî. */
- $"2A14 BCDE 8005 4446 25B1 CF8A 6744 9F5C" /* *.¼Þ€.DF%±ÏŠgDŸ\ */
- $"9B09 6571 3003 9F52 A42A 7669 CCAA 7A75" /* ›Æeq0.ŸR¤*vi̪zu */
- $"F807 2530 7BA9 1474 F318 5A7B E64A 5DD7" /* ø.%0{©.tó.Z{æJ]× */
- $"A6F2 13B0 AFA5 7BF8 46DC CABF 4D80 CC26" /* ¦ò.°¯¥{øFÜÊ¿M€Ì& */
- $"5838 4016 3C05 4550 C62F 1504 5B79 0816" /* X8@.<.EPÆ/..[y.. */
- $"556C 8524 5DDA E914 92F1 3124 5C5B 3213" /* Ul…$]Úé.’ñ1$\[2. */
- $"7851 D9B8 EE79 46CF 3F06 1EAB 662A FD9E" /* xQÙ¸îyFÏ?..«f*ýž */
- $"E7D8 2E8C 938F 43FA B1B1 34B0 9207 34EC" /* çØ.Œ“Cú±±4°’.4ì */
- $"7A09 46BF 201E 311F EEEE 88EF C6C1 C10D" /* zÆF¿ .1.îîˆïÆÁÁ. */
- $"E238 50C9 7F01 DFF0 2170 EDD1 7471 8C14" /* â8PÉ..ßð!píÑtqŒ. */
- $"FB17 6678 A8B9 6611 9713 D8BB 8840 427C" /* û.fx¨¹f.—.Ø»ˆ@B| */
- $"8E5E 1608 D5E6 79B6 0BD7 3592 5D97 3864" /* Ž^..Õæy¶.×5’]—8d */
- $"71DF 6137 C0E6 2EB0 F71D 466C CFFF 50EF" /* qßa7Àæ.°÷.FlÏÿPï */
- $"FE99 2E4D 0DBB 537F 32F1 DECB D5D4 39DF" /* þ™.M.»S.2ñÞËÕÔ9ß */
- $"4FCC 2FC2 C399 8EB9 FC8B 2806 3FB7 F227" /* OÌ/ÂÃ™Ž¹ü‹(.?·ò' */
- $"BA12 A288 9858 9159 B6ED 0DBF 3DCC 8FA1" /* º.¢ˆ˜X‘Y¶í.¿=Ì¡ */
- $"9CF5 836D 499F B9E7 DB4E 497F D3A4 57BF" /* œõƒmIŸ¹çÛNI.Ó¤W¿ */
- $"9F0A EECE 8E29 127A 82FF 4222 75AC 32D4" /* ŸÂîÎŽ).z‚ÿB"u¬2Ô */
- $"6540 8040 4137 9EB4 EFFF 7FEC 9D37 60B4" /* e@€@A7ž´ïÿ.ì7`´ */
- $"184A 9567 71E4 F5FE 1C55 BB95 9FD8 BE6D" /* .J•gqäõþ.U»•ŸØ¾m */
- $"037F 052C 035B 91D7 903B 6EEC 1642 3D18" /* ...,.[‘×;nì.B=. */
- $"0B05 FEC5 4C0C 9ED3 BFA5 94AF CBB1 E725" /* ..þÅL.žÓ¿¥”¯Ë±ç% */
- $"DFC3 AF74 2485 D5A2 7F79 1275 C7DD ADE1" /* ßït$…Õ¢.y.uÇÝ­á */
- $"3BD5 AD19 74E6 EE9F 6846 7900 C09D 090B" /* ;Õ­.tæîŸhFy.ÀÆ. */
- $"C17C FB0F 2C9F 4DEB B9FE 7152 A47E B1CB" /* Á|û.,ŸMë¹þqR¤~±Ë */
- $"FB0E 7108 21C7 EFAB 8FA3 8AF0 2FDC 17A9" /* û.q.!Çï«£Šð/Ü.© */
- $"2565 5082 BEBF 4DDD 0699 3265 82AE D421" /* %eP‚¾¿MÝ.™2e‚®Ô! */
- $"3776 341F C56C ECDA B302 0306 AE5F 37FF" /* 7v4.ÅlìÚ³...®_7ÿ */
- $"7FB7 1192 8D68 5475 EE0B 4D80 6149 DEBB" /* .·.’hTuî.M€aIÞ» */
- $"F9A7 D7E7 A35D 9515 8000 4F04 C4D6 670C" /* ù§×ç£]•.€.O.ÄÖg. */
- $"54B7 93BB D264 43E0 E8D4 2D4D D3E2 AEB0" /* T·“»ÒdCàèÔ-MÓâ®° */
- $"FBAE F5BD A155 A8F2 07B4 AAA6 CE0A 84CC" /* û®õ½¡U¨ò.´ª¦ÎÂ„Ì */
- $"907F D5C4 9900 8FE2 0E0D F385 55A0 CDFF" /* .ÕÄ™.â..ó…U Íÿ */
- $"7FFE D776 193F A5C4 0334 DD15 7A6A 0890" /* .þ×v.?¥Ä.4Ý.zj. */
- $"DE98 5707 7799 9A5B D638 31B9 982B 5623" /* Þ˜W.w™š[Ö81¹˜+V# */
- $"3AFA A84A 20E7 417C F56E 7776 0C54 0765" /* :ú¨J çA|õnwv.T.e */
- $"91DE A19E 3DD2 4D8B F9F9 0D61 6343 0746" /* ‘Þ¡ž=ÒM‹ùù.acC.F */
- $"7D72 600B 4E15 FC8F 60FA A273 4348 A86E" /* }r`.N.ü`ú¢sCH¨n */
- $"E11A CD6B 3FFF 7ED1 E486 AAAA A380 045A" /* á.Ík?ÿ~Ñ䆪ª£€.Z */
- $"70E5 3753 4FFF 7FC6 ADBE 8E71 66FF 8165" /* på7SOÿ.Æ­¾Žqfÿe */
- $"D782 24E8 7399 0C15 03BF 29B5 5685 FDA1" /* ׂ$ès™...¿)µV…ý¡ */
- $"5BAD 5751 6D53 799A A7C6 572E 6A37 B46A" /* [­WQmSyš§ÆW.j7´j */
- $"B9BF 05BF 3131 F7DB E3B8 8F11 EE2F 13D6" /* ¹¿.¿11÷Ûã¸.î/.Ö */
- $"7DE9 D552 0B25 FEAF AEFE F0A7 FBE9 487F" /* }éÕR.%þ¯®þð§ûéH. */
- $"9085 0FFA 23FE A9DB 0494 B0E1 FEFD 1D50" /* ….ú#þ©Û.”°áþý.P */
- $"15B4 6548 AAA0 0182 C5FF 7D24 05C8 B15E" /* .´eHª .‚Åÿ}$.ȱ^ */
- $"E45F A508 3C68 CA73 3A57 A35E 462D 9213" /* ä_¥.<hÊs:W£^F-’. */
- $"9D19 A4FE F266 C323 64FF 7B71 19F7 0BC3" /* .¤þòfÃ#dÿ{q.÷.Ã */
- $"062C 20C4 9745 F075 6FFF 31F0 A3AD 4C84" /* ., Ä—Eðuoÿ1ð£­L„ */
- $"00F3 104C 0064 3899 0DB9 8128 CB5F FF46" /* .ó.L.d8™.¹(Ë_ÿF */
- $"7184 41CB 7E58 4C0B ADD5 CBB2 1A61 E3D6" /* q„AË~XL.­Õ˲.aãÖ */
- $"B45F 489E 7FE9 D915 2B77 0776 98BD B3A6" /* ´_Hž.éÙ.+w.v˜½³¦ */
- $"230E B817 1D5A D937 3251 2449 6B0A 5A13" /* #.¸..ZÙ72Q$IkÂZ. */
- $"C4E0 BB45 CB72 9758 9E56 158D B1E6 9590" /* Äà»EËr—XžV.±æ• */
- $"4FC4 0611 EDBC 426F 6D2B D932 D595 A74E" /* OÄ..í¼Bom+Ù2Õ•§N */
- $"8728 58CD BD02 9746 DBA2 7EAB 0F07 363C" /* ‡(Xͽ.—FÛ¢~«..6< */
- $"BAB3 1228 E02A BDB4 373F F3FB FF7D 8D0D" /* º³.(à*½´7?óûÿ}. */
- $"2193 09F4 7603 A017 98B1 421E 7A47 D126" /* !“Æôv. .˜±B.zGÑ& */
- $"82FD 5449 B97F F864 5CD5 19F6 A8A4 F216" /* ‚ýTI¹.ød\Õ.ö¨¤ò. */
- $"A4B3 FF7F E820 4C58 DE4B 944B 6FD4 F4DA" /* ¤³ÿ.è LXÞK”KoÔôÚ */
- $"596E A688 456C 3F0D 7844 1596 2BED 0D5D" /* Yn¦ˆEl?.xD.–+í.] */
- $"FAFB 8D2E D7D0 ABCB B2BE 8D80 E74D 9EDC" /* úû.×Ы˲¾€çMžÜ */
- $"7FFF 7FC9 2FB9 3BDA F47A B9C2 E1B8 5CC8" /* .ÿ.É/¹;Úôz¹Âá¸\È */
- $"14AB D534 7208 32FE 73D2 EF23 862E 10F8" /* .«Õ4r.2þsÒï#†..ø */
- $"C16F 1FFF 6FBB FA97 5167 CDAD 4886 8FC2" /* Áo.ÿo»ú—QgÍ­H†Â */
- $"BFFF 7FFE 2B73 126E 1EC8 C82A 3F6D 6CC3" /* ¿ÿ.þ+s.n.ÈÈ*?mlà */
- $"D98A D501 1DC2 82FD FF57 9731 B866 2A7D" /* ÙŠÕ..‚ýÿW—1¸f*} */
- $"C983 5F41 893F 2D09 F81C E373 42C2 5963" /* Ƀ_A‰?-Æø.ãsBÂYc */
- $"7E9F C269 2B8B C21A 8247 D433 0DF7 491E" /* ~ŸÂi+‹Â.‚GÔ3.÷I. */
- $"D1BF 3D9E F4BD 1B50 8034 4EE9 4A69 B155" /* Ñ¿=žô½.P€4NéJi±U */
- $"849A B0F7 8CEA 3FD0 E4A0 C339 2431 ED8B" /* „š°÷Œê?Ðä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FD9F 7F36 9703 7BCA 1455 6A98 F02E" /* #fýŸ.6—.{Ê.Uj˜ð. */
- $"1EDC 4707 C9A6 B325 A6E4 637D 612B B3DD" /* .ÜG.ɦ³%¦äc}a+³Ý */
- $"1E5A 3660 EEB0 BEFA 2C50 307B 5887 6D39" /* .Z6`î°¾ú,P0{X‡m9 */
- $"0EC7 2D81 C32E 6B72 8546 30E4 133F 3D3B" /* .Ç-Ã.kr…F0ä.?=; */
- $"0A76 21AA 4387 8F29 03C8 1C32 755C F553" /* Âv!ªC‡).È.2u\õS */
- $"5CA1 C16A 02EC 4654 97C8 6F10 BA2A 16E0" /* \¡Áj.ìFT—Èo.º*.à */
- $"DB18 605E 8A18 8A6E 4F35 1EF7 8C57 F8B2" /* Û.`^Š.ŠnO5.÷ŒWø² */
- $"0020 4D0A 1739 2287 ADE2 B0C2 D816 17D2" /* . MÂ.9"‡­â°ÂØ..Ò */
- $"21F8 3104 FEA8 38E3 8644 6F0B D2C6 A599" /* !ø1.þ¨8ã†Do.ÒÆ¥™ */
- $"B793 1367 B548 23BD 8836 1143 D5DB 2720" /* ·“.gµH#½ˆ6.CÕÛ' */
- $"73BB 1485 DEAF C96F 24E8 AA26 56B9 89D3" /* s».…Þ¯Éo$èª&V¹‰Ó */
- $"8F8D 2F3E 5EA5 466C BE3C 6879 6C0A 5891" /* />^¥Fl¾<hylÂX‘ */
- $"974E 6F22 0E47 66D4 BD1F 6A7D 1885 42CC" /* —No".GfÔ½.j}.…BÌ */
- $"7E13 126E AC98 74B7 B093 BDFF 37DB E527" /* ~..n¬˜t·°“½ÿ7Ûå' */
- $"E6D0 CF2A D7E6 E7EB 1095 05AF 6407 BB9B" /* æÐÏ*׿çë.•.¯d.»› */
- $"0227 D5EB 260A C844 340F B249 E84F 58A7" /* .'Õë&ÂÈD4.²IèOX§ */
- $"FA14 9D34 7614 73A6 BE73 ED76 B2CD 4515" /* ú.4v.s¦¾sív²ÍE. */
- $"F26C 3AD7 7C32 5480 5A3A C4DF 123A EA95" /* òl:×|2T€Z:Äß.:ê• */
- $"D2B4 A3D8 F88D E685 6505 A999 DD9E C8D1" /* Ò´£Øøæ…e.©™ÝžÈÑ */
- $"A073 3702 5A8F 3598 F7DC A36F 0058 065E" /*  s7.Z5˜÷Ü£o.X.^ */
- $"65E6 B5AC 2A85 0F1C 43BF 8A10 43A0 BB10" /* e浬*…..C¿Š.C ». */
- $"4C3A 8F4F 95AD 253D EEE9 FBE8 4023 4647" /* L:O•­%=îéûè@#FG */
- $"7A75 8F1C 9245 3C51 3FF5 BD2B DFD3 57EF" /* zu.’E<Q?õ½+ßÓWï */
- $"1FB4 900F 4546 6EFA A7AE 45EB EAE9 7B9D" /* .´.EFnú§®Eëêé{ */
- $"6408 1DCB F7AC BE44 7D08 1482 2257 A9CF" /* d..Ë÷¬¾D}..‚"W©Ï */
- $"8B78 3610 9816 9518 A64C 215A 4569 6C5F" /* ‹x6.˜.•.¦L!ZEil_ */
- $"57E0 4F89 F77C 88D6 ADFC 8E42 9299 A2C9" /* WàO‰÷|ˆÖ­üŽB’™¢É */
- $"0F7C EA0A 7E98 B7AF 70ED 09A8 0759 B1A7" /* .|êÂ~˜·¯píÆ¨.Y±§ */
- $"C18E 2CC9 883F A788 A2F1 57B9 7A0E F384" /* ÁŽ,Ɉ?§ˆ¢ñW¹z.ó„ */
- $"F0CE 46F0 E10A ED6F CE17 2BE1 25D5 3A36" /* ðÎFðáÂíoÎ.+á%Õ:6 */
- $"5C6A F3AA F2D1 7225 6C5C 514F 8F1F 64A5" /* \jóªòÑr%l\QO.d¥ */
- $"B08E D05D 3E2E B3E4 DE48 12A9 7DC6 6E03" /* °ŽÐ]>.³äÞH.©}Æn. */
- $"05B3 2AD0 EF87 EFB1 6D03 06E4 85AB 36C6" /* .³*Ðï‡ï±m..ä…«6Æ */
- $"9BF6 8382 74F2 F321 62DF 269C 8D95 8FBD" /* ›öƒ‚tòó!bß&œ•½ */
- $"C4CA 7278 FDBA C51B A4FC C224 BD43 5F76" /* ÄÊrxýºÅ.¤üÂ$½C_v */
- $"F9D9 0970 5EAA 5F05 FDCB 50DE 35E7 A82E" /* ùÙÆp^ª_.ýËPÞ5ç¨. */
- $"1E7E 584D 33D8 EF90 B221 622F 778E 460D" /* .~XM3Øï²!b/wŽF. */
- $"6DC9 383F CF41 7B89 7414 97EF EFE2 CC75" /* mÉ8?ÏA{‰t.—ïïâÌu */
- $"8895 6AFD C6E8 610E 5E29 7AE1 FAAF 9FD5" /* ˆ•jýÆèa.^)záú¯ŸÕ */
- $"435F 3F61 6F9F AC78 7EAD 62BE 7DF7 7CFD" /* C_?aoŸ¬x~­b¾}÷|ý */
- $"D3FD 5BAF 83F5 5B37 CF6D BE7E 9DDF 3F4D" /* Óý[¯ƒõ[7Ïm¾~ß?M */
- $"80E8 ABDE CCAF 0D6C 8AC6 9587 348A 7A5A" /* €è«Þ̯.lŠÆ•‡4ŠzZ */
- $"21F6 5D05 F6A4 1727 AC99 8E36 4607 A805" /* !ö].ö¤.'¬™Ž6F.¨. */
- $"1CA8 FB12 6979 4216 6FCF DF65 6135 AFF9" /* .¨û.iyB.oÏßea5¯ù */
- $"5A1E 01C1 15A0 4F38 E547 6F65 858D 0788" /* Z..Á. O8åGoe….ˆ */
- $"49E3 07A2 D476 B767 EC21 FF65 559D 3B3F" /* Iã.¢Ôv·gì!ÿeU;? */
- $"B8A5 C1A8 6496 5183 24E6 93A6 DF2F 52F1" /* ¸¥Á¨d–Qƒ$擦ß/Rñ */
- $"19CA BFD7 1479 8040 2F9C 0DB9 00F0 49C5" /* .Ê¿×.y€@/œ.¹.ðIÅ */
- $"3D32 5B0C 9453 8D1F 452F D9E7 75FD CD61" /* =2[.”S.E/ÙçuýÍa */
- $"44A9 62C3 F0C8 BAF0 6A66 A4D4 AA8B 73B0" /* D©bÃðȺðjf¤Ôª‹s° */
- $"C942 686A 4A1E E3A7 2343 A0ED D595 9AFC" /* ÉBhjJ.ã§#C íÕ•šü */
- $"5546 0ACB FD23 6F2E DCEE ABBD 70E7 FA93" /* UFÂËý#o.Üpçú“ */
- $"3FFF 7FC5 7D31 FA1C D910 1C70 6CDC 3362" /* ?ÿ.Å}1ú.Ù..plÜ3b */
- $"B0A1 C6F3 16D1 BE51 73D2 4697 37CA 8197" /* °¡Æó.ѾQsÒF—7Ê— */
- $"A8C6 89C1 FF78 99EB 31B8 5F88 7B08 C557" /* ¨Æ‰Áÿx™ë1¸_ˆ{.ÅW */
- $"5483 A35C 0713 94D5 D2DF B84C 36CA D9EC" /* Tƒ£\..”ÕÒ߸L6ÊÙì */
- $"8FC7 A305 814F 8B04 07D2 E391 5E89 43FE" /* Ç£.O‹..Òã‘^‰Cþ */
- $"6C67 4343 91DB DD56 C1D2 FEA6 9F1F 346F" /* lgCC‘ÛÝVÁÒþ¦Ÿ.4o */
- $"714B 79E1 7AC7 53A1 9934 69F4 E886 5A9C" /* qKyázÇS¡™4iôè†Zœ */
- $"6F9A D26F DD48 5F60 A72A 7E20 77F8 1BE8" /* ošÒoÝH_`§*~ wø.è */
- $"91B9 9018 8124 7694 3664 4202 7B94 1007" /* ‘¹.$v”6dB.{”.. */
- $"4234 15FC 04A2 6DE0 DC6B 5EDE 4332 F592" /* B4.ü.¢màÜk^ÞC2õ’ */
- $"779A A3BD 8E84 5464 DE08 6BAE AE2F 6EEF" /* wš£½Ž„TdÞ.k®®/nï */
- $"CB75 5862 59D8 1362 5D60 79D2 137C 7606" /* ËuXbYØ.b]`yÒ.|v. */
- $"F2B1 06DE 8A2F B76A A7D9 84DB 8F52 1107" /* ò±.ÞŠ/·j§Ù„ÛR.. */
- $"A42C 9803 2476 0448 42C9 A9E5 D0F5 9110" /* ¤,˜.$v.HBÉ©åÐõ‘. */
- $"2FAB AAF4 0752 81C9 6064 B8F7 6CEB 438E" /* /«ªô.RÉ`d¸÷lëCŽ */
- $"DC4B 916C 21F0 1C8F 2A6A 1919 9E26 2B36" /* ÜK‘l!ð.*j..ž&+6 */
- $"3E51 F543 F7C5 2549 66D0 2F14 D18F 42F1" /* >QõC÷Å%IfÐ/.ÑBñ */
- $"397B BA52 99ED 853C E07D 629B 92A1 2589" /* 9{ºR™í…<à}b›’¡%‰ */
- $"B3A9 B812 DC8D A368 3204 F8AA 7549 AF2B" /* ³©¸.Ü£h2.øªuI¯+ */
- $"2DE7 529C 1ECB 9747 A4B8 F6EC 8DDC 0AC4" /* -çRœ.Ë—G¤¸öìÜÂÄ */
- $"2C31 F042 C407 3F18 FD32 9280 60E4 60D8" /* ,1ðBÄ.?.ý2’€`ä`Ø */
- $"77B5 C019 A5FF 6E0D 8E35 A78E C7AA E95B" /* wµÀ.¥ÿn.Ž5§ŽÇªé[ */
- $"D37C D883 5DD2 756B 385A 08BB 7708 AA5E" /* Ó|؃]Òuk8Z.»w.ª^ */
- $"5B89 0628 F831 7775 3555 A523 BF2F 721A" /* [‰.(ø1wu5U¥#¿/r. */
- $"099B E6B4 5128 9EA6 41E1 9B8B 18C1 928C" /* Æ›æ´Q(ž¦Aᛋ.Á’Œ */
- $"72A0 BD1E 84D6 836A C947 0982 284A 9238" /* r ½.„ÖƒjÉGÆ‚(J’8 */
- $"A06F E390 1BD5 BBFD 323F BA86 2091 BAD5" /*  oã.Õ»ý2?º† ‘ºÕ */
- $"351D 16C5 1D44 E8C7 66C7 D469 047D 5548" /* 5..Å.DèÇfÇÔi.}UH */
- $"7049 7B42 B682 DF4C 68DE B5D2 2EDC C105" /* pI{B¶‚ßLhÞµÒ.ÜÁ. */
- $"4047 9A7E 0403 F48B 6215 C3ED 8DBA 12E9" /* @Gš~..ô‹b.Ãíº.é */
- $"EEFB B61B 906E F6F6 DDFD D030 CD1C 47FD" /* îû¶.nööÝýÐ0Í.Gý */
- $"7C37 E7C7 DC08 213E 3C33 08E6 74A0 F400" /* |7çÇÜ.!><3.æt ô. */
- $"7CFC 3B85 1A2E 5ACA 573F F24C 7D2C 0E3B" /* |ü;…..ZÊW?òL},.; */
- $"2A6D CEDC 6C9C 6E97 A572 915F A892 3833" /* *mÎÜlœn—¥r‘_¨’83 */
- $"A08F 0070 A602 FB49 0EA6 62FC 4237 C568" /*  .p¦.ûI.¦büB7Åh */
- $"E937 1DC1 1FC2 C3F1 AA30 AC4D DDB8 E747" /* é7.Á.ÂÃñª0¬MݸçG */
- $"5EE4 FD73 8124 56EB ADBE 6DB3 F27B 80C0" /* ^äýs$Vë­¾m³ò{€À */
- $"E536 971B 511B C76B AB20 8BA4 4DCD BFCB" /* å6—.Q.Çk« ‹¤MÍ¿Ë */
- $"4A0C 34DC 3DDC 9BEF 5122 89D0 99D1 9BE7" /* J.4Ü=Ü›ïQ"‰Ð™Ñ›ç */
- $"8840 002A A77A 25E2 9C2C F9BC 78F9 FB0E" /* ˆ@.*§z%âœ,ù¼xùû. */
- $"0DB7 4F14 B07A 12F6 65D3 ABE1 660D A84A" /* .·O.°z.öeÓ«áf.¨J */
- $"EFF9 A799 1852 8ED0 9582 B79A D812 1BE6" /* ïù§™.RŽÐ•‚·šØ..æ */
- $"F3D0 D5FA 9C76 5EBD DBFD 42A9 F7B3 885E" /* óÐÕúœv^½ÛýB©÷³ˆ^ */
- $"4A68 DBE7 9663 FB7F 1AC4 5004 197F 97F0" /* JhÛç–cû..ÄP...—ð */
- $"F57B 135D 19ED E0E0 1C84 139C BA3B 2493" /* õ{.].íàà.„.œº;$“ */
- $"D997 333D B6A7 9E83 619C FCE9 9875 134D" /* Ù—3=¶§žƒaœüé˜u.M */
- $"4B31 FCB3 5808 B917 C8BB 0B67 4564 488E" /* K1ü³X.¹.È».gEdHŽ */
- $"3554 8125 C3A4 DB4A 0BB2 E501 244C 1F49" /* 5T%äÛJ.²å.$L.I */
- $"C6A7 51E4 6C51 A134 3DF4 CE21 2993 FF3B" /* ƧQälQ¡4=ôÎ!)“ÿ; */
- $"80F6 AE0B B9F8 D1D5 8853 4531 6806 4F3E" /* €ö®.¹øÑÕˆSE1h.O> */
- $"D2B6 5F62 796A 683C D3C9 A22B 6D56 C497" /* Ò¶_byjh<ÓÉ¢+mVÄ— */
- $"D854 2E14 C281 0F94 0220 BEE7 3754 D077" /* ØT..Â.”. ¾ç7TÐw */
- $"EDB0 0F0E 95C1 A40B 55C9 B5AE 4DA8 A8A6" /* í°..•Á¤.Uɵ®M¨¨¦ */
- $"ADD6 4A11 DE81 B148 70D3 FA4F 795C 9171" /* ­ÖJ.Þ±HpÓúOy\‘q */
- $"C72E 7EF2 454C 0336 BE4A EE68 960E 25BA" /* Ç.~òEL.6¾Jîh–.%º */
- $"E686 01F4 6FF5 3C7C 8B33 60D8 24D3 70A1" /* æ†.ôoõ<|‹3`Ø$Óp¡ */
- $"06C6 E616 29D4 63D6 3334 379F 743E 745D" /* .Ææ.)ÔcÖ347Ÿt>t] */
- $"4EF5 ECB5 072E 9F62 0750 F7BA 6FDE B6B0" /* Nõìµ..Ÿb.P÷ºoÞ¶° */
- $"0BD0 4FCC 8F59 9B13 0C77 0A30 9BAE DF36" /* .ÐOÌY›..wÂ0›®ß6 */
- $"B13D D861 E92A 12C7 EC7A 0946 BF20 1E31" /* ±=Øaé*.ÇìzÆF¿ .1 */
- $"1FEE EE88 EFC6 C1C1 0DE2 3850 C97F 01DF" /* .îîˆïÆÁÁ.â8PÉ..ß */
- $"F021 605A D52A 570D 7089 0C1B B3FE 8B4D" /* ð!`ZÕ*W.p‰..³þ‹M */
- $"E441 70AC 5F71 3FCE 527F EBF4 048A A307" /* äAp¬_q?ÎR.ëô.Š£. */
- $"CEFD 4EB0 87ED BFE2 A36C 51B9 EAD3 37C6" /* ÎýN°‡í¿â£lQ¹êÓ7Æ */
- $"E8F0 9A3D 8F78 8747 81D4 33F0 9EEB 5EA0" /* èðš=x‡GÔ3ðžë^  */
- $"6FE0 A580 6B6B C126 1CE3 F1B2 DC9C CFCE" /* oीkkÁ&.ãñ²ÜœÏÎ */
- $"42EE 7E91 EF2F 0DDF CFDE 75EB 554D 6941" /* Bî~‘ï/.ßÏÞuëUMiA */
- $"07A5 21BE AD52 7CC1 49B5 FE74 AE40 F70F" /* .¥!¾­R|ÁIµþt®@÷. */
- $"AB3B 0C16 98F5 7742 3DCE 842D 0B2B 2FEB" /* «;..˜õwB=΄-.+/ë */
- $"5E90 DEBC 8BA9 81AC 40CC 0030 2853 FE9C" /* ^Þ¼‹©¬@Ì.0(Sþœ */
- $"6FC2 569B 2CD1 6200 2881 802D 7697 8442" /* oÂV›,Ñb.(€-v—„B */
- $"92C8 666B BC90 3252 F4D3 9BD2 AD14 0027" /* ’Èfk¼2RôÓ›Ò­..' */
- $"CE11 F5A4 437B 3F80 B250 AA4C 23B6 AD83" /* Î.õ¤C{?€²PªL#¶­ƒ */
- $"277E 5EF0 8132 6331 9325 D1A3 CFB6 6F73" /* '~^ð2c1“%ѣ϶os */
- $"D37D 780F 91CC CD40 6234 2FE2 F097 1681" /* Ó}x.‘ÌÍ@b4/âð—. */
- $"6097 88BD BFFF 18F5 2CBB FF67 FDBC 2F07" /* `—ˆ½¿ÿ.õ,»ÿgý¼/. */
- $"67FF 7FFF 1946 84C7 A551 03FF 7F52 A7C2" /* gÿ.ÿ.F„Ç¥Q.ÿ.R§Â */
- $"8AC8 1080 56FF 0C48 1804 A884 A5A2 08FF" /* ŠÈ.€Vÿ.H..¨„¥¢.ÿ */
- $"7FF5 3220 8043 9005 C25D DE15 02FB 7F2B" /* .õ2 €C.Â]Þ..û.+ */
- $"8205 5CA8 40BE EFB1 78F0 2656 2AD4 14FF" /* ‚.\¨@¾ï±xð&V*Ô.ÿ */
- $"7505 20CD 8BE2 8B15 47BB 9E26 105E 15DD" /* u. Í‹â‹.G»ž&.^.Ý */
- $"21A7 82AE E19D FE27 5D8B DDAD E13B D5AD" /* !§‚®áþ']‹Ý­á;Õ­ */
- $"1974 E6EE 9F68 4679 00C0 9D09 0BC1 7CFB" /* .tæîŸhFy.ÀÆ.Á|û */
- $"0F2C 9F4E 082C 2CB4 569B A7B0 0009 E098" /* .,ŸN.,,´V›§°.Æà˜ */
- $"9AB0 9892 B1FF 6957 1D78 2613 4289 24C6" /* š°˜’±ÿiW.x&.B‰$Æ */
- $"12BC E2EF C9AE E6D9 784F C157 77AB 3470" /* .¼âïÉ®æÙxOÁWw«4p */
- $"D8C7 C746 1978 322D D4E9 FA24 B8B2 5054" /* ØÇÇF.x2-Ôéú$¸²PT */
- $"D643 8270 9090 D6D8 0C24 16E5 1146 421C" /* ÖC‚pÖØ.$.å.FB. */
- $"D6A2 40D9 1864 A800 0000 0000 0001 4554" /* Ö¢@Ù.d¨.......ET */
- $"031E 793B 33D3 FD4A CE0A 3D8A 9D46 37B0" /* ..y;3ÓýJÎÂ=ŠF7° */
- $"4D2C 6F04 2BFF 071C 023F E153 6688 1815" /* M,o.+ÿ...?áSfˆ.. */
- $"BA20 BF61 DDDF 2979 84E3 3348 50F6 E9B8" /* º ¿aÝß)y„ã3HPöé¸ */
- $"634A 8937 FF7F F1AE E84B C95A 771F 4C9C" /* cJ‰7ÿ.ñ®èKÉZw.Lœ */
- $"3FFE 0734 7D7F 6E35 4A2E 21E0 E52F FF7E" /* ?þ.4}.n5J.!àå/ÿ~ */
- $"8532 8513 7869 A6E6 495D 3E58 F349 1EF5" /* …2….xi¦æI]>XóI.õ */
- $"886C 6441 9091 82E8 0C24 1507 0E02 A105" /* ˆldA‘‚è.$....¡. */
- $"95C5 1409 096C 9A37 F758 F13A 5ABF 149E" /* •Å.ÆÆlš7÷Xñ:Z¿.ž */
- $"DA31 52E9 0DA9 0BFF 45EB 20C7 1A1C E54C" /* Ú1Ré.©.ÿEë Ç..åL */
- $"29D1 6C8E D1EC 9D59 F945 4303 373F FF7F" /* )ÑlŽÑìYùEC.7?ÿ. */
- $"CE95 B027 88F7 AB06 28B9 92E7 D540 BC2B" /* Ε°'ˆ÷«.(¹’çÕ@¼+ */
- $"7167 8C6C C87E 32B0 C904 7D7D 278E E519" /* qgŒlÈ~2°É.}}'Žå. */
- $"707D 2C42 1714 C425 F9D0 DC01 D910 23DB" /* p},B..Ä%ùÐÜ.Ù.#Û */
- $"E7F3 391C A4E6 FAE1 C850 5A1F 456A 6690" /* çó9.¤æúáÈPZ.Ejf */
- $"3F37 F970 3841 73D3 1095 39CF 10A3 40F8" /* ?7ùp8AsÓ.•9Ï.£@ø */
- $"4CCC 4985 E3D5 127F 7CF4 92BC DCE9 2335" /* LÌI…ãÕ..|ô’¼Üé#5 */
- $"43FB 7460 8D5C C121 CFF2 1165 1CCE BBB2" /* Cût`\Á!Ïò.e.λ² */
- $"5EA8 0279 2C97 E45B A43D 328C 7A6C 5EBC" /* ^¨.y,—ä[¤=2Œzl^¼ */
- $"61DD BB2C E34E 25E4 1725 3C6B EC12 BFEF" /* aÝ»,ãN%ä.%<kì.¿ï */
- $"3E5E 0ACF 766D 9D4E 8978 2AC5 F138 755A" /* >^ÂÏvmN‰x*Åñ8uZ */
- $"CBDD 8421 F74E 9A07 A070 16ED 100C 769A" /* ËÝ„!÷Nš. p.í..vš */
- $"6571 1FA0 4D62 8ADC A3F1 0AAA 2253 1A39" /* eq. MbŠÜ£ñª"S.9 */
- $"0006 DF51 B09A 2267 BA13 3AD9 0120 8520" /* ..ßQ°š"gº.:Ù. … */
- $"7375 BB11 0715 9FFF 7FFF 276F 9A44 4D02" /* su»...Ÿÿ.ÿ'ošDM. */
- $"9DF2 BE32 729A 8C71 FBC9 4C73 FA4B 1D24" /* ò¾2ršŒqûÉLsúK.$ */
- $"4115 B69E 4FFF 7FFF 45B5 7091 9925 CEBD" /* A.¶žOÿ.ÿEµp‘™%ν */
- $"6A4E 1AA3 BFFF 7FFD AA3B 4043 EE5A 76B0" /* jN.£¿ÿ.ýª;@CîZv° */
- $"A073 CF17 7A58 3A06 649C B972 3CB8 897B" /*  sÏ.zX:.dœ¹r<¸‰{ */
- $"31E2 637A 05AC 83FA B94C 0F75 7113 FF7B" /* 1âcz.¬ƒú¹L.uq.ÿ{ */
- $"E690 225A FB16 A961 626A B7FE 22EF 864B" /* æ"Zû.©abj·þ"ï†K */
- $"F464 1D62 4127 02B3 DB08 1C01 3ECE 1326" /* ôd.bA'.³Û...>Î.& */
- $"CF03 BF05 5771 4992 75FE 29FC 5FFF 60D5" /* Ï.¿.WqI’uþ)ü_ÿ`Õ */
- $"DCC3 1B1F 40FF 6990 DC69 3E47 D09A 6E6A" /* ÜÃ..@ÿiÜi>GКnj */
- $"2866 9BA8 D74C BAAA 204E 05F9 DBFE E679" /* (f›¨×Lºª N.ùÛþæy */
- $"E76C 383D 9F92 BB32 1E14 2CA1 CBD5 E93C" /* çl8=Ÿ’»2..,¡ËÕé< */
- $"6C00 DFA2 B04F D650 3F14 60FF 7F73 29C3" /* l.ߢ°OÖP?.`ÿ.s)à */
- $"E20E 5672 C31B 6D72 FDCF 8097 B8B0 1482" /* â.VrÃ.mrýÏ€—¸°.‚ */
- $"C37E 4C4A 28FA 6E67 F061 E00C 371B 8655" /* Ã~LJ(úngðaà.7.†U */
- $"BDCB 2942 6AB1 0E31 38D3 6948 0D3F 6FEF" /* ½Ë)Bj±.18ÓiH.?oï */
- $"C2AB 669A E502 2490 C158 FC07 05F0 348A" /* «fšå.$ÁXü..ð4Š */
- $"0505 F0B2 E7E3 F934 19DA 2DB9 9686 603E" /* ..ð²çãù4.Ú-¹–†`> */
- $"C2C3 4B2F EB95 FB4E 62D2 F085 4364 9DCA" /* ÂÃK/ë•ûNbÒð…CdÊ */
- $"A6E8 94F8 CC41 2603 5BFC 4E90 C05F 068D" /* ¦è”øÌA&.[üNÀ_. */
- $"414C 618C 8860 58B1 7059 0B4C 39E8 FB58" /* ALaŒˆ`X±pY.L9èûX */
- $"C413 43C6 BF39 CC12 6E5B F65C F671 DD29" /* Ä.CÆ¿9Ì.n[ö\öqÝ) */
- $"8A03 BC15 FF06 2028 49E4 BF04 E6FC D4FD" /* Š.¼.ÿ. (Iä¿.æüÔý */
- $"401A CB9C 5F7F EFE7 8F41 E707 7803 9F1A" /* @.Ëœ_.ïçAç.x.Ÿ. */
- $"715F 951E E63A 9B4C 1404 32AA B5B7 98B0" /* q_•.æ:›L..2ªµ·˜° */
- $"D5F4 CD69 DD15 9E81 D2FD 09F7 462D AF3E" /* ÕôÍiÝ.žÒýÆ÷F-¯> */
- $"31DA 85C4 5053 8460 C06C 7018 908C 4821" /* 1Ú…ÄPS„`Àlp.ŒH! */
- $"D8AB AC44 7666 44D1 EA04 8979 3A4A A0FE" /* Ø«¬DvfDÑê.‰y:J þ */
- $"27D7 B0C3 DBAA 5233 F376 3CA8 4968 DF8A" /* '×°ÃÛªR3óv<¨Ihߊ */
- $"874C 2117 6A15 4664 03FF 7FFF 7F7C 2D12" /* ‡L!.j.Fd.ÿ.ÿ.|-. */
- $"B28B 8A4C 6D72 1106 16E0 BF7F 9822 2424" /* ²‹ŠLmr...à¿.˜"$$ */
- $"3C1B CBC8 2F76 1AC7 FF7F FF7F EB42 22AA" /* <.ËÈ/v.Çÿ.ÿ.ëB"ª */
- $"F30A 0C9D 6086 E561 E1BC C1D9 4E7F FADF" /* óÂ.`†åaá¼ÁÙN.úß */
- $"A85C B34C E2D4 FCF6 1A29 34F3 3B42 1DFC" /* ¨\³LâÔüö.)4ó;B.ü */
- $"C6BD 370B D203 B0C4 1C7D C348 1EE7 EAD9" /* ƽ7.Ò.°Ä.}ÃH.çêÙ */
- $"3145 E7FB 36CC 8E64 AB70 81DC 65E1 2C1D" /* 1Eçû6ÌŽd«pÜeá,. */
- $"9CB5 18A0 1C95 7DE2 96DF C185 7A40 50C7" /* œµ. .•}â–ßÁ…z@PÇ */
- $"E32C FCC1 FF6B 14F5 05FE 0E1C 8757 8D82" /* ã,üÁÿk.õ.þ..‡W‚ */
- $"3A41 284E 2906 8316 564F F479 4DCF FF7E" /* :A(N).ƒ.VOôyMÏÿ~ */
- $"5F11 3745 AC7F ED8D BC93 4205 7E12 E036" /* _.7E¬.í¼“B.~.à6 */
- $"0BE4 4B4F F99C F369 6B38 263E 63EC 6311" /* .äKOùœóik8&>cìc. */
- $"D577 8B5D 7957 D24D 7D64 A2B5 1107 4625" /* Õw‹]yWÒM}d¢µ..F% */
- $"E1EB 2460 41A2 E878 5967 CEAE AE16 D8D5" /* áë$`A¢èxYgή®.ØÕ */
- $"F960 B484 0B49 7253 26F2 714E 6A13 03E4" /* ù`´„.IrS&òqNj..ä */
- $"A0C3 3924 31ED 8B79 3D63 5412 C097 F9C3" /*  Ã9$1í‹y=cT.À—ùà */
- $"79AD A97D EEE5 EF23 66FF 15BD C854 5DFB" /* y­©}îåï#fÿ.½ÈT]û */
- $"5921 E05C 6A39 B68E 6444 6D55 3B7D 6DDA" /* Y!à\j9¶ŽdDmU;}mÚ */
- $"9003 8F53 5C49 D978 31CD 41C5 DD62 7DE4" /* .S\IÙx1ÍAÅÝb}ä */
- $"2F24 5932 A14F 9C9C 97B6 2652 5988 7970" /* /$Y2¡Oœœ—¶&RYˆyp */
- $"F890 8A5C 9614 EBF4 DAC8 15D1 6F3C 07E4" /* øŠ\–.ëôÚÈ.Ño<.ä */
- $"7B8B F763 6803 394F 2291 8D88 EB1B 3136" /* {‹÷ch.9O"‘ˆë.16 */
- $"10C9 5077 060A 7DB0 A890 CB7B 947F AD8B" /* .ÉPw.Â}°¨Ë{”.­‹ */
- $"0AAF 67FF 5D78 615A E459 013B 6923 5E0E" /* ¯gÿ]xaZäY.;i#^. */
- $"900D BA9C DFF2 37D0 0508 B5F3 EA48 FADE" /* .ºœßò7Ð..µóêHúÞ */
- $"D348 3F2F 8E71 E6CD B6BE 8941 8773 0E17" /* ÓH?/ŽqæÍ¶¾‰A‡s.. */
- $"E97A B699 5A4F 21C1 0766 538B B29A B8CA" /* éz¶™ZO!Á.fS‹²š¸Ê */
- $"FBAE 21FA 76A0 B197 C613 E523 B127 1FE4" /* û®!úv ±—Æ.å#±'.ä */
- $"0AA8 798D 688E 8F27 E386 446F 0BD2 C6A5" /* ¨yhŽ'ã†Do.ÒÆ¥ */
- $"99B7 9313 67B5 4823 BD88 3611 E5A8 8054" /* ™·“.gµH#½ˆ6.娀T */
- $"3C15 C120 1B02 5B2A 2195 DD25 F90A 48A6" /* <.Á ..[*!•Ý%ùÂH¦ */
- $"BF92 56B9 4639 F2BD AC5F 3350 9699 14A7" /* ¿’V¹F9ò½¬_3P–™.§ */
- $"30A2 4B91 C33D 3175 F806 15AA 4B01 558F" /* 0¢K‘Ã=1uø..ªK.U */
- $"400B 8148 DAF5 29FD 0561 1CA8 7239 51F4" /* @.HÚõ)ý.a.¨r9Qô */
- $"A169 A92B EE2F 4F3D 2F96 029B 186B 7219" /* ¡i©+î/O=/–.›.kr. */
- $"C673 0E85 6FAC 9889 C64A 90AE DBAF E8E3" /* Æs.…o¬˜‰ÆJ®Û¯èã */
- $"6607 DF2A C332 C690 840A 817A ABFF 3302" /* f.ß*Ã2Æ„Âz«ÿ3. */
- $"1464 A65F E1B3 04B0 90C6 51E5 6A2E 7EA2" /* .d¦_á³.°ÆQåj.~¢ */
- $"9222 EABA 0632 2F13 B1A3 2337 85B4 E390" /* ’"êº.2/.±£#7…´ã */
- $"766A 98DB BDDD 9813 F7BD 8AEA 1AB2 BEEC" /* vj˜Û½Ý˜.÷½Šê.²¾ì */
- $"BEE3 F4B7 EE35 6BB8 ADE1 E772 AEB0 7E66" /* ¾ãô·î5k¸­áçr®°~f */
- $"3F99 05C1 3339 69B2 C1D5 4CC7 DB0B 3C67" /* ?™.Á39i²ÁÕLÇÛ.<g */
- $"7F80 43C8 7B29 FA49 8C64 3FEB 6406 35FE" /* .€CÈ{)úIŒd?ëd.5þ */
- $"FAEB 4922 9410 5352 D4C0 00CB 72EA 56CE" /* úëI"”.SRÔÀ.ËrêVÎ */
- $"22F8 673A D3E8 AAFA E992 5B7F 827C A83D" /* "øg:Óèªúé’[.‚|¨= */
- $"586F 54B4 69F8 C6B7 FF14 CFD4 4069 C50F" /* XoT´iøÆ·ÿ.ÏÔ@iÅ. */
- $"9E23 797E DE78 5B86 FCAE BDE5 B920 9551" /* ž#y~Þx[†ü®½å¹ •Q */
- $"22EC 4155 0582 10F4 BF8C 144A 3251 97F3" /* "ìAU.‚.ô¿Œ.J2Q—ó */
- $"2E7D 1E04 969B 4C15 8BDB FAC1 9743 2B6C" /* .}..–›L.‹ÛúÁ—C+l */
- $"6EF5 C95E 47CB A380 A635 C17D AD97 42EA" /* nõÉ^GË£€¦5Á}­—Bê */
- $"88A1 A63E FC76 A19C AE08 C868 115F 098D" /* ˆ¡¦>üv¡œ®.Èh._Æ */
- $"A1BE 16D4 3BF4 91C9 6CF1 DBE0 E0CA 0DAA" /* ¡¾.Ô;ô‘ÉlñÛààÊ.ª */
- $"EFCB 2A06 908B 7BAC CCF3 4CF8 179A 615E" /* ïË*.‹{¬ÌóLø.ša^ */
- $"590D AB18 CB49 E032 B8ED 2A8E 584A ACDC" /* Y.«.ËIà2¸í*ŽXJ¬Ü */
- $"4797 F732 B8C9 24A4 0E5C 85A0 FED8 E30A" /* G—÷2¸É$¤.\… þØã */
- $"ECBF 08FB CDC1 E09D 9556 837A E086 95AC" /* ì¿.ûÍÁà•Vƒzà†•¬ */
- $"BA2C E411 756E F132 9CE6 EDC4 6C90 B09E" /* º,ä.unñ2œæíÄl°ž */
- $"3C59 DE78 44D0 E445 BCA0 3AE0 05D9 7440" /* <YÞxDÐäE¼ :à.Ùt@ */
- $"F09F 10EA E0BA 4596 84F5 81A2 550E 57A7" /* ðŸ.êàºE–„õ¢U.W§ */
- $"F2A8 B2DD D612 A18F D74A 671D B70C 994A" /* ò¨²ÝÖ.¡×Jg.·.™J */
- $"9441 8E10 12B8 80F0 6249 2075 CD39 3667" /* ”AŽ..¸€ðbI uÍ96g */
- $"6632 AFDD 5E48 6B22 15CC 179A C6FA 47AE" /* f2¯Ý^Hk".Ì.šÆúG® */
- $"66AF 7AFB 033D 03F1 B829 B852 F1BF 55DB" /* f¯zû.=.ñ¸)¸Rñ¿UÛ */
- $"17F6 E1EF A955 F266 ACFE 75F4 34FC 38B0" /* .öáï©Uòf¬þuô4ü8° */
- $"0068 7DD6 016E 98D4 57DB 6220 D269 4BE9" /* .h}Ö.n˜ÔWÛb ÒiKé */
- $"8007 22E8 9D82 8FCE EB41 317B D0FA 323B" /* €."è‚ÎëA1{Ðú2; */
- $"B2C0 06D3 99E3 ED9A 2423 78CD AE34 CF5B" /* ²À.Ó™ãíš$#xÍ®4Ï[ */
- $"58DA 8F69 9604 4804 8682 B58C C1DA 1E21" /* XÚi–.H.†‚µŒÁÚ.! */
- $"0E4E F709 83E1 B335 F208 6565 C882 70A0" /* .N÷ƃá³5ò.eeÈ‚p  */
- $"2F58 5379 3999 7F2E E63D 81E4 C2EB 58E3" /* /XSy9™..æ=äÂëXã */
- $"4605 35E7 76D7 C7D0 AEDA 26C5 8BB6 0F99" /* F.5çv×ÇЮÚ&Å‹¶.™ */
- $"77C0 D3D6 9870 8279 4C2E 29C6 518F 13E6" /* wÀÓÖ˜p‚yL.)ÆQ.æ */
- $"1373 FCB8 FD55 3D8F 8322 F8F4 CD80 3C09" /* .sü¸ýU=ƒ"øôÍ€<Æ */
- $"1496 931A E1BF 0AE6 2842 6FF7 6986 6AEE" /* .–“.á¿Âæ(Bo÷i†jî */
- $"1AE9 FF0A 947D E3F6 D93F B59B F6D5 5FB6" /* .éÿ”}ãöÙ?µ›öÕ_¶ */
- $"AAC7 EDD1 1FDB 5A5F 5549 7D55 2E1F B6A4" /* ªÇíÑ.ÛZ_UI}U..¶¤ */
- $"FDAA F7D4 DF7D 4E80 F173 72EC 2AD6 46CC" /* ýª÷Ôß}N€ñsrì*ÖFÌ */
- $"6653 9F8A F548 8CD9 F7CC 0758 DFBD 1976" /* fSŸŠõHŒÙ÷Ì.Xß½.v */
- $"0832 03BE 1A6C 242F 4978 025D 37A6 D46A" /* .2.¾.l$/Ix.]7¦Ôj */
- $"B859 037D 5250 D0D6 8FC0 4C05 AAAB 7F38" /* ¸Y.}RPÐÖÀL.ª«.8 */
- $"799B 43F9 E370 D367 B412 8CC2 F941 E270" /* y›CùãpÓg´.ŒÂùAâp */
- $"A967 1978 577B 7A22 541A 7DDD A593 75E5" /* ©g.xW{z"T.}Ý¥“uå */
- $"6B05 D950 D953 DA5E 7EBF D5D3 4314 5006" /* k.ÙPÙSÚ^~¿ÕÓC.P. */
- $"8EC3 8474 6B41 83B3 7B16 9C95 721B 5405" /* ŽÃ„tkAƒ³{.œ•r.T. */
- $"F4AE A41F 92D8 56DA F2C9 4BF8 5B0A EBC6" /* ô®¤.’ØVÚòÉKø[ÂëÆ */
- $"29D5 F4F3 36B9 A6D7 3BC4 75D7 972C 7465" /* )Õôó6¹¦×;Äu×—,te */
- $"CCBE 21FA 6EAF 6B26 465B 4676 356D E640" /* ̾!ún¯k&F[Fv5mæ@ */
- $"04C3 0E39 C431 FBA5 2B53 E001 8F9D 37F5" /* .Ã.9Ä1û¥+Sà.7õ */
- $"F289 EC84 85B8 5FC3 F74A 734B E0B1 ED8C" /* ò‰ì„…¸_Ã÷JsKà±íŒ */
- $"5DF4 6678 22E4 887C A45B 1478 DFC3 A9E9" /* ]ôfx"äˆ|¤[.xßéé */
- $"F234 5723 01B3 2685 2754 8133 8699 21C8" /* ò4W#.³&…'T3†™!È */
- $"180A 27F8 174C FED5 8F71 4082 C4E8 DB83" /* .Â'ø.LþÕq@‚ÄèÛƒ */
- $"BDA4 4506 3FA4 5286 5D63 00F7 905D A740" /* ½¤E.?¤R†]c.÷]§@ */
- $"5251 07FA 22F8 1334 FBA6 5640 7199 FA41" /* RQ.ú"ø.4û¦V@q™úA */
- $"A3C7 3CC1 ECF5 7F43 A9AE FBD5 C1F0 18B3" /* £Ç<Áìõ.C©®ûÕÁð.³ */
- $"7072 4809 0A4C 8127 6E10 5F7C 335C CC28" /* prHÆÂL'n._|3\Ì( */
- $"B723 3D12 724D 3DE5 37B3 1C2A 136D 2258" /* ·#=.rM=å7³.*.m"X */
- $"DCE6 BFA4 0DAD FB6E 72C1 70F7 6D71 785D" /* Üæ¿¤.­ûnrÁp÷mqx] */
- $"BC75 69CE CE3B CF7A 170E 8343 CBA9 DE66" /* ¼uiÎÎ;Ïz..ƒCË©Þf */
- $"06ED 779C AA9F F28D 943D 5E3E DEDE 4769" /* .íwœªŸò”=^>ÞÞGi */
- $"289C 5523 9792 EFAC 19A6 A945 B504 9446" /* (œU#—’ï¬.¦©Eµ.”F */
- $"A4DF BAA6 B5EB BAEF 7B92 3E08 6D17 870F" /* ¤ßº¦µëºï{’>.m.‡. */
- $"9E0A 487E 8A60 90B5 E555 CD4F D2F1 FE67" /* žÂH~Š`µåUÍOÒñþg */
- $"88DE BB6A E653 A2B6 F9C7 B226 2544 A167" /* ˆÞ»jæS¢¶ùDz&%D¡g */
- $"5DF7 5F35 F38B DB99 30F8 C210 AF41 C7A4" /* ]÷_5ó‹Û™0øÂ.¯AǤ */
- $"167B 30B4 8B8D 0821 4ADB EFC6 5728 A86D" /* .{0´‹.!JÛïÆW(¨m */
- $"99A8 2A1D 51E2 4CE5 AEA5 7ECC 23CB 628B" /* ™¨*.QâL宥~Ì#Ëb‹ */
- $"E438 F41A A280 CF2E 8E51 5004 A9BA 64AB" /* ä8ô.¢€Ï.ŽQP.©ºd« */
- $"B0AA 608C 8C19 38F7 567B 0C45 B7C5 0E2D" /* °ª`ŒŒ.8÷V{.E·Å.- */
- $"0F3D A192 B0F5 A567 4EE1 9FF5 F085 979A" /* .=¡’°õ¥gNáŸõð…—š */
- $"13DA 6FC3 89D0 0370 C986 5F44 AADD CAB9" /* .ÚoÉÐ.pɆ_DªÝʹ */
- $"FBD0 8CDE 18D9 8FED 715E 264F 0D69 2CEF" /* ûÐŒÞ.Ùíq^&O.i,ï */
- $"63F0 7A64 D65B 094A 6976 E6D4 E3DC 1583" /* cðzdÖ[ÆJivæÔãÜ.ƒ */
- $"FE8C BD22 992E 3FDB AF18 03A7 0A74 8333" /* þŒ½"™.?Û¯..§Âtƒ3 */
- $"76E3 5195 C7FA A180 5123 7E0C 544B 9C8C" /* vãQ•Çú¡€Q#~.TKœŒ */
- $"928D 3DF6 F330 4D6E 8049 11AF 064E 4E3B" /* ’=öó0Mn€I.¯.NN; */
- $"B937 EE03 A4D2 F530 4513 47F0 5E98 E060" /* ¹7î.¤Òõ0E.Gð^˜à` */
- $"72C6 46EC B761 FAB4 B0FA 9A80 FF78 5408" /* rÆFì·aú´°úš€ÿxT. */
- $"9152 452E 0111 2383 5E5F 6C4F FC53 0EDE" /* ‘RE...#ƒ^_lOüS.Þ */
- $"1092 66D3 5F38 1AC8 1412 561A 4017 9110" /* .’fÓ_8.È..V.@.‘. */
- $"CA19 3E6F 8803 0908 5F57 A2E2 4744 E3C4" /* Ê.>oˆ.Æ._W¢âGDãÄ */
- $"F1BF 49F6 836F E294 610B 4098 2761 1502" /* ñ¿Iöƒoâ”a.@˜'a.. */
- $"CCB2 0C11 81DD 05B4 ACD8 8F28 C5DD 1DD8" /* ̲..Ý.´¬Ø(ÅÝ.Ø */
- $"58E0 C1E1 70A8 42BF 456F FE20 1261 1F81" /* XàÁáp¨B¿Eoþ .a. */
- $"08AC FEB1 F89C 3576 EF94 A20C 255F 3B3F" /* .¬þ±øœ5v.%_;? */
- $"5E6B B0C0 4B3F EADC 8536 55E9 8144 C946" /* ^k°ÀK?êÜ…6UéDÉF */
- $"7613 8662 DCB1 C761 2BDA 412D C7D6 2D5C" /* v.†bܱÇa+ÚA-ÇÖ-\ */
- $"BCC0 F84E 54E4 9B0B BDF7 4F45 FCA6 D6AE" /* ¼ÀøNTä›.½÷OEü¦Ö® */
- $"1754 31D1 E6CB 94F4 D163 2B1D 017D 4171" /* .T1ÑæË”ôÑc+..}Aq */
- $"ABE0 0285 395D 3D23 42D7 E641 348A 0C2E" /* «à.…9]=#B׿A4Š.. */
- $"9C16 42C9 8E99 B654 8046 C365 EA71 CE64" /* œ.BÉŽ™¶T€FÃeêqÎd */
- $"B762 0E4D 7C48 617B CDB9 6264 2C81 4A9F" /* ·b.M|Ha{͹bd,JŸ */
- $"8600 50B2 B985 EB73 DB96 82EA FF7D 1E50" /* †.P²¹…ësÛ–‚êÿ}.P */
- $"6A49 AEA3 78E3 2DFD 0D59 3013 F257 AAA9" /* jI®£xã-ý.Y0.òWª© */
- $"0E5D 81DA E983 8D48 41BE DF0B FB34 AEA5" /* .]ÚéƒHA¾ß.û4®¥ */
- $"07B6 B0AA 1E53 1D9F B9C7 4CE5 8D46 6151" /* .¶°ª.S.Ÿ¹ÇLåFaQ */
- $"8000 0C24 1D66 1946 1073 4456 2361 E486" /* €..$.f.F.sDV#aä† */
- $"120F 29F0 6121 2D6A AF51 0C82 F68C B571" /* ..)ða!-j¯Q.‚öŒµq */
- $"77AD BE59 9145 D105 DE8C 9500 0000 0000" /* w­¾Y‘EÑ.ÞŒ•..... */
- $"0000 0032 BC9A BD52 00B4 6C6F 3753 1A96" /* ...2¼š½R.´lo7S.– */
- $"9B00 FCD3 F055 A11A AFB1 FB95 1610 88D0" /* ›.üÓðU¡.¯±û•..ˆÐ */
- $"8D32 9653 FC10 55FD B965 C1A9 B6BD 2245" /* 2–Sü.Uý¹eÁ©¶½"E */
- $"D48B 8230 2EF5 56F1 6618 9F91 FEC4 4106" /* Ô‹‚0.õVñf.Ÿ‘þÄA. */
- $"F23B 7C8A 0320 79EA D7A0 D75F 09BD B985" /* ò;|Š. yê× ×_ƽ¹… */
- $"C22B E2F0 0508 64BA AA2F 2414 19D7 311D" /* Â+âð..dºª/$..×1. */
- $"F709 E05C 809B 9E62 83F8 FF13 2DE3 01D6" /* ÷Æà\€›žbƒøÿ.-ã.Ö */
- $"8ADC F118 5A80 77C8 DABC 2FB5 CEF6 FCFB" /* ŠÜñ.Z€wÈÚ¼/µÎöüû */
- $"7A94 2773 6CEC FAE2 7865 753C E612 E4AF" /* z”'slìúâxeu<æ.ä¯ */
- $"657C 5C67 8FB3 1E56 A319 1ED1 FE48 0D8D" /* e|\g³.V£..ÑþH. */
- $"2431 B10B 8E15 0A4B FF7F 7EB8 D068 5015" /* $1±.Ž.ÂKÿ.~¸ÐhP. */
- $"151E C37C 0390 F6CC 64A8 0000 0000 0000" /* ..Ã|.öÌd¨...... */
- $"0000 0002 5991 79E8 2B17 082C ABCB DA90" /* ....Y‘yè+..,«ËÚ */
- $"CE92 8CB0 E992 0710 2B8F CAAB D217 C4E9" /* Î’Œ°é’..+Ê«Ò.Äé */
- $"E55E 11D2 6200 B530 5EF4 6932 1CBF EA6C" /* å^.Òb.µ0^ôi2.¿êl */
- $"E58D 2AA9 68C2 89FF 7903 A6ED D674 F1FC" /* å*©h‰ÿy.¦íÖtñü */
- $"A256 3564 F7E0 4DDF CDA1 2729 F7FF 6EB2" /* ¢V5d÷àMßÍ¡')÷ÿn² */
- $"9D35 70A9 5447 924B B8E1 71D3 4A8A DECB" /* 5p©TG’K¸áqÓJŠÞË */
- $"93E1 8FA0 140E C9B7 6124 8020 D660 3D22" /* “á ..É·a$€ Ö`=" */
- $"C708 222E 7289 B890 0002 00E1 2BC6 84B9" /* Ç.".r‰¸...á+Æ„¹ */
- $"25DF 442F 97FF 7FEF 68EC 7325 B92C A150" /* %ßD/—ÿ.ïhìs%¹,¡P */
- $"EE19 48C3 2540 0000 0000 0000 0000 0749" /* î.HÃ%@.........I */
- $"DD4A 9891 375B B0E0 C176 A698 672E F295" /* ÝJ˜‘7[°àÁv¦˜g.ò• */
- $"0311 7B3E 2B87 B4B8 7FB3 5DF7 9C67 CBEA" /* ..{>+‡´¸.³]÷œgËê */
- $"6A19 4107 C9F4 2B19 6829 179A 3FFF 7E8C" /* j.A.Éô+.h).š?ÿ~Œ */
- $"44A2 15E8 8E37 B422 F825 1862 58FF 7FFE" /* D¢.èŽ7´"ø%.bXÿ.þ */
- $"8EA1 D38C 727A 3071 1FF0 541F 6AB4 EA83" /* Ž¡ÓŒrz0q.ðT.j´êƒ */
- $"44A0 086A BAD7 6966 FC5D 0E72 A66C C301" /* D .jº×ifü].r¦lÃ. */
- $"3E1F B82C 9192 20D5 0322 858F 224C 87F5" /* >.¸,‘’ Õ."…"L‡õ */
- $"E940 85ED 7B36 EC96 D05C 21FF 7B10 59E1" /* é@…í{6ì–Ð\!ÿ{.Yá */
- $"E125 6C79 7852 2031 F3BA 34FB 6E57 BC3B" /* á%lyxR 1óº4ûnW¼; */
- $"69F0 C303 3A2A A573 D1E0 9836 C703 D02C" /* iðÃ.:*¥sÑà˜6Ç.Ð, */
- $"58CC 3DA7 FF0D 4301 F607 07C1 31FA 7F66" /* XÌ=§ÿ.C.ö..Á1ú.f */
- $"89BD A759 90CD 107A E5BD 6398 D7BE F7BB" /* ‰½§YÍ.zå½c˜×¾÷» */
- $"E273 D09A F8EE D21B 1015 A513 18F5 5C7D" /* âsКøîÒ...¥..õ\} */
- $"FD20 E7C9 C6BE 3105 7A4B 831D 251B 4C36" /* ý çÉÆ¾1.zKƒ.%.L6 */
- $"2A49 3EAC 1A86 9F87 09CC 0B00 2CF4 643C" /* *I>¬.†Ÿ‡ÆÌ..,ôd< */
- $"7012 8574 D28F 952D E959 1093 FE7E F021" /* p.…tÒ•-éY.“þ~ð! */
- $"028C 74ED 0E90 8DCD 5F06 B4BE EA1A 4C53" /* .Œtí.Í_.´¾ê.LS */
- $"A47F 3706 93CB 8FAB 7864 D123 4A39 B6BA" /* ¤.7.“Ë«xdÑ#J9¶º */
- $"CDCB 8AA9 2128 54FA CFB5 C4E1 F470 AD6E" /* ÍËŠ©!(TúϵÄáôp­n */
- $"6A05 07C9 72AA 562E F22F C922 BCF9 7DDF" /* j..ÉrªV.ò/É"¼ù}ß */
- $"3565 1AD4 F707 7DC0 1038 129E 4EA0 297E" /* 5e.Ô÷.}À.8.žN )~ */
- $"1037 3516 64BB FF75 539A 5C03 F7A3 C14D" /* .75.d»ÿuSš\.÷£ÁM */
- $"C617 50C8 14F1 7C95 0372 1443 C3F0 7ED4" /* Æ.PÈ.ñ|•.r.CÃð~Ô */
- $"EFDA FA88 BDD2 E947 7A43 A4A3 2339 CD58" /* ïÚúˆ½ÒéGzC¤£#9ÍX */
- $"526C 8407 8211 1949 6431 DB89 390B EB27" /* Rl„.‚..Id1Û‰9.ë' */
- $"9975 F04F D507 AC80 5D51 95B0 992A 1AC6" /* ™uðOÕ.¬€]Q•°™*.Æ */
- $"8699 86CC E64E 441C 2EFD 4F8C 70C1 DB2A" /* †™†ÌæND..ýOŒpÁÛ* */
- $"5395 8DF7 E279 AA65 BA32 2FD1 48C9 F400" /* S•÷âyªeº2/ÑHÉô. */
- $"D0EA 663D 92FF 053E 130C A1A9 491B E583" /* Ðêf=’ÿ.>..¡©I.åƒ */
- $"6133 2EE1 AFBE 86B8 D218 B698 906D A5B9" /* a3.᯾†¸Ò.¶˜m¥¹ */
- $"ACD3 9DC7 8720 C668 E134 1A1C 9C71 EA49" /* ¬ÓLJ Æhá4..œqêI */
- $"7AE9 9276 56E9 78BB 5679 18E2 6044 2763" /* zé’vVéx»Vy.â`D'c */
- $"2342 64F4 3952 2712 F704 B2E8 C1D2 35CC" /* #Bdô9R'.÷.²èÁÒ5Ì */
- $"F0AB 5ABD 61A0 1CD5 5316 0E78 22E6 B807" /* ð«Z½a .ÕS..x"æ¸. */
- $"8774 CA36 91EF 0BFF D969 6330 3900 00D1" /* ‡tÊ6‘ï.ÿÙic09..Ñ */
- $"2300 0000 0C6A 5020 200D 0A87 0A00 0000" /* #....jP .‡Â... */
- $"1466 7479 706A 7032 2000 0000 006A 7032" /* .ftypjp2 ....jp2 */
- $"2000 0000 4F6A 7032 6800 0000 1669 6864" /* ...Ojp2h....ihd */
- $"7200 0002 0000 0002 0000 0407 0701 0000" /* r............... */
- $"0000 0F63 6F6C 7201 0000 0000 0010 0000" /* ...colr......... */
- $"0022 6364 6566 0004 0000 0000 0001 0003" /* ."cdef.......... */
- $"0001 0000 0001 0000 0002 0002 0000 0003" /* ................ */
- $"0000 0000 6A70 3263 FF4F FF51 0032 0000" /* ....jp2cÿOÿQ.2.. */
- $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */
- $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */
- $"0004 0701 0107 0101 0701 0107 0101 FF52" /* ..............ÿR */
- $"000C 0000 0001 0105 0404 0001 FF5C 0013" /* ............ÿ\.. */
- $"2050 5858 6058 5860 5858 6058 5858 5050" /* PXX`XX`XX`XXXPP */
- $"58FF 6400 1100 014B 616B 6164 752D 7635" /* Xÿd....Kakadu-v5 */
- $"2E32 2E31 FF90 000A 0000 0000 D036 0001" /* .2.1ÿ.Â....Ð6.. */
- $"FF93 CFC2 DC03 54F9 36EC A8DC 2A8C 3701" /* ÿ“ÏÂÜ.Tù6ì¨Ü*Œ7. */
- $"118B 95C3 F2B2 5A7A 0428 C30A 2C64 B704" /* .‹•Ãò²Zz.(ÃÂ,d·. */
- $"5C3C 6DED 8696 4890 6404 5638 430C 59C5" /* \<m톖Hd.V8C.YŠ*/
- $"D913 B06B 0B08 E00E 1802 6D82 7225 E695" /* Ù.°k..à...m‚r%æ• */
- $"9F1E E7B0 D1DF 323C 61DC 1F25 E3FF 83E2" /* Ÿ.ç°Ñß2<aÜ.%ãÿƒâ */
- $"A49A DED4 4495 A948 5B70 9E5A 01F1 2431" /* ¤šÞÔD•©H[pžZ.ñ$1 */
- $"8EE5 2B54 2863 9041 FAE9 9E9F 1B85 E206" /* Žå+T(cAú鞟.…â. */
- $"4104 106C 5027 632A 8716 C3A5 F047 B3D5" /* A..lP'c*‡.Ã¥ðG³Õ */
- $"EE2B 19CD 2B75 17D8 DFB6 E2BF 491E A41F" /* î+.Í+u.Øß¶â¿I.¤. */
- $"BC48 3493 DEFB 453D 64DE DEA0 68DB EF5B" /* ¼H4“ÞûE=dÞÞ hÛï[ */
- $"1E69 8F3F C55C 1FF6 1823 1543 F483 DF20" /* .i?Å\.ö.#.Côƒß */
- $"F5B4 08F4 5D20 4DF0 7D7D 2007 2ACA 5B5E" /* õ´.ô] Mð}} .*Ê[^ */
- $"159F EF4A 505D 811D A8A3 5476 5539 B45B" /* .ŸïJP].¨£TvU9´[ */
- $"3113 1AC7 00F3 F1A7 E9E3 9E88 5D91 6CD5" /* 1..Ç.óñ§é㞈]‘lÕ */
- $"2CC0 F92B 2063 FF29 4B0E 775A 06EE 75CC" /* ,Àù+ cÿ)K.wZ.îuÌ */
- $"DA54 AC2F B72D 1C25 1E46 A4F8 C3E1 7D8D" /* ÚT¬/·-.%.F¤øÃá} */
- $"85AE BBE6 3DBE EC4A 35F7 3B36 1FBF BC38" /* …®»æ=¾ìJ5÷;6.¿¼8 */
- $"2DC1 785C D644 2BED AB51 1950 2643 8730" /* -Áx\ÖD+í«Q.P&C‡0 */
- $"2AE9 E4EB 1B8E 8F90 BA0C FF2F 6F65 5F28" /* *éäë.Žº.ÿ/oe_( */
- $"1A3F 9398 FF20 01A2 69A0 02C9 8D1B C3EA" /* .?“˜ÿ .¢i .É.Ãê */
- $"A600 6417 3CA3 9E84 93EF 063D 59DC 702C" /* ¦.d.<£ž„“ï.=YÜp, */
- $"959D C3A6 B1ED DEF1 F321 5BA6 FCCD 7762" /* •æ±íÞñó![¦üÍwb */
- $"6C23 7398 AA59 4BBA 0052 B8A7 0608 1AAC" /* l#s˜ªYKº.R¸§...¬ */
- $"5B2E AF60 17F4 278E 6433 6F75 7839 CED2" /* [.¯`.ô'Žd3oux9ÎÒ */
- $"F32E 5D7D 9D40 B145 4CFB A25C D8D7 4BCB" /* ó.]}@±ELû¢\Ø×KË */
- $"956D 88DD 4B92 64BF 4CD4 AFD5 6E56 9859" /* •mˆÝK’d¿LÔ¯ÕnV˜Y */
- $"ABEF BB40 AD0E 6E1F 9B3B 16A3 D9D3 58DF" /* «ï»@­.n.›;.£ÙÓXß */
- $"584E C303 1DAD D18B 6082 9C29 88EB 5163" /* XNÃ..­Ñ‹`‚œ)ˆëQc */
- $"A42D 061A 1570 64A9 0F1C E00D 56D9 E0CB" /* ¤-...pd©..à.VÙàË */
- $"7C66 799C 8EB4 BFCA CF5C CFC2 B611 4F0C" /* |fyœŽ´¿ÊÏ\϶.O. */
- $"AFDE 008C 3580 A270 0C1A 3737 50A1 9A89" /* ¯Þ.Œ5€¢p..77P¡š‰ */
- $"2546 BB2C 62A0 57BE 59CB C00A 1EE9 0F1D" /* %F»,b W¾YËÀÂ.é.. */
- $"C528 40D4 EA69 D281 AED4 B078 F27A 0B42" /* Å(@ÔêiÒ®Ô°xòz.B */
- $"7AD2 DADD 146B 7FFF 223D 6A74 2041 4FCF" /* zÒÚÝ.k.ÿ"=jt AOÏ */
- $"46E1 60C8 9ABE 841E E18D 1712 DB6D 902B" /* Fá`Èš¾„.á..Ûm+ */
- $"7BE6 56DA 7E4B 1704 A373 2802 B120 0184" /* {æVÚ~K..£s(.± .„ */
- $"0681 4499 2739 CE73 9CE8 99D8 C352 337C" /* .D™'9Îsœè™ØÃR3| */
- $"06AB BB71 6257 16EF B535 4972 8C2F 2EE0" /* .«»qbW.ïµ5IrŒ/.à */
- $"85CC 8431 D867 47EE CC43 6E87 A485 2316" /* …Ì„1ØgGîÌCn‡¤…#. */
- $"4927 AE22 C12D 49CE 739C E61C 97D0 99CC" /* I'®"Á-IÎsœæ.—Ð™Ì */
- $"3DC5 F26B 1A31 E742 3E56 464B 2944 108E" /* =Åòk.1çB>VFK)D.Ž */
- $"CB0C F4C7 E144 47E1 47C1 F6BD 8089 21DB" /* Ë.ôÇáDGáGÁö½€‰!Û */
- $"8279 4533 01BF B9CC C444 AD53 5F75 D706" /* ‚yE3.¿¹ÌÄD­S_u×. */
- $"3FDD CA27 5D6C 9F54 1CCF F838 38E4 B2E4" /* ?ÝÊ']lŸT.Ïø88ä²ä */
- $"F9FF 429F 59FE D27B 4A5E A69F 2C21 38F6" /* ùÿBŸYþÒ{J^¦Ÿ,!8ö */
- $"5A74 D405 2FEE 50B8 E5F1 C489 2693 5B33" /* ZtÔ./îP¸åñĉ&“[3 */
- $"D2C2 9DEC 68ED F55C 1FAC 1401 8D66 795A" /* ÒÂìhíõ\.¬..fyZ */
- $"F5F3 27A3 5874 6681 9AC6 F41D A4E6 40DA" /* õó'£XtfšÆô.¤æ@Ú */
- $"3EE5 CCEE 340C AF72 87FD 6B2A EB94 88EC" /* >åÌî4.¯r‡ýk*딈ì */
- $"A61D A536 7AC2 C6B8 85D9 CEBD 146C 83B5" /* ¦.¥6zÂÆ¸…Ùν.lƒµ */
- $"F5E0 A3C7 B524 BC64 B6B5 91A6 BF91 C547" /* õà£Çµ$¼d¶µ‘¦¿‘ÅG */
- $"BD87 811F D58E 8E51 BB89 FA6C 5257 33D9" /* ½‡.ÕŽŽQ»‰úlRW3Ù */
- $"A964 A4AB 3BB9 9608 BECC 0D9C D6B9 3D3A" /* ©d¤«;¹–.¾Ì.œÖ¹=: */
- $"CB64 28BE 3B07 6318 DF9D C134 9F16 567A" /* Ëd(¾;.c.ßÁ4Ÿ.Vz */
- $"8127 5FFD F396 BA0C B86F AA17 2301 022A" /* '_ýó–º.¸oª.#..* */
- $"3742 CE95 B1AF F858 C503 8156 35E0 8F2C" /* 7BΕ±¯øXÅ.V5à, */
- $"67D7 2D41 1F0B 5284 1535 AF16 6540 FB65" /* g×-A..R„.5¯.e@ûe */
- $"65BC 5F6B 136D 73A5 1C5D 3D92 FF5F 8494" /* e¼_k.ms¥.]=’ÿ_„” */
- $"FDBF E0C5 821F 072A 0EEB B855 6B42 CEE8" /* ý¿àÅ‚..*.ë¸UkBÎè */
- $"ABEE 381E 894E DF1E 29DD 4B78 3F0A F5EB" /* «î8.‰Nß.)ÝKx?Âõë */
- $"B9F8 61B8 8266 3BD8 A2AC 5BC1 38F4 5098" /* ¹øa¸‚f;Ø¢¬[Á8ôP˜ */
- $"3951 2437 1798 7BF9 EA00 12BF CF3E 9166" /* 9Q$7.˜{ùê..¿Ï>‘f */
- $"8253 6FF0 B942 70D7 C729 0866 33F7 3484" /* ‚Soð¹Bp×Ç).f3÷4„ */
- $"ADF8 C3D2 4EF6 1DF4 0E6F 8E64 B470 1D5E" /* ­øÃÒNö.ô.oŽd´p.^ */
- $"F311 9BD1 EDE1 BA5D 7601 2053 D70A FDCD" /* ó.›Ñíáº]v. S×ÂýÍ */
- $"82C0 1BDA A35C FAD2 67AD E569 7851 10A7" /* ‚À.Ú£\úÒg­åixQ.§ */
- $"EF9A 3533 EC03 E813 08B6 D984 1A1D 3DC0" /* ïš53ì.è..¶Ù„..=À */
- $"7C8E E03E 4A44 03E4 7894 FF1F 080E 2BFD" /* |Žà>JD.äx”ÿ...+ý */
- $"EEB4 E64A C757 389B 5780 3AF8 248C 580D" /* î´æJÇW8›W€:ø$ŒX. */
- $"461B D417 66BA CEB2 2042 3C84 DAF9 C127" /* F.Ô.fºÎ² B<„ÚùÁ' */
- $"63E9 168C A9E3 D418 61E8 C46C CF01 F59B" /* cé.Œ©ãÔ.aèÄlÏ.õ› */
- $"4518 8833 3E62 5B14 BFD1 41A8 45D6 D311" /* E.ˆ3>b[.¿ÑA¨EÖÓ. */
- $"8431 80DB 1FD5 5839 DE81 BCD9 EAFB EE26" /* „1€Û.ÕX9Þ¼Ùêûî& */
- $"33DD 9E73 0B6F F957 26EE E7BA E0DA FF22" /* 3Ýžs.oùW&îçºàÚÿ" */
- $"EA50 24BF A182 089D 749A 6AAF BFF2 224D" /* êP$¿¡‚.tšj¯¿ò"M */
- $"30D4 11D0 E07A A012 587A 0633 92B4 CBFC" /* 0Ô.Ðàz .Xz.3’´Ëü */
- $"8E1B E5AC 9025 A74D 2819 3F9D 8132 B795" /* Ž.å¬%§M(.?2·• */
- $"458E 4651 1589 158D D24C A5B0 CBFA 359E" /* EŽFQ.‰.ÒL¥°Ëú5ž */
- $"BDB0 E4FB BFE3 5854 3E88 A646 71B1 9CB2" /* ½°äû¿ãXT>ˆ¦Fq±œ² */
- $"BB4E BA8E E170 8CBF C1F5 3141 F537 C0FA" /* »NºŽápŒ¿Áõ1Aõ7Àú */
- $"9780 6448 BA3B 94D6 3E8B 7AF0 0B5A C7A2" /* —€dHº;”Ö>‹zð.ZÇ¢ */
- $"4D05 C6BB 7F47 7102 F66E E4E8 3681 1C97" /* M.Æ».Gq.önäè6.— */
- $"0996 4491 F713 2A24 3756 2715 4B55 762F" /* Æ–D‘÷.*$7V'.KUv/ */
- $"78CB 2608 0563 73F7 5626 9F35 0C54 6822" /* xË&..cs÷V&Ÿ5.Th" */
- $"F061 792A 4AFC 163A 9F83 8F82 638B 524D" /* ðay*Jü.:Ÿƒ‚c‹RM */
- $"C21C 3735 DB76 6F4B 01F2 3E7E 5755 5945" /* Â.75ÛvoK.ò>~WUYE */
- $"6149 AAEE 1A88 7748 DC47 79E4 0660 318C" /* aIªî.ˆwHÜGyä.`1Œ */
- $"AA94 E92D 9879 C9C1 AC17 C828 7BBB 997A" /* ª”é-˜yÉÁ¬.È({»™z */
- $"315E 858F F31D 3522 A6D2 B3BD E548 DBA2" /* 1^…ó.5"¦Ò³½åHÛ¢ */
- $"3274 749B 11C1 9570 D715 0350 4CC4 6820" /* 2tt›.Á•p×..PLÄh */
- $"560A 8542 A38D 913B 3863 FF5C 97F2 9BA5" /* VÂ…B£‘;8cÿ\—ò›¥ */
- $"893F 6C9B 15A2 EE40 BCD6 2676 80A9 AC89" /* ‰?l›.¢î@¼Ö&v€©¬‰ */
- $"9054 849D 859C 8DCD 181B 64F4 6D7B 71B4" /* T„…œÍ..dôm{q´ */
- $"FBD3 0C84 21D4 CC6C CF84 F40A A3CD C958" /* ûÓ.„!ÔÌlÏ„ô£ÍÉX */
- $"928E 97E5 346C 6497 2888 7903 5B0B 3277" /* ’Ž—å4ld—(ˆy.[.2w */
- $"B4D6 9AA4 86C3 C691 CA1A 3C92 FCFB 02DE" /* ´Öš¤†ÃÆ‘Ê.<’üû.Þ */
- $"A25E 5C5C C6A8 1CE2 F5B5 88AB 3673 F912" /* ¢^\\ƨ.âõµˆ«6sù. */
- $"96AF E6BC 67FF 40CC 068D C6E3 8435 48AF" /* –¯æ¼gÿ@Ì.Æã„5H¯ */
- $"B929 F509 0F59 3410 A9A6 1087 8352 11EC" /* ¹)õÆ.Y4.©¦.‡ƒR.ì */
- $"23CF CD2E 3F05 487E 0740 9BE7 236F 56FB" /* #ÏÍ.?.H~.@›ç#oVû */
- $"D0F4 677F 9514 C6E9 50BB A61A 6135 73FB" /* Ðôg.•.ÆéP»¦.a5sû */
- $"37AA FA5C 0967 671C 8485 5326 6EB5 4955" /* 7ªú\Ægg.„…S&nµIU */
- $"1AAE 5FCE C271 D992 9E8C B0DF 7795 E0F2" /* .®_ÎÂqÙ’žŒ°ßw•àò */
- $"A17A B50F E53A FE12 756F D1A1 5CE1 7C9B" /* ¡zµ.å:þ.uoÑ¡\á|› */
- $"D185 2C1A 9224 BC62 5C98 FA35 1649 6EA7" /* Ñ…,.’$¼b\˜ú5.In§ */
- $"4C7C C191 DF92 9D7A 6FE9 71D9 9A11 5A19" /* L|Á‘ß’zoéqÙš.Z. */
- $"214D F951 38FA C459 E39A 6DAE 1253 31DF" /* !MùQ8úÄYãšm®.S1ß */
- $"B335 3337 39D2 7591 BFC1 31E6 887A 8BAB" /* ³5379Òu‘¿Á1æˆz‹« */
- $"ECCD 7A58 8E4A AD65 A7E1 5FC6 8EB0 DA82" /* ìÍzXŽJ­e§á_ÆŽ°Ú‚ */
- $"0F81 6849 5CE5 AB32 B763 1227 3F4C 5691" /* .hI\å«2·c.'?LV‘ */
- $"43C7 DD24 E8D9 C4F3 7BB0 4666 7A24 1C5B" /* CÇÝ$èÙÄó{°Ffz$.[ */
- $"F57D 719F 2BDB 3794 66BA BBB6 9D8D A662" /* õ}qŸ+Û7”fº»¶¦b */
- $"CF99 4DDC E533 96D6 EEE0 3FC7 BFB8 B1B7" /* Ï™MÜå3–Öîà?Ç¿¸±· */
- $"9AE3 57C7 E1A8 B1F8 6C5C 3F0D 19C1 812D" /* šãWÇᨱøl\?..Á- */
- $"8D31 C88B C396 B5E7 3CE0 4E2C AE73 7876" /* 1ȋÖµç<àN,®sxv */
- $"0436 A295 BEC6 BDF1 C604 C41C 94E6 E7C1" /* .6¢•¾Æ½ñÆ.Ä.”æçÁ */
- $"AC78 356A B92A DB37 3360 3372 6638 0C5C" /* ¬x5j¹*Û73`3rf8.\ */
- $"F388 7CDE 4045 060F E713 C4C3 321E E08B" /* óˆ|Þ@E..ç.ÄÃ2.à‹ */
- $"0810 71EE A6AB C032 2B85 C34C 2671 8143" /* ..qÀ2+…ÃL&qC */
- $"AFDE 07D1 A40C D86A ADBE B961 EAA3 54BD" /* ¯Þ.Ѥ.Øj­¾¹aê£T½ */
- $"804D 6FA9 AA3F 7FBE BCD9 E785 A230 EA4E" /* €Mo©ª?.¾¼Ùç…¢0êN */
- $"1C08 1DF6 8373 7754 5039 7854 1192 1512" /* ...öƒswTP9xT.’.. */
- $"B956 E9A7 575E E3DB F5F9 4B02 F739 F2BB" /* ¹Vé§W^ãÛõùK.÷9ò» */
- $"91B2 73E1 3D19 EBB6 AD2F 291C 5BAC 5EEA" /* ‘²sá=.ë¶­/).[¬^ê */
- $"EEDF 8DA7 5FCA 8E8C 952D 8FD0 441C 5BA4" /* îß§_ÊŽŒ•-ÐD.[¤ */
- $"8AF6 21BE 1FAF DAE3 DADD EA91 EF73 58A0" /* Šö!¾.¯ÚãÚÝê‘ïsX  */
- $"29E6 89B2 E279 B02A D092 DD08 6187 9095" /* )扲ây°*Ð’Ý.a‡• */
- $"5C85 C903 0DD2 9ED3 538B D9BB E936 8ABB" /* \…É..ÒžÓS‹Ù»é6Š» */
- $"E203 DD03 2944 5317 7BC3 0297 2125 F198" /* â.Ý.)DS.{Ã.—!%ñ˜ */
- $"D117 8DDB E382 71F8 D0A7 14B1 6D7A A0EB" /* Ñ.Ûã‚qøÐ§.±mz ë */
- $"7C6F 7651 D2EC ECA7 F670 D09F 6CF6 30DB" /* |ovQÒìì§öpПlö0Û */
- $"0830 39B5 BC45 3915 4054 4490 A7BA 5CEC" /* .09µ¼E9.@TD§º\ì */
- $"D37B FBC2 7890 B18F DEEA 4966 D46D 5FD2" /* Ó{ûÂx±ÞêIfÔm_Ò */
- $"7811 AAD0 8EBF FB40 0F30 D8A4 2B71 5A03" /* x.ªÐŽ¿û@.0ؤ+qZ. */
- $"636A C360 C889 891D D420 A828 E337 41CC" /* cjÃ`ȉ‰.Ô ¨(ã7AÌ */
- $"3314 5473 B91F 7B78 2B3B AC7A 1127 F2DE" /* 3.Ts¹.{x+;¬z.'òÞ */
- $"E997 2101 6008 26AE 43D5 7CE7 8532 B9CE" /* é—!.`.&®CÕ|ç…2¹Î */
- $"A81A 710E 5D87 49D7 3EF6 65A3 D533 977E" /* ¨.q.]‡I×>öe£Õ3—~ */
- $"7BE9 0CA7 8B28 9ADA AF4F 45A5 99BD E21D" /* {é.§‹(šÚ¯OE¥™½â. */
- $"D4B1 BB33 2508 C8D1 31E5 E9FB F917 A8E1" /* Ô±»3%.ÈÑ1åéûù.¨á */
- $"2955 9008 F531 9010 575A 3AFB 59F4 CD63" /* )U.õ1.WZ:ûYôÍc */
- $"3EEE 2409 BCD4 E5F1 1418 6155 B6D7 A94B" /* >î$ƼÔåñ..aU¶×©K */
- $"1D48 79A8 2F32 0770 476B CE28 023A DC86" /* .Hy¨/2.pGkÎ(.:܆ */
- $"E008 813B E64A 39F5 58CE 3E75 DAA6 BD7A" /* à.;æJ9õXÎ>uÚ¦½z */
- $"1528 FF50 0738 C132 5569 3C99 C4BC A20F" /* .(ÿP.8Á2Ui<™Ä¼¢. */
- $"6DED 9310 6FE1 8BE4 BF4D D0B1 993E 0FD3" /* mí“.oá‹ä¿Mб™>.Ó */
- $"4938 1302 E4A8 FDA2 A7D2 4615 CD89 1E52" /* I8..ä¨ý¢§ÒF.͉.R */
- $"4160 51F8 BABB FEED 4281 0E0C 31CD 91D7" /* A`Qøº»þíB..1Í‘× */
- $"C7CF E302 E155 4188 0F06 097F 6906 2EC9" /* ÇÏã.áUAˆ..Æ.i..É */
- $"BE00 A1FB 0D99 8FB1 3B3D E3D3 70B8 4296" /* ¾.¡û.™±;=ãÓp¸B– */
- $"F199 E066 15B5 920C 38A2 695F F2E8 81E1" /* ñ™àf.µ’.8¢i_òèá */
- $"E0EC 34E5 97B3 9580 459F A2D9 E267 B847" /* àì4å—³•€EŸ¢Ùâg¸G */
- $"E302 3AA0 8631 8C61 5F8E 88DE 2FBB 394B" /* ã.: †1Œa_ŽˆÞ/»9K */
- $"B9EC 234B 6515 BDF3 BA80 AA30 3D50 2F90" /* ¹ì#Ke.½óº€ª0=P/ */
- $"C26A D743 2198 707A 2DC1 9C64 1647 1FA3" /* Âj×C!˜pz-Áœd.G.£ */
- $"43A2 B1C7 C95D 1E19 9650 E616 F24B C118" /* C¢±ÇÉ]..–Pæ.òKÁ. */
- $"FB68 CE23 485E BF50 ACF8 F669 B5A3 92AA" /* ûhÎ#H^¿P¬øöiµ£’ª */
- $"5625 BF48 8584 A6E7 DAC0 E203 2AF0 89A0" /* V%¿H…„¦çÚÀâ.*ð‰  */
- $"DB92 4924 9249 1BF5 D855 0470 51D0 AAE2" /* Û’I$’I.õØU.pQЪâ */
- $"A1E5 FBC9 CB80 1798 2EB3 EB1E 9FD4 46E7" /* ¡åûÉË€.˜.³ë.ŸÔFç */
- $"63DB F02E 204B D35F 54DE 0FD3 2F81 FB63" /* cÛð. KÓ_TÞ.Ó/ûc */
- $"9CEC 37F1 C9FF 5B63 B13D BFBD 1169 0415" /* œì7ñÉÿ[c±=¿½.i.. */
- $"0E97 DA89 25E3 92C7 01F5 50E6 2181 A536" /* .—Ú‰%ã’Ç.õPæ!¥6 */
- $"4020 C49B 1977 1BF5 5226 FD7D 668A D76F" /* @ Ä›.w.õR&ý}fŠ×o */
- $"2954 58F1 F44F 2935 F136 18BD C844 05FD" /* )TXñôO)5ñ6.½ÈD.ý */
- $"E325 9012 9E92 6EC3 E822 D06F A958 C54C" /* ã%.ž’nÃè"Ðo©XÅL */
- $"6A4D 0A98 093C 481D 1424 7964 E810 7A60" /* jM˜Æ<H..$ydè.z` */
- $"F2C0 8287 A7F4 B307 FBDF 2550 567E 01EA" /* òÀ‚‡§ô³.ûß%PV~.ê */
- $"2C45 4614 9A0A 04E8 397B 3DEC 6CDA CA95" /* ,EF.šÂ.è9{=ìlÚÊ• */
- $"B754 699A FF29 B46B D6E3 BB8C 153C AEC0" /* ·Tišÿ)´kÖ㻌.<®À */
- $"BEFF 46AD 744B B945 4C07 F7F7 178D 059E" /* ¾ÿF­tK¹EL.÷÷..ž */
- $"2E80 10C4 6DD6 F19E B649 73D6 8C57 7A6C" /* .€.ÄmÖñž¶IsÖŒWzl */
- $"45DE 3D43 22DE C54A DFCD 64EA 9D77 1AC6" /* EÞ=C"ÞÅJßÍdêw.Æ */
- $"E15E A9A7 0D83 D53C 100B EC25 2B93 1D27" /* á^©§.ƒÕ<..ì%+“.' */
- $"367A 864E D9C4 F0B9 DF5C 538D B2C0 24EE" /* 6z†NÙÄð¹ß\S²À$î */
- $"46E7 424C 2127 6BED B492 3354 86C9 D855" /* FçBL!'kí´’3T†ÉØU */
- $"317B 6BE2 8205 C07C 9A42 03E4 D6B0 0F93" /* 1{kâ‚.À|šB.äÖ°.“ */
- $"4400 AFF0 AE8C D6D6 6729 AEBE 9CDE 5C69" /* D.¯ð®ŒÖÖg)®¾œÞ\i */
- $"D95C 01A0 28AF 1E57 B12C CA6D F010 ED89" /* Ù\. (¯.W±,Êmð.í‰ */
- $"4C46 38AA BAFC D67E 9E98 C6CA 85E4 433E" /* LF8ªºüÖ~ž˜ÆÊ…äC> */
- $"C450 03B7 E8DE 17B3 9CE7 02E1 BE72 100B" /* ÄP.·èÞ.³œç.á¾r.. */
- $"2EF5 787D 0D12 FC3B 855A 3F97 1850 05EF" /* .õx}..ü;…Z?—.P.ï */
- $"A05D 7CC2 405B BA6D 9175 7C99 BE1C 2370" /*  ]|Â@[ºm‘u|™¾.#p */
- $"1F57 2085 13F8 B672 728D 1152 8232 1EE4" /* .W ….ø¶rr.R‚2.ä */
- $"A666 BFD0 06A8 6CFF 3D73 D895 5968 A54A" /* ¦f¿Ð.¨lÿ=sØ•Yh¥J */
- $"3219 63AB D4CD 8E7D 52F3 D260 CE4D E329" /* 2.c«ÔÍŽ}RóÒ`ÎMã) */
- $"F554 C837 34CC 2866 FA1E 1F34 B209 B8C3" /* õTÈ74Ì(fú..4²Æ¸Ã */
- $"097B 8DBC 8788 F621 2A57 5468 5FD8 852B" /* Æ{¼‡ˆö!*WTh_Ø…+ */
- $"08A9 45F3 71A8 A26B F63C 2DB1 750F A833" /* .©Eóq¨¢kö<-±u.¨3 */
- $"4767 6D8A B551 FF10 9E54 AD5D EE2E 2207" /* GgmеQÿ.žT­]î.". */
- $"44EA 0D21 75D4 779D E96D 49FF 47CE D775" /* Dê.!uÔwémIÿGÎ×u */
- $"D7B0 2380 5F1C 4185 EF0B BECB 1A55 9696" /* ×°#€_.A…ï.¾Ë.U–– */
- $"81B8 94F2 4F5B 07D8 D5EC 9E2A 049D 5E87" /* ¸”òO[.ØÕìž*.^‡ */
- $"2601 FB44 4AD5 C57B A7B0 8088 B723 134E" /* &.ûDJÕÅ{§°€ˆ·#.N */
- $"0B8A 375E B972 F34F F25A 2B68 3F15 4496" /* .Š7^¹róOòZ+h?.D– */
- $"5734 FE10 D742 67F9 9FFF 639C FAFD 23DB" /* W4þ.×BgùŸÿcœúý#Û */
- $"B90C F402 17F0 81C6 2656 EFD0 E011 C866" /* ¹.ô..ðÆ&VïÐà.Èf */
- $"15C8 4927 3415 BEC1 7876 E693 74CB DBEA" /* .ÈI'4.¾Áxvæ“tËÛê */
- $"7206 2246 23EC DCCA 51CD 72C1 8C41 1B85" /* r."F#ìÜÊQÍrÁŒA.… */
- $"AE9B 6FA5 4286 03FB 7000 D94F 5A8B 8A85" /* ®›o¥B†.ûp.ÙOZ‹Š… */
- $"2F34 7575 E7AB 08FF 3CBD 328D D95D BDF5" /* /4uuç«.ÿ<½2Ù]½õ */
- $"8070 0FAD B573 A91E 5F83 D32D 3337 A5B7" /* €p.­µs©._ƒÓ-37¥· */
- $"C6A7 3048 8D7C 3F01 F6BF 1BAB D684 0585" /* Ƨ0H|?.ö¿.«Ö„.… */
- $"798A A28D 68A6 4993 22BC F35C E3A7 BABE" /* yŠ¢h¦I“"¼ó\㧺¾ */
- $"0D5B 7E43 2B91 5DA6 6821 0495 4B22 33C0" /* .[~C+‘]¦h!.•K"3À */
- $"1217 1302 A7EB 1093 C8BD 3622 F0FD 14C3" /* ....§ë.“Ƚ6"ðý.à */
- $"EDBA 60FA B4C2 07D5 6D80 C177 9C23 24FE" /* íº`ú´Â.Õm€Áwœ#$þ */
- $"C9E7 77A7 1945 4C1A 8945 129A 2581 498D" /* Éçw§.EL.‰E.š%I */
- $"F2BD 5AD6 EF89 4D80 3EC2 DA29 E093 A726" /* ò½ZÖï‰M€>ÂÚ)à“§& */
- $"88F1 0796 E9F0 8F36 D342 7AD3 DEC2 2CCA" /* ˆñ.–éð6ÓBzÓÞÂ,Ê */
- $"45B9 35A0 DE31 D18B 2954 C38C 4B3A EEA2" /* E¹5 Þ1Ñ‹)TÃŒK:î¢ */
- $"5CD5 333D 6C59 23C7 17B3 C98C 65EE 8117" /* \Õ3=lY#Ç.³ÉŒeî. */
- $"22A2 574D D223 581B D09B 6473 3F85 6E2A" /* "¢WMÒ#X.Лds?…n* */
- $"81B5 F600 CAB6 1A02 3B24 D726 4344 536F" /* µö.ʶ..;$×&CDSo */
- $"99AB 09C8 96EA B41B 01C9 7AC8 9478 B8AB" /* ™«ÆÈ–ê´..ÉzÈ”x¸« */
- $"69E3 1BF1 1100 AFF3 C59C 01FB 8EF9 047D" /* iã.ñ..¯óÅœ.ûŽù.} */
- $"21EF 11DE D2CA BEE2 8372 5DDB C39C DE6E" /* !ï.ÞÒʾâƒr]ÛÜÞn */
- $"B652 35FE FDFB F1E8 2E91 778A 86C3 3117" /* ¶R5þýûñè.‘wІÃ1. */
- $"87D8 A7D5 7862 68B7 30C1 3B32 D209 0256" /* ‡Ø§Õxbh·0Á;2ÒÆ.V */
- $"2BF7 DFEF 17C3 FC30 EF1D 9327 7041 FC3C" /* +÷ßï.Ãü0ï.“'pAü< */
- $"674F 3069 DAB2 0EA5 BB48 DC2C DC66 F660" /* gO0iÚ².¥»HÜ,Üfö` */
- $"9C9B C7C8 3734 C68B 7D5A 60A1 DF3D D3A8" /* œ›ÇÈ74Æ‹}Z`¡ß=Ó¨ */
- $"E60C D15A 11C7 FB3B F75A 358E A7F7 16CB" /* æ.ÑZ.Çû;÷Z5ާ÷.Ë */
- $"67B5 097E E2A2 DE6C E40A FD52 8F75 43EF" /* gµÆ~â¢ÞläÂýRuCï */
- $"F5DF 5A51 BBF5 A074 791F F54F 9724 23C3" /* õßZQ»õ ty.õO—$#Ã */
- $"F5E6 C4A3 E22C 1E06 3B71 A9A2 1C17 0109" /* õæÄ£â,..;q©¢...Æ */
- $"1B59 2742 AB03 0497 3E5A AD73 7FD3 DA51" /* .Y'B«..—>Z­s.ÓÚQ */
- $"9F17 A10E B9CF 7503 3395 8788 9D9D 4A58" /* Ÿ.¡.¹Ïu.3•‡ˆJX */
- $"F9B8 4A61 3DDA 7489 8086 9EAC 4D7D 62DD" /* ù¸Ja=Út‰€†ž¬M}bÝ */
- $"BF8B 9462 1CC0 6912 69BE 3BFE FED7 3174" /* ¿‹”b.Ài.i¾;þþ×1t */
- $"CAA6 A806 FF59 B963 ABEE 508B F428 D15C" /* ʦ¨.ÿY¹c«îP‹ô(Ñ\ */
- $"82FC BA30 6907 C572 F2BD C0DB E9A2 44AF" /* ‚üº0i.Årò½ÀÛé¢D¯ */
- $"EED6 81F7 C602 F802 0374 CD1D 0F41 5E2E" /* îÖ÷Æ.ø..tÍ..A^. */
- $"F54F E7AB C492 54F8 C570 48A6 1603 35D3" /* õOç«Ä’TøÅpH¦..5Ó */
- $"EA1A 6A6D FD79 27E3 F928 4E16 3A2D 43FE" /* ê.jmýy'ãù(N.:-Cþ */
- $"6C3D AFC6 FA1C 578C 7BA9 7343 5B2C 7BB9" /* l=¯Æú.WŒ{©sC[,{¹ */
- $"0614 915A 24C4 CAC1 A2D3 0EAF EAE8 7257" /* ..‘Z$ÄÊÁ¢Ó.¯êèrW */
- $"EA2D 1ED2 3FFE 26A7 3E28 28D0 1AE1 D790" /* ê-.Ò?þ&§>((Ð.á× */
- $"A25D 1C6C BA20 E196 1EEC 9720 92EE 6E62" /* ¢].lº á–.ì— ’înb */
- $"E218 5609 944E 9A2E 9228 117A 6065 93FF" /* â.VÆ”Nš.’(.z`e“ÿ */
- $"2B32 B2C1 7876 E657 E39E 8641 F202 62B4" /* +2²ÁxvæW㞆Aò.b´ */
- $"20C5 99D9 F9E5 7D83 D807 EDB7 9A34 475B" /* Å™Ùùå}ƒØ.í·š4G[ */
- $"4F45 9AE8 ACD6 3098 A0C2 8D14 CBDB 9A2B" /* OEšè¬Ö0˜ Â.ËÛš+ */
- $"0EF7 CB30 8B49 169F 1ECD 6F33 F063 65DA" /* .÷Ë0‹I.Ÿ.Ío3ðceÚ */
- $"2A2F F0B0 EE29 91F7 CA11 748C 5E4E A447" /* *.ð°î)‘÷Ê.tŒ^N¤G */
- $"0F7F 4B32 DB7A 366C 27C4 F178 33B7 5E9B" /* ..K2Ûz6l'Äñx3·^› */
- $"BAAF 29CD A3EF 39BB 5FAD AD2B 5DCA 09E8" /* º¯)Í£ï9»_­­+]ÊÆè */
- $"DB9A DD07 84DD 870E 2A4C 850B BD04 7F9A" /* ÛšÝ.„݇.*L….½..š */
- $"1354 1DAA 0819 F583 1F47 5905 6597 5F07" /* .T.ª..õƒ.GY.e—_. */
- $"7ED6 DFFA BA65 FA6C D01D F65F F833 D479" /* ~ÖßúºeúlÐ.ö_ø3Ôy */
- $"BFD3 F3D8 57BB 3718 EBC8 5A2D 732E 464E" /* ¿ÓóØW»7.ëÈZ-s.FN */
- $"6B46 9512 778B 8066 D5DA D21A 819D 5384" /* kF•.w‹€fÕÚÒ.S„ */
- $"A84C AE56 92E2 2E9A 4D27 8A21 E02D 67FC" /* ¨L®V’â.šM'Š!à-gü */
- $"EAA4 B3D5 9306 1D06 CC9A 84C8 D6C4 C7E1" /* ꤳՓ...Ìš„ÈÖÄÇá */
- $"4F47 E168 43F0 6EB1 9276 ED11 2C29 F1CB" /* OGáhCðn±’ví.,)ñË */
- $"90AB 1975 3405 422B 78EC 7776 FA5C 0A2C" /* «.u4.B+xìwvú\Â, */
- $"F4B1 4F40 32CE D338 8911 EAB4 4CFC 7765" /* ô±O@2ÎÓ8‰.ê´Lüwe */
- $"D9ED C10E 114B 0909 1122 6832 A41E 3365" /* ÙíÁ..KÆÆ."h2¤.3e */
- $"96EF FC81 A398 2FE8 0464 5D18 0C9F C1AF" /* –ïü£˜/è.d]..ŸÁ¯ */
- $"8E6F 42CA BDC9 1DC4 770E 1C2E 01BD 62DB" /* ŽoBʽÉ.Äw....½bÛ */
- $"7798 4167 FC4F B27D D7E6 32CE 7F95 954F" /* w˜AgüO²}׿2Î.••O */
- $"653C 833E B4F1 C6C2 307E 0796 686E 6F5C" /* e<ƒ>´ñÆÂ0~.–hno\ */
- $"6EE2 6260 4C0B 5329 36D8 839E 5F08 319C" /* nâb`L.S)6؃ž_.1œ */
- $"4CAE 85DE 6B64 F427 1358 C9FF 57B9 AF78" /* L®…Þkdô'.XÉÿW¹¯x */
- $"332B 82A6 0EBF 0F83 7A3C 8004 1402 6A12" /* 3+‚¦.¿.ƒz<€...j. */
- $"FEE8 1612 2D8A 47FE 5BDE 2714 B393 E32F" /* þè..-ŠGþ[Þ'.³“ã/ */
- $"013E BD7E 14FA 285D BF61 7CDA 3A92 734A" /* .>½~.ú(]¿a|Ú:’sJ */
- $"520E 978D 8736 6AA9 847B 05C9 F28B 3D9A" /* R.—‡6j©„{.Éò‹=š */
- $"9B2E 721C 9082 3EC1 362C D516 D306 1EB9" /* ›.r.‚>Á6,Õ.Ó..¹ */
- $"A95C EC63 3111 4ED2 054A EFF8 F26A 0E36" /* ©\ìc1.NÒ.Jïøòj.6 */
- $"7445 26A0 464F CEDC 924D B183 FAEF 28F7" /* tE& FOÎÜ’M±ƒúï(÷ */
- $"AF76 2DBA F15C 4F45 4BFD E003 CDC1 A878" /* ¯v-ºñ\OEKýà.ÍÁ¨x */
- $"6FB4 207C 2A45 1ED9 CE49 2495 F6A9 77E8" /* o´ |*E.ÙÎI$•ö©wè */
- $"E7FF 7FFF 7FFF 7FFF 70EC F373 E872 28BA" /* çÿ.ÿ.ÿ.ÿpìósèr(º */
- $"A0BB 38E4 AC79 94DA 6562 832A 9A7B EEA8" /*  »8ä¬y”Úebƒ*š{î¨ */
- $"6B09 FEA7 9249 2005 E7D1 D721 4761 B6DB" /* kÆþ§’I .çÑ×!Ga¶Û */
- $"6DB6 DB6D 98C5 C208 FD98 41AA F430 3EAE" /* m¶Ûm˜ÅÂ.ý˜Aªô0>® */
- $"7118 7229 50B1 07D8 C5CA 010D 4AB4 DE82" /* q.r)P±.ØÅÊ..J´Þ‚ */
- $"53D3 E184 6561 DE5F 7236 BBF5 550D 4A83" /* SÓá„eaÞ_r6»õU.Jƒ */
- $"555B 5C0F 9C0E F052 0080 F4AC 3912 DD30" /* U[\.œ.ðR.€ô¬9.Ý0 */
- $"47C9 B77E C632 15D7 8EB6 CD51 0454 A805" /* GÉ·~Æ2.׎¶ÍQ.T¨. */
- $"2DAD F687 6CB7 B37F 2289 759F F7D5 8839" /* -­ö‡l·³."‰uŸ÷Õˆ9 */
- $"B3E6 BCA5 AA89 9D9D 599A 5BDD 54B9 7F7D" /* ³æ¼¥ª‰Yš[ÝT¹.} */
- $"2770 11ED 2217 C539 0204 16FF 728A C52A" /* 'p.í".Å9...ÿrŠÅ* */
- $"2D24 5FC7 E1D7 C47E 1DE8 C3F0 EA38 E730" /* -$_Çá×Ä~.èÃðê8ç0 */
- $"2D9D 0AC5 991A F5DD 38EC 007B A963 8B4D" /* -ÂÅ™.õÝ8ì.{©c‹M */
- $"51BA A9FC AE25 908A 1B70 9145 EBA2 38C4" /* Qº©ü®%Š.p‘Eë¢8Ä */
- $"168F 70BB 10A5 CAA5 A249 1974 03F3 AB57" /* .p».¥Ê¥¢I.t.ó«W */
- $"3611 30C5 1F14 529F 040A A8EC EBDF F2FF" /* 6.0Å..RŸ.¨ìëßòÿ */
- $"232B 83FE C2D0 59D9 93C2 2A8A F86A 997F" /* #+ƒþÂÐYÙ“Â*Šøj™. */
- $"3207 03A7 C406 E96C C96F 23F1 1490 95DF" /* 2..§Ä.élÉo#ñ.•ß */
- $"4024 67DC 3DE6 E1B1 EB60 1026 8786 531C" /* @$gÜ=æá±ë`.&‡†S. */
- $"9A51 378D EE86 881F 496C 8854 9459 7799" /* šQ7.IlˆT”Yw™ */
- $"11EC 4196 0C22 0F05 3762 D8F4 C348 7299" /* .ìA–."..7bØôÃHr™ */
- $"793E 0718 14D3 D09C C192 80E1 9F7C 5CFA" /* y>...ÓМÁ’€áŸ|\ú */
- $"429C 7960 2F8B 9063 C7E1 1447 7F52 D850" /* Bœy`/‹cÇá.G.RØP */
- $"B80A F1D8 BE98 DC3C 9C44 3AB7 3DA7 E08C" /* ¸Âñؾ˜Ü<œD:·=§àŒ */
- $"E7B6 07CE 2B69 C0E9 0C21 6133 1EC5 DAB5" /* ç¶.Î+iÀé.!a3.ÅÚµ */
- $"B079 413B FBA4 0259 78B8 DA3A E6D1 4AAC" /* °yA;û¤.Yx¸Ú:æÑJ¬ */
- $"2459 93C8 AD9A D69C AC40 5CF7 7385 1B18" /* $Y“È­šÖœ¬@\÷s….. */
- $"D67D 82BD 5E44 3DF8 5D2F E6D3 CE47 0191" /* Ö}‚½^D=ø]/æÓÎG.‘ */
- $"6E57 0F2F E8E8 9FF0 14BC 21F1 7720 6F34" /* nW./èèŸð.¼!ñw o4 */
- $"1EEE 5EF6 F8FD 5481 44E3 AB6B B06E 2556" /* .î^öøýTDã«k°n%V */
- $"6F07 AD65 FC95 7C32 7487 10A0 3C20 9CA7" /* o.­eü•|2t‡. < œ§ */
- $"B0EB F703 2D09 F0A6 D3FD 55F6 354B EDB0" /* °ë÷.-Æð¦ÓýUö5Kí° */
- $"179B B267 B9EB 8DA1 ED8E 7D0F 1AFF 4D50" /* .›²g¹ë¡íŽ}..ÿMP */
- $"C1C7 A686 586C 6A26 3B0B 4292 60A0 A804" /* ÁǦ†Xlj&;.B’` ¨. */
- $"04F6 5FDB 0F76 E2BC D680 20B5 46AE 399D" /* .ö_Û.vâ¼Ö€ µF®9 */
- $"CC54 82A4 1DCA 08E7 E2B4 6710 ABD8 FC18" /* ÌT‚¤.Ê.çâ´g.«Øü. */
- $"949B 7076 11CD 598E 2A8B 99FC CC28 EC17" /* ”›pv.ÍYŽ*‹™üÌ(ì. */
- $"451C DE31 F7F4 C47E 3ABB AF03 FDC6 D875" /* E.Þ1÷ôÄ~:»¯.ýÆØu */
- $"BD0C AB3E B78F F942 A53E E5F8 CA09 414D" /* ½.«>·ùB¥>åøÊÆAM */
- $"7544 D5B4 8367 3256 6D8C CB66 6DE7 E99C" /* uDÕ´ƒg2VmŒËfmçéœ */
- $"88E9 FCDC EB55 F67B 20E7 F44D 7616 6B29" /* ˆéüÜëUö{ çôMv.k) */
- $"124A C9AB 95C7 E9A8 209D EDA5 499F 2D2F" /* .JÉ«•Çé¨ í¥IŸ-/ */
- $"20E5 DE8C 2EEE 92AF 4BD6 484B 7E18 2D81" /* åÞŒ.î’¯KÖHK~.- */
- $"0502 F439 C742 BA21 693B 43C5 60DF 8BA0" /* ..ô9ÇBº!i;CÅ`ß‹  */
- $"9EAC 0A98 DFE4 DB4B 0BE1 E526 9B74 5982" /* ž¬Â˜ßäÛK.áå&›tY‚ */
- $"1817 EA6B 067A D3E4 8786 883D 26DB D361" /* ..êk.zÓ䇆ˆ=&ÛÓa */
- $"C40F 89F4 B31F 2AF3 1369 FDA9 889A 5620" /* Ä.‰ô³.*ó.iý©ˆšV */
- $"9AE7 4384 7184 9D7F 6C37 F79B 9422 ADF3" /* šçC„q„.l7÷›”"­ó */
- $"2BEA A620 14CF 0267 110E AB20 594B F1DA" /* +ê¦ .Ï.g..« YKñÚ */
- $"9D7F DB53 3723 1A4E 0DEC DF68 3A10 078F" /* .ÛS7#.N.ìßh:.. */
- $"8CA5 471B 4400 0975 92AA A351 8C66 5DDA" /* Œ¥G.D.Æu’ª£QŒf]Ú */
- $"0E4E C7B1 286F 2F7C E0EB 24CC 0A8B CAF8" /* .NDZ(o/|àë$ÌÂ‹Êø */
- $"4F0F 75E5 CACF 26F5 0FFE 86A8 1E77 5F03" /* O.uåÊÏ&õ.þ†¨.w_. */
- $"A8B5 A544 F04B A521 B3FA 854A 64FA 70CD" /* ¨µ¥DðK¥!³ú…JdúpÍ */
- $"526F 97AE 807A 05FC 3F67 2471 61E5 2715" /* Ro—®€z.ü?g$qaå'. */
- $"5774 E452 7E4A CDDA 6E48 0DA2 04B3 3A29" /* WtäR~JÍÚnH.¢.³:) */
- $"DE10 8F75 3A3A 559D A881 B948 74F3 AB92" /* Þ.u::U¨¹Htó«’ */
- $"B154 0F88 A11B A00B 25ED 9A59 B894 618E" /* ±T.ˆ¡. .%íšY¸”aŽ */
- $"AD45 3D59 9C08 49EA 076C CD63 8F49 B714" /* ­E=Yœ.Iê.lÍcI·. */
- $"32B3 8743 2506 F55A C011 CBEF C94A 8606" /* 2³‡C%.õZÀ.ËïÉJ†. */
- $"EDE4 BE7D 2DC9 8830 6C23 91E0 0209 440C" /* íä¾}-Ɉ0l#‘à.ÆD. */
- $"9409 1457 6CA0 2201 8FF4 7573 54F8 CCEC" /* ”Æ.Wl ".ôusTøÌì */
- $"D201 4A3A 66A6 B191 4E14 4CB1 08B4 2100" /* Ò.J:f¦±‘N.L±.´!. */
- $"BCF2 3A0D 696F 4582 F8B0 3A60 2D09 E9A7" /* ¼ò:.ioE‚ø°:`-Æé§ */
- $"8E83 CF44 A16A 6516 31C1 B51E 2DFE BDAC" /* ŽƒÏD¡je.1Áµ.-þ½¬ */
- $"356B F402 856C BEA0 109C A125 A759 E580" /* 5kô.…l¾ .œ¡%§Yå€ */
- $"3501 F500 F252 9533 F180 6E7D 30A8 FD62" /* 5.õ.òR•3ñ€n}0¨ýb */
- $"7FD6 B4EB 9120 8504 493A DD87 D79A 0CB1" /* .Ö´ë‘ ….I:݇ך.± */
- $"B674 7010 830D 8A38 5B44 B11D 3632 3FA5" /* ¶tp.ƒ.Š8[D±.62?¥ */
- $"CE31 CE9A 1670 AF20 16F6 BDA6 4980 002E" /* Î1Κ.p¯ .ö½¦I€.. */
- $"3E9E 8AB0 8B1F 63C5 28C3 7914 2833 137F" /* >žŠ°‹.cÅ(Ãy.(3.. */
- $"0915 DD39 7D38 49A3 6054 B5DC 2509 EE11" /* Æ.Ý9}8I£`TµÜ%Æî. */
- $"D68A 5C2A C75B 5B9F 7A9A FF3A D06F 3331" /* ÖŠ\*Ç[[Ÿzšÿ:Ðo31 */
- $"29E6 A9F4 8AD5 E0D9 7FB9 84B1 F403 8910" /* )æ©ôŠÕàÙ.¹„±ô.‰. */
- $"1168 1270 19E2 E385 0353 0FFF 697F 96BE" /* .h.p.âã….S.ÿi.–¾ */
- $"EF55 21CA 25A1 CE5E 0CD7 03A9 094F 51FE" /* ïU!Ê%¡Î^.×.©ÆOQþ */
- $"5314 E59F 90EB 907A E37A DD9D 182A E41C" /* S.åŸëzãzÝ.*ä. */
- $"CFFB 7262 0D9E B904 8D95 2DE3 E02B F5CB" /* Ïûrb.ž¹.•-ãà+õË */
- $"BF61 6012 924E 50D3 2D8D 6C25 FC60 8D19" /* ¿a`.’NPÓ-l%ü`. */
- $"9855 8BF2 5400 0000 04E3 7684 B40E 9EE7" /* ˜U‹òT....ãv„´.žç */
- $"21F8 CB76 250B 7CE0 2605 7C84 7E9F F226" /* !øËv%.|à&.|„~Ÿò& */
- $"6B94 0DB5 02AA 61E7 A9FF 5D9F A9F2 B546" /* k”.µ.ªaç©ÿ]Ÿ©òµF */
- $"2417 2E4D B238 ADDF 9233 5911 1D61 D35A" /* $..M²8­ß’3Y..aÓZ */
- $"8788 DF34 284A 9664 B91E 7A11 4568 B395" /* ‡ˆß4(J–d¹.z.Eh³• */
- $"7C74 C891 2A46 C056 EE92 0459 D81C A41F" /* |tÈ‘*FÀVî’.YØ.¤. */
- $"CA5E 4752 3ADE 89AB 995B 2BF2 D070 41B1" /* Ê^GR:Þ‰«™[+òÐpA± */
- $"EBFE 65BF FF61 55F5 5460 A4E0 33CF 7F1E" /* ëþe¿ÿaUõT`¤à3Ï.. */
- $"691A 0DA4 9372 4DCD 4A7C FF30 7DA5 4AD0" /* i..¤“rMÍJ|ÿ0}¥JÐ */
- $"1236 3C90 00C2 4517 FF78 771E DA05 952D" /* .6<.ÂE.ÿxw.Ú.•- */
- $"1085 D433 FD50 1E6F D583 2585 CBD6 5CFC" /* .…Ô3ýP.oÕƒ%…ËÖ\ü */
- $"9EF2 539B BE7A CCA1 ABF6 5AED 484B FF78" /* žòS›¾zÌ¡«öZíHKÿx */
- $"D6BD 435E E56E 5510 3047 49DE C511 72CF" /* Ö½C^ånU.0GIÞÅ.rÏ */
- $"72A0 B2CE 5E4D E2DA 0AFA FEDE BDFD 3167" /* r ²Î^MâÚÂúþÞ½ý1g */
- $"02FE 3FBE A1B9 7A5F 205B 7D60 1BA3 C975" /* .þ?¾¡¹z_ [}`.£Éu */
- $"5949 A641 5A3E 5AF2 F237 53BE FCAC 71F1" /* YI¦AZ>Zòò7S¾ü¬qñ */
- $"E3E3 6AEB 35B9 41BD C4B6 3400 DBA0 4B7F" /* ããjë5¹A½Ä¶4.Û K. */
- $"FF79 17FD 23F9 918D E532 F6BD F949 B633" /* ÿy.ý#ù‘å2ö½ùI¶3 */
- $"6A36 7600 17D8 C912 DB72 6F48 869C 0D66" /* j6v..ØÉ.ÛroH†œ.f */
- $"1410 074A 8F5B 629C 5B8B F293 6DB6 DB6D" /* ...J[bœ[‹ò“m¶Ûm */
- $"B6DB 6740 B8F8 BF85 2938 ECDA 6390 6537" /* ¶Ûg@¸ø¿…)8ìÚce7 */
- $"5986 A2A6 B52C A20D F057 C41F 660A C203" /* Y†¢¦µ,¢.ðWÄ.fÂÂ. */
- $"E5C1 68B0 9D56 DAD8 F20C 665C 5D04 4BA2" /* åÁh°VÚØò.f\].K¢ */
- $"46FF 7DB5 4880 6121 2EA3 5D2A 82F4 B18A" /* Fÿ}µH€a!.£]*‚ô±Š */
- $"50FC 2D12 DEFE 1F4D 01BF 3315 10D3 5D94" /* Pü-.Þþ.M.¿3..Ó]” */
- $"11B1 0221 28B8 56D9 4CED 012D D9C9 4005" /* .±.!(¸VÙLí.-ÙÉ@. */
- $"316F E887 29A8 3E83 9E25 FF1F A4C1 5D25" /* 1oè‡)¨>ƒž%ÿ.¤Á]% */
- $"8893 36E0 73BE DE25 456A 4678 B7C5 AD7A" /* ˆ“6às¾Þ%EjFx·Å­z */
- $"90C9 3950 942F 1459 C737 31EF 991F 241B" /* É9P”/.YÇ71ï™.$. */
- $"C294 7CFB 9461 B43A 8D37 8A6D BBC8 D7F6" /* ”|û”a´:7Šm»È×ö */
- $"A128 281D DF2B EAC5 A154 E6D9 FF53 984D" /* ¡((.ß+êÅ¡TæÙÿS˜M */
- $"550E 9C70 3F64 0E0E 0940 0AFC 5CC9 CF43" /* U.œp?d..Æ@Âü\ÉÏC */
- $"7184 3D0F 9FDE 08DF EC31 B86E 0D38 AF71" /* q„=.ŸÞ.ßì1¸n.8¯q */
- $"29F1 A21D 7847 7150 6DCA 9211 C778 F1A4" /* )ñ¢.xGqPmÊ’.Çxñ¤ */
- $"26AA B90D 1A39 DB92 4924 9249 2493 36D2" /* &ª¹..9Û’I$’I$“6Ò */
- $"4924 9249 2492 49FE 069C E7B9 CB0D 4E87" /* I$’I$’Iþ.œç¹Ë.N‡ */
- $"7D9E 9D29 FC64 8A6F 6185 2BD9 806F 760B" /* }ž)üdŠoa…+Ù€ov. */
- $"464D 4732 BD90 0E7D CABF 2B6F 2A78 8608" /* FMG2½.}Ê¿+o*x†. */
- $"DEF5 406F D401 3FD4 AE82 058D D6C8 B980" /* Þõ@oÔ.?Ô®‚.Öȹ€ */
- $"FECA D9B9 E7B6 3982 9FD3 81EA 544B 30BD" /* þÊÙ¹ç¶9‚ŸÓêTK0½ */
- $"7E56 FD78 66FD 5A41 D0BD 7714 5FAF 2A1E" /* ~VýxfýZAнw._¯*. */
- $"8FDA B705 EAAE F6F2 D69C 9812 7194 A56E" /* Ú·.ê®öòÖœ˜.q”¥n */
- $"DB55 BF75 C4E4 BDCD 9FC2 ACAD C428 829F" /* ÛU¿uÄä½ÍŸÂ¬­Ä(‚Ÿ */
- $"2409 3BB2 A894 8020 A8E7 FC16 F4FF 4E84" /* $Æ;²¨”€ ¨çü.ôÿN„ */
- $"C06E 889C 1C74 96AD 5420 F825 1A2B 015C" /* Ànˆœ.t–­T ø%.+.\ */
- $"6BC2 31EE 64AB 7A44 15E5 3458 8040 AEEF" /* kÂ1îd«zD.å4X€@®ï */
- $"F6BD 7D58 6478 8344 018F D3C6 2E33 69A4" /* ö½}XdxƒD.ÓÆ.3i¤ */
- $"E5E8 721A 5B2F 777B C0D8 0A05 2CE7 EEC8" /* åèr.[/w{ÀØÂ.,çîÈ */
- $"69EF 417B A960 D320 842E 84DE D442 AB2F" /* iïA{©`Ó „.„ÞÔB«/ */
- $"3B31 84FE DCFC A608 2E09 AA42 60F6 DB2E" /* ;1„þÜü¦..ƪB`öÛ. */
- $"DA5B C95D D10A 77BE AD48 B5FF 0557 A5AC" /* Ú[É]ÑÂw¾­Hµÿ.W¥¬ */
- $"327B F763 FDA1 32BF 7308 3EFC 0C2B 2D22" /* 2{÷cý¡2¿s.>ü.+-" */
- $"584A F9CA BFB4 78FF 6E67 42CC B491 492B" /* XJùÊ¿´xÿngBÌ´‘I+ */
- $"17C3 C746 9966 5780 BA6C 2798 472E 1CFF" /* .ÃÇF™fW€ºl'˜G..ÿ */
- $"6A32 69A0 86E0 44C6 1679 08F9 9928 48D9" /* j2i †àDÆ.y.ù™(HÙ */
- $"3DA0 CBA0 1E5E 2618 7162 51C9 DEF0 56A0" /* = Ë .^&.qbQÉÞðV  */
- $"1924 F126 CAAD F248 A1A4 2816 13A7 FE76" /* .$ñ&Ê­òH¡¤(..§þv */
- $"594E 647C 36C4 C014 CDC7 5C89 DBAB 9854" /* YNd|6ÄÀ.ÍÇ\‰Û«˜T */
- $"9094 FC96 5FED 7476 AA3C DF0B B47B C123" /* ”ü–_ítvª<ß.´{Á# */
- $"BE6D CD5A BA07 CC19 94FC DC37 B85C 0FD2" /* ¾mÍZº.Ì.”üÜ7¸\.Ò */
- $"9FED 62E6 F910 2F49 529E CE10 9738 D296" /* Ÿíbæù./IRžÎ.—8Ò– */
- $"A81C 1A0D 0FBF 7CAE DB93 40C0 3BC9 5A0C" /* ¨....¿|®Û“@À;ÉZ. */
- $"B23D FBD4 3863 C520 03A0 D966 5327 A0A2" /* ²=ûÔ8cÅ . ÙfS' ¢ */
- $"DD06 B7A1 942B 0A75 CB23 8664 4159 8647" /* Ý.·¡”+ÂuË#†dAY†G */
- $"2725 DAF6 693A 58D7 7A7D B34A 393D FE7A" /* '%Úöi:X×z}³J9=þz */
- $"C105 C374 193C 123C 130E 062C 8AB2 32FD" /* Á.Ãt.<.<...,в2ý */
- $"80E0 72E3 6AEA 2078 5D7C D3E5 4E20 D927" /* €àrãjê x]|ÓåN Ù' */
- $"157E 9DC5 1A29 2F0F C326 AFE3 3ACF C361" /* .~Å.)/.Ã&¯ã:ÏÃa */
- $"8C45 D79C EB27 7441 E4C7 8BFD 5832 DB93" /* ŒEלë'tAäÇ‹ýX2Û“ */
- $"78F5 B9DB BA4E 329E A262 C467 88DC C540" /* xõ¹ÛºN2ž¢bÄgˆÜÅ@ */
- $"78E0 4E55 34F3 806E 2DEA B371 E9B5 D8DF" /* xàNU4ó€n-ê³qéµØß */
- $"5EDA B5B9 1C48 5A11 ECAB E4F8 67B7 C76E" /* ^Úµ¹.HZ.ì«äøg·Çn */
- $"460F 8E6A C7BA B5F8 75F2 9105 1480 FD1A" /* F.ŽjǺµøuò‘..€ý. */
- $"80EB DB48 6115 AA6E 9AEA A07C 57B0 1A7F" /* €ëÛHa.ªnšê |W°.. */
- $"0CBF D5DE 47A7 89BE 4CAE 19FE 7B79 5839" /* .¿ÕÞG§‰¾L®.þ{yX9 */
- $"232D 495E 476C E267 D9D2 5257 F0E6 3EB5" /* #-I^GlâgÙÒRWðæ>µ */
- $"F140 AAAF 1E36 BA04 086A EEC5 3232 7958" /* ñ@ª¯.6º..jîÅ22yX */
- $"72E3 FCC3 9488 B44C 0C15 EF6B 811B CF97" /* rãüÔˆ´L..ïk.Ï— */
- $"0532 2B88 663D 8675 6050 AB94 A435 C0FC" /* .2+ˆf=†u`P«”¤5Àü */
- $"9E08 9873 92AF 6859 F7F5 64B0 0BA5 FA68" /* ž.˜s’¯hY÷õd°.¥úh */
- $"3557 0898 9E0D 5795 BF67 2866 5FB6 63C6" /* 5W.˜ž.W•¿g(f_¶cÆ */
- $"4F82 42CE A682 DC8D CB18 D4FE 6252 95D1" /* O‚BΦ‚ÜË.ÔþbR•Ñ */
- $"C85C 6B2C 0FC0 7C9D 5A80 F93B 8900 F93A" /* È\k,.À|Z€ù;‰.ù: */
- $"8EE6 7513 4AFA 1609 3CEE D5EB B420 A1CE" /* Žæu.Jú.Æ<îÕë´ ¡Î */
- $"318D 6F67 720A 7F84 4127 C0F2 9193 35CE" /* 1ogrÂ.„A'Àò‘“5Î */
- $"6D97 9682 5E5D B9FC 5A97 3B71 AB1F 64AA" /* m—–‚^]¹üZ—;q«.dª */
- $"3383 1F0E C0E9 26BE E6EB 24CD 499F F2BA" /* 3ƒ..Àé&¾æë$ÍIŸòº */
- $"997D E886 6FF8 C6B5 0607 1259 7715 7539" /* ™}è†oøÆµ...Yw.u9 */
- $"4B57 F7A9 56A7 A04B 031F 0786 6C02 E7BC" /* KW÷©V§ K...†l.ç¼ */
- $"8256 7F27 A39A B66D 6B95 6C11 CDE4 C580" /* ‚V.'£š¶mk•l.ÍäÅ€ */
- $"54DE 7E26 129C EB67 ABC8 455E 6CC3 453E" /* TÞ~&.œëg«ÈE^lÃE> */
- $"F9A8 3ED5 9B43 4EB8 384E 0F7B 28E0 16FF" /* ù¨>Õ›CN¸8N.{(à.ÿ */
- $"1342 18B1 31B6 EAEF 4C40 36F7 0CFF 6AFF" /* .B.±1¶êïL@6÷.ÿjÿ */
- $"8059 5D1C 275B 4F7D B392 4DB0 5E5D 4304" /* €Y].'[O}³’M°^]C. */
- $"4848 2A3A C93F BAD6 638D 315A 8771 1150" /* HH*:É?ºÖc1Z‡q.P */
- $"1D41 B6A7 C9B8 782E 19D8 F8E7 07EB ED20" /* .A¶§É¸x..Øøç.ëí */
- $"7D4E AFFF 5FD2 4FA0 2B48 B549 6A50 AD81" /* }N¯ÿ_ÒO +HµIjP­ */
- $"F11D 357F 7CB2 4B8B F28B 6C97 2C23 58A3" /* ñ.5.|²K‹ò‹l—,#X£ */
- $"92E8 2BFB 77F2 1ECE 7A2A C437 47E3 A833" /* ’è+ûwò.Îz*Ä7Gã¨3 */
- $"D60C C3CA 168A 85B8 620C 109C 4134 35BF" /* Ö.ÃÊ.Š…¸b..œA45¿ */
- $"ECCB 3629 944F AD29 444A C4B6 F019 F19B" /* ìË6)”O­)DJĶð.ñ› */
- $"4189 B1D3 8F28 65B9 85D8 C715 2E1A 267D" /* A‰±Ó(e¹…ØÇ...&} */
- $"A7DB 4C90 9829 BC86 E14C 9F44 757D 5436" /* §ÛL˜)¼†áLŸDu}T6 */
- $"9C38 979D 3654 9A63 E572 7864 E513 A083" /* œ8—6Tšcårxdå. ƒ */
- $"C943 97C5 A88B 23A2 4ECC E4F1 AEED F3EC" /* ÉC—Ũ‹#¢NÌäñ®íóì */
- $"C57D F254 B087 7E1F 81B3 59E6 E2A0 E5CB" /* Å}òT°‡~.³Yæâ åË */
- $"B710 EF71 0598 01BF 1400 3814 0759 EDA8" /* ·.ïq.˜.¿..8..Yí¨ */
- $"386C 3DF0 F1C5 CA93 612F C58D 71BA 6ED6" /* 8l=ðñÅÊ“a/ÅqºnÖ */
- $"FE35 90B4 9C10 A938 33B6 6987 E407 AE7B" /* þ5´œ.©83¶i‡ä.®{ */
- $"5B1A 8E0E BE53 1C94 D747 9303 2ED9 13FA" /* [.Ž.¾S.”×G“..Ù.ú */
- $"226C F38A 7134 3CF6 1923 B85F A254 0048" /* "lóŠq4<ö.#¸_¢T.H */
- $"A765 B678 FC9C 1E2C E183 FC80 CA83 9572" /* §e¶xüœ.,áƒü€Êƒ•r */
- $"E573 B224 9894 7316 C931 4A49 C28F 6E33" /* ås²$˜”s.É1JIÂn3 */
- $"B579 EE14 84BC 61CC 351B 41FB 7095 5F8C" /* µyî.„¼aÌ5.Aûp•_Œ */
- $"1B15 6DAF FF7F F8EA 5A11 5453 6ECA 1C02" /* ..m¯ÿ.øêZ.TSnÊ.. */
- $"C8A4 F40F AD00 7BC9 EDFD AC3A 28E4 546F" /* Ȥô.­.{Éíý¬:(äTo */
- $"1E36 BE45 897E F5D5 BE25 E84B 57C6 9080" /* .6¾E‰~õÕ¾%èKWÆ€ */
- $"B6C4 79B8 153B 110F D90B 215D 401C 0453" /* ¶Äy¸.;..Ù.!]@..S */
- $"8243 BF4A CDAE 9270 0658 462F E0C7 82A8" /* ‚C¿JÍ®’p.XF/àÇ‚¨ */
- $"E155 C547 D144 EBAD 74EC EAFF 7799 6D50" /* áUÅGÑDë­tìêÿw™mP */
- $"D0F9 6BA4 D8B3 0FBB B75B BC48 D5BA 8EAB" /* Ðùk¤Ø³.»·[¼HÕºŽ« */
- $"FF7F 3A2A 820F D817 FB8B 7590 ED4A 3D7B" /* ÿ.:*‚.Ø.û‹uíJ={ */
- $"DAF8 C05F BDCF 1B7C 8862 53A8 95D6 C0DF" /* ÚøÀ_½Ï.|ˆbS¨•ÖÀß */
- $"4069 36DA 0739 783C C432 1E0C 7DA6 2D70" /* @i6Ú.9x<Ä2..}¦-p */
- $"B33A C5AD 810A FBBD E9BB B776 6463 9FDC" /* ³:Å­Âû½é»·vdcŸÜ */
- $"B401 211D 81BA A9FA 8761 ED36 A1EF 439D" /* ´.!.º©ú‡aí6¡ïC */
- $"9880 BE88 E045 3068 F59F 7AD7 EFFF 7FFC" /* ˜€¾ˆàE0hõŸz×ïÿ.ü */
- $"5562 1F00 0818 22D6 5002 F762 7A20 0DC0" /* Ub...."ÖP.÷bz .À */
- $"3ADD FF5D 1851 D391 F011 0000 0000 0000" /* :Ýÿ].QÓ‘ð....... */
- $"0000 0000 0138 5715 ED61 F2C5 2C28 30C0" /* .....8W.íaòÅ,(0À */
- $"F669 9389 6153 3A95 E010 CCA0 2FEF B36F" /* öi“‰aS:•à.Ì /ï³o */
- $"9576 F8C0 F17B 27F6 F6FA 412C 70C7 CF14" /* •vøÀñ{'ööúA,pÇÏ. */
- $"7625 6871 7FE2 16C9 B6E9 5BF1 1A16 E2F0" /* v%hq.â.ɶé[ñ..âð */
- $"945D E51E CCF9 0970 E586 517C 475F 8856" /* ”]å.ÌùÆpå†Q|G_ˆV */
- $"CA0C 1DD9 E001 D7BC 1876 745C 8077 672D" /* Ê..Ùà.×¼.vt\€wg- */
- $"CECA FF0B 01D1 76FA 32F5 C047 26FB 451F" /* ÎÊÿ..Ñvú2õÀG&ûE. */
- $"5261 79B6 5990 79C9 4DF7 5B69 D548 E894" /* Ray¶YyÉM÷[iÕHè” */
- $"F249 0C84 D3F0 9555 7B99 EA27 FA38 184E" /* òI.„Óð•U{™ê'ú8.N */
- $"F863 AFA1 CE80 AEBC CB89 DD99 B8E2 0BEC" /* øc¯¡Î€®¼Ë‰Ý™¸â.ì */
- $"2F74 E534 3FF4 B50A 4B04 02B1 C178 B189" /* /tå4?ôµÂK..±Áx±‰ */
- $"D30F 77DC 8A15 8C9E AF87 1DCD D545 AC6B" /* Ó.wÜŠ.Œž¯‡.ÍÕE¬k */
- $"CAFB 832B E240 6752 8EF2 9BDF 76E8 621D" /* Êûƒ+â@gRŽò›ßvèb. */
- $"892E 384C 7BF0 4DE8 F910 7689 C3F0 E7E9" /* ‰.8L{ðMèù.v‰Ãðçé */
- $"E401 C781 F341 A84F 6922 E97B FC22 E259" /* ä.ÇóA¨Oi"é{ü"âY */
- $"6B26 9B03 14A7 DFA1 B7BD CBED 9539 5DE3" /* k&›..§ß¡·½Ëí•9]ã */
- $"2041 2F5F A37A 2F23 00FC 6424 D7F8 902E" /* A/_£z/#.üd$×ø. */
- $"7261 227B B4EC F4D1 9C18 22C3 8CA5 EFF8" /* ra"{´ìôÑœ."ÃŒ¥ïø */
- $"5701 6734 9110 8B4E D9E0 EE8F 7FEA 202F" /* W.g4‘.‹NÙàî.ê / */
- $"CFF7 5CC7 6107 0B22 B0BE A87B 32EF 0FA8" /* Ï÷\Ça.."°¾¨{2ï.¨ */
- $"3D2D 794E 556E 6089 ACBA D46C 17EC A9DC" /* =-yNUn`‰¬ºÔl.ì©Ü */
- $"0F4E D57D B8C8 EED1 F9D4 F96A 7BEE 3794" /* .NÕ}¸ÈîÑùÔùj{î7” */
- $"49DE 3AA7 EE2E 0B25 A47C 966A D90D C792" /* IÞ:§î..%¤|–jÙ.Ç’ */
- $"6304 7C05 C6EB A26D 83B8 3E0C AAF5 AFFE" /* c.|.Æë¢mƒ¸>.ªõ¯þ */
- $"FDC3 F7C4 C0A3 C3ED E8D2 0FAB AC58 1F56" /* ýÃ÷ÄÀ£ÃíèÒ.«¬X.V */
- $"FF40 F44B 4289 C6D7 CC17 A019 AD4A C889" /* ÿ@ôKB‰Æ×Ì. .­Jȉ */
- $"67AD 0673 32A0 B6BA 087E 7279 19C2 025F" /* g­.s2 ¶º.~ry.Â._ */
- $"DB0E 0E97 02D9 2268 5BCA CDE6 B94E 8D9B" /* Û..—.Ù"h[ÊÍæ¹N› */
- $"03EB D786 1698 2D8A 2ECD 432E D615 931F" /* .ë׆.˜-Š.ÍC.Ö.“. */
- $"452B 5D40 0950 5BBE A70F BD95 9F0E 8B95" /* E+]@ÆP[¾§.½•Ÿ.‹• */
- $"86B7 47DE 0757 BFE4 9775 3082 9D22 863A" /* †·GÞ.W¿ä—u0‚"†: */
- $"E404 B84C 5E88 8424 31DD 689A D234 88E2" /* ä.¸L^ˆ„$1ÝhšÒ4ˆâ */
- $"971F 9E59 429C 6C7E 3670 8F7C 8F86 A80D" /* —.žYBœl~6p|†¨. */
- $"848E E78B 5331 058E E444 FEC2 269A 7E23" /* „Žç‹S1.ŽäDþÂ&š~# */
- $"608D 0502 E075 F7A4 DACF 515F AA08 31C1" /* `..àu÷¤ÚÏQ_ª.1Á */
- $"1275 02C0 F37E F465 ADE9 1918 F1F0 0E4F" /* .u.Àó~ôe­é..ñð.O */
- $"E5A4 41A5 F655 22D9 946A 7FEC 0720 3D3A" /* å¤A¥öU"Ù”j.ì. =: */
- $"4961 05B2 F02D 51D2 1212 084B B3EA 5DC9" /* Ia.²ð-QÒ...K³ê]É */
- $"F986 5763 A2AC E2AC 1144 5DC3 E6A5 D092" /* ù†Wc¢¬â¬.D]Ãæ¥Ð’ */
- $"3654 3737 A598 21C2 34FF 097C B8B8 5934" /* 6T77¥˜!Â4ÿÆ|¸¸Y4 */
- $"C947 05C9 B4BA F52B 99FF 3AFE 6B15 2CAE" /* ÉG.É´ºõ+™ÿ:þk.,® */
- $"06CF D962 CCDE D937 D4AE B3D9 7E92 E2AF" /* .ÏÙbÌÞÙ7Ô®³Ù~’⯠*/
- $"8F4E 31CE 06E7 0AD8 71DB 4456 7101 E221" /* N1Î.çÂØqÛDVq.â! */
- $"74AC 1159 9EDF 9841 CFA3 E04F DECF 6FD3" /* t¬.Yžß˜AÏ£àOÞÏoÓ */
- $"90CC C22F 63B0 45CC C98B 3125 33C0 CFBA" /* ÌÂ/c°EÌÉ‹1%3ÀϺ */
- $"4CE7 3FAD F2E4 85E7 0C74 35A5 97E9 8672" /* Lç?­òä…ç.t5¥—é†r */
- $"9180 E059 EF0F C416 E25F 0E83 095A 36AA" /* ‘€àYï.Ä.â_.ƒÆZ6ª */
- $"8E74 F1F7 11A8 49DD C47E 5098 D576 DC41" /* Žtñ÷.¨IÝÄ~P˜ÕvÜA */
- $"D6FC 7C37 E307 A2DB 997E A046 C114 CF04" /* Öü|7ã.¢Û™~ FÁ.Ï. */
- $"FD8E 32D1 2AC6 3A81 C8B6 C680 6E60 7826" /* ýŽ2Ñ*Æ:ȶƀn`x& */
- $"9A40 9C80 BA1B 4DE8 854B 09D9 33B3 95BE" /* š@œ€º.Mè…KÆÙ3³•¾ */
- $"7CE5 CCA3 C463 5D1C 1F2B A160 E208 AA0A" /* |åÌ£Äc]..+¡`â.ªÂ */
- $"D00F 1933 5FB5 2705 4E9C 3733 0FD0 2AA0" /* Ð..3_µ'.Nœ73.Ð*  */
- $"D116 F240 05EA 53BB 5A5A 0A4B 3D9E FCB7" /* Ñ.ò@.êS»ZZÂK=žü· */
- $"FE35 1D0B 1E56 C4AA 9B6C 8CE6 10CA DAA5" /* þ5...VĪ›lŒæ.ÊÚ¥ */
- $"6DF1 6F74 C332 BD93 556E 89F5 A94A 232D" /* mñotÃ2½“Un‰õ©J#- */
- $"E9EF C950 666C 7D3E D1BA C98F 4489 3C5D" /* éïÉPfl}>ѺÉD‰<] */
- $"F7FC 88D4 C90E EE9D 7691 C976 2CFE 6BA0" /* ÷üˆÔÉ.îv‘Év,þk  */
- $"B53E 5C59 749E FEBC 4AB4 490C A3B6 5187" /* µ>\Ytžþ¼J´I.£¶Q‡ */
- $"4A10 1076 6348 AEC1 054B 0A98 9196 29C3" /* J..vcH®Á.K˜‘–)à */
- $"F995 50E4 E003 F099 9495 7ECC 1C78 C536" /* ù•Päà.ð™”•~Ì.xÅ6 */
- $"AA8D 7305 BE7F FF72 99F7 25ED 4C38 0896" /* ªs.¾.ÿr™÷%íL8.– */
- $"A1BE F2D4 016E B744 CBB7 9CEE 1C88 5E3D" /* ¡¾òÔ.n·DË·œî.ˆ^= */
- $"1B9E E3CB 29D2 AAA7 C3F6 41F4 B6C0 5861" /* .žãË)Òª§ÃöAô¶ÀXa */
- $"93D3 4773 858E 3470 E670 4F94 E206 FBA3" /* “ÓGs…Ž4pæpO”â.û£ */
- $"7050 2A3D 6DC0 004E 32D7 6043 4E5E C44F" /* pP*=mÀ.N2×`CN^ÄO */
- $"284A 3214 97B7 19DE 41C4 6204 56CB 1695" /* (J2.—·.ÞAÄb.VË.• */
- $"BAD8 C308 0FFE BEB7 FE14 C6AC CEE8 5022" /* ºØÃ..þ¾·þ.ƬÎèP" */
- $"C27A 2CCA 4714 4C52 3975 615D A1C8 62BF" /* Âz,ÊG.LR9ua]¡Èb¿ */
- $"C477 FF7E 2637 3B89 8C43 6E09 285B 2D1A" /* Äwÿ~&7;‰ŒCnÆ([-. */
- $"8E9E 4110 CE7B E30A E21C A140 02C8 D0AD" /* ŽžA.Î{ãÂâ.¡@.ÈЭ */
- $"630B 5488 7CE7 B884 393A 6FDD 5A68 7FB9" /* c.Tˆ|縄9:oÝZh.¹ */
- $"60EC C73B 143E 3F61 3E31 1A3E 8438 7944" /* `ìÇ;.>?a>1.>„8yD */
- $"B652 14AE 63CA 803C 9B67 C6FE 2F5D 4CD0" /* ¶R.®cÊ€<›gÆþ/]LÐ */
- $"3A63 1328 8809 A4AB B4A1 8664 FE90 F03E" /* :c.(ˆÆ¤«´¡†dþð> */
- $"18E2 7982 7DDC A444 1306 4546 61B2 A710" /* .ây‚}ܤD..EFa²§. */
- $"CCED 529C 92CB D547 22F5 0DB0 B10F 8450" /* ÌíRœ’ËÕG"õ.°±.„P */
- $"E5AC 253A 6937 BFBD D0C6 8AED 14C7 787E" /* å¬%:i7¿½ÐÆŠí.Çx~ */
- $"21E7 860D 8567 633D A9E6 0466 93A5 6789" /* !ç†.…gc=©æ.f“¥g‰ */
- $"D643 2EEE 7542 7B02 086A 83C4 AD3C 785C" /* ÖC.îuB{..jƒÄ­<x\ */
- $"E3B4 BFC0 C27C 3762 1D98 0A0C B43D 8107" /* ã´¿ÀÂ|7b.˜Â.´=. */
- $"3003 FF74 C626 1BC1 44AA 08A0 7A68 0ADE" /* 0.ÿtÆ&.ÁDª. zhÂÞ */
- $"E9BD 94DB 3644 AA13 CFCA A9CB 0E8F 9061" /* é½”Û6Dª.ÏÊ©Ë.a */
- $"73BC 6A23 359D C129 F184 4EBA BE0F A772" /* s¼j#5Á)ñ„Nº¾.§r */
- $"9AB6 7DDC C179 81DB 9FDC EDA3 E6C5 21E2" /* š¶}ÜÁyÛŸÜí£æÅ!â */
- $"7049 87BC 00E3 34F5 8066 3FFE 7CA7 A588" /* pI‡¼.ã4õ€f?þ|§¥ˆ */
- $"6277 30DE 8FC1 950A A652 5B12 B0A4 B8BE" /* bw0ÞÁ•¦R[.°¤¸¾ */
- $"2297 4261 CB90 AEBB F3CB 2BEE 2FA8 149E" /* "—BaË®»óË+î/¨.ž */
- $"11E6 487B 3EFA 45B9 E4A8 17DF DF8E D5FF" /* .æH{>úE¹ä¨.ßߎÕÿ */
- $"750C 2E52 4F3F 5960 B3B7 3DEB CFE3 4EC3" /* u..RO?Y`³·=ëÏãNà */
- $"676F D76A F8C3 67EB 383B 042A C000 1CF5" /* go×jøÃgë8;.*À..õ */
- $"FB57 51DF 4E0F 9709 4A58 F371 8A53 79CD" /* ûWQßN.—ÆJXóqŠSyÍ */
- $"B935 29C8 5953 BBFB B216 24F0 FF5C F1BE" /* ¹5)ÈYS»û².$ðÿ\ñ¾ */
- $"1649 C9BE 754A CC45 62C3 44A2 3E12 A872" /* .IɾuJÌEbÃD¢>.¨r */
- $"736B 05DD F77C C7C6 F33D 8224 147E D163" /* sk.Ý÷|ÇÆó=‚$.~Ñc */
- $"02B4 0BC6 297A FA75 03A7 BFDD 709A A878" /* .´.Æ)zúu.§¿Ýpš¨x */
- $"734A 7236 791A BFF6 9F21 CC67 268D 160D" /* sJr6y.¿öŸ!Ìg&.. */
- $"A6D0 7988 72CF 6475 146C 81EB 8249 518A" /* ¦ÐyˆrÏdu.lë‚IQŠ */
- $"49B7 0389 FDB6 9CEB DCA2 41ED 085D 4E85" /* I·.‰ý¶œëÜ¢Aí.]N… */
- $"03E4 3F4E D8CF 25E1 658D 38F6 8F88 A499" /* .ä?NØÏ%áe8öˆ¤™ */
- $"B64A DD79 FDF2 39FB 5CEC F29B 714A 733B" /* ¶JÝyýò9û\ìò›qJs; */
- $"76E4 94E5 F567 3A71 28F0 13A6 7A74 CD91" /* vä”åõg:q(ð.¦ztÍ‘ */
- $"5804 065E D3C7 09B7 ED19 51E5 0913 4436" /* X..^ÓÇÆ·í.QåÆ.D6 */
- $"9791 BB58 10F3 7183 5DB6 4874 65D2 AAD2" /* —‘»X.óqƒ]¶HteÒªÒ */
- $"DBA2 C761 A70F 3EEE 9256 2EF0 945D E52D" /* Û¢Ça§.>î’V.ð”]å- */
- $"34CF 10DF B2AF 8E14 A5A4 E24F 0051 F63E" /* 4Ï.ß²¯Ž.¥¤âO.Qö> */
- $"F11C 5DAC 6D8D DEDD A585 96FC A2AB A5FF" /* ñ.]¬mÞÝ¥…–ü¢«¥ÿ */
- $"5298 6349 DB41 9276 C1C6 F1E2 9ABF 822B" /* R˜cIÛA’vÁÆñâš¿‚+ */
- $"346F 8679 726C 666A 9638 246A EABE 54A9" /* 4o†yrlfj–8$jê¾T© */
- $"49DD F22A BC62 5867 51F2 FDBD B33B 40E0" /* IÝò*¼bXgQòý½³;@à */
- $"220F 075D 031C EAAE 3CDE 67CF 2269 E26D" /* "..]..ê®<ÞgÏ"iâm */
- $"BEF3 1873 E610 D43E 8F03 A14F F04F 980B" /* ¾ó.sæ.Ô>.¡OðO˜. */
- $"69FF 1E4A 1925 DDE6 B473 84B5 6F53 75DD" /* iÿ.J.%Ýæ´s„µoSuÝ */
- $"CF71 C4C0 72DC 5403 7E7B 1A9B 6F16 BA87" /* ÏqÄÀrÜT.~{.›o.º‡ */
- $"A44D D4A2 8029 E15A 8C17 BE55 A30B 87B3" /* ¤MÔ¢€)áZŒ.¾U£.‡³ */
- $"DC5B CED9 2E4C A8F3 939B 6F82 8885 9BD5" /* Ü[ÎÙ.L¨ó“›o‚ˆ…›Õ */
- $"905B 6EE2 E3C9 D45E DE91 DD46 7EDD 23BB" /* [nâãÉÔ^Þ‘ÝF~Ý#» */
- $"6852 2BD3 3D31 2755 2D1B 7431 35EB 6CBD" /* hR+Ó=1'U-.t15ël½ */
- $"638C 9E5D F0EB 9AE0 49BC D327 7536 BCB3" /* cŒž]ðëšàI¼Ó'u6¼³ */
- $"65F1 992B E073 9D25 980D A244 7F9E 749F" /* eñ™+às%˜.¢D.žtŸ */
- $"53BD D08A C5EF 64A2 D672 7A55 9146 5CAD" /* S½ÐŠÅïd¢ÖrzU‘F\­ */
- $"7839 E1B6 7543 4556 146E C347 33E3 2798" /* x9á¶uCEV.nÃG3ã'˜ */
- $"4752 6F78 AAA5 AE5E 7B02 CD92 D5F1 FD30" /* GRoxª¥®^{.Í’Õñý0 */
- $"F78A 7BFB 03AB CF34 58BF 3810 B8A7 CDAB" /* ÷Š{û.«Ï4X¿8.¸§Í« */
- $"A573 658E 260A 7C50 000F 00AC D13F 618E" /* ¥seŽ&Â|P...¬Ñ?aŽ */
- $"A241 9458 3945 9D59 3F9B 13C5 04CC 600E" /* ¢A”X9EY?›.Å.Ì`. */
- $"FC51 8C8D FBA0 4150 5832 4539 730B 4631" /* üQŒû APX2E9s.F1 */
- $"0598 EE14 817C B560 97C5 B953 64D4 980D" /* .˜î.|µ`—ŹSdÔ˜. */
- $"C379 6FFF 3E63 6746 7BE8 D3AB 5215 B47F" /* Ãyoÿ>cgF{èÓ«R.´. */
- $"3CAE 42E4 D4BF B7BF 6580 3319 6A71 C2E9" /* <®BäÔ¿·¿e€3.jqÂé */
- $"48AA 2C5E 9D78 B9C3 F8DA B858 D5AB 99F4" /* Hª,^x¹ÃøÚ¸XÕ«™ô */
- $"B04F EAAC D0DE 2302 F874 7E64 A69B 89CE" /* °Oê¬ÐÞ#.øt~d¦›‰Î */
- $"AEAB A73F F815 0D06 B24E 39EC D8E9 EFB7" /* ®«§?ø...²N9ìØéï· */
- $"ED32 55A0 8E21 B52A E55C 17AE E07B 42F4" /* í2U Ž!µ*å\.®à{Bô */
- $"D451 CB7C E941 1578 3EE3 9565 087E 9A05" /* ÔQË|éA.x>ã•e.~š. */
- $"B5FC 403A AAA2 25CE 5AC1 B658 1EE9 9A53" /* µü@:ª¢%ÎZÁ¶X.éšS */
- $"4000 51DF 95E8 C605 97AC C7E1 A8B1 F86C" /* @.Qß•èÆ.—¬Çᨱøl */
- $"7C3F 0BCC E410 8FA7 78C0 7964 BDD0 E341" /* |?.Ìä.§xÀyd½ÐãA */
- $"5DC5 D977 EF99 460C FC48 A51A B5CD DE47" /* ]ÅÙwï™F.üH¥.µÍÞG */
- $"F9E2 194D 1F2D B2B6 556B 0F68 BD1B 5BEA" /* ùâ.M.-²¶Uk.h½.[ê */
- $"9FDD 1280 92A3 EF96 132C 22F6 CA8A 1C20" /* ŸÝ.€’£ï–.,"öÊŠ. */
- $"54DA F163 6119 BC02 7AE6 10CA A16B 993A" /* TÚñca.¼.zæ.Ê¡k™: */
- $"E22B CC58 D181 40E6 EA99 0897 5166 4C1F" /* â+ÌXÑ@æê™.—QfL. */
- $"6D58 D092 5119 1AF5 0C2B 1DC6 029D F0E8" /* mXÐ’Q..õ.+.Æ.ðè */
- $"1F6F 9F5C 17D8 68A0 F600 5C68 5C16 4269" /* .oŸ\.Øh ö.\h\.Bi */
- $"F5A9 4D97 32DE 3A9C 6609 86C2 1D0F BA56" /* õ©M—2Þ:œfƆÂ..ºV */
- $"3C8C 1046 E0DC 2ECB 9BDB D61E 6955 CE38" /* <Œ.FàÜ.Ë›ÛÖ.iUÎ8 */
- $"DB97 859B 9E73 78BF FDEB ED74 0C4E 4203" /* Û—…›žsx¿ýëít.NB. */
- $"431D 69C4 635D D1EA 1A9A 6462 BE48 DDB9" /* C.iÄc]Ñê.šdb¾Hݹ */
- $"6E63 C4D8 8886 51CB 19E6 A7C9 5941 8443" /* ncÄØˆ†QË.æ§ÉYA„C */
- $"57E5 8C3B B907 FF17 4B41 08DA 7AFC 1B8B" /* WåŒ;¹.ÿ.KA.Úzü.‹ */
- $"9B05 622E 1F81 91D8 2C60 9C6A 3B23 608B" /* ›.b..‘Ø,`œj;#`‹ */
- $"F2EC E527 70F9 D963 D302 D7AC 18E2 2692" /* òìå'pùÙcÓ.׬.â&’ */
- $"AE0C D915 7E30 5B09 305C 8F5D 1346 3FF2" /* ®.Ù.~0[Æ0\].F?ò */
- $"8635 ECEC 1CB7 962D 0846 3FA9 5920 C1B0" /* †5ìì.·–-.F?©Y Á° */
- $"5582 FF3A 24E0 FAAE 8FAE 3843 DFCF B74F" /* U‚ÿ:$àú®®8CßÏ·O */
- $"CAEC 5602 D1C5 1760 5ECD 92C8 1DD1 4ABE" /* ÊìV.ÑÅ.`^Í’È.ÑJ¾ */
- $"2336 8A90 E444 6753 D3E0 0F02 8E99 7393" /* #6ŠäDgSÓà..Ž™s“ */
- $"8B26 6C9F BFB4 64DE 7867 73F7 10F0 477A" /* ‹&lŸ¿´dÞxgs÷.ðGz */
- $"8383 ADA5 49C3 722B 1FD7 0BB5 4118 4714" /* ƒƒ­¥IÃr+.×.µA.G. */
- $"D5F9 6C20 CDD0 8151 EAB4 457F FF4E 314C" /* Õùl ÍÐQê´E.ÿN1L */
- $"6E7F 04DB DE0C 611B 62AC 2A4E 869C 06FB" /* n..ÛÞ.a.b¬*N†œ.û */
- $"DB81 F238 C4FC 149E 8176 3F0C 4B83 0DFF" /* Ûò8Äü.žv?.Kƒ.ÿ */
- $"7FB4 A5F5 80C7 E4F0 47AD 8D3F 5426 B12A" /* .´¥õ€ÇäðG­?T&±* */
- $"8678 11E1 A0EF 5439 31D8 E97E 3AE9 E4DD" /* †x.á ïT91Øé~:éäÝ */
- $"3DB7 4A94 7FFF 7135 0C02 ACE2 70F5 626B" /* =·J”.ÿq5..¬âpõbk */
- $"271A 4401 DF00 AE70 E43B D3F8 75AD 0DAB" /* '.D.ß.®pä;Óøu­.« */
- $"794A C0C7 928F 8621 BE61 DA60 A89F 8E95" /* yJÀÇ’†!¾aÚ`¨ŸŽ• */
- $"64E1 4B82 9CA5 D1CB 26FA 3B49 2FDF 8007" /* dáK‚œ¥ÑË&ú;I/߀. */
- $"60B1 1C23 B192 973E 87DD 9323 E697 CA76" /* `±.#±’—>‡Ý“#æ—Êv */
- $"03D6 B09A 33FA 5CEC 856D 1D12 5249 2492" /* .Ö°š3ú\ì…m..RI$’ */
- $"4924 9249 2492 4924 9231 8B0A C6C2 C882" /* I$’I$’I$’1‹ÂÆÂÈ‚ */
- $"FC66 E59C E646 38B0 B26F A097 FEA2 30FE" /* üfåœæF8°²o —þ¢0þ */
- $"F5B9 90DC 3FEF 3116 73C4 7B20 6C09 EA40" /* õ¹Ü?ï1.sÄ{ lÆê@ */
- $"AB90 6257 8BAD 951C 002E 138D 7274 121D" /* «bW‹­•....rt.. */
- $"B91E 66F5 6038 8257 FD9A 18C9 0155 522C" /* ¹.fõ`8‚Wýš.É.UR, */
- $"D6CC 0F6A 6A4A 09F3 0C4A B702 47FF 7FFC" /* ÖÌ.jjJÆó.J·.Gÿ.ü */
- $"B504 0034 6682 CE19 CA7C 50BE F8B0 9DCB" /* µ..4f‚Î.Ê|P¾ø°Ë */
- $"0092 4924 9248 F298 B4D2 A612 6CEE 878F" /* .’I$’Hò˜´Ò¦.lî‡ */
- $"FF7F FF5F 8F59 B3E0 FE9F A74E 506D C924" /* ÿ.ÿ_Y³àþŸ§NPmÉ$ */
- $"9249 2492 4924 9249 2492 4924 924D 57A2" /* ’I$’I$’I$’I$’MW¢ */
- $"2CC8 426C 393A 96E4 50FB 0ACE 8874 7A86" /* ,ÈBl9:–äPûÂΈtz† */
- $"2B20 84D4 0F34 1532 DFF0 D633 0231 0F65" /* + „Ô.4.2ßðÖ3.1.e */
- $"91D1 8E19 A917 CD2A 8D35 89BE F64E D1A8" /* ‘ÑŽ.©.Í*5‰¾öNѨ */
- $"926C AE06 3A49 80F9 C1FE 0E81 52D8 5A8C" /* ’l®.:I€ùÁþ.RØZŒ */
- $"7A00 5EF2 9F04 3659 74EC D695 94B6 5B90" /* z.^òŸ.6YtìÖ•”¶[ */
- $"89C0 E661 DFC4 5E69 965B 4D1D 4B76 7C0E" /* ‰ÀæaßÄ^i–[M.Kv|. */
- $"89D2 C1E8 B1EF CF9E 5E96 3977 AEA6 532B" /* ‰ÒÁè±ïÏž^–9w®¦S+ */
- $"68B1 BD73 2BE6 BB5B 766E FA91 5C36 628C" /* h±½s+æ»[vnú‘\6bŒ */
- $"F45F FEEA C7DF 49F0 278F F459 E9B6 BDAC" /* ô_þêÇßIð'ôYé¶½¬ */
- $"1A28 F485 45C5 2761 DC37 C72A 8A17 2D08" /* .(ô…EÅ'aÜ7Ç*Š.-. */
- $"5130 E9D5 E1BD 2D59 07B5 2290 00F9 F737" /* Q0éÕá½-Y.µ".ù÷7 */
- $"C1F4 5C78 1058 C4C6 13AB AE5C 45DE ACB4" /* Áô\x.XÄÆ.«®\EÞ¬´ */
- $"7DC9 03C4 0F82 7850 6F9E 5FD3 9223 36FE" /* }É.Ä.‚xPož_Ó’#6þ */
- $"8A1D 1D99 FBB3 646B 206B FC7E 668E 4730" /* Š..™û³dk kü~fŽG0 */
- $"7C8C 79D9 A37A 427B 1E91 E7A1 DED2 E57D" /* |ŒyÙ£zB{.‘ç¡ÞÒå} */
- $"E167 967A 8B9F A6C0 A36F 68E8 D03C 84C6" /* ág–z‹Ÿ¦À£ohèÐ<„Æ */
- $"E952 3CAF 039F 18CD 236C 4AE1 FB74 D7F6" /* éR<¯.Ÿ.Í#lJáût×ö */
- $"DFBF B7A4 AFDB D27E 2FB7 7BBF 86F0 DF6F" /* ß¿·¤¯ÛÒ~/·{¿†ðßo */
- $"4F9F C3A7 EC7F 0D0F BEDB 1EFB 77AA FB77" /* OŸÃ§ì...¾Û.ûwªûw */
- $"2CED 1CDE F39E A2F3 567D 91E9 4703 B8A2" /* ,í.Þóž¢óV}‘éG.¸¢ */
- $"5006 2494 6271 81F3 3B95 0B89 EDD5 7FE8" /* P.$”bqó;•.‰íÕ.è */
- $"B864 3D84 75CD 7478 A5D6 28C8 D483 39EF" /* ¸d=„uÍtx¥Ö(ÈÔƒ9ï */
- $"86CA 5763 87CA 97CF A9D4 AFA9 0450 6744" /* †ÊWc‡Ê—ϩԯ©.PgD */
- $"16E3 8C0B 0015 88DA 5244 1AB2 9790 35B0" /* .ãŒ...ˆÚRD.²—5° */
- $"0489 B911 D871 2BB4 6576 C185 22B7 1F86" /* .‰¹.Øq+´evÁ…"·.† */
- $"230A 3CD3 ECB5 20A6 23BA A068 A53E 8EAD" /* #Â<Óìµ ¦#º h¥>Ž­ */
- $"3793 46B5 BA07 96A8 DF28 6A66 CE05 73CE" /* 7“Fµº.–¨ß(jfÎ.sÎ */
- $"1938 F9A6 9CBC 0D7F F193 E0D5 09CC 3426" /* .8ù¦œ¼..ñ“àÕÆÌ4& */
- $"4BB1 52B9 F337 0537 FA01 B010 5471 B015" /* K±R¹ó7.7ú.°.Tq°. */
- $"754C A1A6 E071 800C 1A26 243D 172B 1497" /* uL¡¦àq€..&$=.+.— */
- $"E5DF 1EB1 6A6C 6761 3BA6 52C0 C0B4 69BD" /* åß.±jlga;¦RÀÀ´i½ */
- $"E6B4 275E EB6E 42BF D693 8928 15A4 9DB2" /* æ´'^ënB¿Ö“‰(.¤² */
- $"D8FA E273 6C04 CBB5 06A9 8096 5E97 5D11" /* Øúâsl.˵.©€–^—]. */
- $"0B1B 8E93 BDCC 1AE8 4CBA 9413 A729 F6A7" /* ..Ž“½Ì.èLº”.§)ö§ */
- $"F24D 467F 0316 BF60 F777 C2E3 7FAA DC07" /* òMF...¿`÷wÂã.ªÜ. */
- $"148F 5C26 91C3 20B8 F3A0 9088 F893 6D47" /* .\&‘Ã ¸ó ˆø“mG */
- $"7AC1 A0D9 5483 8281 5B98 28AE 9EAB 94F0" /* zÁ ÙTƒ‚[˜(®ž«”ð */
- $"9B68 08E3 E3DA 7E3A AA84 9EED F083 117F" /* ›h.ããÚ~:ª„žíðƒ.. */
- $"FE75 781E E394 EEEC F9AC 21D6 FF5E DD57" /* þux.ã”îìù¬!Öÿ^ÝW */
- $"96CF A7DF 3C0D 7E2F F9E7 F212 83EE E629" /* –ϧß<.~/ùçò.ƒîæ) */
- $"9543 AA61 C10A 4B12 1DD8 6835 405A D739" /* •CªaÁÂK..Øh5@Z×9 */
- $"DBD7 1628 2816 909D 1DEB 81F2 16AF 8953" /* Û×.((..ëò.¯‰S */
- $"9239 B79D A64A 3275 E506 BFD3 0198 776C" /* ’9·¦J2uå.¿Ó.˜wl */
- $"F4C2 39CD 4CF8 2482 D781 526A 7D82 0B83" /* ôÂ9ÍLø$‚×Rj}‚.ƒ */
- $"120C B2AB 1FC0 2DAA 4A72 ACD9 B4C7 926A" /* ..²«.À-ªJr¬Ù´Ç’j */
- $"CE69 46FA C67E 904D 12D4 D6EC 2F77 AC43" /* ÎiFúÆ~M.ÔÖì/w¬C */
- $"0A82 A09A 8FAC 59F0 D192 4F8F E6D1 A8B3" /* ‚ š¬YðÑ’OæÑ¨³ */
- $"26FD EAD1 7727 E253 F826 580D 8786 8EAD" /* &ýêÑw'âSø&X.‡†Ž­ */
- $"4561 33FC 6C93 72E4 3F53 3E92 5E78 9597" /* Ea3ül“rä?S>’^x•— */
- $"895F 61B9 D382 514D 839E D4E8 A40B 6F99" /* ‰_a¹Ó‚QMƒžÔè¤.o™ */
- $"0BEC 889F F976 6F24 AEAC 2A18 479B 9CD0" /* .숟ùvo$®¬*.G›œÐ */
- $"A58D E4A8 4940 D7A9 26A7 8649 C387 22EB" /* ¥ä¨I@ש&§†IÇ"ë */
- $"10F3 AB7F 805D 57F4 6918 508A 429D FC32" /* .ó«.€]Wôi.PŠBü2 */
- $"0E49 3480 E5A6 0267 54A6 D677 422D 1B62" /* .I4€å¦.gT¦ÖwB-.b */
- $"4DFB C3A4 2E01 8C0D 029D D238 87B0 230E" /* Mûä..Œ..Ò8‡°#. */
- $"AB6E AEFD 64F3 F7AE 7BD7 DA13 2BCC DCFB" /* «n®ýdó÷®{×Ú.+ÌÜû */
- $"13EC E7EE A36F 86C6 A2D8 DD70 6174 04FA" /* .ìçî£o†Æ¢ØÝpat.ú */
- $"B7F7 A3BF 9C4C F99C C177 9B27 9148 3998" /* ·÷£¿œLùœÁw›'‘H9˜ */
- $"013A 4B0C E3A5 6905 6ADC 739C 3586 7009" /* .:K.ã¥i.jÜsœ5†pÆ */
- $"38DA 0496 C25E DFB2 F2AB 34C0 F138 4F81" /* 8Ú.–Â^ß²ò«4Àñ8O */
- $"7240 2774 4588 B153 267B DBBE DFDE AEAD" /* r@'tEˆ±S&{Û¾ßÞ®­ */
- $"1D90 BA71 2B83 D108 1CDB 8B36 7837 8AAA" /* .ºq+ƒÑ..Û‹6x7Šª */
- $"299C 2916 D66C CC2E 2FCF B0E3 228A 88C1" /* )œ).ÖlÌ./ϰã"ŠˆÁ */
- $"568F 12D8 D599 AB3F 29DE 1FA6 9336 132F" /* V.ØÕ™«?)Þ.¦“6./ */
- $"521E 8EB9 9BD4 30E4 362E 349E 209A 6EB6" /* R.޹›Ô0ä6.4ž šn¶ */
- $"D5CC 985B E51E 8A74 B9A0 1718 2753 A1E0" /* Õ̘[å.Št¹ ..'S¡à */
- $"BDCC 77CC 5697 641D B916 AB08 C12F 102F" /* ½ÌwÌV—d.¹.«.Á/./ */
- $"59A0 4283 27A8 9F9E 1980 381A 4785 E896" /* Y Bƒ'¨Ÿž.€8.G…è– */
- $"B9C8 A383 0C1E EBDE A8DC D1A0 00FB 61C2" /* ¹È£ƒ..ëÞ¨ÜÑ .ûa */
- $"70F1 84C8 8368 337E DA6C 7A1A 014F 77C3" /* pñ„ȃh3~Úlz..Owà */
- $"EFFF 0CCC F88E E539 B4FF 3187 54EA 4B2E" /* ïÿ.ÌøŽå9´ÿ1‡TêK. */
- $"27BF 1121 0DCD 456F 5AB4 E115 9E30 8B1C" /* '¿.!.ÍEoZ´á.ž0‹. */
- $"FCFB 8634 E35F E3F0 2A65 8EC0 775F C0EE" /* üû†4ã_ãð*eŽÀw_Àî */
- $"37B2 6C5A AA44 2B7C 889A 5854 FBB4 DC29" /* 7²lZªD+|ˆšXTû´Ü) */
- $"E875 94AB D4F4 19C2 5989 594D 6B55 CB5E" /* èu”«Ôô.ÂY‰YMkUË^ */
- $"012C A350 BF1C 322E 6DC6 6CFB 052A B48D" /* .,£P¿.2.mÆlû.*´ */
- $"2FFE D908 D443 2FB2 706F 13A8 B2BF 2E97" /* /þÙ.ÔC/²po.¨²¿.— */
- $"D7EF 6FE2 7D0B 4D6C 89E6 24BB D547 A266" /* ×ïoâ}.Ml‰æ$»ÕG¢f */
- $"3B92 FF58 BE83 0D95 D587 B51D B83A B360" /* ;’ÿX¾ƒ.•Õ‡µ.¸:³` */
- $"DF16 A55F 5D17 5ED7 C7D7 88FD D24B 89C4" /* ß.¥_].^×Ç׈ýÒK‰Ä */
- $"17FF 1CE0 2FC5 E332 79FF 6532 D599 2C36" /* .ÿ.à/Åã2yÿe2Õ™,6 */
- $"7360 56F2 6017 1165 F8CD AC09 6435 530F" /* s`Vò`..eøÍ¬Æd5S. */
- $"8E48 0152 06AE 7F31 9D5A A12E EC4A 26BD" /* ŽH.R.®.1Z¡.ìJ&½ */
- $"1D28 2D81 EBF2 625A 03C8 8240 FAB0 343C" /* .(-ëòbZ.È‚@ú°4< */
- $"3460 4650 A369 CBAF D533 EC55 DB4D 46F7" /* 4`FP£i˯Õ3ìUÛMF÷ */
- $"45C4 1B75 581D CC26 9E29 8B0F C424 5512" /* EÄ.uX.Ì&ž)‹.Ä$U. */
- $"9417 F11C 77C1 F3FD 57B1 487F D8F8 A086" /* ”.ñ.wÁóýW±H.Øø † */
- $"E60E 2356 E9E1 F3EC 7F31 52E1 E3DB C75E" /* æ.#Véáóì.1RáãÛÇ^ */
- $"7A4B 2D19 8F06 AB86 5A88 F23D C312 C565" /* zK-..«†Zˆò=Ã.Åe */
- $"1AF0 4B35 F0D9 D100 6634 A377 90C1 A69A" /* .ðK5ðÙÑ.f4£wÁ¦š */
- $"1C64 495A BEF2 5A5C 1714 0504 2639 71A2" /* .dIZ¾òZ\....&9q¢ */
- $"5989 FF6E F887 5ADD 9843 A719 60CC 5185" /* Y‰ÿnø‡ZݘC§.`ÌQ… */
- $"B308 2551 F63A 7543 2A92 3949 FCC5 5023" /* ³.%Qö:uC*’9IüÅP# */
- $"5A92 FE32 A26E FF00 9CFC 0CFF 4A08 60C7" /* Z’þ2¢nÿ.œü.ÿJ.`Ç */
- $"F76C 480A E682 3C58 66B8 7045 CDBA 616C" /* ÷lHÂæ‚<Xf¸pEͺal */
- $"9995 BEC1 809B 0892 A7EC 43EC 7FE8 F49F" /* ™•¾Á€›.’§ìCì.èôŸ */
- $"9E4B AFD6 66BB 0B88 38ED B165 9C1D F096" /* žK¯Öf».ˆ8í±eœ.ð– */
- $"64EC FD43 9A7A BC84 8CEF 2E65 F99B 4B43" /* dìýCšz¼„Œï.eù›KC */
- $"7D47 3AE8 D0DB A066 308B 201D FF3F ABC1" /* }G:èÐÛ f0‹ .ÿ?«Á */
- $"CD0D B822 3734 A23E AF05 D1E1 F9F5 AF09" /* Í.¸"74¢>¯.Ñáùõ¯Æ */
- $"6428 F517 1201 C3F1 1B80 0DD2 DCD9 CA31" /* d(õ...Ãñ.€.ÒÜÙÊ1 */
- $"B022 DAFB D990 A8B1 6FF1 004E 4847 E5C8" /* °"ÚûÙ¨±oñ.NHGåÈ */
- $"0580 DA86 704F E2FF 7E83 5167 5C3F ADB2" /* .€Ú†pOâÿ~ƒQg\?­² */
- $"4C44 A9D9 DB84 C360 68ED 1BF0 068E 04BF" /* LD©ÙÛ„Ã`hí.ð.Ž.¿ */
- $"D16E B55F 0701 3739 42FA E15C 0EA2 BF81" /* Ñnµ_..79Búá\.¢¿ */
- $"31C1 F1A3 A766 CAB8 C82E C96B 4868 D491" /* 1Áñ£§fʸÈ.ÉkHhÔ‘ */
- $"5ACB 6EED 4027 0C73 AACA 730C ECA6 DE42" /* ZËní@'.sªÊs.ì¦ÞB */
- $"38DA E07E CE64 BC49 7FDD FCCB 07B3 45BF" /* 8Úà~Îd¼I.ÝüË.³E¿ */
- $"B9DC FF13 039F D40E 43BB ACE4 B8F8 31F5" /* ¹Üÿ..ŸÔ.C»¬ä¸ø1õ */
- $"6743 9390 0B87 C9B1 194A 0200 FB53 29CD" /* gC“.‡É±.J..ûS)Í */
- $"3141 15F5 3C38 9F70 2B7E 0E46 B5A7 5C94" /* 1A.õ<8Ÿp+~.Fµ§\” */
- $"AED4 E415 1639 7B49 20DA 1541 9742 A3A6" /* ®Ôä..9{I Ú.A—B£¦ */
- $"B873 4C7C 9112 1322 7D7F 5F6E 14AB 57FC" /* ¸sL|‘.."}._n.«Wü */
- $"A01D 94EC BC05 F45B C4C4 1FC3 D61B F5D3" /*  .”ì¼.ô[ÄÄ.ÃÖ.õÓ */
- $"0E62 9C2F CAE6 C609 B0D2 803B AF5F CC7F" /* .bœ/ÊæÆÆ°Ò€;¯_Ì. */
- $"4085 5B49 F81B 0AB3 DB0C 27C1 7A95 45D6" /* @…[Iø.³Û.'Áz•EÖ */
- $"CDDD 4F06 1A20 A7FE 22F6 EA13 EB6E C723" /* ÍÝO.. §þ"öê.ënÇ# */
- $"87B9 A058 CAF9 9F59 C9C9 6AAD 8358 5147" /* ‡¹ XÊùŸYÉÉj­ƒXQG */
- $"2B3E 2FD8 506F A48B 305C 97C7 5D25 5C75" /* +>/ØPo¤‹0\—Ç]%\u */
- $"C5B1 E7B4 CBC7 C76A 2FE5 1669 302C 2318" /* űç´ËÇÇj/å.i0,#. */
- $"CB1D BB38 5B47 3563 F041 0F00 C23A B1E9" /* Ë.»8[G5cðA..Â:±é */
- $"1972 D9C9 2F2F 4013 F8EF A6CA 7E8E 705C" /* .rÙÉ//@.øï¦Ê~Žp\ */
- $"0CB6 1301 5ED4 25E6 F7D9 999D AB8F 4CAC" /* .¶..^Ô%æ÷Ù™«L¬ */
- $"6FF2 04C8 8307 016C 6E46 645B 5488 79C0" /* oò.ȃ..lnFd[TˆyÀ */
- $"C0E5 8A2A 46EB DB4C 65A0 27FC 6230 781C" /* ÀåŠ*FëÛLe 'üb0x. */
- $"EDB8 4666 1604 1937 9603 A2AA D8C3 43A6" /* í¸Ff...7–.¢ªØÃC¦ */
- $"E254 D745 866F D24A DD91 397E C575 F187" /* âT×E†oÒJÝ‘9~Åuñ‡ */
- $"193B F5F5 819B 7D57 EC83 0871 ED1B 64F6" /* .;õõ›}Wìƒ.qí.dö */
- $"E47A E1B0 65F9 67DF 5680 3642 52AA BB4B" /* äzá°eùgßV€6BRª»K */
- $"BA52 D8BA 8AF7 0A96 412A 92B2 045F 9739" /* ºRغŠ÷–A*’²._—9 */
- $"3A52 D961 6BC6 1D2E D90D 29A7 E9DE 2651" /* :RÙakÆ..Ù.)§éÞ&Q */
- $"CE3F 9921 03BC 7A7A CBFD 63E2 4C7C 9025" /* Î?™!.¼zzËýcâL|% */
- $"BCC3 D509 745E 9AE4 1675 0242 26EE E4F6" /* ¼ÃÕÆt^šä.u.B&îäö */
- $"B04B CFB3 E37F EADB 2840 E47E 0209 C8C5" /* °Kϳã.êÛ(@ä~.ÆÈÅ */
- $"56FC 6228 BB57 F43A BE32 0753 73FB EAE2" /* Vüb(»Wô:¾2.Ssûêâ */
- $"55B4 D581 42C8 10B8 AEA9 67C4 F685 982C" /* U´ÕBÈ.¸®©gÄö…˜, */
- $"3104 095F DCBD 3701 8749 9CBA A7A5 B714" /* 1.Æ_ܽ7.‡Iœº§¥·. */
- $"FDED FAA3 F034 54D8 728F 8640 4A61 560C" /* ýíú£ð4TØr†@JaV. */
- $"50D4 B224 A5F1 6715 6C8B 7EC6 BF5C 120D" /* PÔ²$¥ñg.l‹~Æ¿\.. */
- $"8797 B25E B0E1 C57E 69AF 1FF2 99C3 44B5" /* ‡—²^°áÅ~i¯.ò™ÃDµ */
- $"0508 0061 1F44 795F 27C0 511E 0796 9740" /* ...a.Dy_'ÀQ..–—@ */
- $"14FF 4C51 5651 34F3 658D 4CA8 3FBF 43CC" /* .ÿLQVQ4óeL¨?¿CÌ */
- $"8813 D372 1723 7DB5 6D44 4524 4E91 B644" /* ˆ.Ór.#}µmDE$N‘¶D */
- $"4B7D CDEC E0E0 8468 622D 87FE 80E3 E097" /* K}Íìàà„hb-‡þ€ãà— */
- $"303D 8894 1FFF 7FA6 9AAB C6E0 0B83 3EDD" /* 0=ˆ”.ÿ.¦š«Æà.ƒ>Ý */
- $"86A5 43D3 C650 0008 D364 A800 0000 0000" /* †¥CÓÆP..Ód¨..... */
- $"0000 07D7 8F92 61B9 E6E0 BCBF CD4A AB76" /* ...×’a¹æà¼¿ÍJ«v */
- $"5B6E 246A 8DFB D274 41F9 3583 773D 5165" /* [n$jûÒtAù5ƒw=Qe */
- $"2139 B773 476E DF91 33F0 8CDA F420 613F" /* !9·sGnß‘3ðŒÚô a? */
- $"9B35 33C9 8298 A661 A5DB 2CEF 1A1C BC3E" /* ›53É‚˜¦a¥Û,ï..¼> */
- $"09B4 5415 8511 4FE5 3FF8 B88C 339D C169" /* Æ´T.….Oå?ø¸Œ3Ái */
- $"9608 FF62 B2D6 285A 80A2 22C9 E4AA 5A99" /* –.ÿb²Ö(Z€¢"ÉäªZ™ */
- $"B3F5 E9D4 7FFF 7FF4 7D5C 4CC0 788F 0EB6" /* ³õéÔ.ÿ.ô}\LÀx.¶ */
- $"8024 0000 0A1E 1F40 0000 0000 0000 0000" /* €$..Â..@........ */
- $"CA54 CF6A 897B B6D7 9C90 87E9 FF6A 22A0" /* ÊTÏj‰{¶×œ‡éÿj"  */
- $"0765 4AE8 B827 B7A1 C412 4000 0000 0000" /* .eJè¸'·¡Ä.@..... */
- $"0000 2222 DAB7 AEED C4EB AFCB FF79 6610" /* ..""Ú·®íÄë¯Ëÿyf. */
- $"A362 D5F2 1401 DA9F 8978 3FC3 FF60 341C" /* £bÕò..ÚŸ‰x?Ãÿ`4. */
- $"524C CBF3 AF64 9BA4 637F F217 CA8C A4CE" /* RLËó¯d›¤c.ò.ÊŒ¤Î */
- $"A881 46DE C63F CB0B 4C86 F71C CDFF 6CDC" /* ¨FÞÆ?Ë.L†÷.ÍÿlÜ */
- $"3C86 AFD6 02EF 25B3 E392 0238 14ED F9FF" /* <†¯Ö.ï%³ã’.8.íùÿ */
- $"71EA 1A7B 7848 281D C18D 83C1 F0D1 C115" /* qê.{xH(.ÁƒÁðÑÁ. */
- $"C525 7E38 9E60 32A4 CED2 A5DE 8006 1212" /* Å%~8ž`2¤ÎÒ¥Þ€... */
- $"7136 14A1 74D1 9C7D F74C 708E 43DE 4154" /* q6.¡tÑœ}÷LpŽCÞAT */
- $"2939 179A 87BB 2AAF 7401 4404 CB30 458F" /* )9.š‡»*¯t.D.Ë0E */
- $"F1B7 EE42 3E46 458F B220 6F30 EE24 7D86" /* ñ·îB>FE² o0î$}† */
- $"2D28 3CA7 C184 60D3 4EBC 9C79 C402 02FC" /* -(<§Á„`ÓN¼œyÄ..ü */
- $"553C C62D DDC0 3D0C F12B C1FF 546D A4FF" /* U<Æ-ÝÀ=.ñ+ÁÿTm¤ÿ */
- $"5885 6B1B 9EF6 2206 8FB5 1CB0 2D3D B922" /* X…k.žö".µ.°-=¹" */
- $"644F D104 0152 70F8 BF41 4D6E 4F05 B928" /* dOÑ..Rpø¿AMnO.¹( */
- $"396A 4A92 9B1B 24AB 4611 6D95 87D6 2D7C" /* 9jJ’›.$«F.m•‡Ö-| */
- $"7546 B839 A3B1 C612 0F2A 796E 7911 5FF9" /* uF¸9£±Æ..*yny._ù */
- $"03C4 D13E EF00 2DEF 9CFE FDDE 3A2C FF3E" /* .ÄÑ>ï.-ïœþýÞ:,ÿ> */
- $"4567 F432 3673 3F84 8787 B65C 7A4F 2007" /* Egô26s?„‡‡¶\zO . */
- $"FF7C D894 A762 3872 8FA4 9563 D178 5039" /* ÿ|Ø”§b8r¤•cÑxP9 */
- $"C4BD 2EB4 0491 2A80 0000 0000 0000 0001" /* Ľ.´.‘*€........ */
- $"F172 6FA1 09F2 9F35 F3BC 2E0B 8E46 2557" /* ñro¡ÆòŸ5ó¼..ŽF%W */
- $"67C5 4F12 D1CF F08C BC61 0F89 E4A4 9249" /* gÅO.ÑÏðŒ¼a.‰ä¤’I */
- $"2492 4924 9249 221B 4708 65ED 84CA FDD2" /* $’I$’I".G.eí„ÊýÒ */
- $"D193 7C69 0CA3 95EF DDF2 33FF 556E D976" /* Ñ“|i.£•ïÝò3ÿUnÙv */
- $"2E4D FDCE E0FC 8669 83FF 768E 3CBB 179B" /* .MýÎàü†iƒÿvŽ<».› */
- $"DBB9 253D BFFF 79F1 5006 27BF 5548 40B9" /* Û¹%=¿ÿyñP.'¿UH@¹ */
- $"BADC F963 10BA 8BD9 367F E03A 6E29 5908" /* ºÜùc.º‹Ù6.à:n)Y. */
- $"0000 0000 0000 0000 0028 8080 0000 000A" /* .........(€€... */
- $"6370 D000 0142 83C0 0000 0011 CD3F D940" /* cpÐ..BƒÀ....Í?Ù@ */
- $"0022 C990 C912 501C 14FC 1926 5412 0E88" /* ."ÉÉ.P..ü.&T..ˆ */
- $"C32F B2ED E7A4 9249 2492 4924 9249 247E" /* Ã/²í礒I$’I$’I$~ */
- $"FB2C 999E D2ED 6DFF 783B 4C3A 3DB7 14A5" /* û,™žÒímÿx;L:=·.¥ */
- $"872C 2B85 8FC2 72EA 3412 FCA8 32E0 7A2E" /* ‡,+…Ârê4.ü¨2àz. */
- $"B109 F66C 3F99 7C32 2761 1522 7B9C 1851" /* ±Æöl?™|2'a."{œ.Q */
- $"B3CB 5373 0652 CE79 D8C5 B721 03D7 CD81" /* ³ËSs.RÎyØÅ·!.×Í */
- $"A03A CD5F CECF B58A 4122 7ED2 9FFF 7FFF" /*  :Í_ÎϵŠA"~ÒŸÿ.ÿ */
- $"1575 DF0B 430B 0A6C 6108 B421 B33F E9FA" /* .uß.C.Âla.´!³?éú */
- $"AC06 391C EB01 17F4 3BF4 4CDA 87DA 516F" /* ¬.9.ë..ô;ôLÚ‡ÚQo */
- $"EFA3 E7F9 651A 6902 C269 AF79 2EA4 D861" /* ï£çùe.i.Âi¯y.¤Øa */
- $"CBC1 7F37 146D 4163 38BB B16B AAD4 9AC2" /* ËÁ.7.mAc8»±kªÔšÂ */
- $"424A B3CE 1368 78EF B4B0 FE68 2FBA 0CB2" /* BJ³Î.hxï´°þh/º.² */
- $"E672 A89D 999E 64CD 417A 98A3 8458 0603" /* ær¨™ždÍAz˜£„X.. */
- $"C03D 9F9E B15E 8418 0FC6 F3E0 BA39 A3C1" /* À=Ÿž±^„..Æóàº9£Á */
- $"9929 0547 9C29 FC76 57CA B1E5 F887 AE73" /* ™).Gœ)üvWÊ±åø‡®s */
- $"78AA BA9F FF7F C07C 00F0 28E9 7533 0FC1" /* xªºŸÿ.À|.ð(éu3.Á */
- $"097C 4ABC F3CB 6604 EEC2 5194 A1F2 A201" /* Æ|J¼óËf.îÂQ”¡ò¢. */
- $"D6B0 C5F3 4AA3 8FD8 34DC A382 0CD4 134E" /* Ö°ÅóJ£Ø4Ü£‚.Ô.N */
- $"8275 37F5 2388 74C6 1A6C F889 1037 A348" /* ‚u7õ#ˆtÆ.lø‰.7£H */
- $"ACB4 EFF5 B446 564C C6DC 75F7 8445 013F" /* ¬´ïõ´FVLÆÜu÷„E.? */
- $"79FF 407B 05EE 9C66 8A53 FF7A 367A 6D06" /* yÿ@{.îœfŠSÿz6zm. */
- $"9ADF CBDD 25B5 0629 78A0 A071 35BA EE49" /* šßËÝ%µ.)x  q5ºîI */
- $"64E9 3EA3 9A07 917A 66E3 090C B916 3BF5" /* dé>£š.‘zfãÆ.¹.;õ */
- $"10D7 77D5 7281 248E 3F09 0C0F 319E 7F71" /* .×wÕr$Ž?Æ..1ž.q */
- $"98DA A34A C823 06A4 6BFD 8EA1 8C71 EB25" /* ˜Ú£JÈ#.¤kýŽ¡Œqë% */
- $"E5FC 0BA1 DB35 9514 A229 56F0 7E42 9FD0" /* åü.¡Û5•.¢)Vð~BŸÐ */
- $"5435 3CB7 AED9 0A4F 625B A493 D1B2 C654" /* T5<·®ÙÂOb[¤“ѲÆT */
- $"F691 87F9 F8E9 7459 1823 E06B 57D6 C638" /* ö‘‡ùøétY.#àkWÖÆ8 */
- $"7EE2 8CA0 1D79 4000 0000 0000 0000 0000" /* ~⌠.y@......... */
- $"0000 0000 442A 0D8C 8522 4E1A 3752 5040" /* ....D*.Œ…"N.7RP@ */
- $"E53D EE69 0B70 A6BF 9D0D D725 D66E 8D50" /* å=îi.p¦¿.×%ÖnP */
- $"10DB 966B 649B 0CA3 958B 6457 90CC 214A" /* .Û–kd›.£•‹dWÌ!J */
- $"C4C0 27A2 95F4 98AD 14C2 1892 EBE7 864B" /* ÄÀ'¢•ô˜­.Â.’ëç†K */
- $"18AA 55C7 50D2 4A15 7F4E 566A 9C13 9C52" /* .ªUÇPÒJ..NVjœ.œR */
- $"AC77 FE86 B3A2 5D92 D112 516C BA99 60EE" /* ¬wþ†³¢]’Ñ.Qlº™`î */
- $"221A F194 D9DF FF5F FF6B 77F9 4B01 4F8F" /* ".ñ”Ùßÿ_ÿkwùK.O */
- $"F681 8614 2F3E 31E3 EABB 7C34 6025 A491" /* ö†./>1ãê»|4`%¤‘ */
- $"9BC1 A348 628D 34AE 751A F8F7 7521 7F48" /* ›Á£Hb4®u.ø÷u!.H */
- $"68A4 6B9C F66F 252D 6021 9C97 39AB B637" /* h¤kœöo%-`!œ—9«¶7 */
- $"3B5D E8FB 56EE 824A F65D C84D E23C 7BF2" /* ;]èûVî‚Jö]ÈMâ<{ò */
- $"5400 0000 0000 0000 0000 0000 0014 080D" /* T............... */
- $"B05B 4688 1F60 376D 2209 1DE1 7E75 CD30" /* °[Fˆ.`7m"Æ.á~uÍ0 */
- $"5D2F 627B A077 8D86 2001 62AF 1031 6853" /* ]/b{ w† .b¯.1hS */
- $"2A8E 0308 16F6 C4EC E5B6 814A 1DF2 23EB" /* *Ž...öÄìå¶J.ò#ë */
- $"8C16 64F9 A1ED 8A1F 346E 2E1C 5ACB 4376" /* Œ.dù¡íŠ.4n..ZËCv */
- $"5014 B885 5212 5294 8F4F DF56 7339 8A5D" /* P.¸…R.R”OßVs9Š] */
- $"03C0 A05F D60B 5D58 2677 CD67 A4EE 3803" /* .À _Ö.]X&wÍg¤î8. */
- $"B2B1 9AD5 A41A C3EF 3281 3FFF 780A A5BD" /* ²±šÕ¤.Ãï2?ÿxÂ¥½ */
- $"861B 62F7 456F 1021 93CD A115 BD61 7E4C" /* †.b÷Eo.!“Í¡.½a~L */
- $"2306 D6BF D5D9 18AF 12BB 22D9 E32E 6976" /* #.Ö¿ÕÙ.¯.»"Ùã.iv */
- $"9282 5E47 A842 7983 2C87 64C5 6215 A0D9" /* ’‚^G¨Byƒ,‡dÅb. Ù */
- $"E45A EFAE 74F3 E5E5 7679 A7C0 D366 649C" /* äZï®tóååvy§ÀÓfdœ */
- $"9EF3 D763 2D6C D0AD 48E5 7A2A 9454 8B34" /* žó×c-lЭHåz*”T‹4 */
- $"B7FF 7FCD F604 90E4 2716 1C40 DD8A 8B1A" /* ·ÿ.Íö.ä'..@ÝŠ‹. */
- $"24C8 2F0C 06AC 999A 58B7 C15E E6B1 431B" /* $È/..¬™šX·Á^æ±C. */
- $"73D1 FEC5 5182 4A2D 33CB E920 AFBE 9F5A" /* sÑþÅQ‚J-3Ëé ¯¾ŸZ */
- $"0478 C2F3 80D7 241A 2E07 8BF3 FD3F 471A" /* .xÂó€×$...‹óý?G. */
- $"7C53 1C79 2F17 C32F D5C6 B977 E2F9 9D80" /* |S.y/.Ã/ÕÆ¹wâù€ */
- $"558B 7336 75BC 5945 3986 BD1C CE95 EA07" /* U‹s6u¼YE9†½.Εê. */
- $"7152 C778 65AD 73E9 F1B7 24D4 BDB0 7F24" /* qRÇxe­séñ·$Ô½°.$ */
- $"BACD 3C51 D344 33D7 21C7 BE9A 915D 2808" /* ºÍ<QÓD3×!Ǿš‘](. */
- $"3E68 3F1B 43AE 8F30 CE7F FF67 1C78 8498" /* >h?.C®0Î.ÿg.x„˜ */
- $"08D8 E1D9 3F1A E50B EB7C E564 6F4C 57F3" /* .ØáÙ?.å.ë|ådoLWó */
- $"9E60 5F9B 244E 83A9 33C9 668A 3951 7E33" /* ž`_›$Nƒ©3ÉfŠ9Q~3 */
- $"31D7 01E7 0342 6BC0 7FD1 7488 2BE1 9AD1" /* 1×.ç.BkÀ.Ñtˆ+ášÑ */
- $"1938 BBD8 7710 BAD3 BB92 2C80 A162 B2EF" /* .8»Øw.ºÓ»’,€¡b²ï */
- $"3FEA 6FC2 47D2 0D0E 28AB 03DA 4B34 4027" /* ?êoÂGÒ..(«.ÚK4@' */
- $"7FFD 87BC 9D96 E076 3C00 0000 0000 0000" /* .ý‡¼–àv<....... */
- $"0000 0000 0000 136C 1721 95F0 1991 3F80" /* .......l.!•ð.‘?€ */
- $"65DC 1F3F AEA0 BE5C 71D2 94CE C7FF 7FFF" /* eÜ.?® ¾\qÒ”ÎÇÿ.ÿ */
- $"7917 BEAD D458 935A 563C CC9C 6C0D CFFF" /* y.¾­ÔX“ZV<Ìœl.Ïÿ */
- $"55DA 93C2 F199 3D1E C4C2 3C5F A7BC D48E" /* UÚ“Âñ™=.ÄÂ<_§¼ÔŽ */
- $"4980 037B 9FCC F7BC 6E1E 78CD 2838 DC58" /* I€.{ŸÌ÷¼n.xÍ(8ÜX */
- $"F156 C827 88EA BFF7 BD95 BBD6 FE11 C305" /* ñVÈ'ˆê¿÷½•»Öþ.Ã. */
- $"A1D2 FA2A EA0B E56B 285B 91FE 551E F5E2" /* ¡Òú*ê.åk([‘þU.õâ */
- $"687C 5A51 1A67 64D3 BD76 4937 F455 4C94" /* h|ZQ.gdÓ½vI7ôUL” */
- $"6A7E B888 CB40 7AA3 DDEE 8BD8 2D9F 1EB6" /* j~¸ˆË@z£Ýî‹Ø-Ÿ.¶ */
- $"48DF 9C66 6BF3 A26A 3CC4 2D4D E47A 6D9A" /* Hßœfkó¢j<Ä-Mäzmš */
- $"DAB1 1DA4 083A D994 4416 C0D2 2E63 539E" /* Ú±.¤.:Ù”D.ÀÒ.cSž */
- $"7274 3C04 85F4 D7B5 EDEF 507A B2B7 1832" /* rt<.…ô×µíïPz²·.2 */
- $"6615 A186 4A80 0000 0000 0000 0000 0000" /* f.¡†J€.......... */
- $"07CF BF6C 3626 7453 BF7D 8B57 26C9 F556" /* .Ï¿l6&tS¿}‹W&ÉõV */
- $"1F12 0BB9 5DC4 797D 3C69 7DB2 2FFF 7F33" /* ...¹]Äy}<i}²/ÿ.3 */
- $"81FC E4ED 4BF8 9180 3FD2 0142 3F2D 1DF0" /* üäíKø‘€?Ò.B?-.ð */
- $"097B D61C 019A C409 B506 26FC D55D 7AE9" /* Æ{Ö..šÄƵ.&üÕ]zé */
- $"3464 6C57 13E7 565F 2553 70C3 3EC7 87AC" /* 4dlW.çV_%SpÃ>LJ¬ */
- $"3161 5289 3A6A FC0B E254 CAFA 6A32 2F8C" /* 1aR‰:jü.âTÊúj2/Œ */
- $"8B76 FA87 DADD 0333 2250 0058 F5C6 21CD" /* ‹vú‡ÚÝ.3"P.XõÆ!Í */
- $"D094 5CD5 10DD 2FA0 B74B 06FB AA9B 2B62" /* Д\Õ.Ý/ ·K.ûª›+b */
- $"E36D 708E B8F5 0739 3097 7F03 47BE 48F5" /* ãmpޏõ.90—..G¾Hõ */
- $"D079 1641 CA5D DF28 C92B 0EFA B18F CE6F" /* Ðy.AÊ]ß(É+.ú±Îo */
- $"6648 DB26 DE5C 1D17 2BD3 28AF DD89 801C" /* fHÛ&Þ\..+Ó(¯Ý‰€. */
- $"AB0D 40D1 9016 D542 63A0 8222 9D7A F0F5" /* «.@Ñ.ÕBc ‚"zðõ */
- $"A171 2D28 3D2C C22E 09AB 3AA9 C50B 7545" /* ¡q-(=,Â.Æ«:©Å.uE */
- $"4C64 18E8 8E67 3A7D DDBE 36CE 2F97 5AD0" /* Ld.èŽg:}ݾ6Î/—ZÐ */
- $"E4F0 8AFB 6071 6268 E5F6 09EA 245F 9F87" /* äðŠû`qbhåöÆê$_Ÿ‡ */
- $"E304 242C 234C 9FF7 1D0A 11C7 4FE7 20BC" /* ã.$,#LŸ÷.Â.ÇOç ¼ */
- $"EC58 1A4B 5A8E DE45 0E5F 4A03 4C8A 5051" /* ìX.KZŽÞE._J.LŠPQ */
- $"E410 4405 321B BD82 AC69 94F7 AA5E 5C65" /* ä.D.2.½‚¬i”÷ª^\e */
- $"436F 861A C95F 1AB0 2E2B 9689 AA43 B247" /* Co†.É_.°.+–‰ªC²G */
- $"6DE3 4E9E F205 F221 D175 86BB 4434 C0EE" /* mãNžò.ò!Ñu†»D4Àî */
- $"C472 EA2B 499D 63FA B4C8 FAB3 91F3 060D" /* Ärê+Icú´Èú³‘ó.. */
- $"C203 A636 1D98 6B00 D678 0D3C BE92 309E" /* Â.¦6.˜k.Öx.<¾’0ž */
- $"759A 11D4 B514 24FB E4D2 7089 76DE 42DD" /* uš.Ôµ.$ûäÒp‰vÞBÝ */
- $"5338 4798 5943 4A6B 500A 472E 77BE AEBD" /* S8G˜YCJkPÂG.w¾®½ */
- $"93B0 117A 0E2D A8E4 DFED 5A76 1775 2BFF" /* “°.z.-¨äßíZv.u+ÿ */
- $"1A84 CBE1 B007 D3EA 11B0 9BB8 4B3F BB56" /* .„Ëá°.Óê.°›¸K?»V */
- $"33F6 B242 4C5C A63D 638F 1BA5 0AC5 698D" /* 3ö²BL\¦=c.¥ÂÅi */
- $"45B3 D343 D769 FEEE C45D 50B0 9AAA 4146" /* E³ÓC×iþîÄ]P°šªAF */
- $"0BFA F8CC 694B A42D FC1E C3F1 54F0 D3F9" /* .úøÌiK¤-ü.ÃñTðÓù */
- $"F051 5182 D373 5210 38AA F9B0 D3F3 6B07" /* ðQQ‚ÓsR.8ªù°Óók. */
- $"C944 7FCA 2126 D17A 01B1 7763 CDE8 D5FF" /* ÉD.Ê!&Ñz.±wcÍèÕÿ */
- $"00F4 08D7 4060 339C D8E2 7EA4 B00D 3171" /* .ô.×@`3œØâ~¤°.1q */
- $"ABB0 7F47 D146 13B9 398E 14B3 C55D 10AF" /* «°.GÑF.¹9Ž.³Å].¯ */
- $"8D0A 2444 26A0 EFEA 6CB2 51FD EA28 0FD7" /* Â$D& ïêl²Qýê(.× */
- $"4E2F F54F 0066 62F2 66F3 334C 5D9D 77ED" /* N/õO.fbòfó3L]wí */
- $"F3D0 12ED 7A95 89A1 B928 8429 DCFB 8C68" /* óÐ.íz•‰¡¹(„)ÜûŒh */
- $"C35C 3C77 5D7D 5180 A012 ADA3 AE60 AAE0" /* Ã\<w]}Q€ .­£®`ªà */
- $"0D88 09A4 4F7B FAC4 A2FD 327D E109 4F0B" /* .ˆÆ¤O{úÄ¢ý2}áÆO. */
- $"3343 C0ED D985 7402 93E2 7A2E 09B4 09A6" /* 3CÀíÙ…t.“âz.ƴƦ */
- $"5348 2E51 C037 BE62 C1A7 15C4 B9C8 7F4B" /* SH.QÀ7¾bÁ§.ĹÈ.K */
- $"FC22 3596 D989 C701 6701 5488 1001 22B2" /* ü"5–Ù‰Ç.g.Tˆ.."² */
- $"C06A A5D5 2C94 6BA9 D1C6 2B33 5910 8B1F" /* Àj¥Õ,”k©ÑÆ+3Y.‹. */
- $"0B0D 5531 BE0F 3E72 9C60 75A8 2669 220D" /* ..U1¾.>rœ`u¨&i". */
- $"E140 D538 7CD4 5763 D708 6D5E 45C0 AE61" /* á@Õ8|ÔWc×.m^EÀ®a */
- $"EC8B E180 1D9C 712C 4DB9 F177 6733 0F76" /* ì‹á€.œq,M¹ñwg3.v */
- $"9A72 7AD0 D18D 2BE6 9DCE 6294 4092 CE8E" /* šrzÐÑ+æÎb”@’ÎŽ */
- $"ACED 8B00 B050 AE53 C09C 98D6 CFD1 4208" /* ¬í‹.°P®SÀœ˜ÖÏÑB. */
- $"DEB2 AF01 5ED7 E1F4 4EAA 0B09 2263 FE09" /* Þ²¯.^×áôNª.Æ"cþÆ */
- $"2771 6EB7 9181 1DFE A5DD 9A12 4592 02FD" /* 'qn·‘.þ¥Ýš.E’.ý */
- $"5F2D D4D6 5C15 B454 B07C 9B6A B9F9 AEC2" /* _-ÔÖ\.´T°|›j¹ù®Â */
- $"D883 1F5F B9B1 8258 6732 C7E3 5C90 DB16" /* ؃._¹±‚Xg2Çã\Û. */
- $"42EC D875 2B9D FEAF 1FED BD80 261D BAAE" /* BìØu+þ¯.í½€&.º® */
- $"3799 FDC7 DBE5 E769 A11C 3304 5D3B 419C" /* 7™ýÇÛåçi¡.3.];Aœ */
- $"5844 E615 EE7A 5DCE 272E D055 121D 1F84" /* XDæ.îz]Î'.ÐU...„ */
- $"2EC6 E6B1 A7DA D03A D600 6D58 4FF0 9196" /* .Ææ±§ÚÐ:Ö.mXOð‘– */
- $"FBCA CDDC 1B8D 9D1A BB7B 3782 0F3F 626C" /* ûÊÍÜ..»{7‚.?bl */
- $"26AA AF34 6A20 8210 1E96 ED21 5A26 EF04" /* &ª¯4j ‚..–í!Z&ï. */
- $"5F66 5C2D A8A4 F3BC 1871 AD1D FE4D 8C8B" /* _f\-¨¤ó¼.q­.þMŒ‹ */
- $"F1E5 A382 654B 08C7 EFC4 BFBA C29B 5C73" /* ñ壂eK.ÇïÄ¿ºÂ›\s */
- $"2420 9390 3B75 6DE6 0208 6F4F BB53 B2AA" /* $ “;umæ..oO»S²ª */
- $"AD28 4360 1A8A 4301 088C 6F17 68CC 9180" /* ­(C`.ŠC..Œo.hÌ‘€ */
- $"D757 7012 3BE3 C4AB DF05 97B9 4B57 B6FC" /* ×Wp.;ãÄ«ß.—¹KW¶ü */
- $"7693 36DE 89E8 E2AB 4352 A782 4520 DA28" /* v“6Þ‰èâ«CR§‚E Ú( */
- $"F1F2 34D6 2EAE E401 ED61 1E2E 4E74 D4EB" /* ñò4Ö.®ä.ía..NtÔë */
- $"98A9 94AD F856 8EE1 E3D0 06FC AA37 31E5" /* ˜©”­øVŽáãÐ.üª71å */
- $"1047 113E C151 CE86 B6A4 0F82 E5D9 CE50" /* .G.>ÁQΆ¶¤.‚åÙÎP */
- $"57A8 8F86 AFAD 21D1 2C4C F181 8BD7 106C" /* W¨†¯­!Ñ,Lñ‹×.l */
- $"3C77 649E 038E 3C63 66F4 EE1A 2906 755C" /* <wdž.Ž<cfôî.).u\ */
- $"EDD8 6093 6868 531C 9FA3 C5C9 3F3C 7786" /* íØ`“hhS.Ÿ£ÅÉ?<w† */
- $"BCC4 440C 13F9 0BCB 76BA 9364 A3CC 344F" /* ¼ÄD..ù.Ëvº“d£Ì4O */
- $"128B D594 CB9D A2DC 6C03 CA48 2D9E 9706" /* .‹Õ”Ë¢Ül.ÊH-ž—. */
- $"A281 5170 A91B 0033 4552 2A9A BF6F D4A9" /* ¢Qp©..3ER*š¿oÔ© */
- $"61B6 F6C1 7959 FDD2 8F3F C94B 2B90 29BB" /* a¶öÁyYýÒ?ÉK+)» */
- $"9FAA A83B FEFF 80A3 1EC2 B2D9 77CF 963B" /* Ÿª¨;þÿ€£.²ÙwÏ–; */
- $"85FF 5728 5CDD 2F01 7556 8155 F8AA 7984" /* …ÿW(\Ý/.uVUøªy„ */
- $"7543 0C18 A1FC 0353 DF5F D368 41E9 E0EF" /* uC..¡ü.Sß_ÓhAéàï */
- $"C363 A78F 3FE9 41E9 5F77 19A4 A811 FF43" /* Ãc§?éAé_w.¤¨.ÿC */
- $"8EE8 3FBA 00FA 54F6 15F5 CF3B 39A6 0984" /* Žè?º.úTö.õÏ;9¦Æ„ */
- $"CC99 7AE1 8E5B 71A9 1575 DB95 F166 D52F" /* Ì™záŽ[q©.uÛ•ñfÕ/ */
- $"A270 08D4 9515 3B89 2EA1 A097 12A3 B4E9" /* ¢p.Ô•.;‰.¡ —.£´é */
- $"5BFB AE47 8FD7 60F0 33DA E91B 234B 5D2F" /* [û®G×`ð3Úé.#K]/ */
- $"7C4B 00C2 60F1 7260 B78A 1835 B440 611B" /* |K.Â`ñr`·Š.5´@a. */
- $"042D F768 F9C9 8785 50AD 8421 77D4 B97A" /* .-÷hùɇ…P­„!wÔ¹z */
- $"6B02 828C E758 8B31 1E92 DF7F BE67 3DAB" /* k.‚ŒçX‹1.’ß.¾g=« */
- $"E5F8 F1FB FD8C 34F4 4B2F 98BF 24A9 4DF2" /* åøñûýŒ4ôK/˜¿$©Mò */
- $"32A9 A661 B01E F960 12E1 9C18 F197 CEA7" /* 2©¦a°.ù`.áœ.ñ—Χ */
- $"E1C4 4AB4 7CEB 2CE2 33F3 C23C F3FD 2CF9" /* áÄJ´|ë,â3óÂ<óý,ù */
- $"F132 8395 3D39 FD9D 983D 4454 9758 856B" /* ñ2ƒ•=9ý˜=DT—X…k */
- $"6556 B234 72B0 C2CA 71CA 9CEB 7AE4 FD7C" /* eV²4r°ÂÊqÊœëzäý| */
- $"0E3F 1930 6B17 7074 C216 3D9C 24BF 5B97" /* .?.0k.ptÂ.=œ$¿[— */
- $"A7EA 25F0 9DCC AFA5 BBEF 47E9 D7E6 7B0E" /* §ê%ð̯¥»ïGé׿{. */
- $"E02F 87A2 EF87 68FC 9BF7 F274 5F00 FC3D" /* à/‡¢ï‡hü›÷òt_.ü= */
- $"A5F8 7AC7 F0FA A5F8 7D42 C03F 0F42 FE1D" /* ¥øzÇðú¥ø}BÀ?.Bþ. */
- $"ABF0 F7CF E1EE 40ED 1CBC E67A C7C3 33E9" /* «ð÷Ïáî@í.¼æzÇÃ3é */
- $"75CE 6202 697A FF68 B299 C0A6 2F39 4F64" /* uÎb.izÿh²™À¦/9Od */
- $"6775 1459 6387 68C9 941E E328 B150 8D7C" /* gu.Yc‡hÉ”.ã(±P| */
- $"24C4 D953 4443 9A50 E4CC 4E41 B3A9 F28A" /* $ÄÙSDCšPäÌNA³©òŠ */
- $"BB0E 943C 0DAB C98A 023C 332B AE2D AF60" /* ».”<.«ÉŠ.<3+®-¯` */
- $"4D30 BA77 9D1A 93DC CEBB 7560 EA33 084C" /* M0ºw.“Üλu`ê3.L */
- $"BCFD 2F47 685E 4CC9 8A76 F1C8 04AB 126F" /* ¼ý/Gh^LÉŠvñÈ.«.o */
- $"B9FD 4A34 E181 4147 9F56 2AB4 EB2C 50EF" /* ¹ýJ4áAGŸV*´ë,Pï */
- $"D652 4543 763B B857 210B 2B4A BB50 0EAE" /* ÖRECv;¸W!.+J»P.® */
- $"90BD EEEC F92B DD18 0881 9B3A C6DF A028" /* ½îìù+Ý..›:Æß ( */
- $"45EB 36D7 50B4 D756 FB49 9F08 D74D 037B" /* Eë6×P´×VûIŸ.×M.{ */
- $"83A1 001C 0977 1DCC 81D0 B6B9 828A 6851" /* ƒ¡..Æw.Ìж¹‚ŠhQ */
- $"3CAC B3FF 572B 543A 4C73 3F35 0561 EC81" /* <¬³ÿW+T:Ls?5.aì */
- $"A8D4 82BC 9148 5E30 FF3E 3164 C43E 5461" /* ¨Ô‚¼‘H^0ÿ>1dÄ>Ta */
- $"4BD0 139E 6390 0E05 4793 56B8 5080 CBF6" /* KÐ.žc..G“V¸P€Ëö */
- $"9E70 BEA1 FB26 DD1E AEE1 E78D 0D32 FA02" /* žp¾¡û&Ý.®áç.2ú. */
- $"43FC FBC6 7464 2C9A 14AD 2C7C 0969 995F" /* CüûÆtd,š.­,|Æi™_ */
- $"6363 3037 9C34 C5F8 42DF B339 D2B0 5C45" /* cc07œ4ÅøBß³9Ò°\E */
- $"6130 509D 28E7 D3A7 9308 74ED 9265 B7F9" /* a0P(çÓ§“.tí’e·ù */
- $"0F54 D265 33D9 EB57 07C4 852B E3C8 771F" /* .TÒe3ÙëW.Ä…+ãÈw. */
- $"21F8 ADA3 D807 625C 513A E395 604B 0D6A" /* !ø­£Ø.b\Q:ã•`K.j */
- $"A9FC 297E 63AF 7622 23B6 63E1 EF25 F572" /* ©ü)~c¯v"#¶cáï%õr */
- $"01B0 400D 18C6 C9FA 6AF5 3E26 4199 6E68" /* .°@..ÆÉújõ>&A™nh */
- $"99B5 B3A9 F861 3419 C6C7 B65C D0F6 353B" /* ™µ³©øa4.ÆÇ¶\Ðö5; */
- $"6551 1B0A 9D82 1F07 4185 8C46 5867 DC22" /* eQ.‚..A…ŒFXgÜ" */
- $"BD38 AFF7 27BA 1114 9266 5EF4 1EA9 89B4" /* ½8¯÷'º..’f^ô.©‰´ */
- $"A634 E917 65E5 502E 8028 D24E 725F 0C22" /* ¦4é.eåP.€(ÒNr_." */
- $"1513 7B38 5FEA 3150 520B 6D8A 03D8 F796" /* ..{8_ê1PR.mŠ.Ø÷– */
- $"D183 D8FA 82E2 C147 B662 593B 9FC8 A2A0" /* уØú‚âÁG¶bY;ŸÈ¢  */
- $"C63B D151 D905 072C 02E5 919B 0BE9 6D76" /* Æ;ÑQÙ..,.å‘›.émv */
- $"4BEF 7D51 FF67 C2F2 BB61 DDD2 7981 0B7E" /* Kï}QÿgÂò»aÝÒy.~ */
- $"D406 3679 DFA4 FAE3 A33C 28AC 06C6 93C1" /* Ô.6yߤúã£<(¬.Æ“Á */
- $"B82F 53DB 1EB8 A6F3 5A24 A44A 1A76 9204" /* ¸/SÛ.¸¦óZ$¤J.v’. */
- $"6543 FC80 18DA 3C5D 395B 01DC D7E8 C21E" /* eCü€.Ú<]9[.Ü×èÂ. */
- $"A66C 9AE3 08D6 DBFC EE95 9E73 F71D 7CCA" /* ¦lšã.ÖÛüs÷.|Ê */
- $"2A6A F6D2 11D9 AC28 BEDE 8E1B 65EF A995" /* *jöÒ.Ù¬(¾ÞŽ.eï©• */
- $"F7B5 B19D 5F63 F42B D0AD D69A BD47 1EED" /* ÷µ±_cô+Э֚½G.í */
- $"2E5C 0276 3AEA F6D9 6E3F 314C 7F5F 52C3" /* .\.v:êöÙn?1L._RÃ */
- $"093D C8A9 23E4 C154 5587 294A 98A9 0643" /* Æ=È©#äÁTU‡)J˜©.C */
- $"AF18 0D20 51A4 6FE1 F326 11E7 5A91 2919" /* ¯.. Q¤oáó&.çZ‘). */
- $"DD53 B13B 2CB3 DE77 FAB9 420E BAFB 305B" /* ÝS±;,³Þwú¹B.ºû0[ */
- $"E9AB 7A2B 623B 78FE 346D 8BB6 BA40 AE40" /* é«z+b;xþ4m‹¶º@®@ */
- $"5B6D 6D53 81A1 076D 7058 E792 E410 3FA7" /* [mmS¡.mpXç’ä.?§ */
- $"AD06 7E2E 5158 D129 9233 6E1D 6B7C C701" /* ­.~.QXÑ)’3n.k|Ç. */
- $"D61D 42D8 472F D5E2 2710 0B6C 828A 2352" /* Ö.BØG/Õâ'..l‚Š#R */
- $"D400 65FA E227 A938 1832 18CC 2BCE 19A8" /* Ô.eúâ'©8.2.Ì+Î.¨ */
- $"773C 3CB1 C6BD D722 8EE1 8AE2 4D4B 97D4" /* w<<±Æ½×"ŽáŠâMK—Ô */
- $"1763 37E4 2F93 8578 534E 0BA9 B493 3B80" /* .c7ä/“…xSN.©´“;€ */
- $"F018 28BE 2A52 15B2 8499 08A8 005F F028" /* ð.(¾*R.²„™.¨._ð( */
- $"ADFD ACEB 238F 922A 75E4 1C65 F2C3 F14B" /* ­ý¬ë#’*uä.eòÃñK */
- $"213D 7263 4A9A 1C80 12BD 5895 0EC8 B955" /* !=rcJš.€.½X•.ȹU */
- $"8CD0 FB81 63CF FF7F B545 85DF E201 36A9" /* ŒÐûcÏÿ.µE…ßâ.6© */
- $"E524 1BD6 EDDA 7C33 8CD2 E114 BA93 51E0" /* å$.ÖíÚ|3ŒÒá.º“Qà */
- $"A113 A12A FBEA 8570 B5FE E1B6 7963 5B31" /* ¡.¡*ûê…pµþá¶yc[1 */
- $"512A 99B1 3A59 E50E C584 DD7F FF7F FF7E" /* Q*™±:Yå.Å„Ý.ÿ.ÿ~ */
- $"D3C9 019B 1FBC DB70 2C2A 14A6 E7F1 0147" /* ÓÉ.›.¼Ûp,*.¦çñ.G */
- $"5F3A A36C 6F8A 9038 ABD8 EB8F FF7F FE79" /* _:£loŠ8«Øëÿ.þy */
- $"6C12 2D6F FD6D F9A0 0392 0E82 0296 3C14" /* l.-oýmù .’.‚.–<. */
- $"FEFA 803C A3D4 1049 CF30 E22F 6542 7ABF" /* þú€<£Ô.IÏ0â/eBz¿ */
- $"378E 66B2 9091 D396 B953 DCF5 66D3 C5B5" /* 7Žf²‘Ó–¹SÜõfÓŵ */
- $"7719 028C 5C0F F898 00A1 0C1D E181 F9C7" /* w..Œ\.ø˜.¡..áùÇ */
- $"2E46 06D4 D623 1256 EFAE 89E3 4FFF 7FDD" /* .F.ÔÖ#.VﮉãOÿ.Ý */
- $"F00D 4E11 65D5 B8F9 7C0B A045 AC4A 1E42" /* ð.N.eÕ¸ù|. E¬J.B */
- $"221C B512 5480 EF2D CB80 A089 3603 2CA1" /* ".µ.T€ï-Ë€ ‰6.,¡ */
- $"391C 7925 C817 92E3 8438 C438 08D1 0637" /* 9.y%È.’ã„8Ä8.Ñ.7 */
- $"9FCD F4C2 C04C 40BB A484 5043 0C1E 7C85" /* ŸÍôÂÀL@»¤„PC..|… */
- $"D7F6 1F6D BFC7 60AA 4D18 A399 9A13 CCD0" /* ×ö.m¿Ç`ªM.£™š.ÌÐ */
- $"26DA 3F97 24CB E902 0668 67F7 FE63 7A2E" /* &Ú?—$Ëé..hg÷þcz. */
- $"16D6 987F FF7F AFC1 5C35 E63D BA36 6227" /* .Ö˜.ÿ.¯Á\5æ=º6b' */
- $"FF7C FD39 8B8B 1A5F 6026 831B 0764 8805" /* ÿ|ý9‹‹._`&ƒ..dˆ. */
- $"E40B 0F19 7FFF 7FFC DEBC DD5B 9008 0000" /* ä....ÿ.üÞ¼Ý[... */
- $"0C24 1D44 4641 3BC8 4248 E229 62D2 088D" /* .$.DFA;ÈBHâ)bÒ. */
- $"117F DE8D 0B52 C3FD 1DD9 3823 F138 4C98" /* ..Þ.RÃý.Ù8#ñ8L˜ */
- $"58A8 2683 519C F914 4961 5226 891F F863" /* X¨&ƒQœù.IaR&‰.øc */
- $"3FF2 B19F 113D BFEF 9D12 30C6 66BD E2A6" /* ?ò±Ÿ.=¿ï.0Æf½â¦ */
- $"5D8C BE7E BE19 3D8F 03F2 5D26 FF7F FF7E" /* ]Œ¾~¾.=.ò]&ÿ.ÿ~ */
- $"A82B 5E03 E7A8 E8F1 8C4D B6F1 F0E2 FC36" /* ¨+^.ç¨èñŒM¶ñðâü6 */
- $"DE7A 2F55 38B1 B436 2E50 7D25 E3F0 82C8" /* Þz/U8±´6.P}%ãð‚È */
- $"580F 0D19 C280 415C 2A7F FCD9 C720 E649" /* X...€A\*.üÙÇ æI */
- $"4064 2624 04AC 0B71 41FD 3937 8359 4137" /* @d&$.¬.qAý97ƒYA7 */
- $"8CA9 B642 C318 BD37 82D3 B786 8217 3252" /* Œ©¶BÃ.½7‚Ó·†‚.2R */
- $"44EA 4598 57D2 2F66 957F 39FE D712 F449" /* DêE˜WÒ/f•.9þ×.ôI */
- $"213A BEBB B6CC F551 FF7F EB0A AE45 8497" /* !:¾»¶ÌõQÿ.ë®E„— */
- $"0F4C FD34 4090 01FE CFC8 51AA C32A 7D95" /* .Lý4@.þÏÈQªÃ*}• */
- $"D414 2609 E22F 1B7D E10E 97BB 05D1 9D04" /* Ô.&Æâ/.}á.—».Ñ. */
- $"0592 9271 0D39 AB59 F165 0D09 549C B4E3" /* .’’q.9«Yñe.ÆTœ´ã */
- $"AEE5 555F 00A3 5E0A E4D3 BAFE 1EC6 2FCE" /* ®åU_.£^ÂäÓºþ.Æ/Î */
- $"FB04 C9BC 71D8 A42D 2F70 9FE1 EC17 C31D" /* û.ɼqؤ-/pŸáì.Ã. */
- $"ECB2 0A82 EFB1 914C F6D2 E54C 5316 B6C4" /* ì²Â‚ﱑLöÒåLS.¶Ä */
- $"4FFF 653B FD6E 27A6 9959 244B F458 B35C" /* Oÿe;ýn'¦™Y$KôX³\ */
- $"865C EB94 2CD7 7343 B74C C211 8A4D 2A99" /* †\ë”,×sC·LÂ.ŠM*™ */
- $"732E 3B43 CEAC C300 A520 924D 6F1F 8295" /* s.;CάÃ.¥ ’Mo.‚• */
- $"DF36 1FD4 E8F0 9221 6313 1B33 0C98 2721" /* ß6.Ôèð’!c..3.˜'! */
- $"8F55 5BA1 0E46 A755 1D7F A914 458D 9FFF" /* U[¡.F§U..©.EŸÿ */
- $"33CF 4CE3 AFC6 3383 BC4D A7E9 F546 FDCB" /* 3ÏLã¯Æ3ƒ¼M§éõFýË */
- $"8276 7778 2BBA EF7C 3677 6251 58C0 9EFF" /* ‚vwx+ºï|6wbQXÀžÿ */
- $"526C C883 6CFF 7FFF 7D4C 3F9F BD74 6BE9" /* Rlȃlÿ.ÿ}L?Ÿ½tké */
- $"B6EB 9003 823B 235D 6AD9 B382 FC45 F10C" /* ¶ë.‚;#]jÙ³‚üEñ. */
- $"8282 90ED 9D47 E949 FADC 7B04 1C1C 9EF1" /* ‚‚íGéIúÜ{...žñ */
- $"1ABB 270D 07BE 1943 4E14 70E0 48FF 81EE" /* .»'..¾.CN.pàHÿî */
- $"CE8A 5AAD 3CE9 090D 3126 F96A AEBA 5853" /* ΊZ­<éÆ.1&ùj®ºXS */
- $"D02E ADE8 4614 E2B7 2E7E 3DB6 DE6A 77A8" /* Ð.­èF.â·.~=¶Þjw¨ */
- $"48D0 2DBB BAF4 E94C 735D 27D6 87FF 7F80" /* HÐ-»ºôéLs]'Ö‡ÿ.€ */
- $"5BCC 3CA6 1168 D9E0 38B4 22B2 2154 02AA" /* [Ì<¦.hÙà8´"²!T.ª */
- $"A1FF 6D87 EB2B F3EB 3814 9F74 DEF3 4D86" /* ¡ÿm‡ë+óë8.ŸtÞóM† */
- $"ED68 7E75 9E81 1FD9 170B E013 7E4D 97B3" /* íh~už.Ù..à.~M—³ */
- $"51B0 6B2A 42AF EEB4 899B D2A2 6AC9 8EBF" /* Q°k*B¯î´‰›Ò¢jÉŽ¿ */
- $"2858 9FFC 5050 3364 8F2D 313E 94A9 5ED5" /* (XŸüPP3d-1>”©^Õ */
- $"6213 E9DD 6FF6 5813 72DA FE40 0F70 06C4" /* b.éÝoöX.rÚþ@.p.Ä */
- $"FF7D 053C 3E69 C976 DDFF 02D9 4688 D8D7" /* ÿ}.<>iÉvÝÿ.ÙFˆØ× */
- $"8DEF 5187 FCA3 40EE 3167 B6DD 7EE6 42AB" /* ïQ‡ü£@î1g¶Ý~æB« */
- $"B07A DB20 DC1D 7016 631F 8FB0 C83A 9CC2" /* °zÛ Ü.p.c.°È:œÂ */
- $"66B9 304B 74F5 03F7 217C D3E3 6000 ECE6" /* f¹0Ktõ.÷!|Óã`.ìæ */
- $"A319 FD9E 4131 7E74 59C6 FB3F 1B51 FE89" /* £.ýžA1~tYÆû?.Qþ‰ */
- $"52D3 C845 1BF0 4BFE 3BAE 4940 9830 8E9C" /* RÓÈE.ðKþ;®I@˜0Žœ */
- $"F843 F6A2 218E B2E2 8092 8E0E 3889 8137" /* øCö¢!Ž²â€’Ž.8‰7 */
- $"583C 394F CCE6 3D1B 37B8 C9A4 D805 B9E4" /* X<9OÌæ=.7¸É¤Ø.¹ä */
- $"A037 E45D 1167 9627 81E0 538C 1B6D EA0E" /*  7ä].g–'àSŒ.mê. */
- $"18CD 8E3C EE0C 5E0C B048 8DD2 C804 CA38" /* .ÍŽ<î.^.°HÒÈ.Ê8 */
- $"8678 CAA9 5EE1 8B6C E7D9 FDE1 5C14 D52A" /* †xÊ©^á‹lçÙýá\.Õ* */
- $"67F3 8A12 F698 857A 5692 1FB3 FF27 FE1B" /* góŠ.ö˜…zV’.³ÿ'þ. */
- $"7E31 5D25 B4A2 3647 FF07 064A 4D7B F160" /* ~1]%´¢6Gÿ..JM{ñ` */
- $"62D7 81CE 0940 AE5F CAEB F1A6 10C4 CB0E" /* b×ÎÆ@®_Êëñ¦.ÄË. */
- $"3D77 2C40 0146 8C72 B765 F6A9 3047 E748" /* =w,@.FŒr·eö©0GçH */
- $"0239 A725 8B4C 56F0 7E86 9A24 53D7 4832" /* .9§%‹LVð~†š$S×H2 */
- $"7924 73CB 4431 4977 0487 03FC F1B3 A21C" /* y$sËD1Iw.‡.üñ³¢. */
- $"2792 0B05 8183 8348 8EC0 2635 47D9 B51D" /* '’..ƒƒHŽÀ&5GÙµ. */
- $"CE40 1FA4 20C5 93A8 BEB4 B8CD 93D8 A79E" /* Î@.¤ Å“¨¾´¸Í“اž */
- $"62C5 846C 964D 0404 BE21 3AA5 9EC3 4450" /* bÅ„l–M..¾!:¥žÃDP */
- $"FAEE 938A A428 E4D0 7F1B 46A8 7AEC 97FB" /* ú¤(äÐ..F¨zì—û */
- $"1AFF 71DA F26D B5B1 E6F2 66B4 865E 1F12" /* .ÿqÚòmµ±æòf´†^.. */
- $"CE0F 3A8A EDF1 6321 BC5A 22D5 D3D6 BE19" /* Î.:Šíñc!¼Z"ÕÓÖ¾. */
- $"671A 38C3 11E8 FC9D 93AC 895A 1B84 7C9B" /* g.8Ã.èü“¬‰Z.„|› */
- $"979F 5DC5 BBE6 19A8 5D03 BE83 6FA4 B8F2" /* —Ÿ]Å»æ.¨].¾ƒo¤¸ò */
- $"AFCD 8115 B21B C1D5 80B4 5E20 3B19 9E48" /* ¯Í.².ÁÕ€´^ ;.žH */
- $"29C0 68DA F799 EC0D 56B3 7049 5EC1 11CB" /* )ÀhÚ÷™ì.V³pI^Á.Ë */
- $"CBAF FA0A 5AF1 22F1 3A4C 6F13 635A C681" /* ˯úÂZñ"ñ:Lo.cZÆ */
- $"06DA 8B44 A35B CF31 9B6F 57E6 AEC2 8D59" /* .Ú‹D£[Ï1›oWæ®ÂY */
- $"1556 A43E A289 74DC C398 B209 31B9 8CD0" /* .V¤>¢‰tÜØ²Æ1¹ŒÐ */
- $"07BE D253 76AB 7D79 4F26 D099 7AE8 E52C" /* .¾ÒSv«}yO&Йzèå, */
- $"EA35 D7BB E968 CAA0 5F61 EAE5 E9A1 E903" /* ê5×»éhÊ _aêåé¡é. */
- $"100E ED2C 5A66 21E2 1426 BE74 7A19 8C98" /* ..í,Zf!â.&¾tz.Œ˜ */
- $"3D67 A4D2 370F C95D 7131 2D31 0971 6022" /* =g¤Ò7.É]q1-1Æq`" */
- $"F4F2 359E 1FBD D23A CD94 4467 205E F7B1" /* ôò5ž.½Ò:Í”Dg ^÷± */
- $"5D18 EE91 9078 176B ADC2 65EB EECF D1A8" /* ].î‘x.k­ÂeëîÏѨ */
- $"F1B3 B999 E7CC 3079 BD9C 82D8 DF6E 29E0" /* ñ³¹™çÌ0y½œ‚Øßn)à */
- $"9502 EC8D 5C13 629B 109E A7C0 F438 6674" /* •.ì\.b›.ž§Àô8ft */
- $"C48B E75A 7CAC 28AE 3E9C 0ECF 9ADF F7BF" /* Ä‹çZ|¬(®>œ.Ïšß÷¿ */
- $"C51A E20D 64F1 B1DD C986 0C6F 6BFF 5102" /* Å.â.dñ±ÝɆ.okÿQ. */
- $"B233 B826 EBC9 35E2 9799 0A0F E81D 0816" /* ²3¸&ëÉ5â—™Â.è... */
- $"E01C B1A8 E4D9 1CCF 7F2E 4DB3 371B 83C0" /* à.±¨äÙ.Ï..M³7.ƒÀ */
- $"9DFD A603 83D6 4412 7DCF 2E2F 85D8 8259" /* ý¦.ƒÖD.}Ï./…Ø‚Y */
- $"DC97 798F 2E8A 09F5 C1A7 1E56 55F3 BFD0" /* Ü—y.ŠÆõÁ§.VUó¿Ð */
- $"34CE 311A 98BE C87C 8CCE 6EDF C85C A788" /* 4Î1.˜¾È|ŒÎnßÈ\§ˆ */
- $"AA7E 47D5 72AF 1842 5C5F 9D6A C586 CA4C" /* ª~GÕr¯.B\_jņÊL */
- $"34D3 6315 D6CA 0D6D 5B75 6C85 551B E270" /* 4Óc.ÖÊ.m[ul…U.âp */
- $"E9DD 6127 C363 1F5A 0AA4 8F55 114F 9ED3" /* éÝa'Ãc.Z¤U.OžÓ */
- $"034E A968 1BF1 513A 2F0D 3E61 612A 15E6" /* .N©h.ñQ:/.>aa*.æ */
- $"B89F 1877 F38E 8C96 20C3 1952 A559 62AE" /* ¸Ÿ.w󎌖 Ã.R¥Yb® */
- $"20E0 BE7D BF7C FAA3 F56C FF75 6D5E 07E7" /* à¾}¿|ú£õlÿum^.ç */
- $"EB87 E7E9 BFE7 EE37 E7EE B60B E7DA F7CF" /* ë‡çé¿çî7çî¶.çÚ÷Ï */
- $"A6FF 2B5C 2F9F AC00 ED1C BCF0 084D B6D5" /* ¦ÿ+\/Ÿ¬.í.¼ð.M¶Õ */
- $"A3F8 3A1B 179B 5659 AE02 A536 8D65 B1A0" /* £ø:..›VY®.¥6e±  */
- $"F806 81C6 9453 B9E5 1E84 EF36 3D8C 9922" /* ø.Æ”S¹å.„ï6=Œ™" */
- $"A841 EBC7 584D 175D A8CF 5AE5 52F4 364A" /* ¨AëÇXM.]¨ÏZåRô6J */
- $"CACB F4FA 59D1 6C18 1FE0 5F96 0F70 465A" /* ÊËôúYÑl..à_–.pFZ */
- $"7CFD 0C37 59FF 6248 10C6 4872 8573 D54E" /* |ý.7YÿbH.ÆHr…sÕN */
- $"7839 337E D900 4336 CF58 B59C BCC4 602F" /* x93~Ù.C6ÏXµœ¼Ä`/ */
- $"EA1A 205F CD8D 635B AE0D 5750 3316 72C7" /* ê. _Íc[®.WP3.rÇ */
- $"A765 C2F2 CF8C 52FB 1892 F55E B7A5 6D85" /* §eÂòÏŒRû.’õ^·¥m… */
- $"5782 FAB6 FBB5 CDF3 2DC2 0256 2927 4F4F" /* W‚ú¶ûµÍó-Â.V)'OO */
- $"1F92 5F99 B540 87DD 7A80 991B 0677 AB00" /* .’_™µ@‡Ýz€™..w«. */
- $"2D82 C5F6 11F7 F21B 2652 B798 75D5 42A6" /* -‚Åö.÷ò.&R·˜uÕB¦ */
- $"7757 E0E7 3C3F DBA5 6106 9F44 1800 E044" /* wWàç<?Û¥a.ŸD..àD */
- $"5844 8C9D 83C0 C5D3 6B95 CE2A 3EBC D7FD" /* XDŒƒÀÅÓk•Î*>¼×ý */
- $"B79B E645 6FD3 A5EE ECE2 C9A7 53C7 B2E3" /* ·›æEoÓ¥îìâɧSDzã */
- $"C659 D5C5 0FBD 7C88 93C3 D3D9 D81F 0AEB" /* ÆYÕÅ.½|ˆ“ÃÓÙØ.Âë */
- $"5784 8BF9 DAD7 993D 0C8B 9873 08A4 254B" /* W„‹ùÚ×™=.‹˜s.¤%K */
- $"2452 F95D 29CA 8B3E D48D 18FB C813 4ECB" /* $Rù])Ê‹>Ô.ûÈ.NË */
- $"D118 E3FA 926C 7A5F E5CC F774 D1DB B5C1" /* Ñ.ãú’lz_åÌ÷tÑÛµÁ */
- $"579A 2647 619A 67A0 423D 6C64 B3A6 9357" /* Wš&Gašg B=ld³¦“W */
- $"B8C6 8FBE A3AC E380 E548 5ED3 D83D 7DB9" /* ¸Æ¾£¬ã€åH^ÓØ=}¹ */
- $"93E8 9071 F6E0 168F 6BEC F674 6D08 F4DA" /* “èqöà.kìötm.ôÚ */
- $"C1F7 11FD DEF8 2420 30DA 71E2 C605 81EB" /* Á÷.ýÞø$ 0ÚqâÆ.ë */
- $"565B D461 AF6E 3127 34AC BA64 C660 14E1" /* V[Ôa¯n1'4¬ºdÆ`.á */
- $"F6AB DA92 386B 3E7B BD42 90E9 ABA2 6EE7" /* ö«Ú’8k>{½Bé«¢nç */
- $"8D0D 373C D280 46EC 6746 310C EA41 862B" /* .7<Ò€FìgF1.êA†+ */
- $"6D1B 7BE9 93AF 17F6 1D3A E7AB CA55 8A4B" /* m.{铯.ö.:ç«ÊUŠK */
- $"E867 6EF3 29DF FF5F B839 75E1 FA04 DD81" /* ègnó)ßÿ_¸9uáú.Ý */
- $"B6C9 DA44 D268 3B1A FF63 60F5 37A5 DDCB" /* ¶ÉÚDÒh;.ÿc`õ7¥ÝË */
- $"1AB3 5275 7692 7F15 F8E8 6A96 CEB4 D9E5" /* .³Ruv’..øèj–δÙå */
- $"3E5A 0E16 B1D0 B056 D0D2 0360 0900 5773" /* >Z..±Ð°VÐÒ.`Æ.Ws */
- $"BB3F C215 FD55 C9BF E3FC 48A1 CFAB BD39" /* »?Â.ýUÉ¿ãüH¡Ï«½9 */
- $"CD3D 906E 21CB C3DD E4D3 548C 4731 E777" /* Í=n!ËÃÝäÓTŒG1çw */
- $"EE15 C0DE CEBC 0F2F 85A6 9822 F1FF 7B2F" /* î.ÀÞμ./…¦˜"ñÿ{/ */
- $"2530 48C7 0C39 3659 CD03 06C5 7C8E 3D49" /* %0HÇ.96YÍ..Å|Ž=I */
- $"FED5 7B72 4652 772C 39C7 8F1B 63E8 2DC1" /* þÕ{rFRw,9Ç.cè-Á */
- $"1242 CA35 E396 6103 15DF D939 0597 B8D4" /* .BÊ5ã–a..ßÙ9.—¸Ô */
- $"8858 ACE3 3C32 6EE5 69A3 8512 3447 2B3B" /* ˆX¬ã<2nåi£….4G+; */
- $"0647 8C1F 2D31 4E57 0D03 BE26 5235 5275" /* .GŒ.-1NW..¾&R5Ru */
- $"74E8 B8F6 CF32 E077 8C51 41DB ED67 EE30" /* tè¸öÏ2àwŒQAÛígî0 */
- $"AD97 7956 D279 B0A8 768D 00E3 F604 A240" /* ­—yVÒy°¨v.ãö.¢@ */
- $"9656 5BCD B309 D0CD 3ECE C477 31EC F88D" /* –V[ͳÆÐÍ>ÎÄw1ìø */
- $"782F 8B9E 37FA A741 C636 7B55 D047 64A4" /* x/‹ž7ú§AÆ6{UÐGd¤ */
- $"E2EC C69D F609 F38F 821E 8D20 8709 87FF" /* âìÆöÆó‚. ‡Æ‡ÿ */
- $"3C3A B1ED C420 1F0B 52E3 8999 C684 30F3" /* <:±íÄ ..R㉙Ƅ0ó */
- $"C4ED 7FA9 3A2C D0E7 AE48 1AC2 7196 9347" /* Äí.©:,Ðç®H.Âq–“G */
- $"6BC9 BEE1 4112 4209 93CA 307A 7FF7 8B12" /* kɾáA.BÆ“Ê0z.÷‹. */
- $"EE76 8890 A529 33CC F435 A84F 9414 A719" /* îvˆ¥)3Ìô5¨O”.§. */
- $"BFB2 6305 201F 372D 567F 30DF 2E47 D0B9" /* ¿²c. .7-V.0ß.Gй */
- $"C68F 5126 7EAA D95A 12D0 DA8A 8CF4 8A2A" /* ÆQ&~ªÙZ.ÐÚŠŒôŠ* */
- $"CBAE 0509 B614 A9E1 2CA2 D0E0 F017 E395" /* Ë®.ƶ.©á,¢Ðàð.ã• */
- $"AF82 85B5 4509 E75C 8E4D 5465 7DF2 CF39" /* ¯‚…µEÆç\ŽMTe}òÏ9 */
- $"ACFB DD5B C683 62C0 0B1C B7B9 EAEC 049C" /* ¬ûÝ[ƃbÀ..·¹êì.œ */
- $"8045 0178 6757 E317 872D ABC2 B077 6EF6" /* €E.xgWã.‡-«Â°wnö */
- $"3612 4132 3DD7 D39B B49A 04A8 207D 6135" /* 6.A2=×Ó›´š.¨ }a5 */
- $"C64F 3A0F 5028 7B6B 953E 8F19 920A 718F" /* ÆO:.P({k•>.’Âq */
- $"08E9 A079 EC51 A08F 4A77 5130 C807 9BC2" /* .é yìQ JwQ0È.›Â */
- $"B37B 4C7B 9BAA 40F3 4E94 BE51 C027 32B5" /* ³{L{›ª@óN”¾QÀ'2µ */
- $"751F 4793 7271 226E 82F3 CF14 8BC3 F927" /* u.G“rq"n‚óÏ.‹Ãù' */
- $"4C81 7F29 AB70 8B3B E948 86D6 569F FEC2" /* L.)«p‹;éH†ÖVŸþÂ */
- $"BF6C 92F9 1011 3BE3 9E91 6458 1634 34A3" /* ¿l’ù..;ãž‘dX.44£ */
- $"3042 520F 5D64 6429 32CE 04FD 1B98 0698" /* 0BR.]dd)2Î.ý.˜.˜ */
- $"3A36 655C 86C7 C272 4B02 E259 0537 4DB8" /* :6e\†ÇÂrK.âY.7M¸ */
- $"C6C2 6980 ECFB 0FC1 C6D9 0A2C D00F 282A" /* ÆÂi€ìû.ÁÆÙÂ,Ð.(* */
- $"7A0B D91F 08CA 762C A629 048E 9BCC CFD2" /* z.Ù..Êv,¦).Ž›ÌÏÒ */
- $"1EBC 8F60 2F64 F24D F1FB 81C6 8AEC CFDB" /* .¼`/dòMñûÆŠìÏÛ */
- $"623A 01A9 35D2 B5E1 B80A 2D32 084E 3857" /* b:.©5Òµá¸Â-2.N8W */
- $"C025 BCDA 4728 F3AD 35AD 9AAA E054 21B7" /* À%¼ÚG(ó­5­šªàT!· */
- $"A47E 62C5 9921 02C0 09E3 440D 063A 3789" /* ¤~bÅ™!.ÀÆãD..:7‰ */
- $"5072 E54A 4654 E148 AC2E 4A99 C6A5 3923" /* PråJFTáH¬.J™Æ¥9# */
- $"49B5 6906 6531 FD5E 7CCE 1C4B EEDE 7482" /* Iµi.e1ý^|Î.KîÞt‚ */
- $"9E3F 73AE C777 0214 C921 3131 C5CB 9F61" /* ž?s®Çw..É!11ÅËŸa */
- $"64A4 4E70 57C2 5C04 E25B 266E 6887 7477" /* d¤NpWÂ\.â[&nh‡tw */
- $"FCCB 1F0C 89F2 6CF6 713E 4D08 8AC8 9B0C" /* üË..‰òlöq>M.ŠÈ›. */
- $"00AC D9D7 A28A C219 B52B B46A D704 F919" /* .¬Ù×¢ŠÂ.µ+´j×.ù. */
- $"2050 6CCA 215A 299B 9129 9739 DA6F 3A67" /* PlÊ!Z)›‘)—9Úo:g */
- $"FE12 2BF1 4F8B 26ED D21F F727 5B59 22F3" /* þ.+ñO‹&íÒ.÷'[Y"ó */
- $"2E05 F4A0 9754 F431 9AED 1B65 038C CD7F" /* ..ô —Tô1ší.e.ŒÍ. */
- $"8254 E3AE 035C 18D7 0E28 6300 0DF0 998D" /* ‚Tã®.\.×.(c..ð™ */
- $"0191 85AF C71B B3CF F0D6 3A8F B1AA 5E99" /* .‘…¯Ç.³ÏðÖ:±ª^™ */
- $"BAB8 7C7F 0214 F864 4744 E747 7248 3C94" /* º¸|...ødGDçGrH<” */
- $"3AC8 CE04 1019 11ED 4BCC 76E9 FE4E 5728" /* :ÈÎ....íKÌvéþNW( */
- $"5BB0 986C D763 A3C7 AF8A 14E9 D24A AD17" /* [°˜l×c£Ç¯Š.éÒJ­. */
- $"FF66 611F B77C 0830 9093 A560 06FA E9CF" /* ÿfa.·|.0“¥`.úéÏ */
- $"054B 5846 1681 5DBF 34F9 49A9 45E0 8F20" /* .KXF.]¿4ùI©Eà */
- $"7FFD 6264 2193 031D A60F A111 B0B7 CFEE" /* .ýbd!“..¦.¡.°·Ïî */
- $"DE49 EC80 C0F1 D7F6 A495 900B 4126 40BE" /* ÞIì€Àñ×ö¤•.A&@¾ */
- $"185B DFFE C7B0 12AC C143 AA85 70E5 81EF" /* .[ßþǰ.¬ÁCª…påï */
- $"79CE 1662 08E4 203F 1706 40FB CC39 CA8F" /* yÎ.b.ä ?..@ûÌ9Ê */
- $"8002 1CFA 3BCC 6B79 5C83 A4D2 7147 E38F" /* €..ú;Ìky\ƒ¤ÒqGã */
- $"C93B F2E8 6A15 6D30 C314 E898 81E3 FF7B" /* É;òèj.m0Ã.è˜ãÿ{ */
- $"5FC5 EE13 0449 1985 2CBC 73C7 C569 DCB1" /* _Åî..I.…,¼sÇÅiܱ */
- $"8024 F7CA CC7A FE3B CC15 4BCE 5B92 1BBB" /* €$÷ÊÌzþ;Ì.KÎ[’.» */
- $"0048 F291 579F FD20 F11A 1934 CC11 9C3F" /* .Hò‘WŸý ñ..4Ì.œ? */
- $"CE49 027A 9763 9E57 A2FF 7FFD 53E4 E50B" /* ÎI.z—cžW¢ÿ.ýSäå. */
- $"C747 02FF 7869 0537 1482 221E 0220 79D5" /* ÇG.ÿxi.7.‚".. yÕ */
- $"45B1 2E48 6A6C 8486 571F E1F1 BF39 0797" /* E±.Hjl„†W.áñ¿9.— */
- $"5D21 6964 EA9B 13F1 E6B7 C4B5 A2B7 E2BD" /* ]!idê›.ñæ·Äµ¢·â½ */
- $"09C2 B200 0000 0000 003E A392 6527 69B6" /* ÆÂ²......>£’e'i¶ */
- $"B189 8365 F55D 7A2B 0398 4196 BB60 D4F0" /* ±‰ƒeõ]z+.˜A–»`Ôð */
- $"06B6 100C 5B60 D76F 8FEE EFFB D525 0E2B" /* .¶..[`×oîïûÕ%.+ */
- $"3535 B765 22E7 F77C CF5C 8907 7626 62C0" /* 55·e"ç÷|Ï\‰.v&bÀ */
- $"3B04 A170 EEA6 A399 F26B CD7E 92BC 9E13" /* ;.¡p™òkÍ~’¼ž. */
- $"9D2D 6907 B06F 6B9A 957D 3C57 DC9F 06E6" /* -i.°okš•}<WÜŸ.æ */
- $"C3B6 16AD C91B E868 E000 1848 3BE4 5C3A" /* ö.­É.èhà..H;ä\: */
- $"1162 2272 401F 600B A973 281E 62B3 2654" /* .b"r@.`.©s(.b³&T */
- $"74B0 287C C53E A3DA 2A14 E38F 9FFE 3A8E" /* t°(|Å>£Ú*.ãŸþ:Ž */
- $"0D69 7E9D 5B07 1396 ED52 69BC 3971 5630" /* .i~[..–íRi¼9qV0 */
- $"7C63 8DA9 7A40 F364 CC6A FCAC DC7C 59DC" /* |c©z@ódÌjü¬Ü|YÜ */
- $"278A 92E3 6FBF F936 7157 2583 232E E558" /* 'Š’ão¿ù6qW%ƒ#.åX */
- $"0000 C241 6B90 4DCB 6421 F85A B681 4812" /* ..ÂAkMËd!øZ¶H. */
- $"9165 5C06 0195 F213 DB9F 5E2F 4BDE A075" /* ‘e\..•ò.ÛŸ^/KÞ u */
- $"BD9A 741B 971B 3411 1F73 7FF8 D719 BA55" /* ½št.—.4..s.ø×.ºU */
- $"8048 404F FEEA FC74 AEB1 84FD 03F9 5D43" /* €H@Oþêüt®±„ý.ù]C */
- $"BE42 E61F FF7F F4CA BA56 9654 B757 FF60" /* ¾Bæ.ÿ.ôʺV–T·Wÿ` */
- $"CA39 3290 054C E785 0EA7 F04D AF3E B342" /* Ê92.Lç….§ðM¯>³B */
- $"A80A 815D 3954 73F2 871A 51FF 7488 20CD" /* ¨Â]9Tsò‡.Qÿtˆ Í */
- $"90F3 23B8 80FE C6BF 726C 5426 83F2 5400" /* ó#¸€þÆ¿rlT&ƒòT. */
- $"0000 0000 0000 0000 BFA5 D802 777C F954" /* ........¿¥Ø.w|ùT */
- $"286B A586 76CF 26CE 72CA 6FE7 BD43 DB36" /* (k¥†vÏ&ÎrÊoç½CÛ6 */
- $"A826 870E 2EEF E2C4 2E22 E63C FF7F AF51" /* ¨&‡..ïâÄ."æ<ÿ.¯Q */
- $"40C1 B727 22F3 9ACC 894D 0C49 EC7A D998" /* @Á·'"óšÌ‰M.IìzÙ˜ */
- $"64A9 DD22 2545 B85C D621 0609 B73A 9D9F" /* d©Ý"%E¸\Ö!.Æ·:Ÿ */
- $"FF7F FF7F C0F7 00E1 B069 1D76 3BA1 E98C" /* ÿ.ÿ.À÷.á°i.v;¡éŒ */
- $"5F1B 1E11 B6F6 EB6D 6316 9DBC D1B2 DC90" /* _...¶öëmc.¼Ñ²Ü */
- $"5E1D 5EE0 3C65 57D0 B69C 3782 D1BE 3A77" /* ^.^à<eWжœ7‚Ѿ:w */
- $"436E 462B 45B7 FF61 4FA4 A45B 8C34 39D8" /* CnF+E·ÿaO¤¤[Œ49Ø */
- $"1B35 B876 A5F1 F2AD 3F78 D289 1C2E E3B4" /* .5¸v¥ñò­?xÒ‰..ã´ */
- $"A28B 64FA 1E2C 0CCD 0B1C AD42 8866 DDD6" /* ¢‹dú.,.Í..­BˆfÝÖ */
- $"62F0 225B 8DF7 32B3 FC3C 79E9 000B 1CA9" /* bð"[÷2³ü<yé...© */
- $"2C82 4874 34AB B158 47CD FA9F EBC8 0923" /* ,‚Ht4«±XGÍúŸëÈÆ# */
- $"B291 7229 8C3F E7FD 193C 330B A3B4 6969" /* ²‘r)Œ?çý.<3.£´ii */
- $"FCF6 E1BA 4C4A E64C B1BC 5BAF F402 C828" /* üöáºLJæL±¼[¯ô.È( */
- $"3A51 CC67 A851 E207 5A7C 3733 1031 FD5C" /* :QÌg¨Qâ.Z|73.1ý\ */
- $"E4D3 B69F FF67 2C6D 3FC7 D5B4 E63F 55B9" /* äÓ¶Ÿÿg,m?ÇÕ´æ?U¹ */
- $"FD5F 3DB1 4589 6ADF 54F0 F42A 498F 61C8" /* ý_=±E‰jßTðô*IaÈ */
- $"4872 5CD7 F70D 9C80 8880 EB9A 1FE7 C715" /* Hr\×÷.œ€ˆ€ëš.çÇ. */
- $"E57A 280F 96CF 014C 0411 EF44 C4F2 C64F" /* åz(.–Ï.L..ïDÄòÆO */
- $"F91B A9D6 EB9E F615 096F E5C0 5B30 BB79" /* ù.©Öëžö.ÆoåÀ[0»y */
- $"D645 BF4F B70A 2C40 3D24 A4C4 5A01 F3DB" /* ÖE¿O·Â,@=$¤ÄZ.óÛ */
- $"8879 D458 F558 4C8E 3C87 E83C 9C30 F0C3" /* ˆyÔXõXLŽ<‡è<œ0ðà */
- $"F7EB BE6A 2B3B B9CB 4F2E 3B49 CA98 6025" /* ÷ë¾j+;¹ËO.;Iʘ`% */
- $"D6C7 6B39 ED18 A784 5410 F9CD 4FB5 9E32" /* ÖÇk9í.§„T.ùÍOµž2 */
- $"EABF F72F 6ECC 217F E295 4BDA F0C8 2678" /* ê¿÷/nÌ!.â•KÚðÈ&x */
- $"B0F7 3381 2299 1033 5300 BB1C E72F 1EE0" /* °÷3"™.3S.».ç/.à */
- $"75D6 68D0 8C87 A574 580B 4AD8 7BC8 E1C4" /* uÖhÐŒ‡¥tX.JØ{ÈáÄ */
- $"64D3 76AA A080 1E28 FD04 890B B9A1 7E5C" /* dÓvª €.(ý.‰.¹¡~\ */
- $"79E2 31B9 1C3E DBAE 8BC6 DB23 53A4 0F06" /* yâ1¹.>Û®‹ÆÛ#S¤.. */
- $"74AA 7920 6233 E3BF B281 AFAA 957D FDFB" /* tªy b3㿲¯ª•}ýû */
- $"216A 3ECE 3139 37DF 8885 620B 5D55 D0FD" /* !j>Î197߈…b.]UÐý */
- $"F796 6A70 CEFD 33D8 B369 178E 99C0 9FFF" /* ÷–jpÎý3سi.Ž™ÀŸÿ */
- $"7FD2 27D4 D615 4840 B836 A0B5 1D6F 2A5A" /* .Ò'ÔÖ.H@¸6 µ.o*Z */
- $"1338 2369 83A0 D409 0FA7 77EF 19B9 21E6" /* .8#iƒ ÔÆ.§wï.¹!æ */
- $"3E21 0CB0 D4D3 362A EA6F 6340 8D73 27FB" /* >!.°ÔÓ6*êoc@s'û */
- $"C3EF 7823 33DF 7A8C 5C69 20C4 5816 72E4" /* Ãïx#3ßzŒ\i ÄX.rä */
- $"712C 3345 6755 76F3 FEAF 494B D0B4 3C8F" /* q,3EgUvóþ¯IKд< */
- $"B83F A050 C3E9 4CA2 6A6E 7AD0 D7FF 5860" /* ¸? PÃéL¢jnzÐ×ÿX` */
- $"548E 54E7 C3B9 6DDF 462C 54BE 5EF9 1A41" /* TŽTçùmßF,T¾^ù.A */
- $"6A46 A4FB 1C36 1CA4 77EC 2899 F147 3422" /* jF¤û.6.¤wì(™ñG4" */
- $"843C 7FAE 123E 6894 9B7F 3125 EB0F 3129" /* „<.®.>h”›.1%ë.1) */
- $"9DC1 8469 CE90 BB6E 4F2C 385A 0FD1 9AC7" /* Á„iλnO,8Z.ÑšÇ */
- $"3318 3BF0 B1AA A51A 9022 A143 29FF 7FC1" /* 3.;𱪥."¡C)ÿ.Á */
- $"0F0F 6570 67C4 7FA7 9906 DE4E 5439 A278" /* ..epgÄ.§™.ÞNT9¢x */
- $"34E1 3D57 BB0E 086E 4C71 4406 DA9D CA56" /* 4á=W»..nLqD.ÚÊV */
- $"3EFD D077 5DA5 CD7D C244 9128 F408 1F03" /* >ýÐw]¥Í}ÂD‘(ô... */
- $"0C8F FF4B 9274 2EC6 E208 13C5 EE1B 3CEA" /* .ÿK’t.Æâ..Åî.<ê */
- $"C5C0 06F5 0FA1 11FF 7FE3 A446 32E6 F4DA" /* ÅÀ.õ.¡.ÿ.ã¤F2æôÚ */
- $"23EC 5108 3AE0 CD16 AFFF 3965 8196 56E2" /* #ìQ.:àÍ.¯ÿ9e–Vâ */
- $"2881 4EB9 CA14 5C4A 8091 B176 8823 BF09" /* (N¹Ê.\J€‘±vˆ#¿Æ */
- $"CED5 0D88 E6BB DD95 1B72 36E8 809C D432" /* ÎÕ.ˆæ»Ý•.r6耜Ô2 */
- $"872D C08C 7DCB B30E 548B AE16 0D85 6B49" /* ‡-ÀŒ}˳.T‹®..…kI */
- $"9B28 D491 ECD6 F598 691A 0891 135A 63A0" /* ›(Ô‘ìÖõ˜i..‘.Zc  */
- $"593C 1FFD 8A54 4FB9 F2AB 20FC 5CF3 1B88" /* Y<.ýŠTO¹ò« ü\ó.ˆ */
- $"EE7E 8355 45D6 87C8 28CE 7B33 92A2 D8D6" /* î~ƒUEÖ‡È(Î{3’¢ØÖ */
- $"E8DF EF94 500A 0D78 DE9F 8657 F7BD 7F40" /* èßï”PÂ.xÞŸ†W÷½.@ */
- $"5E07 0789 EDC7 F3A5 A0BF 3929 6B19 A460" /* ^..‰íÇó¥ ¿9)k.¤` */
- $"7A50 91FF 42EA 5F12 DFA5 E0A0 84CC E869" /* zP‘ÿBê_.ߥࠄÌèi */
- $"BB1F 6EDA 2238 5DB0 7F22 3521 F04B FF6B" /* ».nÚ"8]°."5!ðKÿk */
- $"6827 722A DD5F 3C9D D3F4 2BE3 614D 0A3F" /* h'r*Ý_<Óô+ãaMÂ? */
- $"62C4 E6AC 95CA 5946 37E8 BC76 97FD 5167" /* bÄæ¬•ÊYF7è¼v—ýQg */
- $"C970 D4C7 0655 C470 5913 DBBD AA8C 87A4" /* ÉpÔÇ.UÄpY.Û½ªŒ‡¤ */
- $"3C63 0B7F 54CD 391E 574D F2D5 C728 20B7" /* <c..TÍ9.WMòÕÇ( · */
- $"9955 DAC8 72A5 DBBB F7ED 4C9F 6FFE 3A4E" /* ™UÚÈr¥Û»÷íLŸoþ:N */
- $"E165 1831 C0E5 8285 96C2 3959 1BE7 E884" /* áe.1Àå‚…–Â9Y.çè„ */
- $"E568 89C1 FD03 D443 F6D1 A7C9 4CFE F7B9" /* åh‰Áý.ÔCöѧÉLþ÷¹ */
- $"A0BA 5040 19D5 965F 0EB5 E503 4B32 E6C8" /*  ºP@.Õ–_.µå.K2æÈ */
- $"B9C1 DEBB B8B7 47DC A850 AF44 D3B7 F562" /* ¹ÁÞ»¸·GܨP¯DÓ·õb */
- $"4210 4DFF 42A0 3D9A 7C63 8124 22A9 B258" /* B.MÿB =š|c$"©²X */
- $"2256 6243 3077 FF57 7389 3FB6 A096 0EAB" /* "VbC0wÿWs‰?¶ –.« */
- $"DD33 EF25 C4B0 7338 F6D7 8730 FF2E DD0A" /* Ý3ï%İs8öׇ0ÿ.Ý */
- $"BBDA 7A6E EFE8 58EE D64B A09E 2B00 EC04" /* »ÚznïèXîÖK ž+.ì. */
- $"09C9 A9F4 82A0 3132 4829 65CA E93B B827" /* ÆÉ©ô‚ 12H)eÊé;¸' */
- $"E81F B387 132B 5D15 E526 6FEC 2CB1 407F" /* è.³‡.+].å&oì,±@. */
- $"8485 FF32 4933 D357 FC45 0E44 EE66 D960" /* „…ÿ2I3ÓWüE.DîfÙ` */
- $"5AA3 A13A FC0B D8E2 622E 0BEE 714F 2672" /* Z£¡:ü.Øâb..îqO&r */
- $"3850 26C4 E626 F9BA 418C BC8A 7481 C6BE" /* 8P&Äæ&ùºAŒ¼Štƾ */
- $"BFA6 0D72 0603 3452 46C0 9FDB BE63 34D9" /* ¿¦.r..4RFÀŸÛ¾c4Ù */
- $"9599 7519 804B F1CE 0FC8 7572 F58E EB32" /* •™u.€KñÎ.ÈurõŽë2 */
- $"3501 CBB0 C05B 5643 485A 0012 64C2 8022" /* 5.˰À[VCHZ..d€" */
- $"BD39 EB39 2B57 0AA3 3931 93D4 885E CDF2" /* ½9ë9+W£91“Ôˆ^Íò */
- $"818D 7734 36C2 BEE1 4F55 116C 47A9 DC40" /* w46¾áOU.lG©Ü@ */
- $"A8A8 4532 7C33 9D7E 070A BA9E 36F7 2445" /* ¨¨E2|3~.ºž6÷$E */
- $"074C 181A 07B2 C470 FA15 8CCB C069 AD0F" /* .L...²Äpú.ŒËÀi­. */
- $"9DD2 8B21 6F22 7300 34B4 4378 25AB D9D2" /* Ò‹!o"s.4´Cx%«ÙÒ */
- $"1D9B B7F7 2F9C C3B1 926F DE61 4463 90BD" /* .›·÷/œÃ±’oÞaDc½ */
- $"BC76 27E7 A5B5 826F 908E 31BA 048F 97C1" /* ¼v'祵‚oŽ1º.—Á */
- $"1884 67A9 C4BA 4B2B 4A58 D0EE 0269 6832" /* .„g©ÄºK+JXÐî.ih2 */
- $"E8C6 03AA D2A2 D034 27AA D49E 9C01 069A" /* èÆ.ªÒ¢Ð4'ªÔžœ..š */
- $"1BDC C40B 3BA7 5F8D 0468 152D E505 7EC0" /* .ÜÄ.;§_.h.-å.~À */
- $"6BBF C4F4 2F45 99CB 1872 C713 FA0D 055F" /* k¿Äô/E™Ë.rÇ.ú.._ */
- $"551D 6E4D 5794 CC71 BAB5 C560 4D20 9464" /* U.nMW”ÌqºµÅ`M ”d */
- $"9F8C 94BA 1C96 0987 1AB4 61BB BA86 751B" /* ŸŒ”º.–Ƈ.´a»º†u. */
- $"9B79 D06A 7A3D A663 FB31 8B86 E588 5D15" /* ›yÐjz=¦cû1‹†åˆ]. */
- $"4A09 8B2B 81FC AE85 0D5A 1D8C A5B7 6DD9" /* JÆ‹+ü®….Z.Œ¥·mÙ */
- $"02F5 50CE 7017 1BDD 3D3D 86CB 250B 491B" /* .õPÎp..Ý==†Ë%.I. */
- $"AA1F 2D21 A416 E8E7 9A53 4299 8CDE CD59" /* ª.-!¤.èçšSB™ŒÞÍY */
- $"C678 B559 D85C C580 6795 AD5F F578 C9EE" /* ÆxµYØ\Å€g•­_õxÉî */
- $"73B2 8F4B 6EEA 6F07 F785 C1B3 374B E51F" /* s²Knêo.÷…Á³7Kå. */
- $"46DC 728C 05A4 6932 792A DB50 4E9A FD82" /* FÜrŒ.¤i2y*ÛPNšý‚ */
- $"A8A2 5EB8 024D C558 D6BC 350C 97B0 B2E8" /* ¨¢^¸.MÅXÖ¼5.—°²è */
- $"8F42 92FD 604D 6FB7 74B6 6EBE 97F6 CE03" /* B’ý`Mo·t¶n¾—öÎ. */
- $"0DFA C340 31C3 4C5E 0041 088B E097 383B" /* .úÃ@1ÃL^.A.‹à—8; */
- $"A236 97CC 8D2B 6F6D 0E58 4E56 1D49 32EC" /* ¢6—Ì+om.XNV.I2ì */
- $"626C C303 42BB D30B B8DE 5868 3C2F E39B" /* blÃ.B»Ó.¸ÞXh</ã› */
- $"A07A 236D 0F21 C0DD 1A0A 933A 7710 6605" /*  z#m.!ÀÝ.“:w.f. */
- $"343E 8D1A 9384 4F16 C01E 5AF7 DF53 0B38" /* 4>.“„O.À.Z÷ßS.8 */
- $"3615 80D7 428E 90F6 4620 02EA 4590 DF22" /* 6.€×BŽöF .êEß" */
- $"4B70 2FB2 CADA A529 F7FA E7C6 BC99 DFCD" /* Kp/²ÊÚ¥)÷úçÆ¼™ßÍ */
- $"5EE7 D677 B5BE F819 6A55 6070 E1A9 DF53" /* ^çÖwµ¾ø.jU`pá©ßS */
- $"3F82 0229 B6B7 D247 1967 8313 056F 9D27" /* ?‚.)¶·ÒG.gƒ..o' */
- $"753E E4DD EB7F 1372 C0F7 D72E 349B 2F9B" /* u>äÝë..rÀ÷×.4›/› */
- $"686C C9AF 0896 0865 7A3A 5A9D 807F 292A" /* hlɯ.–.ez:Z€.)* */
- $"8DDA A776 4B3C 0993 532D D682 A41B 9DC2" /* Ú§vK<Æ“S-Ö‚¤. */
- $"5113 9D60 934B 2055 D671 C6C4 1252 3CEF" /* Q.`“K UÖqÆÄ.R<ï */
- $"C72F AC19 4BED 185D BC60 5957 F81B 8278" /* Ç/¬.Kí.]¼`YWø.‚x */
- $"20B5 9173 4A1B FDC9 295D 54B7 8AFE 6938" /* µ‘sJ.ýÉ)]T·Šþi8 */
- $"FE49 BA78 3225 49A1 4243 823C 52B9 8489" /* þIºx2%I¡BC‚<R¹„‰ */
- $"9BDF 0AA1 9A6B 667D DCE2 FE18 C386 4EE9" /* ›ß¡škf}Üâþ.ÆNé */
- $"8AF7 92D0 4405 227C BD4C B9E4 34A7 2533" /* Š÷’ÐD."|½L¹ä4§%3 */
- $"D3C6 E915 D57B 681B B6DC FF03 D5D4 F1DD" /* ÓÆé.Õ{h.¶Üÿ.ÕÔñÝ */
- $"4FB5 BA54 262A 73C2 1CF4 4CD1 D842 E8C2" /* OµºT&*sÂ.ôLÑØBè */
- $"8169 3555 13EC 6A25 6DE0 3614 EC2E D1BB" /* i5U.ìj%mà6.ì.Ñ» */
- $"E597 BFC6 2ACB 6879 11D1 870D E79E 8422" /* å—¿Æ*Ëhy.ч.çž„" */
- $"C01D 4032 8887 6DBA FBEC 3077 F220 49E3" /* À.@2ˆ‡mºûì0wò Iã */
- $"8693 0B00 9F45 0F57 0A39 DA8E EAA5 CD48" /* †“..ŸE.WÂ9ÚŽê¥ÍH */
- $"2C93 C3EC BDE0 71D5 5749 0952 441C E3F8" /* ,“Ãì½àqÕWIÆRD.ãø */
- $"597F C1E6 FB6B BBED AD71 FC34 CFF8 5877" /* Y.Áæûk»í­qü4ÏøXw */
- $"DB67 5F6D 798F E163 5F6B 1CFA A87B ED7C" /* Ûg_myác_k.ú¨{í| */
- $"F176 3065 72FF 443D BA6B 8FBD 9E85 806A" /* ñv0erÿD=ºk½ž…€j */
- $"2A1B 368C 7A9E B1B1 93DE ABD8 263F 31B3" /* *.6Œzž±±“Þ«Ø&?1³ */
- $"1739 58F1 7233 FE7C 4EC4 32AA CDDB CF11" /* .9Xñr3þ|NÄ2ªÍÛÏ. */
- $"C519 9C61 B756 AF62 D55D 5D48 6AF7 4364" /* Å.œa·V¯bÕ]]Hj÷Cd */
- $"205E F14D AAD6 EFF5 2F0D CBE4 0F19 3159" /* ^ñMªÖïõ/.Ëä..1Y */
- $"94F4 910E 4217 990B CABE EBF5 2B67 2EF6" /* ”ô‘.B.™.ʾëõ+g.ö */
- $"FE41 0C44 1C50 43EA 69F5 4E73 5569 82A1" /* þA.D.PCêiõNsUi‚¡ */
- $"C13C 4899 3AA9 5E13 5F76 BF98 2105 1842" /* Á<H™:©^._v¿˜!..B */
- $"AF34 9AFD CFC8 D1E7 3479 E1F3 C86F D06F" /* ¯4šýÏÈÑç4yáóÈoÐo */
- $"9ED9 9DD8 E2E0 4B44 19F4 03E6 9CC0 3474" /* žÙØâàKD.ô.æœÀ4t */
- $"DFBD 078F D140 1C06 5F8C B6E2 665C 703A" /* ß½.Ñ@.._Œ¶âf\p: */
- $"2841 642E F538 C531 697D 5064 11AD 9E8C" /* (Ad.õ8Å1i}Pd.­žŒ */
- $"5A53 3174 7302 762E 9708 BEF5 AD41 0C01" /* ZS1ts.v.—.¾õ­A.. */
- $"D744 85FC D963 416A 9A3A 6898 F067 5B1C" /* ×D…üÙcAjš:h˜ðg[. */
- $"873B 42B6 72C4 FF18 337A 8A24 EDCE 6B8B" /* ‡;B¶rÄÿ.3zŠ$íÎk‹ */
- $"BF06 0EA4 0227 A131 8620 B03C A2B9 729E" /* ¿..¤.'¡1† °<¢¹rž */
- $"1242 EC64 E340 5C5C 9BFF 120A BB1B 75E5" /* .Bìdã@\\›ÿ.».uå */
- $"385B 68AF C7B7 8BA5 1E7B 6FC1 DDB2 F642" /* 8[h¯Ç·‹¥.{oÁݲöB */
- $"FF56 4D21 66B3 EA8C 7095 8FBD 92CC 7315" /* ÿVM!f³êŒp•½’Ìs. */
- $"665F B398 608C ADD4 11E0 DA38 734A C3DB" /* f_³˜`Œ­Ô.àÚ8sJÃÛ */
- $"9249 4640 27D6 D057 426E 651D BF14 F0DE" /* ’IF@'ÖÐWBne.¿.ðÞ */
- $"9130 2D17 8D66 9689 79BD 9A6D 5AF9 6C7C" /* ‘0-.f–‰y½šmZùl| */
- $"94BF 8531 6507 5621 1C11 8D8F F3A5 83D9" /* ”¿…1e.V!..ó¥ƒÙ */
- $"7EE3 1E6D 9B0A 8D44 F466 DE49 E606 E143" /* ~ã.m›ÂDôfÞIæ.áC */
- $"7E77 D417 D49D 9CF2 89AA B0FA 84A4 33A5" /* ~wÔ.Ôœò‰ª°ú„¤3¥ */
- $"8279 A26A 82C5 27CF FB64 D227 994E C6A7" /* ‚y¢j‚Å'ÏûdÒ'™NƧ */
- $"531C 7B7D D333 20D4 F79E 7C21 CC1E 7ADA" /* S.{}Ó3 Ô÷ž|!Ì.zÚ */
- $"F978 DEBB 1FF2 7420 A72D DE6B AB74 8DC6" /* ùxÞ».òt §-Þk«tÆ */
- $"DD0F 0386 BF57 5F23 4926 C874 D598 47A3" /* Ý..†¿W_#I&ÈtÕ˜G£ */
- $"FBC8 E9B0 38BB C695 B7F4 82A1 CC5F 1E22" /* ûÈé°8»Æ•·ô‚¡Ì_." */
- $"767C 20D5 E64D 44F1 B2D4 2298 C6A1 1842" /* v| ÕæMDñ²Ô"˜Æ¡.B */
- $"8139 0CC8 B9C5 284F 9FC8 945B 5342 94A8" /* 9.ȹÅ(OŸÈ”[SB”¨ */
- $"1A57 3351 E00E DB28 D5E3 9712 4346 6DBA" /* .W3Qà.Û(Õã—.CFmº */
- $"CC9B A1ED CD9B 778D 4523 1E9A AC69 8ED9" /* Ì›¡íÍ›wE#.š¬iŽÙ */
- $"67C4 C16D A548 A029 0075 0185 8D06 B7F0" /* gÄÁm¥H ).u.….·ð */
- $"8258 D26A EB95 D437 F0D2 8E91 D536 F534" /* ‚XÒjë•Ô7ðÒŽ‘Õ6õ4 */
- $"30A1 6DE7 E4B8 48DF 246E 6A43 4FE6 AED0" /* 0¡mçä¸Hß$njCOæ®Ð */
- $"48A0 5E1E C339 6C40 BE36 CEB8 870B F9EB" /* H ^.Ã9l@¾6θ‡.ùë */
- $"5ED8 3CA2 B3FA 8CD9 2D26 FF79 6468 862D" /* ^Ø<¢³úŒÙ-&ÿydh†- */
- $"6B87 3072 15D5 5640 D5D4 B4BA EAD3 84F1" /* k‡0r.ÕV@ÕÔ´ºêÓ„ñ */
- $"6A43 F378 100E 8088 A3FE 989B E75B F67F" /* jCóx..€ˆ£þ˜›ç[ö. */
- $"5B25 3AE2 C08C 8CB0 08DD A37F 94DD 7F03" /* [%:âÀŒŒ°.Ý£.”Ý.. */
- $"35C9 DF27 9A9A B829 6326 A95D 91F7 0BA3" /* 5Éß'šš¸)c&©]‘÷.£ */
- $"7220 E220 F062 D8DE ADE2 2AD6 DDFD C9E4" /* r â ðbØÞ­â*ÖÝýÉä */
- $"FAAE 543D 3CCB 5230 74F7 3120 02FD 6B45" /* ú®T=<ËR0t÷1 .ýkE */
- $"A2AB 805B 13FB 1879 6060 5600 1847 98E5" /* ¢«€[.û.y``V..G˜å */
- $"BF65 2CD4 ACD7 15D0 B77E 5A0F 8095 95CA" /* ¿e,Ô¬×.з~Z.€••Ê */
- $"1847 D25F 7D32 1AE2 89EA 9D49 074D A3E5" /* .GÒ_}2.â‰êI.M£å */
- $"201E 8AC7 CB9C 43BC 0732 70E0 3C4F E625" /* .ŠÇËœC¼.2pà<Oæ% */
- $"88E3 74DB 6FB7 7BE2 7006 F9E7 1F76 DBF3" /* ˆãtÛo·{âp.ùç.vÛó */
- $"C988 D665 F7AA 21E2 A5C1 E969 2917 3BA3" /* ɈÖe÷ª!â¥Áéi).;£ */
- $"17BF 925F F835 9827 813E DA4F EE9B 2DF3" /* .¿’_ø5˜'>ÚOî›-ó */
- $"B640 95E8 70A5 B577 8C1D 99D5 797D D482" /* ¶@•èp¥µwŒ.™Õy}Ô‚ */
- $"E23A 56DD 644D 9623 FEE2 63D2 A3DB E146" /* â:VÝdM–#þâcÒ£ÛáF */
- $"FC39 35A7 6C28 63D8 5240 0C80 0000 0000" /* ü95§l(cØR@.€.... */
- $"0001 4095 99D3 7A7A 0A05 B673 69BC DA9C" /* ..@•™ÓzzÂ.¶si¼Úœ */
- $"A108 DDEA EE48 6385 0790 FEA1 1AFC 2CED" /* ¡.ÝêîHc….þ¡.ü,í */
- $"2225 BE73 2ED7 00BB 2301 80FE 09DF E78E" /* "%¾s.×.»#.€þÆßçŽ */
- $"6FE6 4743 A0EE 0A03 4C9E F046 CDD8 E7F1" /* oæGC îÂ.LžðFÍØçñ */
- $"DB3F 1B67 F6E1 1F31 8096 90DF 5110 40B0" /* Û?.göá.1€–ßQ.@° */
- $"0000 0000 0000 0000 C0B9 E0FC 41FB A11C" /* ........À¹àüAû¡. */
- $"4696 89A0 DE42 F8C7 27D0 3F03 AA51 70FD" /* F–‰ ÞBøÇ'Ð?.ªQpý */
- $"DC5F D7B9 AFD3 A0F3 7BAA A910 9E5C 259E" /* Ü_×¹¯Ó ó{ª©.ž\%ž */
- $"E4FB 8F8E 01C1 96E2 0768 FE5A 0A43 E2F8" /* äûŽ.Á–â.hþZÂCâø */
- $"DA74 9500 C241 D1F6 3EFF 3F06 586F A511" /* Út•.ÂAÑö>ÿ?.Xo¥. */
- $"CCFE 8FE7 61E1 C392 D001 3F52 1CA8 CC23" /* ÌþçaáÃ’Ð.?R.¨Ì# */
- $"93F0 27DF 893F 4AC1 06C3 34DA 8953 BBC0" /* “ð'߉?JÁ.Ã4Ú‰S»À */
- $"84C0 4843 27E0 067E 5EBF FF7A 1540 4C0E" /* „ÀHC'à.~^¿ÿz.@L. */
- $"FA6C 44A1 A7BC DB24 6AD7 C367 EC93 33BF" /* úlD¡§¼Û$j×Ãgì“3¿ */
- $"FECB C1DF 83CC 5BF7 A7C0 DF62 2EFA 4283" /* þËÁ߃Ì[÷§Àßb.úBƒ */
- $"6E49 2492 4924 9249 2492 4924 9246 A4A5" /* nI$’I$’I$’I$’F¤¥ */
- $"7754 9685 B091 D8FF 1549 CF90 2079 3AFB" /* wT–…°‘Øÿ.IÏ y:û */
- $"E925 85CC 62A2 E49B 476B 47B9 319B 630F" /* é%…Ìb¢ä›GkG¹1›c. */
- $"A6B8 182C E282 D1CD 920A 4EB3 21BF 943C" /* ¦¸.,â‚ÑÍ’ÂN³!¿”< */
- $"27BF CCDE BD6E 481A 188C F70B C257 8118" /* '¿ÌÞ½nH..Œ÷.ÂW. */
- $"FBF7 FF78 F422 A3DB AE81 4980 0000 0000" /* û÷ÿxô"£Û®I€.... */
- $"0000 0000 0000 1EE1 BFBB C300 0000 0000" /* .......á¿»Ã..... */
- $"0000 0000 0000 14FB 3FE1 1B7A D142 E13F" /* .......û?á.zÑBá? */
- $"5B6F 704A 61CF 957D 258E F744 FB26 8356" /* [opJaÏ•}%Ž÷Dû&ƒV */
- $"74AD 1DDB 02F2 CF85 7AEB 3A06 6F12 084E" /* t­.Û.òÏ…zë:.o..N */
- $"8E93 D6DA E4FE 9FBE 2D16 1C87 701F 55C3" /* Ž“ÖÚäþŸ¾-..‡p.Uà */
- $"9966 3E8F 36CB 6D9F F3F6 F8D3 B3B9 E2C1" /* ™f>6ËmŸóöøÓ³¹âÁ */
- $"1019 C6E6 8FFF 7FDC 6948 D3AB C944 C64A" /* ..Ææÿ.ÜiHÓ«ÉDÆJ */
- $"8000 0000 0000 0000 000A B0CB 3806 445C" /* €........°Ë8.D\ */
- $"7110 4CDE 3651 AC94 777C 8AB0 5382 04AF" /* q.LÞ6Q¬”w|аS‚.¯ */
- $"32E5 68C2 122F 8A5B 12A8 FF39 CF5E 72FB" /* 2åhÂ./Š[.¨ÿ9Ï^rû */
- $"EFD4 1669 47C6 525E 88EF 0AAC 1EE1 98B6" /* ïÔ.iGÆR^ˆï¬.ᘶ */
- $"0BFF 7FAF 8A4B 7158 F7D7 1707 DE93 841E" /* .ÿ.¯ŠKqX÷×..Þ“„. */
- $"3C82 3260 1FFF 1C8B 6A6E 8C66 0000 0000" /* <‚2`.ÿ.‹jnŒf.... */
- $"0000 0000 0000 0121 EF03 234C 3124 0000" /* .......!ï.#L1$.. */
- $"0000 0000 0000 0000 077C 5957 204B A2ED" /* .........|YW K¢í */
- $"59B8 F3C4 CC60 8A58 7E23 0B9F A0FD 1DC8" /* Y¸óÄÌ`ŠX~#.Ÿ ý.È */
- $"8E0F FE2B 5F9F 12D8 09B3 57BB 7818 3CF5" /* Ž.þ+_Ÿ.ØÆ³W»x.<õ */
- $"D579 D427 5198 BD86 E2FC 8775 915B 37A5" /* ÕyÔ'Q˜½†âü‡u‘[7¥ */
- $"B2E6 6BD8 8404 31D9 4C54 3621 6561 5C3E" /* ²ækØ„.1ÙLT6!ea\> */
- $"4A80 0000 0000 0000 0000 0014 D22D 6758" /* J€..........Ò-gX */
- $"336C 63A1 C13F 3E94 9877 8E90 4E5D 0C70" /* 3lc¡Á?>”˜wŽN].p */
- $"F80A 4262 C2CC C7E4 DAE8 526F 393F 4558" /* øÂBbÂÌÇäÚèRo9?EX */
- $"5CC9 5DDA B2FF 7ED5 F809 3A02 F1EE 2760" /* \É]Ú²ÿ~ÕøÆ:.ñî'` */
- $"FF7E 5037 F054 4A1B 9602 92EA 8D26 A198" /* ÿ~P7ðTJ.–.’ê&¡˜ */
- $"9C4F 8238 A60E 7734 20F8 18FE 478F 5403" /* œO‚8¦.w4 ø.þGT. */
- $"1658 618B A80F 879F 4A98 E809 DEB2 7CE9" /* .Xa‹¨.‡ŸJ˜èÆÞ²|é */
- $"9724 407B B8C8 A48D 4F33 9126 751B 9FC2" /* —$@{¸È¤O3‘&u.ŸÂ */
- $"0283 44C3 5AFD 9546 FCE2 4212 4F5B 01D4" /* .ƒDÃZý•FüâB.O[.Ô */
- $"6E53 A032 DA91 40F4 4BDE 0C23 FF1E D5DE" /* nS 2Ú‘@ôKÞ.#ÿ.ÕÞ */
- $"B543 59DC C0DC 759A 6043 5883 A5FE C785" /* µCYÜÀÜuš`CXƒ¥þÇ… */
- $"BA68 9F46 C21A 4C50 20E3 0488 FB34 1043" /* ºhŸFÂ.LP ã.ˆû4.C */
- $"FC68 562B 635A EE8D E334 0C6F 25A9 E4C9" /* ühV+cZîã4.o%©äÉ */
- $"3484 2AC2 6188 7242 E3F6 AEAC 6F86 2DE2" /* 4„*ÂaˆrBãö®¬o†-â */
- $"C377 BD02 CB1C 9553 5485 6A5B E118 9BBD" /* Ãw½.Ë.•ST…j[á.›½ */
- $"DC6B 2C92 C6CC C866 6E7F FE63 AB01 FE7D" /* Ük,’ÆÌÈfn.þc«.þ} */
- $"FF7F BB81 EA94 87BE B101 F468 0E30 F111" /* ÿ.»ê”‡¾±.ôh.0ñ. */
- $"7BC9 FA0D F87F BDD0 811B 8588 1AE7 8387" /* {Éú.ø.½Ð.…ˆ.烇 */
- $"5C06 B3A9 E2ED 6E5B B524 35AA CBFF 50D6" /* \.³©âín[µ$5ªËÿPÖ */
- $"49D9 6918 3837 59BD E7CC 8796 B0AF 2729" /* IÙi.87Y½ç̇–°¯') */
- $"0512 5A97 66FF 1A85 E004 1882 0108 EA41" /* ..Z—fÿ.…à..‚..êA */
- $"BBCC 15E0 254C 59AF 877D 0722 15FB ADA1" /* »Ì.à%LY¯‡}.".û­¡ */
- $"84C2 9B83 DD5B C6B1 EE29 084C 08F7 06C8" /* „›ƒÝ[Ʊî).L.÷.È */
- $"4F07 9818 6BF2 66E2 582B 2F7D 29AD BAFA" /* O.˜.kòfâX+/})­ºú */
- $"8F9E 0AC8 60AE D10E 3E49 17BF E015 0C5E" /* žÂÈ`®Ñ.>I.¿à..^ */
- $"5C51 5D5B 5BC1 6C83 C428 4505 E9BB 61CB" /* \Q][[ÁlƒÄ(E.é»aË */
- $"D7C2 F3C6 C102 73F5 409E D0CF B43E E497" /* ×ÂóÆÁ.sõ@žÐÏ´>ä— */
- $"C1E0 707B 3F6F EAA8 2F10 9285 7D9D 9F81" /* Áàp{?oê¨/.’…}Ÿ */
- $"303D 3A70 2B3F 4A45 558D 63F6 EEB9 CF21" /* 0=:p+?JEUcöî¹Ï! */
- $"52C1 27C2 8439 0BE2 BE1F A553 A1C7 E44C" /* RÁ'„9.â¾.¥S¡ÇäL */
- $"5422 9BC0 356D 1B40 E53B 3064 AA69 F464" /* T"›À5m.@å;0dªiôd */
- $"7AA7 4E56 F7E2 7AE5 CB6E E538 8582 1927" /* z§NV÷âzåËnå8…‚.' */
- $"019D B4B0 E6D9 0F0E 9670 7723 62CF C422" /* .´°æÙ..–pw#bÏÄ" */
- $"DD53 ED12 92AE 20B0 6B63 6CB3 C596 4F4E" /* ÝSí.’® °kcl³Å–ON */
- $"18B6 FD06 93B2 6F73 A740 770D C39F B873" /* .¶ý.“²os§@w.߸s */
- $"598F 3667 6F7A 29E9 9E6F 9D04 48DD A175" /* Y6goz)éžo.HÝ¡u */
- $"2AFC 61BD D706 2A8E 9789 F513 B8AF B8EA" /* *üa½×.*Ž—‰õ.¸¯¸ê */
- $"2426 7EDF 1EFA 1D19 7A50 D22F D15E 76FE" /* $&~ß.ú..zPÒ/Ñ^vþ */
- $"CD34 19AD 8126 775C A5FB B209 9658 F850" /* Í4.­&w\¥û²Æ–XøP */
- $"F2FD A65F B487 9F50 7FF0 12FD BA8B FB6E" /* òý¦_´‡ŸP.ð.ýº‹ûn */
- $"49F5 50DF C349 B4F9 F4D7 EDEB 53BE DEB0" /* IõPßÃI´ùô×íëS¾Þ° */
- $"7F85 29FB 5DFF 36B9 BEDA 9BF8 3CF2 FDAE" /* .…)û]ÿ6¹¾Ú›ø<òý® */
- $"DFB5 ABBE D3DB ED2B FDBA CFFB 7606 FB74" /* ßµ«¾ÓÛí+ýºÏûv.ût */
- $"D3F8 6B96 83BA F7ED EB3F 7EDE AFE0 EECD" /* Óøk–ƒº÷íë?~Þ¯àîÍ */
- $"FB5E 7F6E 807E DB9B F6BD F0FE D32B EA21" /* û^.n€~Û›ö½ðþÓ+ê! */
- $"EFA8 1EFA 823F 6DCF FB6C 8BEA 6CFD B5AF" /* ï¨.ú‚?mÏûl‹êlýµ¯ */
- $"0774 CFDB D337 FB7A 3F83 BA5D F51F DF55" /* .tÏÛÓ7ûz?ƒº]õ.ßU */
- $"47FB 690F DA86 F791 DDD6 2CCB E6B8 C536" /* Gûi.Ú†÷‘ÝÖ,Ëæ¸Å6 */
- $"D512 AD5E 1B08 0B8A 8D03 2F75 60E5 6BF8" /* Õ.­^...Š./u`åkø */
- $"447B C66A 7EC2 7912 B45F 8E48 277C D8E1" /* D{Æj~Ây.´_ŽH'|Øá */
- $"809C 5755 D718 BAAC F891 2AE5 F97C 3F5E" /* €œWU×.º¬ø‘*åù|?^ */
- $"0116 3A00 99F4 5896 E0EA B189 F5A5 7929" /* ..:.™ôX–à걉õ¥y) */
- $"C491 B57F 2232 B0C2 52F8 89B1 DB2F B284" /* Ä‘µ."2°ÂRø‰±Û/²„ */
- $"C1EE 0C43 EF76 FD94 F871 4077 7E19 EC36" /* Áî.Cïvý”øq@w~.ì6 */
- $"BBFA 6DFF 3C0B 5A98 89B4 84BB 56DB 5FC2" /* »úmÿ<.Z˜‰´„»VÛ_ */
- $"16C2 351A B46E AF45 AAC7 DD2E 97ED 970C" /* .Â5.´n¯EªÇÝ.—í—. */
- $"76D8 F8D0 42EB E639 28E8 BE33 A530 3B58" /* vØøÐBëæ9(è¾3¥0;X */
- $"2374 6B1C 97B0 1CD5 ACD5 615F FD30 62C6" /* #tk.—°.Õ¬Õa_ý0bÆ */
- $"899A 977D 4B74 CAB1 E9EE 6588 4E67 8733" /* ‰š—}KtʱéîeˆNg‡3 */
- $"B359 BCC7 DC7B 9884 E4A8 78CB 77E7 675D" /* ³Y¼ÇÜ{˜„ä¨xËwçg] */
- $"FF2D FCE4 7744 BDD1 A833 6BEC C481 2DA8" /* ÿ-üäwD½Ñ¨3kìÄ-¨ */
- $"3D1C 5D57 7595 1DEB 2278 31AE 4188 B1F2" /* =.]Wu•.ë"x1®Aˆ±ò */
- $"54E1 113D DA75 96ED 71FF 1577 7820 4D22" /* Tá.=Úu–íqÿ.wx M" */
- $"2BD9 3841 A416 96A4 2549 1A9D 3A55 8E39" /* +Ù8A¤.–¤%I.:UŽ9 */
- $"A929 4B4E E11F 0F88 8BB6 7E08 2210 9D21" /* ©)KNá..ˆ‹¶~.".! */
- $"92BF 623B B974 D371 0208 1489 5713 0F66" /* ’¿b;¹tÓq...‰W..f */
- $"3C4C 8394 72A6 08A1 3D86 BA0C 198B CE8B" /* <Lƒ”r¦.¡=†º..‹Î‹ */
- $"FB71 18D8 E044 CE7C A642 F1E5 DC8B F8E6" /* ûq.ØàDÎ|¦BñåÜ‹øæ */
- $"2405 66E0 B6C5 6A4F B1AE 2231 3060 11D4" /* $.fà¶ÅjO±®"10`.Ô */
- $"9963 5EF4 BB3D 1F61 0807 0AE1 0DFC 4718" /* ™c^ô»=.a..Âá.üG. */
- $"6C97 80A7 D438 6A81 B76A 6E7E 7A64 87A1" /* l—€§Ô8j·jn~zd‡¡ */
- $"1D7A 8744 3227 F565 4B4A E311 FA0F B477" /* .z‡D2'õeKJã.ú.´w */
- $"9DD6 0662 8844 7138 BDF8 CBCC 007F BDB6" /* Ö.bˆDq8½øËÌ..½¶ */
- $"07C4 98CC 226B 9762 33D0 99EF 54D9 5800" /* .ĘÌ"k—b3ЙïTÙX. */
- $"509D C37B 39A7 E11B 8771 0999 AB8B AAA6" /* PÃ{9§á.‡qÆ™«‹ª¦ */
- $"C463 6C38 7FB0 9121 2CA2 7634 BBEE 41FB" /* Äcl8.°‘!,¢v4»îAû */
- $"4F3B B050 3E38 15C4 98A6 216D 31C2 7057" /* O;°P>8.ʦ!m1ÂpW */
- $"0B3D 429A 6CFB 0819 EB4D B9D2 549F 6601" /* .=Bšlû..ëM¹ÒTŸf. */
- $"2436 5BEA 9DAC BBDA AB3A AB4F ABFF 768D" /* $6[ꬻګ:«O«ÿv */
- $"E220 E451 7E45 49C5 21FD B2E6 DEFD 2505" /* â äQ~EIÅ!ý²æÞý%. */
- $"836B 3500 54D8 50B8 7538 C5BF B951 7FB2" /* ƒk5.TØP¸u8Å¿¹Q.² */
- $"F927 CBB1 7AA1 D0BD 51E2 D7F7 C440 5DA0" /* ù'˱z¡Ð½Qâ×÷Ä@]  */
- $"89EF FEEE BF2E A5E4 F98A B652 F25A D1DC" /* ‰ïþî¿.¥äùжRòZÑÜ */
- $"482A 40CB A288 250A 22CA BCB4 815D 077E" /* H*@Ë¢ˆ%Â"ʼ´].~ */
- $"229E 59B2 8249 D336 A3C1 5D5B FAE5 483C" /* "žY²‚IÓ6£Á][úåH< */
- $"67F3 255E 1530 AFB1 D900 48FE 254B C54E" /* gó%^.0¯±Ù.Hþ%KÅN */
- $"42DC EE54 066B CE83 B1C9 F021 2031 8DF1" /* BÜîT.k΃±Éð! 1ñ */
- $"FE58 9315 B761 79CA 409A 6CD6 337A 14A9" /* þX“.·ayÊ@šlÖ3z.© */
- $"8622 90BC 3474 727C 66CE 09C5 61B4 A386" /* †"¼4tr|fÎÆÅa´£† */
- $"7509 819F 6EEB 5FCC C0A7 084A 7742 A6E3" /* uÆŸnë_ÌÀ§.JwB¦ã */
- $"F69A 90CA 24AD EB53 60AB 5FD0 FD6F 3DE6" /* öšÊ$­ëS`«_Ðýo=æ */
- $"44CF 80FB A400 B71F 1DD4 C690 A3DB 54CF" /* DÏ€û¤.·..ÔÆ£ÛTÏ */
- $"F492 7EC7 540C 048F 3D35 FD63 7593 751B" /* ô’~ÇT..=5ýcu“u. */
- $"F88F 4B7D E355 6685 FD5F 2743 8DF3 D839" /* øK}ãUf…ý_'CóØ9 */
- $"0894 99DB 1FAA 22B2 8800 8C9F D91F E60B" /* .”™Û.ª"²ˆ.ŒŸÙ.æ. */
- $"0EEE 2870 2932 2AE5 F401 11F0 8B2B 53DB" /* .î(p)2*åô..ð‹+SÛ */
- $"8028 E39D 744F E70B 11F3 A220 ABF4 FCD5" /* €(ãtOç..ó¢ «ôüÕ */
- $"37C9 0AC8 8749 215E 1D89 4022 96D0 04FF" /* 7ÉÂȇI!^.‰@"–Ð.ÿ */
- $"0C57 AC3D 351A 8582 EBA4 EA2B B65B A14B" /* .W¬=5.…‚ë¤ê+¶[¡K */
- $"048B E031 DE15 251C 669F 8457 FF38 D131" /* .‹à1Þ.%.fŸ„Wÿ8Ñ1 */
- $"0027 BB20 9721 6636 A375 AFBA AF7B BDBA" /* .'» —!f6£u¯º¯{½º */
- $"05F3 3114 E55E DAA9 219F 9516 F3DF 12B4" /* .ó1.å^Ú©!Ÿ•.óß.´ */
- $"DA3F 83DF 13A0 9900 3FA6 17E9 B014 E404" /* Ú?ƒß. ™.?¦.é°.ä. */
- $"434D 02D4 4283 D73D F4D1 5D95 8B25 6A6A" /* CM.ÔBƒ×=ôÑ]•‹%jj */
- $"CD5E BA93 82DF 1A30 4B0D 0E21 65A1 0001" /* Í^º“‚ß.0K..!e¡.. */
- $"2869 F06A 8949 311F DB03 39EB E8E1 5BFB" /* (iðj‰I1.Û.9ëèá[û */
- $"F11C 05C6 2469 BAEA 4516 4CC4 DAF5 927A" /* ñ..Æ$iºêE.LÄÚõ’z */
- $"2CEB 3150 DB6F 4DE2 8EED 59C0 604F 9AE5" /* ,ë1PÛoMâŽíYÀ`Ošå */
- $"E136 83B0 F348 3D1A B44D 3A8E D77A B0DE" /* á6ƒ°óH=.´M:Ž×z°Þ */
- $"5267 1055 24F7 3C3D EB3E 08EF 97F9 4B29" /* Rg.U$÷<=ë>.ï—ùK) */
- $"454F 1B5D 4A6E 56E1 0F90 00A1 4467 7454" /* EO.]JnVá..¡DgtT */
- $"B556 362A 9A19 9E35 19E9 BFDF E2AD 91D6" /* µV6*š.ž5.é¿ßâ­‘Ö */
- $"7FB6 95B9 F19D 8D07 2FAF 3162 D880 0AA7" /* .¶•¹ñ./¯1b؀§ */
- $"C9C4 94AD C49A 1231 2D9F 780F 6E3E 57D2" /* ÉÄ”­Äš.1-Ÿx.n>WÒ */
- $"8C1C 582C 179A 721C 7063 F056 F938 4EA1" /* Œ.X,.šr.pcðVù8N¡ */
- $"F3E4 E458 D254 280F 92CA ABDC 4ECF 3EB7" /* óääXÒT(.’Ê«ÜNÏ>· */
- $"95DF A3B8 45C0 1427 BA54 B2E2 D1BC B67D" /* •ߣ¸EÀ.'ºT²âѼ¶} */
- $"5A0F EE12 37D4 BE1C 5785 A90D 2E62 B301" /* Z.î.7Ô¾.W…©..b³. */
- $"F66D A637 374B 17DA 7446 C318 3B11 4F50" /* öm¦77K.ÚtFÃ.;.OP */
- $"ED27 AEB2 D8F6 C3E4 AB48 5E7C 1D46 9463" /* í'®²ØöÃä«H^|.F”c */
- $"E7BA 9296 7BFA FDBB 39F2 7E86 1A5D 8FFA" /* 纒–{úý»9ò~†.]ú */
- $"7E06 FC92 3472 7950 8B67 8329 FA9F 47AA" /* ~.ü’4ryP‹gƒ)úŸGª */
- $"51F3 01AD A6DA 224F E711 AF6F BA8F FA86" /* Qó.­¦Ú"Oç.¯oºú† */
- $"FF61 EBD1 5613 B076 3543 3515 FF1B 1E9C" /* ÿaëÑV.°v5C5.ÿ..œ */
- $"CE78 6A36 7CCF FD63 E9E3 00E6 EA60 1DBE" /* Îxj6|Ïýcéã.æê`.¾ */
- $"42FB 3E66 D69D 8BA6 A0E6 13E1 2087 20D7" /* Bû>fÖ‹¦ æ.á ‡ × */
- $"7941 E3C4 C7C6 67FF 2C9C A486 253A C206" /* yAãÄÇÆgÿ,œ¤†%:Â. */
- $"F961 4A0E D9DD D32A 6D67 A012 B1A2 B549" /* ùaJ.ÙÝÓ*mg .±¢µI */
- $"3F58 8BA1 CA98 94EB 6099 570C D139 09AA" /* ?X‹¡Ê˜”ë`™W.Ñ9ƪ */
- $"8DEB C31A 0812 5DAD 2926 6846 D789 4430" /* ëÃ...]­)&hF׉D0 */
- $"4931 16B5 0804 52F1 040D B0A7 DDD7 7052" /* I1.µ..Rñ..°§Ý×pR */
- $"4269 C765 98AA 3941 F9EE 987A 2EAD 46BE" /* BiÇe˜ª9Aùî˜z.­F¾ */
- $"AA2B DD79 D9F9 7AF7 9318 B633 97CC DB93" /* ª+ÝyÙùz÷“.¶3—ÌÛ“ */
- $"5AF7 23D4 08E5 1FD7 EA45 85E9 4C98 77B6" /* Z÷#Ô.å.×êE…éL˜w¶ */
- $"0038 8756 6C8F 1A76 8D36 D67C 0BBD 248F" /* .8‡Vl.v6Ö|.½$ */
- $"8465 4CC4 7B7A C1B7 6348 F763 66A7 F04E" /* „eLÄ{zÁ·cH÷cf§ðN */
- $"FF4E 1C72 1053 323F 9E55 F75D 4097 9C24" /* ÿN.r.S2?žU÷]@—œ$ */
- $"AD5D 3C1B 766A 50A8 7252 6563 2687 8251" /* ­]<.vjP¨rRec&‡‚Q */
- $"8AE2 2EAE 6AA9 6439 2831 281E 034D 7999" /* Šâ.®j©d9(1(..My™ */
- $"F46F 47C1 911D 553A D887 0E8F 6E83 1B48" /* ôoGÁ‘.U:؇.nƒ.H */
- $"F0D9 C566 C0FF 0F02 5E68 EA76 7381 25B1" /* ðÙÅfÀÿ..^hêvs%± */
- $"D388 A375 370B A655 625B B71A 191C CD9D" /* Óˆ£u7.¦Ub[·...Í */
- $"F3CA 83B2 88D6 3712 B3E3 6CEA 19DC 3295" /* óʃ²ˆÖ7.³ãlê.Ü2• */
- $"3398 DF4F 1279 B346 1DD8 ED24 186F BEE1" /* 3˜ßO.y³F.Øí$.o¾á */
- $"8FD4 5FAD EAFF 6960 DE17 A0A4 B89E 7CF3" /* Ô_­êÿi`Þ. ¤¸ž|ó */
- $"C360 9DA8 91BF 470F ECC0 C0AA E260 3430" /* Ã`¨‘¿G.ìÀÀªâ`40 */
- $"EF4E CAD6 F964 05B0 8E27 C1F6 7516 4350" /* ïNÊÖùd.°Ž'Áöu.CP */
- $"B87D 7D16 703E 7972 1232 2E0F 6577 664C" /* ¸}}.p>yr.2..ewfL */
- $"8FA6 1414 7FB2 A33D A69E FD2F CF21 FC8F" /* ¦...²£=¦žý/Ï!ü */
- $"23A5 6AED 3E28 34A0 F73F F7D6 7F7C 5B6B" /* #¥jí>(4 ÷?÷Ö.|[k */
- $"0596 8B6D BACA 52DF 8E72 CDBA E221 7092" /* .–‹mºÊRߎrͺâ!p’ */
- $"A3AB B99D 1EE3 3F21 1AD2 0F0B DC5A 8BE1" /* £«¹.ã?!.Ò..ÜZ‹á */
- $"9E35 D891 9A60 EF28 5934 FA3B 8009 DC42" /* ž5Ø‘š`ï(Y4ú;€ÆÜB */
- $"11BE 487F D776 AF26 0EBD BF3E 8DCC B940" /* .¾H.×v¯&.½¿>̹@ */
- $"2523 D6E1 447F EA8A 5F66 DE0B 0962 249E" /* %#ÖáD.êŠ_fÞ.Æb$ž */
- $"165D BB6D 1EBD 1237 021B F903 DEEF 78FE" /* .]»m.½.7..ù.Þïxþ */
- $"B3F3 76B7 429F 336D 0EFA FF47 5CBC E3DF" /* ³óv·BŸ3m.úÿG\¼ãß */
- $"FC44 41BA BC9D 67AE 0B43 D817 FBCE 4F36" /* üDAº¼g®.CØ.ûÎO6 */
- $"8209 CCB5 38F6 712E 7DEA 4E9E 4B38 3B80" /* ‚ÆÌµ8öq.}êNžK8;€ */
- $"7B16 28E3 AB59 340E 93F0 4C65 C281 A4F1" /* {.(ã«Y4.“ðLe¤ñ */
- $"08E4 26A6 31AA B6A4 F784 BA8E C7FA 8919" /* .ä&¦1ª¶¤÷„ºŽÇú‰. */
- $"4B19 FA98 09C8 3C79 27DA CB39 881C 3B0E" /* K.ú˜ÆÈ<y'ÚË9ˆ.;. */
- $"9BEA 1EF3 D655 CFEB B4F7 0888 971D 69EF" /* ›ê.óÖUÏë´÷.ˆ—.iï */
- $"1105 0EF2 80B8 FF1E F0BE 107F 9AB0 6C52" /* ...ò€¸ÿ.ð¾..š°lR */
- $"FF78 3AA4 8FE0 3370 40DF C5E8 478A 2FCF" /* ÿx:¤à3p@ßÅèGŠ/Ï */
- $"96C5 8D32 8E07 AA93 DA95 4D9B 60C6 2748" /* –Å2Ž.ª“Ú•M›`Æ'H */
- $"C8F4 8347 D2D9 2E35 75E4 333A 6494 B177" /* ÈôƒGÒÙ.5uä3:d”±w */
- $"C836 6E4F AF08 CDB0 0FA5 D565 A0EC 946F" /* È6nO¯.Ͱ.¥Õe ì”o */
- $"ED5C 03F6 E5DB FA4F D29A BF8F BC7F 12D8" /* í\.öåÛúOÒš¿¼..Ø */
- $"7730 8564 524D 4B31 F681 8C71 C5BC 1641" /* w0…dRMK1öŒqż.A */
- $"6988 F9CF 0385 B8EE 4C04 07DB 5AD2 531C" /* iˆùÏ.…¸îL..ÛZÒS. */
- $"48BA 3E6F E24E AF73 DB5E B729 A4BF 894A" /* Hº>oâN¯sÛ^·)¤¿‰J */
- $"782D E8F2 91C9 E628 322C F20C 2D0C 73DD" /* x-èò‘Éæ(2,ò.-.sÝ */
- $"F093 4ED7 63DF E121 E7B9 DB7E 530D E3BD" /* ð“N×cßá!ç¹Û~S.ã½ */
- $"3469 29CE 5768 BE0F 1E91 46B7 00A0 CC2E" /* 4i)ÎWh¾..‘F·. Ì. */
- $"183D 7D57 762C 062D 0707 EBA4 177D 73E8" /* .=}Wv,.-..ë¤.}sè */
- $"FA30 83A6 479B AA9A 702E B8FD 9B54 0FF3" /* ú0ƒ¦G›ªšp.¸ý›T.ó */
- $"8222 1EB0 4CDD 4CF7 F0AB 8972 B655 9426" /* ‚".°LÝL÷ð«‰r¶U”& */
- $"4EEE 3B88 A6D2 F8B9 6845 0467 D606 9DDD" /* Nî;ˆ¦Òø¹hE.gÖ.Ý */
- $"C547 A61F 71E7 5A8E 6B83 51FD B2C1 A732" /* ÅG¦.qçZŽkƒQý²Á§2 */
- $"A6EA A0AA 6D13 E80B 0EC4 5DF4 348F FF6E" /* ¦ê ªm.è..Ä]ô4ÿn */
- $"2289 CFB4 1AE2 18D1 340F B29B E1FF 16B1" /* "‰Ï´.â.Ñ4.²›áÿ.± */
- $"0F0F B5AD 260A 7FD9 B1F2 3D0C 404F 75A8" /* ..µ­&Â.Ù±ò=.@Ou¨ */
- $"E4DB 52EE 259B D762 E5E5 4FFD 22AC 4856" /* äÛRî%›×bååOý"¬HV */
- $"9C62 8DDB F5D8 58F8 4EC7 1110 30EC E0D8" /* œbÛõØXøNÇ..0ìàØ */
- $"7FED 0176 FEF2 53B3 75C6 34E1 A3A7 79DA" /* .í.vþòS³uÆ4ᣧyÚ */
- $"1FDC 42EC 83B2 F3EB 056C E41B 4E65 3699" /* .ÜB샲óë.lä.Ne6™ */
- $"4BD6 1AE3 85A9 DBF6 89D4 39B0 79F9 8877" /* KÖ.ã…©Ûö‰Ô9°yùˆw */
- $"161C 2CB5 3F3C 294B 8CA3 A6F6 556C 4CAD" /* ..,µ?<)KŒ£¦öUlL­ */
- $"A752 918D 7E61 BA54 02D2 CF5C AEBE 1A0B" /* §R‘~aºT.ÒÏ\®¾.. */
- $"B75C A9CA 9876 AB0B 6028 4D8E D46C E479" /* ·\©Ê˜v«.`(MŽÔläy */
- $"A186 EA09 496E 0935 04E2 4C25 FA18 270B" /* ¡†êÆInÆ5.âL%ú.'. */
- $"A054 DE1C 1BD8 A089 9D95 1335 E93C 7C21" /*  TÞ..Ø ‰•.5é<|! */
- $"435E A570 3C42 AA88 0075 BB20 20AF 90EC" /* C^¥p<Bªˆ.u» ¯ì */
- $"26F9 7E41 5CC7 2154 63A3 D965 075C 1A78" /* &ù~A\Ç!Tc£Ùe.\.x */
- $"2A13 753E DDD9 F846 467C EFC6 5308 2B46" /* *.u>ÝÙøFF|ïÆS.+F */
- $"5BD9 2BFF 5F26 72DB 523D D0FC CE49 47B0" /* [Ù+ÿ_&rÛR=ÐüÎIG° */
- $"D98B 4D36 1B60 7C3A 0707 F46A 8565 4CCB" /* Ù‹M6.`|:..ôj…eLË */
- $"5DC1 A50D C039 BF24 7418 78A7 6D4F DE55" /* ]Á¥.À9¿$t.x§mOÞU */
- $"1CB8 B787 158C 6C4D D840 920F 3130 7A92" /* .¸·‡.ŒlMØ@’.10z’ */
- $"1CF4 1B74 BC2B 8954 0A80 9636 BFC3 6330" /* .ô.t¼+‰T€–6¿Ãc0 */
- $"3E7F 7E4E A811 39F2 3D56 10D3 6A76 4E20" /* >.~N¨.9ò=V.ÓjvN */
- $"F646 5CD3 9166 D2D6 046F E398 A934 2D04" /* öF\Ó‘fÒÖ.o㘩4-. */
- $"2E01 C602 1332 8274 6AE2 D5C9 6226 30B3" /* ..Æ..2‚tjâÕÉb&0³ */
- $"07DB FDF3 B3BB 6C31 B162 FF63 0639 8E6F" /* .Ûýó³»l1±bÿc.9Žo */
- $"3501 A54C 1AA6 42EB EDE7 885E EE2F A6D9" /* 5.¥L.¦Bëíçˆ^î/¦Ù */
- $"B74A AE20 8FFB 6FCF A537 642D F17F A45E" /* ·J® ûoÏ¥7d-ñ.¤^ */
- $"EE37 DE05 7569 A81E F464 A35B 603B 4F40" /* î7Þ.ui¨.ôd£[`;O@ */
- $"D00F C3D2 D04A F943 AC3C 37E2 1B2B A1D3" /* Ð.ÃÒÐJùC¬<7â.+¡Ó */
- $"09D6 A92B F7CB B2FA 9FF7 97F2 83F9 BABC" /* ÆÖ©+÷˲úŸ÷—òƒùº¼ */
- $"E4BE F015 E804 97FC A16F 6E8B 9004 8424" /* ä¾ð.è.—ü¡on‹.„$ */
- $"04F7 1295 0A15 3C1A AA5D 6A75 372A 0BB4" /* .÷.•Â.<.ª]ju7*.´ */
- $"4849 DD4A 012F D969 23A9 FBA7 C3EB D29F" /* HIÝJ./Ùi#©û§ÃëÒŸ */
- $"5CE0 BD6F 8436 26BB 1B52 3BCB DCAA 0791" /* \à½o„6&».R;Ëܪ.‘ */
- $"02B3 8EC7 5A89 D402 C9FF 058E E2C8 AD72" /* .³ŽÇZ‰Ô.Éÿ.ŽâÈ­r */
- $"01BF D9B3 FA52 B000 0000 3090 8B4E 8809" /* .¿Ù³úR°...0‹NˆÆ */
- $"9E4F 59A7 8021 D030 169B 78E6 55B4 9FB8" /* žOY§€!Ð0.›xæU´Ÿ¸ */
- $"48A1 D2F4 BE8E A948 A89E 5E3E BE56 AE8C" /* H¡Òô¾Ž©H¨ž^>¾V®Œ */
- $"BF6C 6485 F435 4906 BE37 4D88 589A 85C0" /* ¿ld…ô5I.¾7MˆXš…À */
- $"5278 59EC 1FED 3652 3FE0 5229 0524 D686" /* RxYì.í6R?àR).$Ö† */
- $"1E5E 14D9 8C56 8742 9625 36BB 4674 0391" /* .^.ÙŒV‡B–%6»Ft.‘ */
- $"9647 FCC9 30C4 6D0D 5812 1271 E9C8 E89D" /* –GüÉ0Äm.X..qéÈè */
- $"7F9B 3420 0269 5F58 4554 F964 BDDA E9F3" /* .›4 .i_XETùd½Úéó */
- $"973A 5B5F 4C59 107B 2D9E 87CB D896 1F13" /* —:[_LY.{-ž‡ËØ–.. */
- $"AC52 F00D 3600 9104 3FF2 399A 0158 5153" /* ¬Rð.6.‘.?ò9š.XQS */
- $"139A A5C2 51CC D2C7 D082 C2A0 E35B FE05" /* .š¥ÂQÌÒÇЂ ã[þ. */
- $"06C9 DBB4 7036 39DB 80AF 4642 9F53 170C" /* .ÉÛ´p69Û€¯FBŸS.. */
- $"2856 38D5 0FA7 B562 4ED8 3BB5 B48A B1C8" /* (V8Õ.§µbNØ;µ´Š±È */
- $"B20B 4B42 4499 C5C1 242B A1BA CB74 D8F1" /* ².KBD™ÅÁ$+¡ºËtØñ */
- $"1CF1 241E 7A2A B847 111D 13DC CD3C 05A3" /* .ñ$.z*¸G...ÜÍ<.£ */
- $"024F 25B5 41E2 0A15 E1C4 1A0E A5D8 0742" /* .O%µAâÂ.áÄ..¥Ø.B */
- $"A359 2372 FD88 7447 1DB7 F766 5B7F E63E" /* £Y#rýˆtG.·÷f[.æ> */
- $"26B8 BC6E 7B72 E331 2BE1 73BD 04A0 E941" /* &¸¼n{rã1+ás½. éA */
- $"45EC 9039 8769 8BFF 1624 8D43 CA24 9D0D" /* Eì9‡i‹ÿ.$CÊ$. */
- $"A05B F467 7401 E777 0608 C4A6 A698 9A9B" /*  [ôgt.çw..Ħ¦˜š› */
- $"7066 11D3 606F 857E 18D8 D9D3 E226 38C0" /* pf.Ó`o…~.ØÙÓâ&8À */
- $"D89B 09D9 A2F1 0171 BAC9 D7BF AB2E BD58" /* Ø›ÆÙ¢ñ.qºÉ׿«.½X */
- $"7178 6CC2 608D 447D D92A 621C 1A82 B764" /* qxlÂ`D}Ù*b..‚·d */
- $"2ABE CBE8 07C0 E2A6 9B83 46A8 1109 FC87" /* *¾Ëè.À⦛ƒF¨.Æü‡ */
- $"F083 9598 26AE 8847 7E22 278D 9311 59FC" /* ðƒ•˜&®ˆG~"'“.Yü */
- $"2995 1D44 BA58 24BC 2A99 3946 0E00 9144" /* )•.DºX$¼*™9F..‘D */
- $"9113 0297 29E3 A7B5 B937 2D23 8405 86ED" /* ‘..—)ã§µ¹7-#„.†í */
- $"29F1 5254 6A8C 0FB8 4B13 F6C3 6028 2C14" /* )ñRTjŒ.¸K.öÃ`(,. */
- $"3B80 E317 225C 7A9B 405C 7E95 A2E4 311B" /* ;€ã."\z›@\~•¢ä1. */
- $"076A D7B8 A4B5 225A 1F29 FAA2 8239 D98F" /* .j׸¤µ"Z.)ú¢‚9Ù */
- $"071A F302 DA24 AE80 2AC0 D108 035D EA76" /* ..ó.Ú$®€*ÀÑ..]êv */
- $"2F7E 850F 9E87 6B19 B2F1 F1E5 F5B3 A5AF" /* /~….ž‡k.²ññåõ³¥¯ */
- $"35BB D867 8257 8A48 5E4F 6983 E22E 6DAD" /* 5»Øg‚WŠH^Oiƒâ.m­ */
- $"D361 1505 ECF2 3F3C DB84 1861 E5AB 6793" /* Óa..ìò?<Û„.aå«g“ */
- $"910D 8F56 6BB5 FD17 29DB 242A 6946 8022" /* ‘.Vkµý.)Û$*iF€" */
- $"7DAF 8120 02EB C840 3765 69EC BB8B F2FF" /* }¯ .ëÈ@7ei컋òÿ */
- $"6031 7BE4 EFC4 BECD 7BD7 CB0A 8B8C 75C2" /* `1{äïľÍ{×Ë‹Œu */
- $"E63A F4E4 B05B 1442 0CB1 BEBD E078 84F5" /* æ:ôä°[.B.±¾½àx„õ */
- $"3D95 24FA 952F 949B AD72 01B7 1CC7 4CA6" /* =•$ú•/”›­r.·.ÇL¦ */
- $"78C2 BA05 B757 517A 5CB1 A380 0C23 0680" /* xº.·WQz\±£€.#.€ */
- $"3113 0CBA 23B8 AA48 F832 B74F 997E 6E03" /* 1..º#¸ªHø2·O™~n. */
- $"D16C 577F 968F E9A4 73CA DA79 07B3 A5F1" /* ÑlW.–é¤sÊÚy.³¥ñ */
- $"2D20 C13D F821 62F9 41A0 A7AA 472A 368A" /* - Á=ø!bùA §ªG*6Š */
- $"28EE 7686 F7B4 D5CF 225E 004E 709F C4E8" /* (îv†÷´ÕÏ"^.NpŸÄè */
- $"FCBC B778 C976 A1E0 1968 1EF9 E998 2DC2" /* ü¼·xÉv¡à.h.ùé˜- */
- $"1693 C645 A4F5 787A 5B10 45C0 F010 8596" /* .“ÆE¤õxz[.EÀð.…– */
- $"A0F6 E8AA 1BAC C958 C0F6 101E 0C4D 2E61" /*  öèª.¬ÉXÀö...M.a */
- $"B76E 4019 58DD 3058 000C 2375 6EBC 6599" /* ·n@.XÝ0X..#un¼e™ */
- $"BEA3 9ADC 0002 F98F 24B3 B036 EA0D F2FD" /* ¾£šÜ..ù$³°6ê.òý */
- $"6823 E10A 59D7 5D0B F6C0 EFB2 7D9D A684" /* h#áÂY×].öÀï²}¦„ */
- $"3084 4AD6 92F2 BFB2 57CA 7294 FF2D 53C8" /* 0„JÖ’ò¿²WÊr”ÿ-SÈ */
- $"8D05 254E 2360 582F CE0C E209 240D FAB4" /* .%N#`X/Î.âÆ$.ú´ */
- $"C638 2103 7462 2AF1 5461 2036 09B4 294F" /* Æ8!.tb*ñTa 6Æ´)O */
- $"52A6 6553 F6B7 85F6 E77F A8B7 058C F201" /* R¦eSö·…öç.¨·.Œò. */
- $"19BA D75B 6612 0013 CFA6 F54F 8855 C000" /* .º×[f...ϦõOˆUÀ. */
- $"00BE 57DE C13B 77B0 AF81 F95D 8E88 7224" /* .¾WÞÁ;w°¯ù]Žˆr$ */
- $"002F C7BE 1D06 F540 58EF 1909 1D8F 037F" /* ./Ǿ..õ@Xï.Æ... */
- $"E973 290F 641E 8849 F996 EA66 D15C CA23" /* és).d.ˆIù–êfÑ\Ê# */
- $"C620 3090 94D8 F95F C58C 720B 7FFE 206C" /* Æ 0”Øù_ÅŒr..þ l */
- $"A3E0 EE49 AE89 4586 6617 FE87 4D7B D300" /* £àîI®‰E†f.þ‡M{Ó. */
- $"4CF6 E77F A882 E041 362F 710E AC03 D573" /* Löç.¨‚àA6/q.¬.Õs */
- $"69FF 7480 0018 484B 0D10 C800 0000 0C24" /* iÿt€..HK..È....$ */
- $"183F ADBF D900 0184 8481 E82C C758 1848" /* .?­¿Ù..„„è,ÇX.H */
- $"4840 6806 1212 B020 EA50 0818 484B F6E7" /* H@h...° êP..HKöç */
- $"7FA5 E774 6249 2F3D 5FF9 2FC0 0C24 1656" /* .¥çtbI/=_ù/À.$.V */
- $"1B91 8000 1846 D5F4 CA01 40C2 3F26 3D84" /* .‘€..FÕôÊ.@Â?&=„ */
- $"7B4A 811F 08D6 B47D 05C2 4402 D57B C1FC" /* {J..Ö´}.ÂD.Õ{Áü */
- $"7D32 E6FE 8125 F24E 514B 2820 7323 F96F" /* }2æþ%òNQK( s#ùo */
- $"B1F9 CDBD 94E4 C9BF 81D6 5A26 1C08 2131" /* ±ùͽ”äÉ¿ÖZ&..!1 */
- $"FF58 608E A4BB BEFD 703F C3EA B596 2AEA" /* ÿX`ޤ»¾ýp?Ãêµ–*ê */
- $"48B2 2319 2F7A B9BC A14D EAB4 49CF 89E9" /* H²#./z¹¼¡Mê´Iωé */
- $"D312 5979 1910 6519 C45E 4B88 F709 D65D" /* Ó.Yy..e.Ä^Kˆ÷ÆÖ] */
- $"BF0F 86DC C883 8469 9757 7FC7 FB91 A851" /* ¿.†Üȃ„i—W.Çû‘¨Q */
- $"7834 0232 03F5 F552 B022 E799 431E 3FE8" /* x4.2.õõR°"ç™C.?è */
- $"BE7C A37B AAE1 D04F 9795 EA98 CAB0 6816" /* ¾|£{ªáÐO—•ê˜Ê°h. */
- $"047F 244A 2BD3 E0CF B862 B172 B1B3 F027" /* ..$J+Óàϸb±r±³ð' */
- $"6505 A5AA 6AB2 5F8E B98F 85CB D487 2603" /* e.¥ªj²_޹…ËÔ‡&. */
- $"BDA4 4C6D 4B74 0A12 117F 6137 6A30 37CE" /* ½¤LmKtÂ...a7j07Î */
- $"0441 188C 63FC 46ED 5C9A B6A0 9012 6450" /* .A.ŒcüFí\š¶ .dP */
- $"A042 C4D3 8E69 8930 0797 25B3 B70D 5C62" /*  BÄÓŽi‰0.—%³·.\b */
- $"6A83 3964 5EF1 4A28 508D FF7F E847 17D0" /* jƒ9d^ñJ(Pÿ.èG.Ð */
- $"7C91 F4BC AA82 5462 99EF FF79 5A7A E45E" /* |‘ô¼ª‚Tb™ïÿyZzä^ */
- $"98FF 5B1E 90FE 7F80 9453 7AD1 4A63 8FFC" /* ˜ÿ[.þ.€”SzÑJcü */
- $"1B61 796C 4B90 7FE9 1959 752B 8579 95F8" /* .aylK.é.Yu+…y•ø */
- $"C5B9 7EC6 2D24 5185 1BCE 12D6 B418 B42C" /* Ź~Æ-$Q….Î.Ö´.´, */
- $"D40F 7AF7 657E 5184 9CAA 8834 B65C 4785" /* Ô.z÷e~Q„œªˆ4¶\G… */
- $"B934 7C3A 8000 0000 99F5 3F06 3790 6AF7" /* ¹4|:€...™õ?.7j÷ */
- $"0769 9D8E F19F 4FF3 EDE6 D059 B97C A1F0" /* .iŽñŸOóíæÐY¹|¡ð */
- $"0CE2 4FAF B846 8CCE 52E4 E898 D2E0 00A3" /* .âO¯¸FŒÎRäè˜Òà.£ */
- $"CB3D F2B1 E7F7 0C30 FF13 DB29 474C C00D" /* Ë=ò±ç÷.0ÿ.Û)GLÀ. */
- $"C6B7 6A2D 2F89 8E2F BDE7 F2BA C3DD 591B" /* Æ·j-/‰Ž/½çòºÃÝY. */
- $"CEDE C7DD 35BA 492C BB53 2AF6 7315 AC30" /* ÎÞÇÝ5ºI,»S*ös.¬0 */
- $"17D7 1C05 3AE4 4AB3 8D31 0DC9 7A9F 0A76" /* .×..:äJ³1.ÉzŸÂv */
- $"B4EE 95EE 6CB5 1C6A FE4F D27E 0966 CE51" /* ´î•îlµ.jþOÒ~ÆfÎQ */
- $"8607 E144 F4AD E999 5480 05FF 7FC2 C645" /* †.áDô­é™T€.ÿ.ÂÆE */
- $"D136 BB6E 89FA 9A2D F827 338F FEB9 B248" /* Ñ6»n‰úš-ø'3þ¹²H */
- $"23A6 377D 0E53 BBF3 D290 3AD8 F58B CE4C" /* #¦7}.S»óÒ:Øõ‹ÎL */
- $"24CA 8E49 76ED DA48 8856 904D C31F 305F" /* $ÊŽIvíÚHˆVMÃ.0_ */
- $"C441 7DAA 86D8 3FE1 5EA7 E20A CDBC 5F2A" /* ÄA}ª†Ø?á^§âÂͼ_* */
- $"35DC 107F DDE2 D88C 7B38 D700 4C54 9C81" /* 5Ü..ÝâØŒ{8×.LTœ */
- $"B8FD F39D 0F47 DE2B 6E17 7D4F E30F F60C" /* ¸ýó.GÞ+n.}Oã.ö. */
- $"0895 5694 3006 1211 EFEC D7F8 F743 3D43" /* .•V”0...ïì×ø÷C=C */
- $"6BA5 7C06 9025 9188 E369 0FC8 94CB F38E" /* k¥|.%‘ˆãi.È”ËóŽ */
- $"DF76 CA67 91C4 D786 F34F 1E56 332B 1404" /* ßvÊg‘Ä׆óO.V3+.. */
- $"B66B 2702 B13D 47B8 1FBD 38D7 A2DF 54EF" /* ¶k'.±=G¸.½8×¢ßTï */
- $"FD1C 00CC 5D05 5B28 3EBF 2FC7 7263 5880" /* ý..Ì].[(>¿/ÇrcX€ */
- $"0364 4A0B 982F 4A13 A55F 5D64 61D2 110C" /* .dJ.˜/J.¥_]daÒ.. */
- $"4319 318A 5BD6 94B7 DBA9 92F0 379B 0E87" /* C.1Š[Ö”·Û©’ð7›.‡ */
- $"4561 92A0 0000 0000 0000 12FE B897 0ABD" /* Ea’ .......þ¸—½ */
- $"B3C7 FEA8 AE43 B177 DA3F 2BA3 2D59 3358" /* ³Çþ¨®C±wÚ?+£-Y3X */
- $"9FAE 567F E53B 2877 9FFF 7FFF 7FFB 4B90" /* Ÿ®V.å;(wŸÿ.ÿ.ûK */
- $"C00D FEA3 7DF6 39C4 C825 2952 2C65 8FFF" /* À.þ£}ö9ÄÈ%)R,eÿ */
- $"7E91 DB49 1333 7DEC 6471 1E2E 394E A080" /* ~‘ÛI.3}ìdq..9N € */
- $"C1C9 0DD4 62C4 4FC9 E332 BC0D F9DD FEAB" /* ÁÉ.ÔbÄOÉã2¼.ùÝþ« */
- $"9D33 8271 2A01 8484 B009 6058 624E 2736" /* 3‚q*.„„°Æ`XbN'6 */
- $"529C A0F4 BCBB 846D 32FD 407C FA84 2D52" /* Rœ ô¼»„m2ý@|ú„-R */
- $"21DC 1623 210B 0410 4061 212D 0386 04FF" /* !Ü.#!...@a!-.†.ÿ */
- $"7F72 1DFF 6F83 6A31 2B6E 0A6B D1F1 9A43" /* .r.ÿoƒj1+nÂkÑñšC */
- $"F340 2C47 D413 DFAC FF76 46AC 4BDD 55F0" /* ó@,GÔ.߬ÿvF¬KÝUð */
- $"2F9A 3BC6 613E 2F69 F45C 08F3 3FCB F83F" /* /š;Æa>/iô\.ó?Ëø? */
- $"F7D8 DC38 0F99 4764 0309 0948 41C6 1212" /* ÷ØÜ8.™Gd.ÆÆHAÆ.. */
- $"293B 5EA3 BE56 F760 BAEF 61FF 43D4 2891" /* );^£¾V÷`ºïaÿCÔ(‘ */
- $"A380 672E FF7E 4B98 FBFB 1ACD 90F6 4A7E" /* £€g.ÿ~K˜ûû.ÍöJ~ */
- $"3B14 E9F4 B1B4 4120 E600 AF42 0056 B131" /* ;.éô±´A æ.¯B.V±1 */
- $"0310 EF4F EA97 E030 9090 A298 F514 CEFA" /* ..ïOê—à0¢˜õ.Îú */
- $"B200 0061 211A A495 FD76 5850 B8F7 1CF1" /* ²..a!.¤•ývXP¸÷.ñ */
- $"A979 F478 5BFF 7FFB E6D6 F6D8 03FF 7FFD" /* ©yôx[ÿ.ûæÖöØ.ÿ.ý */
- $"2A36 38D4 BA43 6280 D508 C4BD 735D 1C6F" /* *68ÔºCb€Õ.Ľs].o */
- $"2444 63E9 1C9A 969F 90A6 F34E D24D 94F2" /* $Dcé.š–Ÿ¦óNÒM”ò */
- $"1A09 F86A 2762 886F FBA0 96EA 1DC7 0364" /* .Æøj'bˆoû –ê.Ç.d */
- $"6192 A000 0000 0000 0000 0000 0061 BE9F" /* a’ ..........a¾Ÿ */
- $"2C25 5C25 4958 1428 AA60 5ABF 5551 6084" /* ,%\%IX.(ª`Z¿UQ`„ */
- $"D319 B739 1DC3 F92F 03A7 CF66 39CC 13BE" /* Ó.·9.Ãù/.§Ïf9Ì.¾ */
- $"100A 204E 9A06 CBD9 A8ED 9E4D CEED AE53" /* . Nš.ËÙ¨ížMÎí®S */
- $"023D B3BF AC07 F70E F7DD 2601 E2B4 B214" /* .=³¿¬.÷.÷Ý&.â´². */
- $"3B1D 74CD 0F60 7063 EFC5 24B8 3B0F DF21" /* ;.tÍ.`pcïÅ$¸;.ß! */
- $"2929 3755 A800 7D09 63D9 1548 5D89 6D22" /* ))7U¨.}ÆcÙ.H]‰m" */
- $"FAEF 37DC EB96 FF52 0018 EBDF 464C 8B34" /* úï7Üë–ÿR..ëßFL‹4 */
- $"DF85 2990 1CF1 7C84 CEDC D384 5003 D5A1" /* ß…).ñ|„ÎÜÓ„P.Õ¡ */
- $"2797 DBDC FDFB 0E8C 3703 470D 1FD5 B974" /* '—ÛÜýû.Œ7.G..Õ¹t */
- $"5A32 CF32 3D2A 0213 FDC8 8A0C B595 4840" /* Z2Ï2=*..ýÈŠ.µ•H@ */
- $"C240 6E40 D585 AF4C 004A F98F FC90 E5BB" /* Â@n@Õ…¯L.Jùüå» */
- $"D6AD 2A34 0A6E 1D4D 933D 2221 80B7 C8EF" /* Ö­*4Ân.M“="!€·Èï */
- $"7C61 2953 2991 F91A 61A3 B54E 56D2 77E1" /* |a)S)‘ù.a£µNVÒwá */
- $"1DB8 8B5F 5E9C 7D32 80A0 C23F BBE6 A2B2" /* .¸‹_^œ}2€ Â?»æ¢² */
- $"D49F C777 4BE6 FDA6 7B0F 2983 E19B 84FF" /* ÔŸÇwKæý¦{.)ƒá›„ÿ */
- $"4B7B 0DD6 A35E 60AD 632D D6D7 7030 0A9F" /* K{.Ö£^`­c-Ö×p0Ÿ */
- $"0FA2 0820 8451 9624 D0FF 1FB4 9B81 61CC" /* .¢. „Q–$Ðÿ.´›aÌ */
- $"591F 6D98 E1AF 16E4 AF42 1FE0 B7C7 30DF" /* Y.m˜á¯.ä¯B.à·Ç0ß */
- $"CFFC EC14 15A1 B07A 4E11 ED5F BDB3 FD2A" /* Ïüì..¡°zN.í_½³ý* */
- $"84B1 6901 4333 27BB 2E8C 3329 2064 A800" /* „±i.C3'».Œ3) d¨. */
- $"0001 2FDE 803E 817B C369 A30F FCF0 FF1D" /* ../Þ€>{Ãi£.üðÿ. */
- $"89A1 2FD7 FF71 B63D 19EC 98DE DFE2 D9B8" /* ‰¡/×ÿq¶=.ì˜ÞßâÙ¸ */
- $"9D39 1737 4722 2A89 D291 623B 279F BF0B" /* 9.7G"*‰Ò‘b;'Ÿ¿. */
- $"E8C0 8AF8 CBE4 0011 5D58 29AB 34B0 335C" /* èÀŠøËä..]X)«4°3\ */
- $"36B2 1383 D820 11B8 22DF 56E1 27EF 932D" /* 6².ƒØ .¸"ßVá'ï“- */
- $"30DE CC72 58E3 9BDD A88C 229A CBC8 A466" /* 0ÞÌrXã›Ý¨Œ"šËȤf */
- $"7C29 FDE8 E789 F28F 3258 A2DD 897B 1C6A" /* |)ýèç‰ò2X¢Ý‰{.j */
- $"C048 306A EEA7 3DF0 F8D4 BECC CDBD 9E43" /* ÀH0jî§=ðøÔ¾ÌͽžC */
- $"A29D 8052 478B 6470 79B7 B38A 5743 CAE7" /* ¢€RG‹dpy·³ŠWCÊç */
- $"0BD4 0F4A 23E1 4C85 39C9 DEB0 75AF 151E" /* .Ô.J#áL…9ÉÞ°u¯.. */
- $"45D5 1681 2BA4 74C9 13B5 746A E399 9467" /* EÕ.+¤tÉ.µtjã™”g */
- $"E6B9 D503 7F7C D57D 4D5F 7FC8 DD43 7D9B" /* æ¹Õ..|Õ}M_.ÈÝC}› */
- $"3CDC F9AD 167C 162B 4E6C 2110 DB2C DF34" /* <Üù­.|.+Nl!.Û,ß4 */
- $"AEED CCE4 05AC 4057 9829 B161 9CA0 8159" /* ®íÌä.¬@W˜)±aœ Y */
- $"A64F FD15 EC5A 4A51 CA6C FD10 9A25 4291" /* ¦Oý.ìZJQÊlý.š%B‘ */
- $"1E90 1FC2 3530 E0DB E4E6 232E CB64 AF95" /* ..Â50àÛäæ#.Ëd¯• */
- $"9494 656D D395 3D62 9EDA 2EC1 DB02 1FAA" /* ””emÓ•=bžÚ.ÁÛ..ª */
- $"6778 0FC0 C4A2 CCA8 EDC0 4DA8 F889 162F" /* gx.ÀĢ̨íÀM¨ø‰./ */
- $"03F9 A9C1 C635 1DAD 2E22 580B 0B2B 83E3" /* .ù©ÁÆ5.­."X..+ƒã */
- $"EC02 5552 3AA8 91BA 45AF 5439 4265 71F6" /* ì.UR:¨‘ºE¯T9Beqö */
- $"3E7A 4412 5DE5 1863 50E6 C0ED C470 3ED9" /* >zD.]å.cPæÀíÄp>Ù */
- $"0E3F 48BA 54C5 915E 03F0 D836 6429 2A67" /* .?HºTÅ‘^.ðØ6d)*g */
- $"B7FA 6AF9 069E 8E67 2848 B570 C3AC 7746" /* ·újù.žŽg(HµpìwF */
- $"EB48 0A2F 4BE4 8EB3 3F8F 791F 0646 DEDF" /* ëHÂ/K䎳?y..FÞß */
- $"316B EFDF 6FD8 C0B9 7319 CE94 8930 C6F6" /* 1kïßoØÀ¹s.Δ‰0Æö */
- $"6399 C4A9 79AD E967 4783 3F8D C538 3C15" /* c™Ä©y­égGƒ?Å8<. */
- $"E5B7 CE98 22B7 5333 A938 B26F 0E1E EF2E" /* å·Î˜"·S3©8²o..ï. */
- $"74B9 72EF 9D8A 80B7 FDC1 8334 A5F9 DCFB" /* t¹r·ýÁƒ4¥ùÜû */
- $"B891 BB38 373C 9BE8 59F4 6018 6E63 DA65" /* ¸‘»87<›èYô`.ncÚe */
- $"9B13 9DC8 28DB 3C15 0D2C 11FC 0E2D 7A0A" /* ›.È(Û<..,.ü.-z */
- $"F8FF 671F C3FF 7F8E 1210 C212 EA5A 5F0B" /* øÿg.Ãÿ.Ž..Â.êZ_. */
- $"9727 F770 25A5 236D 9789 75C7 4089 11DD" /* —'÷p%¥#m—‰uÇ@‰.Ý */
- $"E472 3865 B217 B946 CF22 5225 27DE 566D" /* är8e².¹FÏ"R%'ÞVm */
- $"6799 4F82 0D46 59F5 E466 F9E7 71C3 FA80" /* g™O‚.FYõäfùçqÃú€ */
- $"7826 E598 FF48 E181 6CA8 5A7E C354 0CAA" /* x&å˜ÿHál¨Z~ÃT.ª */
- $"B01C 9EC4 181F 849B 6A13 FB8D C477 70BD" /* °.žÄ..„›j.ûÄwp½ */
- $"F46B 278C 4467 B0CF 3E21 805E EF97 9696" /* ôk'ŒDg°Ï>!€^ï—–– */
- $"CBB9 E3F6 B62E DC26 001A 408F D7E2 07C3" /* ˹ãö¶.Ü&..@×â.à */
- $"C1A4 AD97 4235 8863 A088 1980 C505 6E1F" /* Á¤­—B5ˆc ˆ.€Å.n. */
- $"F392 0B24 B500 20DC 8295 5703 F9B9 FF70" /* ó’.$µ. Ü‚•W.ù¹ÿp */
- $"355C 9B8D BB49 898F 1AAB F65F 7D7E E28F" /* 5\›»I‰.«ö_}~â */
- $"4300 BDCC FB20 4F67 CA07 0CAE 3BAD AA36" /* C.½Ìû OgÊ..®;­ª6 */
- $"A4D8 3358 4176 1AD6 01FA 0450 0000 0042" /* ¤Ø3XAv.Ö.ú.P...B */
- $"7B49 E0E8 A7D8 4EA9 E1A5 597B DB80 BA6D" /* {Iàè§ØN©á¥Y{Û€ºm */
- $"8010 25EA 0A26 833F DE77 DBF7 78B9 564B" /* €.%êÂ&ƒ?ÞwÛ÷x¹VK */
- $"57B2 AF8C BC92 97D7 46A1 23C1 B595 A2EE" /* W²¯Œ¼’—×F¡#Áµ•¢î */
- $"F8A9 29FA 42C2 3557 6345 80B1 FCFD F322" /* ø©)úBÂ5WcE€±üýó" */
- $"E992 9262 A83F E43D B059 CB12 D425 FEF2" /* é’’b¨?ä=°YË.Ô%þò */
- $"9932 1BD8 C65C ED82 D05E E15C 5E9C 76B7" /* ™2.ØÆ\í‚Ð^á\^œv· */
- $"7C64 FCDB A247 D388 3CCB 86B5 C486 2261" /* |düÛ¢GÓˆ<ˆµÄ†"a */
- $"BFD1 7213 39C3 0D69 6AF0 2476 B711 7E91" /* ¿Ñr.9Ã.ijð$v·.~‘ */
- $"6B53 6A04 4F3C 2781 A090 3118 6C3F 49BA" /* kSj.O<' 1.l?Iº */
- $"B81A 3FEB D686 EFCE F487 8315 E33F 84DB" /* ¸.?ëÖ†ïÎô‡ƒ.ã?„Û */
- $"E2C9 F35F 28C5 10C4 FF7F FA4F E953 89FC" /* âÉó_(Å.Äÿ.úOéS‰ü */
- $"8B32 23C6 0D04 5E49 DADA F0FE BCA7 D2C9" /* ‹2#Æ..^IÚÚðþ¼§ÒÉ */
- $"5869 EAD4 F153 9BF5 A5EA 3298 CC8B 8721" /* XiêÔñS›õ¥ê2˜Ì‹‡! */
- $"F919 680B 3F8C 304A 2849 4970 41CF 0F60" /* ù.h.?Œ0J(IIpAÏ.` */
- $"76D9 5820 EF21 CD4A 205A 632F 7CC4 EFDF" /* vÙX ï!ÍJ Zc/|Äïß */
- $"33F3 CCA8 EDAF 405B 78E1 8F79 0F66 6573" /* 3ǫ́í¯@[xáy.fes */
- $"35A2 AD75 1E18 6018 AF23 7C9D A008 1A01" /* 5¢­u..`.¯#| ... */
- $"C5FE 69AA 2C8E D97E 244D D075 F213 0CC6" /* Åþiª,ŽÙ~$MÐuò..Æ */
- $"738F 4395 BBC0 5CB6 3ADC 3DA8 ACB8 E018" /* sC•»À\¶:Ü=¨¬¸à. */
- $"BA5B 13DB 0F6A CB18 DEAC 9749 F5B5 361D" /* º[.Û.jË.Þ¬—Iõµ6. */
- $"CF3A C107 9606 179F F4C7 F3DE CB0B 1F53" /* Ï:Á.–..ŸôÇóÞË..S */
- $"F27E 5D3C 11AB 66B4 8037 0644 AE98 19BF" /* ò~]<.«f´€7.D®˜.¿ */
- $"D564 973A 0CF2 C96F 56D4 5CB8 666F C68C" /* Õd—:.òÉoVÔ\¸foÆŒ */
- $"1E73 E515 8B33 75D2 D3B4 B3A3 8CDE DE0C" /* .så.‹3uÒÓ´³£ŒÞÞ. */
- $"DA37 A3DF 44D2 B57E 2DB2 E891 D36F CC23" /* Ú7£ßDÒµ~-²è‘ÓoÌ# */
- $"ADE8 45BC BB30 78D7 77BD D4A8 087F C83F" /* ­èE¼»0x×w½Ô¨..È? */
- $"E49A 6873 FAC4 C12B 0056 5E18 C3CB C2E9" /* äšhsúÄÁ+.V^.ÃËÂé */
- $"DCAE F0E8 A75F 18DD B8DD 1DCD B0F5 3A1C" /* Ü®ðè§_.ݸÝ.Ͱõ:. */
- $"3816 51A8 0D93 00D0 6FF6 8F07 E4BE EDF9" /* 8.Q¨.“.Ðoö.ä¾íù */
- $"BF0E 6CAA 5384 5DF0 DF12 4CF4 E3B3 5D6C" /* ¿.lªS„]ðß.Lôã³]l */
- $"602A B6F1 C0E0 E520 B0D6 71FB 7996 4930" /* `*¶ñÀàå °Öqûy–I0 */
- $"23DD 3601 3653 C40D 1A64 DC2B D5C2 01C9" /* #Ý6.6SÄ..dÜ+ÕÂ.É */
- $"5002 6BBE 7338 81EE F87D 7687 0FE6 7CF9" /* P.k¾s8îø}v‡.æ|ù */
- $"BAB6 5B35 1A25 421C 5BBA 4D82 4E1F B1D4" /* º¶[5.%B.[ºM‚N.±Ô */
- $"1907 FF78 F534 4A16 7BB6 B598 51F6 E4D3" /* ..ÿxõ4J.{¶µ˜QöäÓ */
- $"A04B 1198 B926 CFAE FC03 22E3 8360 E696" /*  K.˜¹&Ï®ü."ãƒ`æ– */
- $"F546 62F9 7178 F327 E245 4520 8D17 41C4" /* õFbùqxó'âEE .AÄ */
- $"9EC6 EF8D 0924 9416 7901 CE87 5EBB 286D" /* žÆïÆ$”.y.·^»(m */
- $"53BF 09FA 41F6 5FBA 8F4C 79A8 75BA 277A" /* S¿ÆúAö_ºLy¨uº'z */
- $"7D42 642B 38EE 9A49 DEDB F1B3 80D0 E5D0" /* }Bd+8îšIÞÛñ³€ÐåÐ */
- $"2980 F797 E7D0 F90D 4B2F AFDD 4A69 3389" /* )€÷—çÐù.K/¯ÝJi3‰ */
- $"1418 EBD0 6DF0 E38D 6E2F D546 C1A8 C8DD" /* ..ëÐmðãn/ÕFÁ¨ÈÝ */
- $"8977 E053 9C26 053A CF69 97F9 7FB4 9000" /* ‰wàSœ&.:Ïi—ù.´. */
- $"0000 0115 0E67 B64C 0015 DD82 643D 6476" /* .....g¶L..Ý‚d=dv */
- $"ED28 6324 AD72 8124 1AF6 FB1B 21C9 0605" /* í(c$­r$.öû.!É.. */
- $"FAE6 04A6 31BF 6D67 FF7B B889 831A 4FFD" /* úæ.¦1¿mgÿ{¸‰ƒ.Oý */
- $"6BF5 F098 23AB A490 39F7 6AFC 3832 E2E1" /* kõð˜#«¤9÷jü82âá */
- $"11B2 ADB0 ECCA 83DE B4FF 3685 5106 75DE" /* .²­°ìʃ޴ÿ6…Q.uÞ */
- $"3047 28A0 EDBE AD29 17CD DA62 698B CE64" /* 0G( í¾­).ÍÚbi‹Îd */
- $"5999 2B8E BB7D C74F F009 A25D B2B5 BDD9" /* Y™+Ž»}ÇOðÆ¢]²µ½Ù */
- $"B852 BFFE 0B74 9C05 22D7 B0A3 2139 0979" /* ¸R¿þ.tœ."×°£!9Æy */
- $"5C29 BAE8 43DA F9E5 5383 AFD2 14EC 64AA" /* \)ºèCÚùåSƒ¯Ò.ìdª */
- $"442C CE71 74ED 5C27 4331 9374 AC77 47EE" /* D,Îqtí\'C1“t¬wGî */
- $"31AC 4C74 97BC 753C D5DC 3D8B F7D2 C612" /* 1¬Lt—¼u<ÕÜ=‹÷ÒÆ. */
- $"2399 F431 07A1 76CA DAE6 772B 309A C800" /* #™ô1.¡vÊÚæw+0šÈ. */
- $"9F2F D6DF A44C 48EB 853E 4140 A123 BCA3" /* Ÿ/ÖߤLHë…>A@¡#¼£ */
- $"D096 00DA 0822 DFB3 6887 B31F A18F 59BE" /* Ж.Ú."ß³h‡³.¡Y¾ */
- $"6B25 B5CF CFA3 8806 85B7 ED84 B20B CDA2" /* k%µÏÏ£ˆ.…·í„².Í¢ */
- $"A0C8 404B 3FFF 7FF3 3816 5BF0 A16B 85D0" /*  È@K?ÿ.ó8.[ð¡k…Ð */
- $"B87F E4BB 21F9 A3BB 9103 2944 434A 5789" /* ¸.ä»!ù£»‘.)DCJW‰ */
- $"E3EC B1E3 6F3E 154A 37E4 ACA6 4B02 6C5B" /* ãì±ão>.J7䬦K.l[ */
- $"D23A D4D4 83CE F291 CD7F 114F 5935 8EE0" /* Ò:ÔÔƒÎò‘Í..OY5Žà */
- $"17EA F0B3 1D93 BC5F 2CF8 511C E99F 21D8" /* .êð³.“¼_,øQ.éŸ!Ø */
- $"E286 EB17 6FC2 C34B 1110 6398 03BF CB08" /* â†ë.oÂÃK..c˜.¿Ë. */
- $"0018 4848 E24D 90A5 63F9 B1F8 6E20 EF6E" /* ..HHâM¥cù±øn ïn */
- $"25D5 858B 0AE4 2235 581B D4DA E01C B006" /* %Õ…‹Âä"5X.ÔÚà.°. */
- $"E5EB DE78 855B 19E7 4D80 DAC2 1E8F CB2B" /* åëÞx…[.çM€ÚÂ.Ë+ */
- $"0EC8 3FFF 7759 B569 0861 20CC 1D71 2121" /* .È?ÿwYµi.a Ì.q!! */
- $"71A7 FA20 B34B EAB3 4260 A827 6E91 2B3C" /* q§ú ³Kê³B`¨'n‘+< */
- $"5479 449A 3161 D24E 8489 C00A 18A6 3FEC" /* TyDš1aÒN„‰ÀÂ.¦?ì */
- $"61F2 4C86 23C1 85DB 6ECA 221D BCC2 C25F" /* aòL†#Á…ÛnÊ".¼ÂÂ_ */
- $"EFFF 7891 F475 0E20 DC0A 8F85 8208 4541" /* ïÿx‘ôu. ÜÂ…‚.EA */
- $"579B 5EE2 24C4 5C60 39B7 D9F1 ECFD 0F0C" /* W›^â$Ä\`9·Ùñìý.. */
- $"3719 72A8 A543 8BF5 94BF BF6C E6F7 E45A" /* 7.r¨¥C‹õ”¿¿læ÷äZ */
- $"C5CF 1FD7 32F5 2D70 041E 3641 2C46 E23D" /* ÅÏ.×2õ-p..6A,Fâ= */
- $"E072 6889 A892 A27F 44A8 564A 74A3 B421" /* àrh‰¨’¢.D¨VJt£´! */
- $"E1CC A0F3 50E2 2711 6919 76BE D84B D2FE" /* áÌ óPâ'.i.v¾ØKÒþ */
- $"AAED 2D64 7C8F 4C55 7FFF 7EFC 2CBF 05DE" /* ªí-d|LU.ÿ~ü,¿.Þ */
- $"25B2 001C 00EC 6D17 ED17 E559 9DFA F731" /* %²...ìm.í.åYú÷1 */
- $"B21A 7394 8B35 5948 BA4F 5858 020F FF7C" /* ².s”‹5YHºOXX..ÿ| */
- $"C89D 1CFA F89B 9F9C 841F 19EF D626 E6DE" /* È.úø›Ÿœ„..ïÖ&æÞ */
- $"DCC3 3148 38A0 C32F 898F BEC3 0AF3 318C" /* ÜÃ1H8 Ã/‰¾ÃÂó1Œ */
- $"5E09 119B 43C8 9FE6 73B2 F4B9 9789 4BFC" /* ^Æ.›CÈŸæs²ô¹—‰Kü */
- $"99A2 FF7F FF7A 4FD0 8C64 F459 410C 013C" /* ™¢ÿ.ÿzOÐŒdôYA..< */
- $"1C6C 85B5 1C8F D078 995D 714E 1C60 3090" /* .l…µ.Ðx™]qN.`0 */
- $"9058 77C4 BB80 5F57 1871 CA72 B2FD 0016" /* XwÄ»€_W.qÊr²ý.. */
- $"BAA7 F84F F4E9 ACDF F766 8CB4 475D 2F0B" /* º§øOôé¬ß÷fŒ´G]/. */
- $"37BC 18C8 6162 79C2 BDD7 8753 204B A536" /* 7¼.Èaby½ׇS K¥6 */
- $"9CBE 4972 316A BCB1 9442 4238 B88F 2F48" /* œ¾Ir1j¼±”BB8¸/H */
- $"7A45 5CD1 A306 3A23 5A78 354F CDB6 C0A5" /* zE\Ñ£.:#Zx5OͶÀ¥ */
- $"2A5C 19DA 0B0C CD84 8D85 D2B8 1DC9 059C" /* *\.Ú..Í„…Ò¸.É.œ */
- $"A8C4 8118 4848 9372 9372 566C 21E5 2665" /* ¨Ä.HH“r“rVl!å&e */
- $"D16C 6601 48A8 35CE 7FFF 7F19 B54E 7F04" /* Ñlf.H¨5Î.ÿ..µN.. */
- $"10EC 1AA3 13FF 4588 9722 A7AA B011 863C" /* .ì.£.ÿEˆ—"§ª°.†< */
- $"E4B1 717B 7C2D 21E6 267B 4B48 E790 FF76" /* ä±q{|-!æ&{KHçÿv */
- $"40CC F425 41CB 289F 809D 8170 A529 2EDA" /* @Ìô%AË(Ÿ€p¥).Ú */
- $"A105 B3AF FB44 7951 B87A 0091 5B53 5979" /* ¡.³¯ûDyQ¸z.‘[SYy */
- $"CDC6 5976 6393 34F2 21FF 7FFF 7FFF 7D43" /* ÍÆYvc“4ò!ÿ.ÿ.ÿ}C */
- $"4F4B C77F 73C7 0454 BE9C BE9C 282E 440E" /* OKÇ.sÇ.T¾œ¾œ(.D. */
- $"0608 A380 6121 2103 DBD2 250B 5D57 9159" /* ..£€a!!.ÛÒ%.]W‘Y */
- $"B69A 28CF E66A 154F F84F F4E9 99ED 48C4" /* ¶š(Ïæj.OøOôé™íHÄ */
- $"CA7E BE76 FC67 A7CD DC26 1C00 0184 8463" /* Ê~¾vüg§ÍÜ&...„„c */
- $"69A8 C0A9 127C 5830 CC3A 380A C742 E4DE" /* i¨À©.|X0Ì:8ÂÇBäÞ */
- $"06F5 7999 556D FD9F 268B 895F FF4B 7BB9" /* .õy™UmýŸ&‹‰_ÿK{¹ */
- $"C201 52B7 B483 0906 65EC 1848 4750 6F27" /* Â.R·´ƒÆ.eì.HGPo' */
- $"C86C 1F27 9108 6253 0416 4CD3 30E4 7F77" /* Èl.'‘.bS..LÓ0ä.w */
- $"0705 8420 83B6 BCB6 29DE B71E 8DC5 851A" /* ..„ ƒ¶¼¶)Þ·.Å…. */
- $"ABB0 83D8 F2E2 5113 55D2 AAF6 B3AB 7679" /* «°ƒØòâQ.UÒªö³«vy */
- $"49FE A1F8 6F30 0EC0 7D91 534C C78C DC5D" /* Iþ¡øo0.À}‘SLÇŒÜ] */
- $"5A42 CA06 37D8 E0ED 27FA 3E31 C849 D2BE" /* ZBÊ.7Øàí'ú>1ÈIÒ¾ */
- $"847C 0CCF 676F ACFE 91A3 0F62 B711 1897" /* „|.Ïgo¬þ‘£.b·..— */
- $"9DC3 8E37 3AF8 907E 0B69 1577 2856 AA36" /* ÃŽ7:ø~.i.w(Vª6 */
- $"FAC0 D56C 6686 0443 CA96 FDCD 051B 23A7" /* úÀÕlf†.CÊ–ýÍ..#§ */
- $"7DAC 8229 C5FC F840 103A 6407 49F7 6B32" /* }¬‚)Åüø@.:d.I÷k2 */
- $"254F 2B32 7FC1 F460 D5C0 5EE1 3046 612A" /* %O+2.Áô`ÕÀ^á0Fa* */
- $"1BC1 C143 7B76 B9EF ECCB 5EE9 8F0C 3F71" /* .ÁÁC{v¹ïìË^é.?q */
- $"E805 8B9B 17B7 9ECE C237 AF5C 0062 E61E" /* è.‹›.·žÎÂ7¯\.bæ. */
- $"DF6C C1F7 904E 4379 2A9C 92FC 1B04 00A8" /* ßlÁ÷NCy*œ’ü...¨ */
- $"F9D5 DB1B C4C6 9485 ABC2 1199 CCF2 0A47" /* ùÕÛ.ÄÆ”…«Â.™ÌòÂG */
- $"9693 C097 7AD0 449A FC53 DEC5 6EE8 6BF7" /* –“À—zÐDšüSÞÅnèk÷ */
- $"0D7D 4ED8 3426 DA7E ECF9 57ED 9252 9A6A" /* .}NØ4&Ú~ìùWí’Ršj */
- $"2B94 2614 1B6E A495 8261 4D5E DAEF 03FA" /* +”&..n¤•‚aM^Úï.ú */
- $"8A63 9496 E8AB A1A6 5B5C B03E E73E 2889" /* Šc”–è«¡¦[\°>ç>(‰ */
- $"D257 6C28 080A 68DC 226C 950F F55B E7CC" /* ÒWl(.ÂhÜ"l•.õ[çÌ */
- $"95AD FDA7 43EA 7489 A545 C0FC E9B0 2A25" /* •­ý§Cêt‰¥EÀüé°*% */
- $"719C EE06 9E5A 8FC0 D3B0 0C81 1EB0 C8C6" /* qœî.žZÀÓ°..°ÈÆ */
- $"25BD B383 33BD B80D D9A9 48F3 7539 D7D5" /* %½³ƒ3½¸.Ù©Hóu9×Õ */
- $"8021 5EBA 94A7 83A3 69FE 8179 9106 BC56" /* €!^º”§ƒ£iþy‘.¼V */
- $"14A4 427B 8C09 BACB 2FC9 B8F3 CAFA E51C" /* .¤B{ŒÆºË/ɸóÊúå. */
- $"9C07 9A69 033C 6159 163E 6ED8 259D 7AAB" /* œ.ši.<aY.>nØ%z« */
- $"D316 475C F6C7 BD0E 7972 4C59 DF3A D5B4" /* Ó.G\öǽ.yrLYß:Õ´ */
- $"44ED 7D01 B0FB 34D4 4C9C BC2D B8A6 5B65" /* Dí}.°û4ÔLœ¼-¸¦[e */
- $"134F 0C96 5CA1 21CC A249 F17D 4660 9835" /* .O.–\¡!Ì¢Iñ}F`˜5 */
- $"957C 7392 53A9 DE42 E650 604B 10E2 FF12" /* •|s’S©ÞBæP`K.âÿ. */
- $"B47A 044A 524A B8D3 60B5 A258 CEAB 55E8" /* ´z.JRJ¸Ó`µ¢XΫUè */
- $"5219 EC3E A9F6 0813 A2B4 930C EDE4 3BBE" /* R.ì>©ö..¢´“.íä;¾ */
- $"C0E3 7F93 1A3F 38EB 2DE3 492D A3BD FD00" /* Àã.“.?8ë-ãI-£½ý. */
- $"811C 530E 2FB8 9D68 2466 D288 EC29 9094" /* .S./¸h$fÒˆì)” */
- $"A3C7 2D32 0A25 BA73 2023 08CA C360 2C72" /* £Ç-2Â%ºs #.ÊÃ`,r */
- $"8BA9 516A 7081 F2FF 1E84 E1C2 F841 77CE" /* ‹©Qjpòÿ.„áÂøAwÎ */
- $"ABDF 6476 30A4 3018 F7F4 F3EE 1A5E 5DF0" /* «ßdv0¤0.÷ôóî.^]ð */
- $"CAAA AA77 C90D 52C4 6AA9 5755 33B9 1814" /* ʪªwÉ.RÄj©WU3¹.. */
- $"3528 E205 C379 648A E627 A23E D5DB 1CAE" /* 5(â.ÃydŠæ'¢>ÕÛ.® */
- $"4868 B7D4 F381 2534 1F48 2BCC 5211 3B0F" /* Hh·Ôó%4.H+ÌR.;. */
- $"9692 B002 4CFB 1F83 3628 D1EB 5416 0648" /* –’°.Lû.ƒ6(ÑëT..H */
- $"F0F0 B0F8 C7C7 6E92 8C54 6859 791B 7890" /* ðð°øÇÇn’ŒThYy.x */
- $"EBA3 BC74 5F3F C4AD 7C9D 6954 2D0C 15BF" /* 룼t_?Ä­|iT-..¿ */
- $"F699 82A6 4170 D2F1 02A5 7EF3 6061 C9CF" /* ö™‚¦ApÒñ.¥~ó`aÉÏ */
- $"C370 E129 F805 8CC8 C670 CBDC 2D44 D349" /* Ãpá)ø.ŒÈÆpËÜ-DÓI */
- $"F3E5 C5F9 357E 3DF2 CDF3 DC8A 1F13 5B2D" /* óåÅù5~=òÍóÜŠ..[- */
- $"C544 448D 1038 8293 4EEA 75A4 0738 7D9F" /* ÅDD.8‚“Nêu¤.8}Ÿ */
- $"C002 3D68 26D8 7B06 FB10 CCDF C4F3 5364" /* À.=h&Ø{.û.ÌßÄóSd */
- $"2342 154B F8FB 01ED 8893 9160 A3A0 B81D" /* #B.Køû.툓‘`£ ¸. */
- $"47A0 6C82 1CBA FAED 931D E025 BDFF 1535" /* G l‚.ºúí“.à%½ÿ.5 */
- $"CADF 68C5 41FD 3896 1AC9 F979 A885 F5AE" /* ÊßhÅAý8–.Éùy¨…õ® */
- $"EFBE C674 ED92 5FE9 E9AF FF52 D573 A6DD" /* ï¾Ætí’_éé¯ÿRÕs¦Ý */
- $"631B 27E4 62CB B76E 7020 EC65 75E2 DB6F" /* c.'äbË·np ìeuâÛo */
- $"0E10 980A 0EA3 2287 4CF8 D402 52B8 1491" /* ..˜Â.£"‡LøÔ.R¸.‘ */
- $"21C9 BC2B 48BC CBD4 464A C539 6CD5 28F1" /* !ɼ+H¼ËÔFJÅ9lÕ(ñ */
- $"CAE4 CA43 9CB8 B181 BF06 522B 4D19 8295" /* ÊäÊCœ¸±¿.R+M.‚• */
- $"05C8 D7CD 8CFA D3E7 7BC9 630C DCDD 7C7E" /* .È×ÍŒúÓç{Éc.ÜÝ|~ */
- $"E4C6 D7DC 5E38 67CC 5934 9E8D 9552 B837" /* äÆ×Ü^8gÌY4ž•R¸7 */
- $"53AE 6D39 FAB1 2EB6 886C 1855 26ED AD08" /* S®m9ú±.¶ˆl.U&í­. */
- $"1EBE 9570 EA2F DFFF 06F4 ABF3 4534 2831" /* .¾•pê/ßÿ.ô«óE4(1 */
- $"1AE2 0A99 2956 2A90 C2A4 58AC E49E F047" /* .â™)V*¤X¬äžðG */
- $"A9BA C394 E8F4 6427 7966 A79C 4269 9ADD" /* ©ºÃ”èôd'yf§œBišÝ */
- $"AD1D 1A7E 375C D3FB 8C25 0B6B 0460 5EB9" /* ­..~7\ÓûŒ%.k.`^¹ */
- $"416C AE82 DFC3 09DA 1F69 8796 6897 8CD0" /* Al®‚ßÃÆÚ.i‡–h—ŒÐ */
- $"3E1B FF7D 9AE9 7F6D 4E84 967C 674F CA41" /* >.ÿ}šé.mN„–|gOÊA */
- $"44C1 0575 93A9 2599 66D0 AB7B 6260 D32C" /* DÁ.u“©%™fЫ{b`Ó, */
- $"94AF 7FC8 82FD F692 92FE B6ED A660 750F" /* ”¯.È‚ýö’’þ¶í¦`u. */
- $"80A2 A8AA E6F6 7B9F E894 ED71 D223 6F4B" /* €¢¨ªæö{Ÿè”íqÒ#oK */
- $"A203 F64C 7560 DBB1 6F9E EE9F 2945 C994" /* ¢.öLu`Û±ožîŸ)EÉ” */
- $"BA00 D3D1 6414 A300 4296 670B 2350 CDD1" /* º.ÓÑd.£.B–g.#PÍÑ */
- $"DF61 29E8 EC17 87B6 BC62 B6BD 5F31 13B2" /* ßa)èì.‡¶¼b¶½_1.² */
- $"48A2 F723 53C7 6955 969B ED83 6A9B 1B06" /* H¢÷#SÇiU–›íƒj›.. */
- $"C7D0 2584 430B 8C52 D00A 736B D6FB AEDB" /* ÇÐ%„C.ŒRÐÂskÖû®Û */
- $"2BA1 5095 759B 0AFF 5138 58EF 3DC2 B14D" /* +¡P•u›ÂÿQ8Xï=±M */
- $"3B7D 62D0 DE12 CFEF 17A3 32C4 C79A C2DA" /* ;}bÐÞ.Ïï.£2ÄÇšÂÚ */
- $"6BA1 6478 B1D3 2278 3787 6C30 08FD 6095" /* k¡dx±Ó"x7‡l0.ý`• */
- $"FF65 1DF4 7606 34C3 B4EE E609 A3BF 7085" /* ÿe.ôv.4Ã´îæÆ£¿p… */
- $"8B3B 2C80 D860 6043 10A4 24B1 2D80 880D" /* ‹;,€Ø``C.¤$±-€ˆ. */
- $"671A 9A76 E1D4 2304 B4E0 9E47 129D 6316" /* g.šváÔ#.´àžG.c. */
- $"33DF C88C 3BB6 5232 475C D19D FA9B 3303" /* 3ßÈŒ;¶R2G\Ñú›3. */
- $"2956 D8B1 08A5 2735 CD4D F130 C700 DA0D" /* )Vر.¥'5ÍMñ0Ç.Ú. */
- $"7BAE 21FA FB1B 35A5 957E 0211 955B 25D0" /* {®!úû.5¥•~..•[%Ð */
- $"A3DD B72F 5BCD 8792 418E BCB6 C727 DD0F" /* £Ý·/[͇’A޼¶Ç'Ý. */
- $"2D42 F031 2A73 C1F9 7964 B937 1E77 A757" /* -Bð1*sÁùyd¹7.w§W */
- $"D158 CB02 80D3 C310 E1C5 709C 5C69 7F04" /* ÑXË.€ÓÃ.áÅpœ\i.. */
- $"4476 F017 3FF2 B891 0160 D681 AEBC F8C9" /* Dvð.?ò¸‘.`Ö®¼øÉ */
- $"8F46 7922 4414 5CEE 0CA8 417B 33BB 5926" /* Fy"D.\î.¨A{3»Y& */
- $"B7A6 7094 6363 C5F2 9AD7 1751 2456 3B83" /* ·¦p”ccÅòš×.Q$V;ƒ */
- $"9BB0 0ECD 1420 6141 A097 DBF4 802A 2377" /* ›°.Í. aA —Ûô€*#w */
- $"CDAC EFE9 4A16 4B3C 5058 A5DC 1C40 169E" /* ͬïéJ.K<PX¥Ü.@.ž */
- $"3999 F0C2 C418 2E8F 0951 664A 7082 F49F" /* 9™ðÂÄ..ÆQfJp‚ôŸ */
- $"E576 B2B1 5918 E3EE 9B97 1686 6499 A572" /* åv²±Y.ãî›—.†d™¥r */
- $"B1F6 2F39 A798 6292 DE22 007B 60AD 1D94" /* ±ö/9§˜b’Þ".{`­.” */
- $"31BA 068D F15A 06DB 2654 6B52 F692 3C3A" /* 1º.ñZ.Û&TkRö’<: */
- $"0DA8 A74B 30F6 3852 76F0 A897 9086 FBD5" /* .¨§K0ö8Rv𨗆ûÕ */
- $"1C78 047E 7BF2 08EE 7B45 85C5 6ED5 AA43" /* .x.~{ò.î{E…ÅnÕªC */
- $"F423 8A4E 4111 C68E 172E DD87 AF9E BF19" /* ô#ŠNA.ÆŽ..݇¯ž¿. */
- $"D4D2 020C 6FD5 EE3F F0E8 289E 4E6C 0871" /* ÔÒ..oÕî?ðè(žNl.q */
- $"1187 D3F1 E458 94F5 4519 BF3C D239 D86C" /* .‡ÓñäX”õE.¿<Ò9Øl */
- $"17F1 8916 4206 2346 ACD8 1F08 9A44 0AB3" /* .ñ‰.B.#F¬Ø..šD³ */
- $"CEE6 441D 78D5 2909 4CEA 46F7 D6C6 D21A" /* ÎæD.xÕ)ÆLêF÷ÖÆÒ. */
- $"6D41 BB64 ADFF 6252 5A80 3556 C459 2845" /* mA»d­ÿbRZ€5VÄY(E */
- $"C05D C2C5 1F69 4087 0380 C0FF 61AA D5D1" /* À]ÂÅ.i@‡.€ÀÿaªÕÑ */
- $"E5C2 5FC0 CEF4 2D59 B4A3 6BA8 343E 184B" /* åÂ_ÀÎô-Y´£k¨4>.K */
- $"89CE 81FD AC96 C691 FDE5 F993 B9CB 6302" /* ‰Îý¬–Æ‘ýåù“¹Ëc. */
- $"B8EE 86B4 A2F7 19EA DAFD D511 B59F BBD2" /* ¸î†´¢÷.êÚýÕ.µŸ»Ò */
- $"5D4E F6A3 BC58 51D5 273F 2E2E 2B6A 2755" /* ]Nö£¼XQÕ'?..+j'U */
- $"38A3 CA29 BFAB D31D CD53 B29C 7418 40DB" /* 8£Ê)¿«Ó.ÍS²œt.@Û */
- $"FD56 1BF6 9350 5411 CF5C 8D26 B1FA 754F" /* ýV.ö“PT.Ï\&±úuO */
- $"E584 8277 6221 6866 257C 9FC9 65A5 6D93" /* å„‚wb!hf%|ŸÉe¥m“ */
- $"C524 B971 3F1D 34A0 BBF4 6B83 9722 CFAD" /* Å$¹q?.4 »ôkƒ—"Ï­ */
- $"8296 103F 53BB 1B22 8A84 2FAC 94DE 4994" /* ‚–.?S»."Š„/¬”ÞI” */
- $"2D31 56A5 DBCD B661 81D7 B360 4958 8FF5" /* -1V¥ÛͶa׳`IXõ */
- $"EB02 25A9 6386 8241 D936 A3CB AA88 9936" /* ë.%©c†‚AÙ6£Ëªˆ™6 */
- $"1698 4F59 765B 34EA 3741 D2D3 2DAC 854D" /* .˜OYv[4ê7AÒÓ-¬…M */
- $"366B C9A0 15F8 D2E6 7CCF 99EF A794 460C" /* 6kÉ .øÒæ|ϙ倫F. */
- $"934E C88B 2BF5 91F7 7BD1 3DC9 6ED3 91FE" /* “NÈ‹+õ‘÷{Ñ=ÉnÓ‘þ */
- $"E63B EDCC 3D4A CC1B AE5D 88D0 B241 20D1" /* æ;íÌ=JÌ.®]ˆÐ²A Ñ */
- $"AB6C 9FE2 E494 395E 8E3C 0EB0 1796 58CC" /* «lŸâä”9^Ž<.°.–XÌ */
- $"9791 D931 DB33 473E 003E 10CD B736 7295" /* —‘Ù1Û3G>.>.Í·6r• */
- $"DD81 B481 9A0A ED27 3C1E 6298 FD0D BDE0" /* Ý´šÂí'<.b˜ý.½à */
- $"11D6 8A21 79C1 DBB7 FEDC 6E48 8080 5ADB" /* .ÖŠ!yÁÛ·þÜnH€€ZÛ */
- $"E61D 9E0E E6A3 6D38 A028 4016 464D F534" /* æ.ž.æ£m8 (@.FMõ4 */
- $"D764 3AD7 55DF 3CAB 7B3D 12F5 9A8D DDCF" /* ×d:×Uß<«{=.õšÝÏ */
- $"6CCD 0387 C982 0FE9 D431 0FE3 E064 1700" /* lÍ.‡É‚.éÔ1.ãàd.. */
- $"1AAD F49E D6DE A939 8010 C91B 605B 4E0A" /* .­ôžÖÞ©9€.É.`[NÂ */
- $"FCBE ADE9 C17A EC1F 3990 9EB2 E6BF 92AA" /* ü¾­éÁzì.9ž²æ¿’ª */
- $"951C D27F A984 10A9 22DC 996E FF6E 12AE" /* •.Ò.©„.©"Ü™nÿn.® */
- $"DC03 5AB3 2CA0 8291 4174 C69E AE28 DBA8" /* Ü.Z³, ‚‘AtÆž®(Û¨ */
- $"38A8 FF12 67D3 F8A3 00D6 2A2E A564 CEFA" /* 8¨ÿ.gÓø£.Ö*.¥dÎú */
- $"0F00 4B44 62A7 CA9F F072 2821 DD3C 6A34" /* ..KDb§ÊŸðr(!Ý<j4 */
- $"926C 8F3C 1548 D31A 021F 2604 252D A929" /* ’l<.HÓ...&.%-©) */
- $"172B 8212 174F 2D2D CC7D DA15 F9A9 AD7E" /* .+‚..O--Ì}Ú.ù©­~ */
- $"59D3 7885 9215 C77B 6583 4D8F 3308 149C" /* YÓx…’.Ç{eƒM3..œ */
- $"270A 4508 21C9 A05B CDE9 BEF1 C18A 4B74" /* 'ÂE.!É [Íé¾ñÁŠKt */
- $"F07B 0DFE 007B E5AF D9AA CED7 8661 34C7" /* ð{.þ.{å¯ÙªÎ׆a4Ç */
- $"AA26 21AC D09C 6BAA EABB A7C4 486E 40A5" /* ª&!¬Ðœkªê»§ÄHn@¥ */
- $"C791 976A 1EC3 534F 84EC E6E9 7363 FF08" /* Ç‘—j.ÃSO„ìæéscÿ. */
- $"5B20 0E29 000C 5E8F 3339 6210 65CC FD34" /* [ .)..^39b.eÌý4 */
- $"76EB F1B2 76C6 5FDC C1A8 B0F5 53EE 103C" /* vëñ²vÆ_ÜÁ¨°õSî.< */
- $"50B0 650F 8459 9777 E890 E28A BB84 56B9" /* P°e.„Y—wè⊻„V¹ */
- $"0522 90F9 5B81 C982 979E E507 A4BC 26C3" /* ."ù[É‚—žå.¤¼&à */
- $"E356 F2A9 C0D1 BFF3 F882 EC0E 6AA9 CA0D" /* ãVò©ÀÑ¿óø‚ì.j©Ê. */
- $"4419 16FB 9BEF 947E F848 19BF 5CB6 EA4E" /* D..û›ï”~øH.¿\¶êN */
- $"C290 F254 020B 51DB 8094 4D05 E9A5 21A0" /* ÂòT..QÛ€”M.é¥!  */
- $"D3E6 84EA 5A3E 4380 650C B24F 31DA 209F" /* Óæ„êZ>C€e.²O1Ú Ÿ */
- $"F51A 9108 7912 32B0 52A6 A901 CADB A758" /* õ.‘.y.2°R¦©.ÊÛ§X */
- $"C00A D516 E462 35B4 C071 131A 0F01 9A95" /* ÀÂÕ.äb5´Àq....š• */
- $"9739 F131 0E5F 7FBA D8AD 925F 992C 0187" /* —9ñ1._.ºØ­’_™,.‡ */
- $"D97C 832B 847E 1148 0402 0449 FB25 D0F1" /* Ù|ƒ+„~.H...Iû%Ðñ */
- $"C1F8 2B8E CE97 D5A4 BEFE 7F0D E420 E43E" /* Áø+ŽÎ—Õ¤¾þ..ä ä> */
- $"801A 448D 9D61 D23C 5956 3DEB A1A6 0858" /* €.DaÒ<YV=롦.X */
- $"CD98 F32B 92E6 D960 C0E1 E542 294D 6FD3" /* ͘ó+’æÙ`ÀáåB)MoÓ */
- $"4234 37C9 3537 275F AC1E 936D 534A BF02" /* B47É57'_¬.“mSJ¿. */
- $"B742 8CAB BE88 E4FF 23DC D9EB 1FC4 9CF0" /* ·BŒ«¾ˆäÿ#ÜÙë.Äœð */
- $"C5D1 3F1D 5995 AD68 12E9 71B3 2100 AFB7" /* ÅÑ?.Y•­h.éq³!.¯· */
- $"CBF7 9ADB D5FF 48EE B1A2 AE4D E021 7C07" /* Ë÷šÛÕÿHî±¢®Mà!|. */
- $"5AD5 E94C A965 DFE8 B32A 23AB DE05 4FB1" /* ZÕéL©eßè³*#«Þ.O± */
- $"FDB7 ECC5 3611 73D9 B03C 399A D5F6 663D" /* ý·ìÅ6.sÙ°<9šÕöf= */
- $"0E78 0BEE 67D9 2F9D 0072 E938 509C 9779" /* .x.îgÙ/.ré8Pœ—y */
- $"6C64 03A1 B8C9 C1C0 2256 29EA 112C FB1C" /* ld.¡¸ÉÁÀ"V)ê.,û. */
- $"766C DF51 83B1 388F 902E EE03 337E 689A" /* vlßQƒ±8.î.3~hš */
- $"CA5A A9F0 09AF 3422 4115 D489 3FBD 22C1" /* ÊZ©ðƯ4"A.Ô‰?½"Á */
- $"4A4F 642A 0AC8 D01C 2950 18CA D441 780A" /* JOd*ÂÈÐ.)P.ÊÔAx */
- $"C929 A7FF 0AFA 956A A581 B590 9B7A 7D74" /* É)§ÿÂú•j¥µ›z}t */
- $"2084 3DC1 5D81 B12B DF9C 333D EFAD 0ADD" /* „=Á]±+ßœ3=ï­ÂÝ */
- $"3445 4F8C 132E F02F C2E7 E13F BE12 2F84" /* 4EOŒ..ð/Âçá?¾./„ */
- $"7FC3 D55F 876A BE1D 07F2 688D 774C FC3E" /* .ÃÕ_‡j¾..òhwLü> */
- $"A177 C3EA 4FE4 AFFE 1BFF 61D3 2F87 4BFC" /* ¡wÃêOä¯þ.ÿaÓ/‡Kü */
- $"946E 03F8 6CFF 06A3 FC28 FE13 BF0F 6B7E" /* ”n.ølÿ.£ü(þ.¿.k~ */
- $"1EB8 FC3B 47E1 ECEE EEDF F87D 51FF 07D5" /* .¸ü;Gáìîîßø}Qÿ.Õ */
- $"0BBB 87E1 D3FF 0779 FC3B 6FE1 D378 0DF0" /* .»‡áÓÿ.yü;oáÓx.ð */
- $"BD7C 29EB A2DD 17F2 6ADB E1DB 7F0D 97E1" /* ½|)ë¢Ý.òjÛáÛ..—á */
- $"E84D 7750 FC3E 906F C3E8 35DD 42ED AFE1" /* èMwPü>oÃè5ÝBí¯á */
- $"D33F 0E8D F86E 00F7 91DD 3D8B A94D D83C" /* Ó?.øn.÷‘Ý=‹©MØ< */
- $"B51B 129C 103F 899D B929 4724 C188 2C29" /* µ..œ.?‰¹)G$Áˆ,) */
- $"CE89 11F8 9065 1C37 E234 DFEF 60D7 3221" /* Ή.øe.7â4ßï`×2! */
- $"5343 F889 DCDB AFB3 6F20 F76A 31D9 986E" /* SCø‰ÜÛ¯³o ÷j1Ù˜n */
- $"A745 547E 6F18 076D A675 BA1A 1AAF 6558" /* §ET~o..m¦uº..¯eX */
- $"338A FF71 4707 0776 1B62 BCCC 89E5 4726" /* 3ŠÿqG..v.b¼Ì‰åG& */
- $"A7CB 8885 E07C DADC D741 3B1D D81F AB03" /* §Ëˆ…à|ÚÜ×A;.Ø.«. */
- $"2F84 F52D DFD5 7384 4649 7BA2 5AB1 14C8" /* /„õ-ßÕs„FI{¢Z±.È */
- $"3D8D B951 8183 C33A B08E 82CC EF1A F046" /* =¹QƒÃ:°Ž‚Ìï.ðF */
- $"5B62 C9E0 A926 F330 0A61 A30C 6194 7E1E" /* [bÉà©&ó0Âa£.a”~. */
- $"1EE9 3D0D 1ABE 5536 A026 8B32 830F C02F" /* .é=..¾U6 &‹2ƒ.À/ */
- $"3041 04B7 2C65 024D AC81 D2CC 03CA A08A" /* 0A.·,e.M¬ÒÌ.Ê Š */
- $"B105 F3F1 C365 6BCE 9876 A867 7DBA 63AF" /* ±.óñÃekΘv¨g}ºc¯ */
- $"0973 495F DCC1 3552 54BA 5BDB 618D C6C0" /* ÆsI_ÜÁ5RTº[ÛaÆÀ */
- $"91B8 4489 141B A7D3 F188 8A97 DAB0 8942" /* ‘¸D‰..§ÓñˆŠ—Ú°‰B */
- $"EA67 F235 E18A 871B 4B0C DAC6 9050 BA9C" /* êgò5ኇ.K.ÚÆPºœ */
- $"C432 95CE 13CA 93ED 4FD5 9495 377D C920" /* Ä2•Î.Ê“íOÕ”•7}É */
- $"C8A2 F997 5348 8890 91D5 0A23 50BF 3C37" /* È¢ù—SHˆ‘ÕÂ#P¿<7 */
- $"8372 7C96 32AA 1CD2 46BE 8220 C983 2A71" /* ƒr|–2ª.ÒF¾‚ Ƀ*q */
- $"7961 BF33 9590 C086 CCE9 578B 322E FB50" /* ya¿3•À†ÌéW‹2.ûP */
- $"CB68 6459 C127 EB9B E974 EF02 59F4 FF4D" /* ËhdYÁ'ë›étï.YôÿM */
- $"4525 1874 6A9F 99EB DFCC C1B1 72EA 9FA0" /* E%.tjŸ™ëßÌÁ±r꟠ */
- $"DE00 BBB9 D95F 36B9 406E 3CE0 3BCF 32B6" /* Þ.»¹Ù_6¹@n<à;Ï2¶ */
- $"8DC0 55D6 C6DA 3622 8A6E 63F6 28AE 08AC" /* ÀUÖÆÚ6"Šncö(®.¬ */
- $"03AC 288D 069A 750E CBBD 97D9 E42D BA93" /* .¬(.šu.˽—Ùä-º“ */
- $"E82A 4EB3 C008 CC7C B6A7 6F70 F1BC FDAA" /* è*N³À.Ì|¶§opñ¼ýª */
- $"1DF4 D2E4 3ECB 9702 444E 278F 6B50 F00E" /* .ôÒä>Ë—.DN'kPð. */
- $"C228 C132 E5E0 B4DE 93BF DBBD 2C85 ABF9" /* Â(Á2åà´Þ“¿Û½,…«ù */
- $"7FAD EC28 1D40 D390 5A2F 9B14 D348 8C76" /* .­ì(.@ÓZ/›.ÓHŒv */
- $"C04B 1173 BF19 8F50 7E3D 8311 BB79 FDA8" /* ÀK.s¿.P~=ƒ.»yý¨ */
- $"1FD4 24A9 5F59 8B76 709E 5C84 1902 8690" /* .Ô$©_Y‹vpž\„..† */
- $"AD49 334F 5AE8 E376 288C BDE7 EE13 FBDE" /* ­I3OZèãv(Œ½çî.ûÞ */
- $"7606 0135 6DB2 DCD9 F5B3 E7E2 B2B8 8BE1" /* v..5m²ÜÙõ³çⲸ‹á */
- $"1985 85D2 0EC1 5CCD BC74 D88B 7206 5075" /* .……Ò.Á\ͼtØ‹r.Pu */
- $"FB92 BF92 C5CB B6E3 024D EB71 D909 AF79" /* û’¿’Å˶ã.MëqÙÆ¯y */
- $"DD82 BBF2 37F1 1193 74D0 373D 4043 C292" /* Ý‚»ò7ñ.“tÐ7=@CÂ’ */
- $"0B1D 4E8F 04F4 A035 451A 7DCB 02DB D77E" /* ..N.ô 5E.}Ë.Û×~ */
- $"DD1C 3667 1BA7 2584 C128 3835 4454 5C15" /* Ý.6g.§%„Á(85DT\. */
- $"5846 C7D1 4689 3D2A 1172 9BA8 9830 F037" /* XFÇÑF‰=*.r›¨˜0ð7 */
- $"0053 8FD6 4023 68C6 7122 CAC6 0325 5AF3" /* .SÖ@#hÆq"ÊÆ.%Zó */
- $"E104 A423 C5AE F551 6DF6 7B11 D5EB FD34" /* á.¤#Å®õQmö{.Õëý4 */
- $"DF67 C50C 737D 74D5 D5EC 7027 A2D8 C79A" /* ßgÅ.s}tÕÕìp'¢ØÇš */
- $"200D A972 A30A 509A C3DE 483F 8B53 D69C" /* .©r£ÂPšÃÞH?‹SÖœ */
- $"001F 47E9 BD2C 84EC DB83 B493 0326 DE6E" /* ..Gé½,„ìÛƒ´“.&Þn */
- $"336A 7C76 3225 8351 7B2D 37B5 D645 9866" /* 3j|v2%ƒQ{-7µÖE˜f */
- $"019E 6472 40C4 5853 3376 9D90 D3EA A727" /* .ždr@ÄXS3vÓê§' */
- $"07A1 A4B8 A32F 475A 22A2 059C AB5B F13E" /* .¡¤¸£/GZ"¢.œ«[ñ> */
- $"E2DF 5B3E E6B5 B27F 28AF A15F 400C 7D9F" /* âß[>æµ².(¯¡_@.}Ÿ */
- $"43ED 33D4 9B4D CB64 E550 5FED FC2F E485" /* Cí3Ô›MËdåP_íü/ä… */
- $"271E 2DB1 6AE5 6793 EFE8 FCC5 A784 4C95" /* '.-±jåg“ïèüŧ„L• */
- $"E488 B5AC A528 BACB 10FF 4ABD D554 E56B" /* 䈵¬¥(ºË.ÿJ½ÕTåk */
- $"F72E 8ED7 5E48 60A4 82D0 381F A2D4 625C" /* ÷.Ž×^H`¤‚Ð8.¢Ôb\ */
- $"9F80 2A63 5FD3 DD0C EDA8 3DE3 281E A65C" /* Ÿ€*c_ÓÝ.í¨=ã(.¦\ */
- $"88EA 1A96 626D DC03 79BE C4ED EA60 4FC5" /* ˆê.–bmÜ.y¾Äíê`OÅ */
- $"BB10 D9D5 99AF 0534 65C2 05AE 8D23 82B0" /* ».ÙÕ™¯.4eÂ.®#‚° */
- $"6FB7 881A 7BC5 0316 7A28 4B27 2763 A6C3" /* o·ˆ.{Å..z(K''c¦Ã */
- $"8FC7 073A 1391 81BB 707F 625D 355F B1DF" /* Ç.:.‘»p.b]5_±ß */
- $"A749 C3EE A157 EC1F 0F6C 70AB 1A36 5711" /* §IÃî¡Wì..lp«.6W. */
- $"C49B 1CA8 54A0 0FB9 6A2E 0F86 2E57 BC2F" /* Ä›.¨T .¹j..†.W¼/ */
- $"8CDD B76A F6DB 83F9 EEFF 4BF1 DE60 660E" /* ŒÝ·jöÛƒùîÿKñÞ`f. */
- $"BCBA 7D68 D5DE 8663 DF06 3F65 A981 38D7" /* ¼º}hÕÞ†cß.?e©8× */
- $"CC20 EBAE 6143 C79E D2F3 DCF4 FA0F 433E" /* Ì ë®aCÇžÒóÜôú.C> */
- $"6DFE 4C5F 032A F6DD DD11 F85F 5003 22CD" /* mþL_.*öÝÝ.ø_P."Í */
- $"C07E F1CC 40B9 8D61 825D 77C7 91A6 BD49" /* À~ñÌ@¹a‚]wÇ‘¦½I */
- $"2590 4BCD EB13 37A2 D5FA 2931 F311 9028" /* %KÍë.7¢Õú)1ó.( */
- $"6C02 96FC ACF5 1EA4 8E51 4BC9 FDE8 DFEF" /* l.–ü¬õ.¤ŽQKÉýèßï */
- $"C5A0 8082 7E0D C127 3A80 A65B 7989 CCEE" /* Å €‚~.Á':€¦[y‰Ìî */
- $"6F6A 8DDF FB5B 46A5 3757 7FC3 3EFD BC0A" /* ojßû[F¥7W.Ã>ý¼Â */
- $"8567 1CB0 3BE7 A153 D7CE 8F63 D2DC 8840" /* …g.°;ç¡S×ÎcÒ܈@ */
- $"D993 E028 0E86 AA99 3ADE CC55 A789 CFC8" /* Ù“à(.†ª™:ÞÌU§‰ÏÈ */
- $"D92B 9613 3850 B7B3 467A FA09 7D45 E174" /* Ù+–.8P·³FzúÆ}Eát */
- $"D351 3254 64A3 7FC5 0D8D 1EDB FEC9 3F05" /* ÓQ2Td£.Å..ÛþÉ?. */
- $"C3C2 264B ACB8 F3C3 1BFF 04A5 12CF C191" /* ÃÂ&K¬¸óÃ.ÿ.¥.ÏÁ‘ */
- $"8CA0 5985 E34C E583 A230 CD43 8602 BAAF" /* Œ Y…ãL僢0ÍC†.º¯ */
- $"1475 FCA7 B274 1314 051F AF06 089D 13B1" /* .uü§²t....¯...± */
- $"5C06 815E FAA5 6864 CECE D56A 127C 058B" /* \.^ú¥hdÎÎÕj.|.‹ */
- $"1859 E9E8 7A98 4299 3CFF 70CE C2DD 8676" /* .Yéèz˜B™<ÿpÎÂ݆v */
- $"1798 5F8E 9960 922E 9226 3F9B 5657 890F" /* .˜_Ž™`’.’&?›VW‰. */
- $"75BC FECF 6919 6701 D086 0EA5 26BA 8B78" /* u¼þÏi.g.І.¥&º‹x */
- $"7381 41FC 19AD 7201 BFD9 B3D3 2F00 1A1C" /* sAü.­r.¿Ù³Ó/... */
- $"E689 F3BC 5FC7 0418 66A2 5AEE 0374 DE30" /* æ‰ó¼_Ç..f¢Zî.tÞ0 */
- $"DC4B 70F1 ACC6 2BC6 06E9 461F E71B CD5E" /* ÜKpñ¬Æ+Æ.éF.ç.Í^ */
- $"2766 D533 884B A37F 7820 5CCA 3D60 1C3A" /* 'fÕ3ˆK£.x \Ê=`.: */
- $"8865 509F C1F0 86B6 9A91 0A52 426E CF1D" /* ˆePŸÁð†¶š‘ÂRBnÏ. */
- $"4B52 7AFE 9519 ECDB 9DD3 BFA1 80F7 50BD" /* KRzþ•.ìÛÓ¿¡€÷P½ */
- $"D2DD 6FAB F00D 3600 9104 37AC 81AA F9C3" /* ÒÝo«ð.6.‘.7¬ªùà */
- $"3933 A702 AC9C 42F1 4579 C5F2 CD99 165F" /* 93§.¬œBñEyÅòÍ™._ */
- $"2D84 FE8B D02C 055F F99C 1729 45C7 6B56" /* -„þ‹Ð,._ùœ.)EÇkV */
- $"EE73 818A 9940 BB46 1408 639B 9779 C805" /* îsŠ™@»F..c›—yÈ. */
- $"1B0B CC86 D42E E9BB 046D 0E93 7273 E00F" /* ..̆Ô.é».m.“rsà. */
- $"B7D5 D377 E0ED 2494 4623 5BDF C83C 54A5" /* ·ÕÓwàí$”F#[ßÈ<T¥ */
- $"6B6B D343 F20E AD4C B45C 2BF4 7C65 87A1" /* kkÓCò.­L´\+ô|e‡¡ */
- $"E2EA E2B7 FF17 F9A1 5606 D5A7 C113 F062" /* âêâ·ÿ.ù¡V.Õ§Á.ðb */
- $"D50E E647 922C 8746 7CBA 99C8 4400 979D" /* Õ.æG’,‡F|º™ÈD.— */
- $"3D09 19E7 3A84 E245 ED1F 1C14 3967 45CE" /* =Æ.ç:„âEí...9gEÎ */
- $"2B06 C383 F2A6 2CEE 02E6 A2A7 1821 0F3F" /* +.Ãò¦,î.梧.!.? */
- $"4057 F9E9 B830 94C7 65AA C396 6F97 2721" /* @Wùé¸0”ÇeªÃ–o—'! */
- $"F1AC 6AF7 6C6C 3F02 D2F1 343D 8B42 0F6F" /* ñ¬j÷ll?.Òñ4=‹B.o */
- $"E2D4 A7D8 7158 F033 C573 AD72 01B7 1CC7" /* âÔ§ØqXð3Ås­r.·.Ç */
- $"4CA6 78C2 BABD BB30 5E03 BDEE DF19 8240" /* L¦xº½»0^.½îß.‚@ */
- $"9521 A43A B142 2F42 3590 AD8C B9FD A409" /* •!¤:±B/B5­Œ¹ý¤Æ */
- $"9D77 38E7 B8F8 3BCD 4478 61C3 5768 0324" /* w8ç¸ø;ÍDxaÃWh.$ */
- $"4E55 4240 1E87 1F93 D0BA 6929 C235 7E76" /* NUB@.‡.“кi)Â5~v */
- $"F6E8 AA1B AF13 15FD EB95 2609 BE7D BFE8" /* öèª.¯..ýë•&ƾ}¿è */
- $"3E51 8F2E 4780 4EE6 891E F83D FF7D D1C3" /* >Q.G€Næ‰.ø=ÿ}Ñà */
- $"818F 28A2 2AC0 AD00 7F03 5781 2882 A44A" /* (¢*À­...W(‚¤J */
- $"6728 D9F6 E77F A883 C794 71AC 55E9 8112" /* g(Ùöç.¨ƒÇ”q¬Ué. */
- $"BF6F ECDA 9BD1 96B8 79AA A397 A6F2 C93F" /* ¿oìڛі¸yª£—¦òÉ? */
- $"3792 B8C4 8667 AAF4 659D 59F6 E77F A870" /* 7’¸Ä†gªôeYöç.¨p */
- $"24F1 5461 DB69 0F4C F8B3 F02A F6E7 7FA6" /* $ñTaÛi.Lø³ð*öç.¦ */
- $"26C9 5EDE 9BB6 A1C6 9467 854A 5327 BA38" /* &É^Þ›¶¡Æ”g…JS'º8 */
- $"F535 A01A B90A 9580 95A0 FE5C A623 DE0D" /* õ5 .¹Â•€• þ\¦#Þ. */
- $"6C3E BF23 66F2 9312 9490 EB88 1D63 7AF4" /* l>¿#fò“.”ëˆ.czô */
- $"9F5B 7F45 9078 3A5F CC36 7702 EAD5 FA4D" /* Ÿ[.Ex:_Ì6w.êÕúM */
- $"5F9D 258B 14A8 A235 6490 6B7D 2B05 42C3" /* _%‹.¨¢5dk}+.Bà */
- $"2A5A 791E 92C3 B1E8 B323 FF74 81FC B063" /* *Zy.’ñè³#ÿtü°c */
- $"4A31 CBBC 91E2 A64A F935 FE79 4C07 1376" /* J1˼‘â¦Jù5þyL..v */
- $"002A 4795 5221 70B2 005C 41F9 D631 126F" /* .*G•R!p².\AùÖ1.o */
- $"FF7F DF03 06BD 7214 71AB 4EF3 8EEA 0261" /* ÿ.ß..½r.q«NóŽê.a */
- $"D054 C087 EA15 CBD2 4645 2F9F 3600 4144" /* ÐTÀ‡ê.ËÒFE/Ÿ6.AD */
- $"5671 C61E D3CB 8B84 A60D B58E FB69 C71F" /* VqÆ.ÓË‹„¦.µŽûiÇ. */
- $"B09A EDD9 AAC0 6FBA D7FE 8C4D 8262 6C73" /* °šíÙªÀoº×þŒM‚bls */
- $"9F69 0E81 7581 1D52 FB27 C979 1597 69EA" /* Ÿi.u.Rû'Éy.—iê */
- $"F1DF E906 0B77 2E21 D31A 5CCD 9474 95A2" /* ñßé..w.!Ó.\Í”t•¢ */
- $"CB48 AB27 5F53 B82F 1638 16A4 87CD ED1F" /* ËH«'_S¸/.8.¤‡Íí. */
- $"20BC 2894 5EE1 C84C 1AC1 1158 0293 024E" /* ¼(”^áÈL.Á.X.“.N */
- $"1023 0E4F 9BD8 FA73 6E62 FF7F FD08 5797" /* .#.O›Øúsnbÿ.ý.W— */
- $"0788 A951 6DDA 2448 21D2 7FCA 20B4 E1BF" /* .ˆ©QmÚ$H!Ò.Ê ´á¿ */
- $"3262 89C7 5386 ACB1 8B89 6AC3 F907 1355" /* 2b‰ÇS†¬±‹‰jÃù..U */
- $"66D9 1E5A 5B54 19E9 2737 FF7C B8DF 1F5E" /* fÙ.Z[T.é'7ÿ|¸ß.^ */
- $"3592 B16D 6089 DE73 8F19 479D 626B 977D" /* 5’±m`‰Þs.Gbk—} */
- $"185E F7A3 AF62 AD92 E5AC 2F74 B991 F96F" /* .^÷£¯b­’å¬/t¹‘ùo */
- $"211F 5AE0 4C27 344F A9E1 C731 DB20 A0FF" /* !.ZàL'4O©áÇ1Û  ÿ */
- $"7FFF 7F2E 356F CC55 C6B8 C2C9 2AEF 2D31" /* .ÿ..5oÌUƸÂÉ*ï-1 */
- $"EFEB D878 C16F B1B1 3D47 240C 489C 7153" /* ïëØxÁo±±=G$.HœqS */
- $"E5F8 A5C8 6E2C 7650 AED0 C4B7 43EA 67B6" /* åø¥Èn,vP®ÐÄ·Cêg¶ */
- $"94E4 7274 CFEB 4CF3 FD3E 8065 B9CC 35A5" /* ”ärtÏëLóý>€e¹Ì5¥ */
- $"21B1 3804 AD98 4F8A 6FFC 50DA 014C 442B" /* !±8.­˜OŠoüPÚ.LD+ */
- $"AA41 1455 BD94 B366 A37D CA82 7FFC DE57" /* ªA.U½”³f£}Ê‚.üÞW */
- $"2EA9 98C2 5510 E51E 24CC 0428 4C83 1BBE" /* .©˜ÂU.å.$Ì.(Lƒ.¾ */
- $"0A46 A6DD 6963 D4CB 24E8 748B ED10 7B6D" /* ÂF¦ÝicÔË$èt‹í.{m */
- $"E61C 86C3 C80E 3030 FCE9 2263 C956 95A1" /* æ.†ÃÈ.00üé"cÉV•¡ */
- $"AED0 C4B1 D07C F701 9DA0 ED2C C401 BC1A" /* ®ÐıÐ|÷. í,Ä.¼. */
- $"9421 2D43 EF12 7494 8D46 CB82 3FE2 6439" /* ”!-Cï.t”FË‚?âd9 */
- $"6BDE C8CE 23B7 9D2E B6F9 DF4B C1A9 A145" /* kÞÈÎ#·.¶ùßKÁ©¡E */
- $"1512 85E6 30E6 98D1 AC22 EEBC 459C D841" /* ..…æ0æ˜Ñ¬"î¼EœØA */
- $"0A0F 1F31 2F75 7937 220F 7271 FE79 44A6" /* Â..1/uy7".rqþyD¦ */
- $"777E 1645 E0BA D980 0FFF 7D9F EC83 A930" /* w~.EàºÙ€.ÿ}Ÿìƒ©0 */
- $"D12B 216D 4D3F 4AD0 5EE9 DBC7 53D7 0A21" /* Ñ+!mM?JÐ^éÛÇS×Â! */
- $"2372 C608 6701 8AFA 8E33 4125 2B7E 38DA" /* #rÆ.g.ŠúŽ3A%+~8Ú */
- $"5990 99EE B1D0 B07C 9F9D 97DD D658 2C2A" /* Y™î±Ð°|Ÿ—ÝÖX,* */
- $"C7D6 4556 2AA7 297F ACBE 4802 B472 E76F" /* ÇÖEV*§).¬¾H.´rço */
- $"644F 2F11 17FF 7F9D CE1C 2989 7199 03B1" /* dO/..ÿ.Î.)‰q™.± */
- $"E719 2B3B 1131 C4CC 808B BC7A 26A4 479F" /* ç.+;.1ÄÌ€‹¼z&¤GŸ */
- $"4824 6486 E338 DB65 A502 454C C415 B8D0" /* H$d†ã8Ûe¥.ELÄ.¸Ð */
- $"7C77 7323 E381 5958 F415 95B9 142E 85F8" /* |ws#ãYXô.•¹..…ø */
- $"1742 E22F FF17 567B A195 DFF1 7EE0 8E40" /* .Bâ/ÿ.V{¡•ßñ~àŽ@ */
- $"431A B629 DDCE AED1 A925 9FCD 56B5 7945" /* C.¶)Ýήѩ%ŸÍVµyE */
- $"B8B9 77DF 732C CD1E 8137 2645 1135 9593" /* ¸¹wßs,Í.7&E.5•“ */
- $"E31C 333B 30E2 518D E202 A1E0 FEA6 C40E" /* ã.3;0âQâ.¡àþ¦Ä. */
- $"BB50 0174 C21D 0BFB 34C1 1A8D 8E5D FF77" /* »P.tÂ..û4Á.Ž]ÿw */
- $"909A 8111 3123 8200 AFC2 0525 13A1 C383" /* š.1#‚.¯Â.%.¡Ãƒ */
- $"5472 BA45 8D58 8818 E5CD 6FEA D858 47C5" /* TrºEXˆ.åÍoêØXGÅ */
- $"F5A0 7773 3C86 1CE8 9A67 FAA7 5726 643B" /* õ ws<†.èšgú§W&d; */
- $"1BF8 C2C1 E7AD D3CE E89B 97C4 0210 1FAE" /* .øÂÁç­ÓÎè›—Ä...® */
- $"9319 1F1F 7F89 0B76 5918 7EF8 9947 CF44" /* “....‰.vY.~ø™GÏD */
- $"6B5C 4B5D 5067 58A7 F35E CF39 7D01 C555" /* k\K]PgX§ó^Ï9}.ÅU */
- $"FCD3 E0F6 C1A4 9C8A 0B34 2D33 A20D F664" /* üÓàöÁ¤œŠ.4-3¢.öd */
- $"C174 CCE8 CAA1 C45F 2974 101B 86E7 68FD" /* ÁtÌèÊ¡Ä_)t..†çhý */
- $"D6FE 8FE9 AC95 5D3D DE38 1829 E3B9 37FE" /* Öþ鬕]=Þ8.)ã¹7þ */
- $"5008 F383 21C4 4D57 AE92 9F94 A9BB 3A76" /* P.óƒ!ÄMW®’Ÿ”©»:v */
- $"705F 8D2D 889C EB93 FD2B 05C5 89F2 500E" /* p_-ˆœë“ý+.ʼnòP. */
- $"4220 A486 F348 D466 4D62 E368 540A 1D25" /* B ¤†óHÔfMbãhTÂ.% */
- $"AF7C A9EF 43CC E423 16FC 6EE5 C407 DDAE" /* ¯|©ïCÌä#.ünåÄ.Ý® */
- $"EB28 23D2 3FDE 40EF 2ED1 D53A B87B 9C40" /* ë(#Ò?Þ@ï.ÑÕ:¸{œ@ */
- $"80A2 77EF CC8F D34E C33F 7BB4 4748 E4A6" /* €¢wïÌÓNÃ?{´GHä¦ */
- $"B177 05FF 085F CBF9 F1A0 8CA7 4200 32AC" /* ±w.ÿ._Ëùñ Œ§B.2¬ */
- $"7B87 A517 EA04 C96C F9A3 C6ED 5FFF 7FED" /* {‡¥.ê.Élù£Æí_ÿ.í */
- $"D5EB F835 3E15 6882 AED1 72BF B42C 87DE" /* Õëø5>.h‚®Ñr¿´,‡Þ */
- $"8111 0F7A 5DA6 CFEA 79A7 9174 89E8 E637" /* ..z]¦Ïêy§‘t‰èæ7 */
- $"7E56 B53E 9987 2013 8F1A 06A5 07A2 1856" /* ~Vµ>™‡ ...¥.¢.V */
- $"FE30 E259 128A 968B 881F E88D 8566 98D7" /* þ0âY.Š–‹ˆ.è…f˜× */
- $"C815 C397 64E8 9FAC 059A 5922 C863 F220" /* È.×d蟬.šY"Ècò */
- $"EC2A 4AF8 5DB2 A77D FC6A 3AC1 357E D5CC" /* ì*Jø]²§}üj:Á5~ÕÌ */
- $"142B 85B0 FEE0 2579 D845 CDFD F507 4C58" /* .+…°þà%yØEÍýõ.LX */
- $"D86A F299 0BBC A0A8 39A4 03D9 2144 6B3E" /* Øjò™.¼ ¨9¤.Ù!Dk> */
- $"6D67 242B 0FEB B6F4 79CB 58ED 2338 DB9F" /* mg$+.ë¶ôyËXí#8ÛŸ */
- $"6EC7 1626 0FDD 0C77 1E00 2AE4 8B46 F39C" /* nÇ.&.Ý.w..*ä‹Fóœ */
- $"6268 EE5F FF49 B5C8 30E7 9859 E163 A9D4" /* bhî_ÿIµÈ0ç˜Yác©Ô */
- $"C50F BC0C 46BB BBC7 9FFF 7D54 E81B 8936" /* Å.¼.F»»ÇŸÿ}Tè.‰6 */
- $"A032 72E8 6576 5FEA 9A3F A5A9 9E58 B9C2" /*  2rèev_êš?¥©žX¹Â */
- $"A089 A039 5695 766F 3295 A1FF 7F5F FBDB" /*  ‰ 9V•vo2•¡ÿ._ûÛ */
- $"A3FD 1F1F 76AD 6787 B4D0 D1A5 E4EA 72F8" /* £ý..v­g‡´ÐÑ¥äêrø */
- $"0276 0C35 EC34 65A8 000A CA35 6AAE 1800" /* .v.5ì4e¨.ÂÊ5j®.. */
- $"99CA 1B65 F56D 6C3B DF33 AB08 94A3 15CF" /* ™Ê.eõml;ß3«.”£.Ï */
- $"C9B8 D32E 35D7 D32D 57E6 86D2 A5BE 2B3A" /* ɸÓ.5×Ó-Wæ†Ò¥¾+: */
- $"4535 2C10 41FE FDA9 E202 3927 BC4F 5F90" /* E5,.Aþý©â.9'¼O_ */
- $"E637 311C DB00 E394 09F3 005B 7DB3 0DFE" /* æ71.Û.ã”Æó.[}³.þ */
- $"9F1F CAA4 DD03 B381 8330 AB38 E13B 2F9C" /* Ÿ.ʤÝ.³ƒ0«8á;/œ */
- $"3DB5 01C5 100A 5D16 5C8D 792C FA0E 1A85" /* =µ.Å.Â].\y,ú..… */
- $"E3FF 467A 6333 E4F1 F27C 9E2B 161E 18F0" /* ãÿFzc3äñò|ž+...ð */
- $"3F30 9C2C 631D BE74 4B7F 6E21 3FBC 404E" /* ?0œ,c.¾tK.n!?¼@N */
- $"E063 4152 D02D 68E4 869C E7E9 E4E6 4E95" /* àcARÐ-h䆜çéäæN• */
- $"3A66 1FDA 1145 DFB4 0796 9F97 503C E2C9" /* :f.Ú.Eß´.–Ÿ—P<âÉ */
- $"7F49 D644 1290 98BD 8EA0 2FA1 CF00 E383" /* .IÖD.˜½Ž /¡Ï.ム*/
- $"C003 7BFE D79B FF62 A38E 2C39 A64D 19FF" /* À.{þ×›ÿb£Ž,9¦M.ÿ */
- $"6A9D 976A 994B 6626 4F4D 7DC8 F0CA EDB7" /* j—j™Kf&OM}ÈðÊí· */
- $"F99E 21E2 36B4 3AAB E787 C6A2 1783 F623" /* ùž!â6´:«ç‡Æ¢.ƒö# */
- $"8755 1F66 AFBC 2959 6E6E 2E61 AC85 2198" /* ‡U.f¯¼)Ynn.a¬…!˜ */
- $"9978 EDFD 334C F0D6 7F76 9AF2 47AF 5E4B" /* ™xíý3LðÖ.všòG¯^K */
- $"805C 54D3 5F2A 16C5 6675 C288 B44F F851" /* €\TÓ_*.Åfuˆ´OøQ */
- $"1CE9 9F21 BF10 92B9 2366 5D69 AE8E 9989" /* .éŸ!¿.’¹#f]i®Ž™‰ */
- $"36A6 F9E6 75A7 0D47 C8B5 8727 0138 2BFA" /* 6¦ùæu§.Gȵ‡'.8+ú */
- $"5C4A 649C 123C 225E 2CEC 2007 5016 3F11" /* \Jdœ.<"^,ì .P.?. */
- $"B8FF 60CB 7150 EBFD DFED 147E 0A98 E096" /* ¸ÿ`ËqPëýßí.~Â˜à– */
- $"6B76 3AF0 39A5 5BF2 880C E857 174C 8735" /* kv:ð9¥[òˆ.èW.L‡5 */
- $"ACF6 E4B7 3477 6293 FF7C 8515 A8DE 4E73" /* ¬öä·4wb“ÿ|….¨ÞNs */
- $"8E37 8A0C 4384 0CF3 FA01 15F5 9639 ED05" /* Ž7Š.C„.óú..õ–9í. */
- $"C86B 28A0 C331 14BC 2817 FE9B F96A D60D" /* Èk( Ã1.¼(.þ›ùjÖ. */
- $"EBCB 14DA FF7F FF47 8A61 A2C7 F01F 10B7" /* ëË.Úÿ.ÿGŠa¢Çð..· */
- $"3DAF B01C B484 F55D 457E E3EC CC41 95DE" /* =¯°.´„õ]E~ãìÌA•Þ */
- $"097E 8117 F77F FEFB A490 8B96 1300 2B37" /* Æ~.÷.þû¤‹–..+7 */
- $"19FA E04C 4188 E9F6 8950 0668 B082 8FD8" /* .úàLAˆéö‰P.h°‚Ø */
- $"0B7D 6C32 4DBF F84F F4E9 ACAF 719A DC43" /* .}l2M¿øOô鬯qšÜC */
- $"9F8D A53E DF1A BDB0 AAA7 3267 9C2D 357A" /* Ÿ¥>ß.½°ª§2gœ-5z */
- $"9CA7 1AE1 59C4 F467 83D3 308B 004A 42C2" /* œ§.áYÄôgƒÓ0‹.JB */
- $"909B F979 41CE AB25 C6D1 9FE9 46E1 E837" /* ›ùyAΫ%ÆÑŸéFáè7 */
- $"7ADF FF72 225E 4472 D323 F55C BE19 1E50" /* zßÿr"^DrÓ#õ\¾..P */
- $"BF94 6787 CADB F576 300A 054B 0A2D E9B2" /* ¿”g‡ÊÛõv0Â.KÂ-é² */
- $"5C15 DB84 E735 F76D 5477 D8A7 28AF FF7A" /* \.Û„ç5÷mTwا(¯ÿz */
- $"7EB8 06F8 4FF4 E999 ED48 02C4 F111 F61D" /* ~¸.øOôé™íH.Äñ.ö. */
- $"8A6C 1CC6 AE54 94E4 8C5D 7655 4ECC 205F" /* Šl.Æ®T”äŒ]vUNÌ _ */
- $"DBF9 1BA7 83CC 52E9 E9C9 52A4 1151 7DE4" /* Ûù.§ƒÌRééÉR¤.Q}ä */
- $"051B E140 3FC0 D60B 0C11 663F 98A9 8B53" /* ..á@?ÀÖ...f?˜©‹S */
- $"776E BD8D 7678 AD62 ACEE 033F D134 B61E" /* wn½vx­b¬î.?Ñ4¶. */
- $"F86D 3384 AAE7 9074 F7CF 4509 F9B3 4F30" /* øm3„ªçt÷ÏEÆù³O0 */
- $"F32D 840F 1DDA E6B1 BDD4 951F 2379 F890" /* ó-„..Úæ±½Ô•.#yø */
- $"530A E915 A228 D3D8 B188 C692 2767 D628" /* SÂé.¢(ÓØ±ˆÆ’'gÖ( */
- $"12F8 3FFA BA23 F76B 1D92 1FC1 EA73 30FC" /* .ø?úº#÷k.’.Áês0ü */
- $"CE72 0CA5 6695 6326 F93B B52F B9D4 F6F0" /* Îr.¥f•c&ù;µ/¹Ôöð */
- $"FF07 727B 80F9 EBFC 2176 788C 333F 4137" /* ÿ.r{€ùëü!vxŒ3?A7 */
- $"E82C D066 6088 A8EA 168F 40EA F1EE BDE8" /* è,Ðf`ˆ¨ê.@êñî½è */
- $"C023 75BA 66F2 335A 98C0 31A8 2137 7A7B" /* À#uºfò3Z˜À1¨!7z{ */
- $"DA0F 3962 D4B3 3E6E A5A1 3A19 5EED 48A7" /* Ú.9bÔ³>n¥¡:.^íH§ */
- $"7617 DE46 D178 BC48 D85D 7821 DFEC B30D" /* v.ÞFÑx¼HØ]x!ßì³. */
- $"F84F B7CD 80ED 55C7 9E1A F58D 7085 F625" /* øO·Í€íUÇž.õp…ö% */
- $"F564 3BF5 A09E B353 4E45 2F0B FC02 ECFD" /* õd;õ ž³SNE/.ü.ìý */
- $"539F 529C A652 34F1 C0CC BC04 FCE0 2C7D" /* SŸRœ¦R4ñÀ̼.üà,} */
- $"A8A9 9E67 79E9 ADE4 ABEE BFF6 4793 1B91" /* ¨©žgyé­ä«î¿öG“.‘ */
- $"413A 4302 7FB5 190C CB09 0DC9 3B33 E18D" /* A:C..µ..ËÆ.É;3á */
- $"DDAB 23C5 FABA 5DC1 554F C940 B964 7F6A" /* Ý«#Åúº]ÁUOÉ@¹d.j */
- $"A781 2032 BF9E 0262 7C99 CD96 9251 9FB6" /* § 2¿ž.b|™Í–’QŸ¶ */
- $"1C69 9141 7A13 3022 DE48 DA68 C959 A0B5" /* .i‘Az.0"ÞHÚhÉY µ */
- $"0F3A F19A 9301 5051 5855 9D7B 5173 EE47" /* .:ñš“.PQXU{QsîG */
- $"2B0D DB30 28CC 5E41 46F1 E79F 90B3 AB2A" /* +.Û0(Ì^AFñ石«* */
- $"CAEA 6128 10E1 2CC0 DDC2 EBF1 26F1 E1DC" /* Êêa(.á,ÀÝÂëñ&ñáÜ */
- $"EB87 87ED 55F3 827C A066 D932 FCF7 B134" /* 뇇íUó‚| fÙ2ü÷±4 */
- $"8BC9 CC70 B38C B019 8372 EA60 7C36 4D38" /* ‹ÉÌp³Œ°.ƒrê`|6M8 */
- $"F82F 16C2 2390 A91B 203A 8EBE D0EC E278" /* ø/.Â#©. :޾Ðìâx */
- $"7AC4 8493 A217 6AC3 B85A 470D D74A B91D" /* zÄ„“¢.jøZG.×J¹. */
- $"0180 7BAB 4088 5671 6268 5B4A 54FE C179" /* .€{«@ˆVqbh[JTþÁy */
- $"1600 7677 830B 0E81 EEB2 6124 33F8 DBBD" /* ..vwƒ..î²a$3øÛ½ */
- $"1B35 D1F9 0568 3891 0ECB A836 5A86 9636" /* .5Ñù.h8‘.˨6Z†–6 */
- $"9F87 052F 0D66 8AA3 3362 1651 9B33 9057" /* Ÿ‡./.fŠ£3b.Q›3W */
- $"5B98 05EB 23CE 099F 2358 444E 0D64 A9F9" /* [˜.ë#ÎÆŸ#XDN.d©ù */
- $"A569 7D56 A50D 6256 69AF BDD9 7847 D651" /* ¥i}V¥.bVi¯½ÙxGÖQ */
- $"73E2 F76E F277 58DC BFB9 7B8E 593C 0E97" /* sâ÷nòwXÜ¿¹{ŽY<.— */
- $"3C4E 507D FA6C 7984 FAC8 6C42 6882 78AC" /* <NP}úly„úÈlBh‚x¬ */
- $"E40D B7A2 4E43 998B 1C29 D7C6 B7BA 58C9" /* ä.·¢NC™‹.)ׯ·ºXÉ */
- $"3503 114B 86B8 CB5D B605 832D 98FE 0257" /* 5..K†¸Ë]¶.ƒ-˜þ.W */
- $"FB50 8CA0 43D4 71BE E330 1584 5983 668F" /* ûPŒ CÔq¾ã0.„Yƒf */
- $"735C 2448 3B30 82E4 1932 5BF8 129F FE38" /* s\$H;0‚ä.2[ø.Ÿþ8 */
- $"749D 01ED DAFC 95B9 375D BBCB 60D9 FC58" /* t.íÚü•¹7]»Ë`ÙüX */
- $"0796 AEFC 2337 F89E 01F5 48BD 0BAF A61F" /* .–®ü#7øž.õH½.¯¦. */
- $"3EC4 C092 DC6A 584C AAAF 1A9F A20F CEA4" /* >ÄÀ’ÜjXLª¯.Ÿ¢.Τ */
- $"884B 2DB6 09F4 F51B 546F CD71 F4D3 6452" /* ˆK-¶Æôõ.ToÍqôÓdR */
- $"B6E5 3EFF 66F8 0D60 D916 F755 1348 E250" /* ¶å>ÿfø.`Ù.÷U.HâP */
- $"D8E2 6858 B424 B84B D59A 6885 24D3 D845" /* ØâhX´$¸KÕšh…$ÓØE */
- $"692F 4313 B616 584F 7419 0661 0064 C281" /* i/C.¶.XOt..a.d */
- $"A873 131C 5296 042B 1FD5 3EED BFC2 659E" /* ¨s..R–.+.Õ>í¿Âež */
- $"C4C7 2720 8002 28DD 141A BBE7 99F8 028F" /* ÄÇ' €.(Ý..»ç™ø. */
- $"8262 0577 5240 EB9A F866 2901 B75B 3FED" /* ‚b.wR@ëšøf).·[?í */
- $"9E78 9071 83FD 02BC FCDE 2135 42D1 F184" /* žxqƒý.¼üÞ!5BÑñ„ */
- $"309D F47E DF10 F797 4268 120A D377 04A4" /* 0ô~ß.÷—Bh.ÂÓw.¤ */
- $"2998 099E CA35 66AD FB20 8C14 1E0E 714E" /* )˜ÆžÊ5f­û Œ...qN */
- $"B9A7 70EE 5BA0 7A18 FC16 97EB 1A98 CB6C" /* ¹§pî[ z.ü.—ë.˜Ël */
- $"4B5D AC5B 3DC2 2062 E74A 18F2 0A76 6085" /* K]¬[=Â bçJ.òÂv`… */
- $"EF50 1C2F FE23 117A ED22 7BE8 0231 BC71" /* ïP./þ#.zí"{è.1¼q */
- $"707C 6736 BC3C 38AA 81C2 66B6 DCE5 13E9" /* p|g6¼<8ªÂf¶Üå.é */
- $"3076 C7AD 8C4B A962 C37E 4605 CDC0 8247" /* 0vÇ­ŒK©bÃ~F.ÍÀ‚G */
- $"190C 41CD 6923 8D00 BC94 5B5F E2AB 443B" /* ..AÍi#.¼”[_â«D; */
- $"3C5A 7FF6 213C 9E2D 9224 70B1 EA9B 7D36" /* <Z.ö!<ž-’$p±ê›}6 */
- $"E7EA 0D03 CB32 7413 AB26 CB30 1B56 CBDE" /* çê..Ë2t.«&Ë0.VËÞ */
- $"3C31 361D 24E2 F441 4D78 7825 1DA0 0C14" /* <16.$âôAMxx%. .. */
- $"5C84 B112 6FC1 77DB 42CA 7791 960B 9F09" /* \„±.oÁwÛBÊw‘–.ŸÆ */
- $"980A 5629 54C0 EC82 889A B0E3 38F4 E734" /* ˜ÂV)TÀ삈š°ã8ôç4 */
- $"FA91 D5CD 2C8F 43CD 5629 3DAD 81DA 5E0A" /* ú‘ÕÍ,CÍV)=­Ú^Â */
- $"C008 712F EAD3 2486 4CD2 C7BA 0FA9 BBD3" /* À.q/êÓ$†LÒǺ.©»Ó */
- $"6AC2 A912 7736 5A33 CC96 9EDC 9C5A 3084" /* j©.w6Z3Ì–žÜœZ0„ */
- $"C826 A3FB 0661 ED4B 9689 A921 22AB 2399" /* È&£û.aíK–‰©!"«#™ */
- $"6F2A 4A78 A5F8 A059 BE4B 7DFF 5D41 1A31" /* o*Jx¥ø Y¾K}ÿ]A.1 */
- $"E688 045C BD1E D1DB 7C5B 6B89 5C22 3CAF" /* æˆ.\½.ÑÛ|[k‰\"<¯ */
- $"F133 FF14 13A2 9A3F 6E42 54EB 5082 9F25" /* ñ3ÿ..¢š?nBTëP‚Ÿ% */
- $"7C07 6BA6 25EA A890 3560 E915 B058 CB68" /* |.k¦%ê¨5`é.°XËh */
- $"3601 4B07 ACE7 EC8A 2897 F908 D405 455E" /* 6.K.¬çìŠ(—ù.Ô.E^ */
- $"5EDD 427E 791A EA3D 6ACE 3BC0 0D43 731A" /* ^ÝB~y.ê=jÎ;À.Cs. */
- $"C9C6 8C03 BD83 6F85 EF75 7246 2F8E 1CFB" /* ÉÆŒ.½ƒo…ïurF/Ž.û */
- $"8DC9 2726 593F 1D87 A822 399F 9770 324C" /* É'&Y?.‡¨"9Ÿ—p2L */
- $"6ABF 38B9 E89E B2F5 D575 E7DB C449 63CF" /* j¿8¹èž²õÕuçÛÄIcÏ */
- $"EBE1 07BB 80A4 C099 6A15 9A47 96F3 8C8D" /* ëá.»€¤À™j.šG–óŒ */
- $"49E1 1F78 2119 9460 CA7A F257 EDA1 104B" /* Iá.x!.”`ÊzòWí¡.K */
- $"5C68 0E57 188C 62B0 FBE3 CF4F 5251 6525" /* \h.W.Œb°ûãÏORQe% */
- $"CB59 5E3D C6F4 6B04 5B2D 1ED2 3BE1 02BB" /* ËY^=Æôk.[-.Ò;á.» */
- $"7207 12AA BFEC 50F4 83FE 2797 121B 3D14" /* r..ª¿ìPôƒþ'—..=. */
- $"DA23 BE41 D647 E5CA DD2D CD48 8C4D A094" /* Ú#¾AÖGåÊÝ-ÍHŒM ” */
- $"B1A9 4ED5 4735 8818 C4F1 597D 3211 5D12" /* ±©NÕG5ˆ.ÄñY}2.]. */
- $"D96B 5A38 AB9A 7E89 C503 13B0 8354 C887" /* ÙkZ8«š~‰Å..°ƒTȇ */
- $"F766 96F0 EDAE C6B6 17B4 E9A4 9230 C2F5" /* ÷f–ðí®Æ¶.´é¤’0Âõ */
- $"029D 3D72 A1CF 5BB9 E975 DBFF 06DC F5B2" /* .=r¡Ï[¹éuÛÿ.Üõ² */
- $"686F 667B AD3E 1D8D 5BE4 0D6A 2CD7 DE66" /* hof{­>.[ä.j,×Þf */
- $"BE8E C996 696D 58EC 6CFE 40AD 3C95 EAF1" /* ¾ŽÉ–imXìlþ@­<•êñ */
- $"4591 1D62 836E D2E3 4CD8 E4A6 F4F4 C456" /* E‘.bƒnÒãLØä¦ôôÄV */
- $"A70C B3BE AA22 A188 DAB5 D3F7 4B7B 865D" /* §.³¾ª"¡ˆÚµÓ÷K{†] */
- $"4D89 77E6 99A6 46C9 14BA 25E1 55C5 ADBD" /* M‰w晦FÉ.º%áUÅ­½ */
- $"4379 96AF 26DA A399 F009 AE75 248B 0285" /* Cy–¯&Ú£™ðÆ®u$‹.… */
- $"B370 5704 6429 C8AF 0BD3 A332 90B2 8351" /* ³pW.d)ȯ.Ó£2²ƒQ */
- $"F715 32C9 347B EADE 2EBB 9D97 BF95 0C5A" /* ÷.2É4{êÞ.»—¿•.Z */
- $"9203 1EC5 7A8E CF46 C28C 39A2 DE74 C656" /* ’..ÅzŽÏFÂŒ9¢ÞtÆV */
- $"F0BF 3ABF CE5F BE71 B7CE 2FF3 F41B F3EA" /* ð¿:¿Î_¾q·Î/óô.óê */
- $"8BE7 B07E AB17 4F87 74FC FDE8 EF9F BF3F" /* ‹ç°~«.O‡tüýè? */
- $"A9EB F3D5 3F3E 83BE 7BAF EA5F E0FE 7ADF" /* ©ëóÕ?>ƒ¾{¯ê_àþzß */
- $"E7A7 7F9D 3FE7 3BF9 FA77 F9FA 3FF9 F7C7" /* ç§.?ç;ùúwùú?ù÷Ç */
- $"E7E9 871D E84F CFE8 83FC FE85 E3BB E7E7" /* çé‡.èOÏèƒüþ…ã»çç */
- $"AFFE 7D7F F9F5 57E7 AF70 6F9D 2DF3 9ED7" /* ¯þ}.ùõWç¯po-óž× */
- $"C81E F903 FEAB 8EF9 F50D F254 3F3E A4D1" /* È.ù.þ«Žùõ.òT?>¤Ñ */
- $"DD53 F3F6 F37E 7EC9 4775 1BE4 77F9 EEBF" /* ÝSóöó~~ÉGu.äwùî¿ */
- $"9ED1 F9DC 00F7 91DD 3D8B A94D D83C 797F" /* žÑùÜ.÷‘Ý=‹©MØ<y. */
- $"4243 1F04 D29C 94E6 FA35 A9C7 9C1C 0762" /* BC..Òœ”æú5©Çœ..b */
- $"AA92 7DF8 65D6 B16D 30C6 E3F2 22D5 8971" /* ª’}øeÖ±m0Æãò"Õ‰q */
- $"F890 651C 37E3 1F4A 29A4 6637 D7AE 7CB9" /* øe.7ã.J)¤f7×®|¹ */
- $"14C7 D06B 2595 45F8 89DC DBAF B284 6ADA" /* .ÇÐk%•Eø‰ÜÛ¯²„jÚ */
- $"E4DB 9D25 F76C CDA3 EB7E 1B5A 4264 8145" /* äÛ%÷lÍ£ë~.ZBdE */
- $"547E 6F18 076D A675 BA1A 1AB1 0BF1 AEB6" /* T~o..m¦uº..±.ñ®¶ */
- $"C8C2 AAE0 489F 4E11 7F77 336A 41A4 C050" /* ȪàHŸN..w3jA¤ÀP */
- $"D19E AE10 BD35 C5EC DA71 BDEF A017 C32D" /* Ñž®.½5ÅìÚq½ï .Ã- */
- $"CB15 0C8E 0B75 C179 FB84 FDF2 DD5D C21F" /* Ë..Ž.uÁyû„ýòÝ]Â. */
- $"56A5 397D C437 A82F 65F9 2E68 A785 0AF3" /* V¥9}Ä7¨/eù.h§…Âó */
- $"B9F0 7781 E6B8 ACFA 09DC B57D 6317 B29B" /* ¹ðw測úÆÜµ}c.²› */
- $"C754 09FC 3635 9854 0DA1 A3BE D3EE CF40" /* ÇTÆü65˜T.¡£¾ÓîÏ@ */
- $"4BE4 A4D9 07C4 D65E 3887 C8A7 CD3A 83F5" /* Kä¤Ù.ÄÖ^8‡È§Í:ƒõ */
- $"DFA8 10A6 BB6D B811 852D 3877 8782 1E66" /* ߨ.¦»m¸.…-8w‡‚.f */
- $"AF11 43B8 CA3A 6146 3657 AFE0 B314 36CB" /* ¯.C¸Ê:aF6W¯à³.6Ë */
- $"8E1C 272D ED4B 634C AABA 0207 6A1A E2E3" /* Ž.'-íKcLªº..j.âã */
- $"C500 C0A4 894A BAD8 C9A1 0AE7 AC8D 750C" /* Å.À¤‰JºØÉ¡Âç¬u. */
- $"7D84 FBCC DB2E EE05 B04A 002B B383 46DE" /* }„ûÌÛ.î.°J.+³ƒFÞ */
- $"C18D 5BBD B442 9E88 BBB2 89CC 0EBA CF5A" /* Á[½´Bžˆ»²‰Ì.ºÏZ */
- $"5616 DDAB ED7B 4C2E 1C82 0C9D 4820 C0E8" /* V.Ý«í{L..‚.H Àè */
- $"1C4E 39A5 9041 9E33 A20A A73D 821A 238A" /* .N9¥Až3¢Â§=‚.#Š */
- $"3B24 14B9 D9A6 95AA F5B0 13C1 8CFD 790F" /* ;$.¹Ù¦•ªõ°.ÁŒýy. */
- $"33CB 82D3 FE12 0F27 F309 7453 05E0 DF8F" /* 3Ë‚Óþ..'óÆtS.àß */
- $"AAE8 F77A 31BA 0118 43E1 7AE7 69DC 5D12" /* ªè÷z1º..CázçiÜ]. */
- $"BD53 9858 EA6D D8D3 174C FE4C F487 3CCF" /* ½S˜XêmØÓ.LþLô‡<Ï */
- $"9098 7872 8FC3 EBAC 4C76 F503 6915 A1B3" /* ˜xrÃë¬Lvõ.i.¡³ */
- $"5FF8 81CD E13D D511 AAB8 5C7B 1376 C87F" /* _øÍá=Õ.ª¸\{.vÈ. */
- $"2DA1 557D 2053 3341 CC15 418C 0911 5378" /* -¡U} S3AÌ.AŒÆ.Sx */
- $"5FFE 324E 1412 2046 B049 3A77 69B7 417F" /* _þ2N.. F°I:wi·A. */
- $"AC17 B8B0 7FDA 6D19 59F0 DD68 8A88 E55A" /* ¬.¸°.Úm.YðÝhŠˆåZ */
- $"8098 0888 3714 713A 1D17 BB8D F01C 6005" /* €˜.ˆ7.q:..»ð.`. */
- $"8F2E 3D20 2753 1BB4 9BE3 DFD1 709F 99EB" /* .= 'S.´›ãßÑpŸ™ë */
- $"DFCC C1B1 717B 7FA3 52BB C12D E6B7 24D2" /* ßÌÁ±q{.£R»Á-æ·$Ò */
- $"F448 F23D C196 1BAA D61B F422 41B4 D620" /* ôHò=Á–.ªÖ.ô"A´Ö */
- $"466D 45F3 06F6 F631 3E88 5CDE F7F6 BC6F" /* FmEó.öö1>ˆ\Þ÷ö¼o */
- $"789C D06C 02CC 2E71 B6B0 03D2 297B BFCD" /* xœÐl.Ì.q¶°.Ò){¿Í */
- $"8C21 67AD CEE0 DB53 5749 A676 690C 11E3" /* Œ!g­ÎàÛSWI¦vi..ã */
- $"5AD2 905C 78E1 4AB0 E60E C920 4ECC 7CB6" /* ZÒ\xáJ°æ.É NÌ|¶ */
- $"A76F 70F1 BCFD AA1D F4D2 E43F E203 D0C8" /* §opñ¼ýª.ôÒä?â.ÐÈ */
- $"E11E 61AF F1A7 5762 600E 65BB D870 818A" /* á.a¯ñ§Wb`.e»ØpŠ */
- $"CDF0 DFC4 8C9C 1926 678B 2732 C52F 98FD" /* ÍðßÄŒœ.&g‹'2Å/˜ý */
- $"33B3 EE23 138D 5E5F C9C3 FEF9 6111 E3E6" /* 3³î#.^_ÉÃþùa.ãæ */
- $"AF79 A8A5 2949 D590 B463 EDF3 F72A 18FD" /* ¯y¨¥)IÕ´cíó÷*.ý */
- $"BB23 233B 7924 2DD1 A335 B949 467E A30C" /* »##;y$-Ñ£5¹IF~£. */
- $"3185 5FE5 DB63 6748 B22D AB3F 8A8C 0926" /* 1…_åÛcgH²-«?ŠŒÆ& */
- $"5450 E925 A69D 1185 7300 D694 EA1F 4DF2" /* TPé%¦.…s.Ö”ê.Mò */
- $"2413 F4ED 6D64 5B74 BBD5 0E65 26EF A8CD" /* $.ôímd[t»Õ.e&ï¨Í */
- $"5806 0C60 404F 90A0 06B6 AFD1 785F 9646" /* X..`@O .¶¯Ñx_–F */
- $"B1AD 2A45 5777 33FA 49DB 8D3D AC2A BAEA" /* ±­*EWw3úIÛ=¬*ºê */
- $"4527 B4DF 481A 6AB9 4485 05E6 7040 1B93" /* E'´ßH.j¹D….æp@.“ */
- $"D6E0 3BBF A334 E13B 68EC 934B C393 B621" /* Öà;¿£4á;hì“KÓ¶! */
- $"CFC8 69BE A6AC 672C 235E F1FC 4480 DE83" /* ÏÈi¾¦¬g,#^ñüD€Þƒ */
- $"32D7 D269 F78C F22D 5B9F F4DF DDDD D6DE" /* 2×Òi÷Œò-[ŸôßÝÝÖÞ */
- $"4C65 4D61 C1F0 26BF E4C3 D7C9 A034 163D" /* LeMaÁð&¿äÃ×É 4.= */
- $"FBAE 0167 4DF0 EBEF AA8B B742 2832 1F67" /* û®.gMðë懲·B(2.g */
- $"8CC0 80D0 4A6B 9843 DE59 2F7B F944 9DA4" /* ŒÀ€ÐJk˜CÞY/{ùD¤ */
- $"343D 9AD9 9E0B C7B5 0B7D 2CA1 F638 8A3B" /* 4=šÙž.ǵ.},¡ö8Š; */
- $"BB38 A39B 025A 9BA9 34AC ACF0 063D 5483" /* »8£›.Z›©4¬¬ð.=Tƒ */
- $"FE57 22E4 EB2C C699 AEF3 8EFB 1C8C A23A" /* þW"äë,Æ™®óŽû.Œ¢: */
- $"2C15 D2EF AC9A 91C9 993A 4CB0 2DDC 0A32" /* ,.Ò﬚‘É™:L°-ÜÂ2 */
- $"14B9 50D2 8579 8F9D 5AF2 88DB E726 1B39" /* .¹PÒ…yZòˆÛç&.9 */
- $"3E06 69F9 F300 09E4 D3E8 BB4C A704 10E0" /* >.iùó.ÆäÓè»L§..à */
- $"F1D0 53DE 91D8 6723 A047 11C7 57B3 C46C" /* ñÐSÞ‘Øg# G.ÇW³Äl */
- $"84A7 C2E1 C7CC 185C 9F21 7E2B 0F2E 64B1" /* „§ÂáÇÌ.\Ÿ!~+..d± */
- $"D734 4142 C65E A2FB 9ABE B62D 076B 2B65" /* ×4ABÆ^¢ûš¾¶-.k+e */
- $"9D6E 63F1 4825 79A9 3936 C7A7 531F EF6A" /* ncñH%y©96ǧS.ïj */
- $"F859 3084 0421 88A9 A648 8641 ACEB 95DE" /* øY0„.!ˆ©¦H†A¬ë•Þ */
- $"2E94 E3C9 442C 13AF CF63 0404 C5C6 5CE2" /* .”ãÉD,.¯Ïc..ÅÆ\â */
- $"CE90 F9CC A1B6 5713 031E C239 174F CC40" /* ÎùÌ¡¶W...Â9.OÌ@ */
- $"BCA4 EA9A EB6A 1D24 7962 F735 AF5A B937" /* ¼¤êšëj.$yb÷5¯Z¹7 */
- $"AC3B A12E 10A8 D332 6FE3 8ED1 6F01 B198" /* ¬;¡..¨Ó2oãŽÑo.±˜ */
- $"1543 A6A1 367E E226 5D76 B860 E0E1 8963" /* .C¦¡6~â&]v¸`àá‰c */
- $"AA7A F9EE DABF DB52 28F6 69F9 273F 8729" /* ªzùîÚ¿ÛR(öiù'?‡) */
- $"1D00 C7D2 20B9 3483 2125 88FC 94C0 54A6" /* ..ÇÒ ¹4ƒ!%ˆü”ÀT¦ */
- $"42FE F4E5 DA50 F495 F88B 5986 21CB 22E8" /* BþôåÚPô•ø‹Y†!Ë"è */
- $"EE5E 0622 2CB0 BCC8 0C6B 2B2B 23EB 0506" /* î^.",°¼È.k++#ë.. */
- $"A40F 09C2 726F 0C1F B8D4 55D3 2FE4 D629" /* ¤.ÆÂro..¸ÔUÓ/äÖ) */
- $"94C2 C913 BB28 4394 A9D2 8684 9E47 0445" /* ”ÂÉ.»(C”©Ò†„žG.E */
- $"B6CF 3E21 7072 B435 310C D7A3 063D 942B" /* ¶Ï>!pr´51.×£.=”+ */
- $"6AE9 350C 9442 C76E 1E6B A8C1 18A3 4309" /* jé5.”BÇn.k¨Á.£CÆ */
- $"6D55 E62F FC4E C4E9 6CF8 241D FAC5 2CC9" /* mUæ/üNÄélø$.úÅ,É */
- $"E020 6B12 31A6 9B11 710B 8850 FABE 5D63" /* à k.1¦›.q.ˆPú¾]c */
- $"068A 4018 2A90 93A5 9715 531E 8E7B AD7A" /* .Š@.*“¥—.S.Ž{­z */
- $"2921 115F 19CE 2B6A F643 DE89 2E76 890B" /* )!._.Î+jöCÞ‰.v‰. */
- $"5A69 1668 6A02 061F 4832 24EB FC82 6B4D" /* Zi.hj...H2$ëü‚kM */
- $"9B08 D22F CBBF D348 D18F 8B0C C684 6851" /* ›.Ò/Ë¿ÓHÑ‹.Æ„hQ */
- $"6CA9 E2FA 43CE 8A9A 7A58 FB28 0208 A6E0" /* l©âúCΊšzXû(..¦à */
- $"1ACF CE23 C624 5A38 C640 72C0 26F1 2818" /* .ÏÎ#Æ$Z8Æ@rÀ&ñ(. */
- $"07FD 74D9 F3D6 ED38 CA01 6485 CE8C 41A3" /* .ýtÙóÖí8Ê.d…ÎŒA£ */
- $"02C6 18E5 E4D2 2043 FA62 8768 3E14 7E80" /* .Æ.åäÒ Cúb‡h>.~€ */
- $"F2EB 67AD F743 75A0 2DDF 8724 1468 F88D" /* òëg­÷Cu -߇$.hø */
- $"9BF3 11EB 4D4C B372 D210 9B58 BAA0 646A" /* ›ó.ëML³rÒ.›Xº dj */
- $"222F 5E5A C781 1D86 5652 1B57 07AF C8FA" /* "/^ZÇ.†VR.W.¯Èú */
- $"9E77 DD7B FCB9 1D4C 8573 7B03 95AC D2DA" /* žwÝ{ü¹.L…s{.•¬ÒÚ */
- $"3314 4FFC CAF4 39B5 EAF4 9617 2CC5 9258" /* 3.OüÊô9µêô–.,Å’X */
- $"8F99 8C44 8D44 DA10 F1A5 51F7 5533 F13B" /* ™ŒDDÚ.ñ¥Q÷U3ñ; */
- $"CDDC B6D6 BE71 3C92 2628 3B69 DC32 C623" /* Íܶ־q<’&(;iÜ2Æ# */
- $"F497 3959 034A 67C3 10A8 26E2 572F B4B1" /* ô—9Y.JgÃ.¨&âW/´± */
- $"6C5C 3E47 FB9F AA7D D9A4 7A08 4BBA E854" /* l\>GûŸª}Ù¤z.KºèT */
- $"4370 CE77 C69A 11EB 1BD8 B9AF 8225 BC8E" /* CpÎwÆš.ë.ع¯‚%¼Ž */
- $"A261 1CAA A74D B531 A0B9 D462 35DF 9C21" /* ¢a.ª§Mµ1 ¹Ôb5ßœ! */
- $"73F1 EAC1 A13C E0BC AF6C 8111 03DF AF1F" /* sñêÁ¡<༯l..߯. */
- $"4748 1866 322C 535A 7C5E D2BC 4304 3541" /* GH.f2,SZ|^Ò¼C.5A */
- $"F14E 8412 296B 2C37 B642 9B4A 6417 EABB" /* ñN„.)k,7¶B›Jd.ê» */
- $"9034 1260 1B81 AFCC F903 4FAA A3F2 339E" /* 4.`.¯Ìù.Oª£ò3ž */
- $"F332 B080 8C32 31D7 4DEA B260 F190 43F1" /* ó2°€Œ21×Mê²`ñCñ */
- $"CCD5 A584 5C1C 343F FB87 CEA5 F246 8EAC" /* ÌÕ¥„\.4?û‡Î¥òFެ */
- $"C407 302C FEE7 3F59 F4B8 74ED ED62 D373" /* Ä.0,þç?Yô¸tííbÓs */
- $"A4BA B53A 0554 5403 9C2C E745 1087 5546" /* ¤ºµ:.TT.œ,çE.‡UF */
- $"2671 7BA6 3A33 703E BEF5 CD28 10A5 462B" /* &q{¦:3p>¾õÍ(.¥F+ */
- $"D902 9493 B2FC 176F 34BA 5A2D D2BC 0CBB" /* Ù.”“²ü.o4ºZ-Ò¼.» */
- $"5AB7 B854 08D3 CD79 3C71 1A89 E643 2FBC" /* Z·¸T.ÓÍy<q.‰æC/¼ */
- $"5A24 FEA6 EC06 1F23 79D9 3886 F6F4 7FB9" /* Z$þ¦ì..#yÙ8†öô.¹ */
- $"F892 1A20 DC66 1EB1 D6FD 1C48 52DE 4267" /* ø’. Üf.±Öý.HRÞBg */
- $"77E2 620B 2DC0 6828 575C F7CA 74BC FE73" /* wâb.-Àh(W\÷Êt¼þs */
- $"FABD C9ED 4E8F 71A7 8CCD 8D80 8BD2 8AA3" /* ú½ÉíNq§ŒÍ€‹ÒŠ£ */
- $"45C0 EF2A 387D 038E 8B00 BA81 12CD F93F" /* EÀï*8}.Ž‹.º.Íù? */
- $"E9BE 9134 2928 439B 69CF 3DB1 5DFC 3DAF" /* 龑4)(C›iÏ=±]ü=¯ */
- $"86CA 34A7 4574 C91C 3F99 3EA9 B6E9 F3AF" /* †Ê4§EtÉ.?™>©¶éó¯ */
- $"6757 09A3 C49E A9AD 7201 BFD9 B3FA 52B0" /* gWƣĞ©­r.¿Ù³úR° */
- $"0000 0030 908B 4E52 45F1 3CBE F04A D2E4" /* ...0‹NREñ<¾ðJÒä */
- $"83AF 6AEA 78E9 A438 C877 BAAD 65CB C703" /* ƒ¯jêxé¤8Èwº­eËÇ. */
- $"70B2 B9DD E19B 6B8C 0CE9 E402 0C9F 94F0" /* p²¹Ýá›kŒ.éä..Ÿ”ð */
- $"21BC 4E05 C03C 012A 66EF D0BC 2B72 292E" /* !¼N.À<.*fïм+r). */
- $"3592 1FDB 2A5C 8D2D C2FF 5C5B 6AB8 F695" /* 5’.Û*\-Âÿ\[j¸ö• */
- $"F279 2C54 0529 555A 6ACA 22A4 C28B D693" /* òy,T.)UZjÊ"¤Â‹Ö“ */
- $"1FC9 4492 43F3 A323 F990 0A31 9356 30D3" /* .ÉD’Có£#ùÂ1“V0Ó */
- $"D6F0 0D36 0091 043F F239 9D1E 114E 3693" /* Öð.6.‘.?ò9..N6“ */
- $"DF1C 23DF A27A 5B11 A44D 9199 07D1 AF2C" /* ß.#ߢz[.¤M‘™.ѯ, */
- $"63EB 21C5 D29F 8644 8C6A 129A 9CB9 ED72" /* cë!ÅÒŸ†DŒj.šœ¹ír */
- $"9286 3E0E B604 539A F262 B727 9284 01F9" /* ’†>.¶.Sšòb·'’„.ù */
- $"5AE1 DA5A 8A02 140E 5275 5433 BCDF 8038" /* ZáÚZŠ...RuT3¼ß€8 */
- $"0050 856F A747 857B 8376 255A 9185 28CC" /* .P…o§G…{ƒv%Z‘…(Ì */
- $"301A EC7C B5D3 89CC A695 1C87 8266 7CA8" /* 0.ì|µÓ‰Ì¦•.‡‚f|¨ */
- $"A203 7467 426E 9507 3DB3 1F90 F66B DC9F" /* ¢.tgBn•.=³.ökÜŸ */
- $"ACF6 CDB2 4FCC 5AE4 2F94 F555 CB9E D8AC" /* ¬öͲOÌZä/”õU˞ج */
- $"950B FF38 0FE4 5056 E5E8 F371 9A98 5697" /* •.ÿ8.äPVåèóqš˜V— */
- $"6319 5197 B545 E594 AADD B2F2 CA27 260D" /* c.Q—µE唪ݲòÊ'&. */
- $"9BAF 0E45 0846 5573 F96B 7AC1 CC89 E86E" /* ›¯.E.FUsùkzÁ̉èn */
- $"61E6 72E2 05E3 9F8D 26D8 F178 BCC0 0B18" /* aærâ.ãŸ&Øñx¼À.. */
- $"967C EA80 F7C1 45AE 8FAE A41C 41B6 438E" /* –|ê€÷ÁE®®¤.A¶CŽ */
- $"46EF 1094 D558 01A8 BBAD 7380 DA27 2772" /* Fï.”ÕX.¨»­s€Ú''r */
- $"9D67 1330 A48C 62EA 0643 14EC 3E22 A055" /* g.0¤Œbê.C.ì>" U */
- $"4E39 4E23 853D C587 99C8 CFD2 AEBB 9843" /* N9N#…=Ň™ÈÏÒ®»˜C */
- $"ECC9 0241 3253 8CF1 E068 1936 3BB2 56D3" /* ìÉ.A2SŒñàh.6;²VÓ */
- $"46F7 6A71 98D1 A300 1337 B3B0 7ABB 5752" /* F÷jq˜Ñ£..7³°z»WR */
- $"DB7A 7F85 5CFE 59DE A852 6987 DC11 C6B5" /* Ûz.…\þYÞ¨Ri‡Ü.Ƶ */
- $"E45B 7DD1 1F3A D566 C16D 3FBF 7BAD 7201" /* ä[}Ñ.:ÕfÁm?¿{­r. */
- $"B71C C74C A678 C2BB 10FD 534A 5E5D 79C0" /* ·.ÇL¦x».ýSJ^]yÀ */
- $"000C 2336 9113 B9C5 5D4A 1756 1C8B 0CD6" /* ..#6‘.¹Å]J.V.‹.Ö */
- $"AA8B DFF5 6CE3 CDAB B9B4 D85C 93FF 76AA" /* ª‹ßõlãÍ«¹´Ø\“ÿvª */
- $"15CF CF39 A864 B236 A172 03A1 65A1 9F76" /* .ÏÏ9¨d²6¡r.¡e¡Ÿv */
- $"FF55 00DE C7D0 C767 2787 9EB3 7CE5 C5BC" /* ÿU.ÞÇÐÇg'‡ž³|åż */
- $"8E08 6085 37A2 229C 73D3 2CC5 F6E8 AA1B" /* Ž.`…7¢"œsÓ,Åöèª. */
- $"AF13 15FD EB95 2609 6006 23C6 7910 8FFE" /* ¯..ýë•&Æ`.#Æy.þ */
- $"8C5E 60A6 A558 E899 0A05 0F37 EC94 8E51" /* Œ^`¦¥Xè™Â..7씎Q */
- $"7838 9A11 8483 88B0 E284 B88D CDEA 9D56" /* x8š.„ƒˆ°â„¸ÍêV */
- $"5C7E CFA2 8001 847E ABC9 360E 17EA 2D34" /* \~Ï¢€.„~«É6..ê-4 */
- $"8314 96C0 3810 D88F A54E 6E7C 6030 76FA" /* ƒ.–À8.Ø¥Nn|`0vú */
- $"18A4 A549 37FC 11F6 E77F A883 C794 71AC" /* .¤¥I7ü.öç.¨ƒÇ”q¬ */
- $"55F1 7F88 664A FEE4 01C4 5576 1BE6 9C41" /* Uñ.ˆfJþä.ÄUv.æœA */
- $"D800 6121 2FC0 E681 A16E 21AF D5FE 0E80" /* Ø.a!/Àæ¡n!¯Õþ.€ */
- $"A800 0000 3090 8C40 9184 82DA 7187 51C6" /* ¨...0Œ@‘„‚Úq‡QÆ */
- $"44DC C420 FF13 98AD D100 2C07 132C 8D6C" /* DÜÄ ÿ.˜­Ñ.,..,l */
- $"5D16 A089 D8F6 E77F A870 24F1 5461 DB69" /* ]. ‰Øöç.¨p$ñTaÛi */
- $"0F41 5029 7A41 B55F 0000 0184 846A 850C" /* .AP)zAµ_...„„j…. */
- $"241E E628 EDA6 4000 3090 6AA2 F6E7 7FA6" /* $.æ(í¦@.0j¢öç.¦ */
- $"26C9 5EDE 9BB6 A1B1 51E6 8D5D F800 0061" /* &É^Þ›¶¡±Qæ]ø..a */
- $"19B3 E47D 6F6F DB03 0885 4A53 27BA 38F5" /* .³ä}ooÛ..…JS'º8õ */
- $"35A0 1AB9 0A95 8FAE 85E3 F528 5A8B E645" /* 5 .¹Â•®…ãõ(Z‹æE */
- $"8419 0456 6A38 D0DA 4948 8987 2323 1216" /* „..Vj8ÐÚIH‰‡##.. */
- $"A4F8 FD1A C374 D30C BF43 CD86 B984 F23C" /* ¤øý.ÃtÓ.¿C͆¹„ò< */
- $"5487 B47F E217 F15A D8CF A66A 96A9 EAF3" /* T‡´.â.ñZØÏ¦j–©êó */
- $"F966 0205 D320 1556 5C3C 073A 8E66 1E3F" /* ùf..Ó .V\<.:Žf.? */
- $"A74E FF2C BC45 E9DB 3B25 FF7F 46AD 13A9" /* §Nÿ,¼EéÛ;%ÿ.F­.© */
- $"5C21 458B 6AD4 829C 1DFB 54BA E5F2 3C76" /* \!E‹jÔ‚œ.ûTºåò<v */
- $"3898 11F6 D710 7470 00FC 0742 CA59 9E40" /* 8˜.ö×.tp.ü.BÊYž@ */
- $"757C 5952 61FF 4D28 0991 1673 9B01 06B9" /* u|YRaÿM(Æ‘.s›..¹ */
- $"3999 E9B5 06CD B1DA CB08 FF19 DE70 8D10" /* 9™éµ.ͱÚË.ÿ.Þp. */
- $"E725 848E D27D 2B0B 54F0 B60B 26AB CD92" /* ç%„ŽÒ}+.Tð¶.&«Í’ */
- $"E4F8 C007 FF68 6933 E2FF 31D5 435B FF7F" /* äøÀ.ÿhi3âÿ1ÕC[ÿ. */
- $"9A8E 9845 007F FEDA 4C63 9892 513A ABD9" /* šŽ˜E..þÚLc˜’Q:«Ù */
- $"A98A C012 5C99 31C0 D48F E334 671D A695" /* ©ŠÀ.\™1ÀÔã4g.¦• */
- $"C7EF 3AAA FF37 D381 4F42 983F FC4D AE82" /* Çï:ªÿ7ÓOB˜?üM®‚ */
- $"FF43 6555 9E7F 10A3 7B95 415D 41FF 20B3" /* ÿCeUž..£{•A]Aÿ ³ */
- $"8CB1 7302 0000 0000 584E AB14 398C A865" /* Œ±s.....XN«.9Œ¨e */
- $"5A7B 1650 52EB 8BCE 3E92 461D 071B 8F21" /* Z{.PRë‹Î>’F...! */
- $"2CFF 4F5F FD2E 999E B77D A47D 61B4 2C01" /* ,ÿO_ý.™ž·}¤}a´,. */
- $"D397 493D CB48 AB27 EB4A 13A7 8C89 7F64" /* Ó—I=ËH«'ëJ.§Œ‰.d */
- $"6C08 FF21 9696 98C7 6248 1615 541F EC81" /* l.ÿ!––˜ÇbH..T.ì */
- $"8E18 FAED 5257 3D01 2CBB 74C1 DA64 81A0" /* Ž.úíRW=.,»tÁÚd  */
- $"39BF B272 4068 15E8 A44A 007C 732C D9DC" /* 9¿²r@h.è¤J.|s,ÙÜ */
- $"1CF8 4612 8611 A36D 67BC 6E6A EA14 9D87" /* .øF.†.£mg¼njê.‡ */
- $"2962 C4B4 5442 9564 BFAA D0FB 991F 4288" /* )bÄ´TB•d¿ªÐû™.Bˆ */
- $"7CB2 2A41 333E 7827 5070 F3A6 67FF 7FFF" /* |²*A3>x'Ppó¦gÿ.ÿ */
- $"7601 CFFE E44B 4413 809B 3877 B59D BC19" /* v.ÏþäKD.€›8wµ¼. */
- $"548F 0A5B C1E9 A8D7 6B5D 8EC8 8A1A BB3D" /* TÂ[Áé¨×k]ŽÈŠ.»= */
- $"3CD1 3139 57CF 9E94 00E9 CF6E 3830 3561" /* <Ñ19WÏž”.éÏn805a */
- $"8DE4 A59F FD1B 45CF C608 D0FD 5D48 485E" /* 䥟ý.EÏÆ.Ðý]HH^ */
- $"D5A3 30A5 F9EE 5D55 B9C2 E552 3A9F B087" /* Õ£0¥ùî]U¹ÂåR:Ÿ°‡ */
- $"FE87 5DBC 5E73 0F16 9221 2B0D F399 AB6F" /* þ‡]¼^s..’!+.ó™«o */
- $"9950 0000 0000 0000 0008 2444 88CE 3BBD" /* ™P........$DˆÎ;½ */
- $"CC78 4932 9C47 DEFA 74E7 91BF 9827 FF7B" /* ÌxI2œGÞútç‘¿˜'ÿ{ */
- $"77EB 9B1B 9F7F FDAB 6552 35A1 0C22 E9C6" /* wë›.Ÿ.ý«eR5¡."éÆ */
- $"42E3 FF7F FF7F E9FD A23B 2F7D 3ADD FC90" /* Bãÿ.ÿ.éý¢;/}:Ýü */
- $"E4A1 F8B9 0560 0F86 D7FE 3F46 C953 2A03" /* 䡸¹.`.†×þ?FÉS*. */
- $"F1C7 F5AE D0C4 B743 EA67 B694 E47D 45CD" /* ñÇõ®ÐÄ·Cêg¶”ä}EÍ */
- $"6F92 178A E383 8B71 800E D9AF A55A F149" /* o’.Šãƒ‹q€.Ù¯¥ZñI */
- $"A838 5671 4C9A 8915 447A CDA9 C6B7 DD68" /* ¨8VqLš‰.DzͩƷÝh */
- $"A5FB F404 CF63 A62E CC5E 89D3 FDB2 C841" /* ¥ûô.Ïc¦.Ì^‰Óý²ÈA */
- $"7A37 5B5D 5958 4B46 20B1 D389 5188 F9FE" /* z7[]YXKF ±Ó‰Qˆùþ */
- $"8FF1 D718 6C8C 3254 0000 0000 0000 0000" /* ñ×.lŒ2T........ */
- $"0000 00A1 EBEC C33A 8622 D0FF 7FFF 7FFF" /* ...¡ëìÃ:†"Ðÿ.ÿ.ÿ */
- $"705D C7FE 49E7 01B7 A65D D5BC 2041 80B0" /* p]ÇþIç.·¦]Õ¼ A€° */
- $"89ED F68A A000 F438 EBD0 C908 0B67 414F" /* ‰íöŠ .ô8ëÐÉ..gAO */
- $"C8F1 4312 2EC8 05E6 CA19 184F FF5B BA24" /* ÈñC..È.æÊ..Oÿ[º$ */
- $"57E8 A6B4 FBD3 FF79 4D8E FF44 BC50 6938" /* W覴ûÓÿyMŽÿD¼Pi8 */
- $"137F FF7D 6251 8D1A 9B33 CF7E 0BCB EAD7" /* ..ÿ}bQ.›3Ï~.Ëê× */
- $"2E0D EAE0 0003 0906 AA2B 66A8 C950 0000" /* ..êà..Æ.ª+f¨ÉP.. */
- $"0000 0000 0000 0000 0001 1E1F F600 1848" /* ............ö..H */
- $"4BF6 7A7C F92D 3E7A 437E 2254 51EB 4AF5" /* Köz|ù->zC~"TQëJõ */
- $"C6BF 442A 12CD 51FF 7FFE B8AE D0C4 B1D0" /* Æ¿D*.ÍQÿ.þ¸®ÐıР*/
- $"7CF7 019D A0ED 2CC4 01BC 1A94 212D 43EF" /* |÷. í,Ä.¼.”!-Cï */
- $"1274 9B67 94D5 062D 5FCC E23C 4816 416B" /* .t›g”Õ.-_Ìâ<H.Ak */
- $"1540 59C2 1D35 213D A11C EE70 8D15 5394" /* .@YÂ.5!=¡.îp.S” */
- $"53C6 29CF 4E19 F4CF 5B94 7FFF 7F8B 2813" /* SÆ)ÏN.ôÏ[”.ÿ.‹(. */
- $"3E95 DE81 30D0 3188 2A75 4F35 CB11 DDD5" /* >•Þ0Ð1ˆ*uO5Ë.ÝÕ */
- $"7FFD A983 95A9 71E7 A7A3 7D3F F944 0A7E" /* .ý©ƒ•©qç§£}?ùDÂ~ */
- $"24D9 966F 6B6A 0FD0 23AC 7000 0000 0000" /* $Ù–okj.Ð#¬p..... */
- $"0009 D4AF 9196 E5A4 B8AC 407F F9EE C709" /* .ÆÔ¯‘–夸¬@.ùîÇÆ */
- $"F927 08C3 CA6C 3A3A D90F E306 BCC4 6D6C" /* ù'.ÃÊl::Ù.ã.¼Äml */
- $"C7A9 F042 6F4C FDC9 60AB A087 6338 8F12" /* Ç©ðBoLýÉ`« ‡c8. */
- $"4D29 D00C C575 C7B5 9FA4 E96C 1FA0 AAFB" /* M)Ð.ÅuǵŸ¤él. ªû */
- $"09E9 8DF9 1BE0 C62D 3C1D F55B DD77 A0FD" /* Æéù.àÆ-<.õ[Ýw ý */
- $"5C16 D959 BA08 0000 0000 0000 0145 AE01" /* \.ÙYº........E®. */
- $"712A 0E06 1212 70CD 94A8 0A2C 18F5 1E3B" /* q*....pÍ”¨Â,.õ.; */
- $"52FA C8F6 56F3 F7E4 69E6 54A0 3FF6 2487" /* RúÈöVó÷äiæT ?ö$‡ */
- $"C65F 0EFF 7F4F 8D07 C817 FE78 727D 3C75" /* Æ_.ÿ.O.È.þxr}<u */
- $"E4C6 1003 FECF 3E7E 6252 08C0 4A83 50D7" /* äÆ..þÏ>~bR.ÀJƒP× */
- $"DADA 8602 5949 900F D2B6 D10D 2661 3014" /* ÚÚ†.YI.Ò¶Ñ.&a0. */
- $"4541 17FF 2106 00DF AC82 0046 09BB A5AF" /* EA.ÿ!..߬‚.FÆ»¥¯ */
- $"CE51 0EBF F9AD 787A 907F 9F9A 628F E16B" /* ÎQ.¿ù­xz.Ÿšbák */
- $"C015 137E 9C68 FCFA A817 FF7F DD6B FDB6" /* À..~œhüú¨.ÿ.Ýký¶ */
- $"3DA3 7C9D 3309 0B8A B551 C370 4401 CD7F" /* =£|3Æ.еQÃpD.Í. */
- $"7503 8425 E297 1B3F FF49 4FF8 3583 685A" /* u.„%â—.?ÿIOø5ƒhZ */
- $"B273 A7F7 CEBF F27E D78C 3E35 5332 152B" /* ²s§÷οò~׌>5S2.+ */
- $"033C C7FF 7B97 1AF0 F2A4 3C88 CC7B B96E" /* .<Çÿ{—.ðò¤<ˆÌ{¹n */
- $"65B3 533C F2F8 5E4B 6DBF 7D78 A316 310F" /* e³S<òø^Km¿}x£.1. */
- $"6B09 FD62 88D7 77FF 7447 524E C235 00A3" /* kÆýbˆ×wÿtGRNÂ5.£ */
- $"8F5A 4BEE D240 6154 C17C 2CC2 68F0 A959" /* ZKîÒ@aTÁ|,Âhð©Y */
- $"2F12 9B74 7E8E 423F BB1D BC9A C75B C618" /* /.›t~ŽB?».¼šÇ[Æ. */
- $"19D1 C6CB 0A15 BD77 99BD 96D3 CC07 F5AC" /* .ÑÆËÂ.½w™½–ÓÌ.õ¬ */
- $"D2ED DE5E F19D 5CFC B2B0 5407 0386 32C6" /* ÒíÞ^ñ\ü²°T..†2Æ */
- $"5F49 7BAD 3270 BF81 CF97 C934 7E23 7237" /* _I{­2p¿Ï—É4~#r7 */
- $"727B 0FA2 6DB0 D717 8C73 B109 E089 AAC5" /* r{.¢m°×.Œs±Æà‰ªÅ */
- $"7D98 9061 2956 EA75 0135 E870 3430 4E9B" /* }˜a)Vêu.5èp40N› */
- $"C76C D3D6 7EEB 83DB 9EEB C9A0 983D 1327" /* ÇlÓÖ~ëƒÛžëÉ ˜=.' */
- $"62D8 FD62 CA51 7135 80B0 ABFF 431B 9843" /* bØýbÊQq5€°«ÿC.˜C */
- $"68B4 A929 44E4 1F3E E3A1 22AA 5E87 579C" /* h´©)Dä.>ã¡"ª^‡Wœ */
- $"745B 9CA4 438C BFC2 9A1B 17BE BA75 06E4" /* t[œ¤CŒ¿Âš..¾ºu.ä */
- $"0108 698C E4F2 341C 24CC 7913 6237 ED48" /* ..iŒäò4.$Ìy.b7íH */
- $"E797 4D7A 0D5A D1EA ACDF F974 4F9F 9139" /* ç—Mz.ZÑê¬ßùtOŸ‘9 */
- $"6A87 3972 A1C8 0A2B 1E8B 6DB7 B811 4AB0" /* j‡9r¡ÈÂ+.‹m·¸.J° */
- $"EEE8 BB23 959C 239D 4165 DBED ACE4 F133" /* îè»#•œ#AeÛí¬äñ3 */
- $"8276 40BB C447 29FE 3EB6 5BA4 A6D0 2441" /* ‚v@»ÄG)þ>¶[¤¦Ð$A */
- $"1431 8B2D 8BFD 96B7 C8C2 9F9B DFB9 2B06" /* .1‹-‹ý–·ÈŸ›ß¹+. */
- $"E191 00FF 7E4B 8281 D609 D163 B8CB AF9A" /* á‘.ÿ~K‚ÖÆÑc¸Ë¯š */
- $"0995 7385 27FC 3C6A 5310 024D BAD1 8013" /* Æ•s…'ü<jS..MºÑ€. */
- $"8995 3DF4 FA80 FE12 8F5F 40E5 09E6 E7E8" /* ‰•=ôú€þ._@寿çè */
- $"C5E7 1309 3E97 E278 0228 1693 F565 F83E" /* Åç.Æ>—âx.(.“õeø> */
- $"4161 0037 E0AA D0CC 3AED 4E56 04E8 4456" /* Aa.7àªÐÌ:íNV.èDV */
- $"6E50 4626 C7E0 0790 014E 329B 0DDB D87D" /* nPF&Çà..N2›.ÛØ} */
- $"4532 6482 3F51 D651 3F62 D6EB 3BCA 75EB" /* E2d‚?QÖQ?bÖë;Êuë */
- $"5444 A42F 3CFB 4146 19FB 5376 876F 6BC1" /* TD¤/<ûAF.ûSv‡okÁ */
- $"B80B 7787 71DF 4CAA D70A 98BC 98E1 15A1" /* ¸.w‡qßLª×˜¼˜á.¡ */
- $"7996 F17F FF7A 91CF 350C FA04 5753 7ECB" /* y–ñ.ÿz‘Ï5.ú.WS~Ë */
- $"29F1 A4AD F335 59DB A580 EAA3 98AD FEB0" /* )ñ¤­ó5YÛ¥€ê£˜­þ° */
- $"275E BABE 6679 9AD4 B246 75F2 ECAA B042" /* '^º¾fyšÔ²Fuò쪰B */
- $"92C9 745E 1C58 58FF 2570 9228 4EAF 6F65" /* ’Ét^.XXÿ%p’(N¯oe */
- $"56F3 1D0C 85AA 9468 8000 0000 0101 3082" /* Vó..…ª”h€.....0‚ */
- $"08FD E30F FF75 70BF FCCA 2225 E5FC 3464" /* .ýã.ÿup¿üÊ"%åü4d */
- $"00CA 6C43 E833 80DE 2895 5F84 4B08 CEFA" /* .ÊlCè3€Þ(•_„K.Îú */
- $"AA94 EE33 24E7 CA20 A668 4717 FD5F F7F2" /* ª”î3$çÊ ¦hG.ý_÷ò */
- $"59E7 D6C6 6D0D 8E0F 1AC3 BBFA 3890 8ACB" /* YçÖÆm.Ž..ûú8ŠË */
- $"9250 6D82 E892 D4B9 1F14 D987 9818 877A" /* ’Pm‚è’Ô¹..Ù‡˜.‡z */
- $"66F0 905A B088 D761 B529 F02A 6964 6C65" /* fðZ°ˆ×aµ)ð*idle */
- $"8FB8 9A87 7771 9A12 C8A6 7F9C 9905 D643" /* ¸š‡wqš.Ȧ.œ™.ÖC */
- $"E554 91F5 0C26 4299 30C6 BC87 B38C 86FB" /* åT‘õ.&B™0Ƽ‡³Œ†û */
- $"ED50 C019 3822 52A8 97C6 1F49 176D FB8C" /* íPÀ.8"R¨—Æ.I.mûŒ */
- $"87B7 E37C 196E 3695 357A E2B8 FDE5 736E" /* ‡·ã|.n6•5zâ¸ýåsn */
- $"DF11 6026 3CD9 51CF 2A50 6F8A 53B0 0F16" /* ß.`&<ÙQÏ*PoŠS°.. */
- $"938B 745A F84D 571C A582 9723 90B4 49D7" /* “‹tZøMW.¥‚—#´I× */
- $"B11D 7BA6 45C1 2AFA D519 A471 60A3 17A9" /* ±.{¦EÁ*úÕ.¤q`£.© */
- $"2C13 6E04 D58E 3F37 0115 E4AE F51C 1BA8" /* ,.n.ÕŽ?7..ä®õ..¨ */
- $"EF7F 4C9F 7B47 8C5A D1D6 CAC7 D416 D6D4" /* ï.LŸ{GŒZÑÖÊÇÔ.ÖÔ */
- $"7F05 9504 5685 0D6D E0E8 6809 9307 7864" /* ..•.V….màèhÆ“.xd */
- $"1A86 1BA6 A321 D08C 1B0C 0981 9395 6DC0" /* .†.¦£!ÐŒ..Æ“•mÀ */
- $"C74F ECF7 CA1B FF4B 1896 BDBE 4876 8A4B" /* ÇOì÷Ê.ÿK.–½¾HvŠK */
- $"519F CC3C 7813 BE21 C40C B001 30F4 4FC7" /* QŸÌ<x.¾!Ä.°.0ôOÇ */
- $"B76C B9FA 26F6 38C8 116D B8F0 0B9D 818F" /* ·l¹ú&ö8È.m¸ð. */
- $"56F9 F934 AE60 71FD E583 8D07 A4A4 DE41" /* Vùù4®`qýåƒ.¤¤ÞA */
- $"FB75 B83F 384B 11C9 CC5E CD9D FF4C 05A8" /* ûu¸?8K.ÉÌ^ÍÿL.¨ */
- $"D59F 1E59 4797 FF7F DFD8 391C E8BA 72E2" /* ÕŸ.YG—ÿ.ߨ9.èºrâ */
- $"C1F8 9F5C 5317 01E3 EC2D 4120 97D2 BAEC" /* ÁøŸ\S..ãì-A —Òºì */
- $"DBB0 FF30 FC56 2E43 3716 1B7B A8CD 19AE" /* Û°ÿ0üV.C7..{¨Í.® */
- $"7FFF 7FF4 468B FF45 749B 3C67 EE31 1651" /* .ÿ.ôF‹ÿEt›<gî1.Q */
- $"17B2 B21C A982 A185 E8A3 03BC 2DCB C09A" /* .²².©‚¡…è£.¼-ËÀš */
- $"8522 64CF BB21 6955 068D F002 871B 05F3" /* …"dÏ»!iU.ð.‡..ó */
- $"9F44 7384 D624 E1FA A24D 67C7 BC5E F7BF" /* ŸDs„Ö$áú¢MgǼ^÷¿ */
- $"59BC DC3C BE4B 1456 0C6F F2C1 0841 038D" /* Y¼Ü<¾K.V.oòÁ.A. */
- $"723C 14FA 4F19 0AD4 1F88 0A1B FF14 3D93" /* r<.úO.ÂÔ.ˆÂ.ÿ.=“ */
- $"27AA 6E0B 4AA7 6A11 E06D 5D82 C930 1B53" /* 'ªn.J§j.àm]‚É0.S */
- $"0227 A9AA 253A 41E6 31D5 8B87 DC08 819B" /* .'©ª%:Aæ1Õ‹‡Ü.› */
- $"E5EE EA0F 6AA0 0000 0006 9BC0 594E 0004" /* åîê.j ....›ÀYN.. */
- $"D326 312C 0364 8835 C4D7 5040 3724 3CD9" /* Ó&1,.dˆ5Ä×P@7$<Ù */
- $"B889 2E14 12BC F0AD 9D2E 326B 1654 5952" /* ¸‰...¼ð­.2k.TYR */
- $"2B5F 1A9D 5403 C9C5 A731 1B3C 3443 783C" /* +_.T.Éŧ1.<4Cx< */
- $"A459 248B BBC7 DEDC 74AD E2A1 D647 5047" /* ¤Y$‹»ÇÞÜt­â¡ÖGPG */
- $"AD17 15AF FF5C 88C4 025F 4361 3F83 BFC9" /* ­..¯ÿ\ˆÄ._Ca?ƒ¿É */
- $"FF6D 7E58 128D 33D7 7076 E73A 9CF6 76D8" /* ÿm~X.3×pvç:œövØ */
- $"A0FF 2C44 2029 0B59 B427 3BDC 915B 87CF" /*  ÿ,D ).Y´';Ü‘[‡Ï */
- $"75D6 EC52 7793 6DFA A4E2 9E2D 7D25 FBC2" /* uÖìRw“mú¤âž-}%û */
- $"2028 DE78 D868 BEC5 E9D2 BFFA 8B12 9265" /* (ÞxØh¾ÅéÒ¿ú‹.’e */
- $"B01D 92F7 F71E 8782 F1CD 4E98 B46E 6DA5" /* °.’÷÷.‡‚ñÍN˜´nm¥ */
- $"8825 F851 1CE9 9F21 D8E2 86EB BAF4 126F" /* ˆ%øQ.éŸ!Øâ†ëºô.o */
- $"9CB3 0144 009A 6F38 0919 9C1F D0CE D23C" /* œ³.D.šo8Æ.œ.ÐÎÒ< */
- $"C9DD 9273 D8F6 6733 6E5A 2E7A 635C 8723" /* ÉÝ’sØög3nZ.zc\‡# */
- $"6E04 1283 1A43 02CA 74E4 8000 0309 08DB" /* n..ƒ.C.Êtä€..Æ.Û */
- $"EF05 DC00 D116 0D58 1A69 2055 1BA0 D8DE" /* ï.Ü.Ñ..X.i U. ØÞ */
- $"34B6 EA40 CC06 C673 559A 75F2 9B58 C474" /* 4¶ê@Ì.ÆsUšuò›XÄt */
- $"DD4C AB9A 9E6D 653B FCDF 4F33 3707 105E" /* ÝL«šžme;üßO37..^ */
- $"DBCE D327 45FB C663 E1AF 375B B106 B0B8" /* ÛÎÓ'EûÆcá¯7[±.°¸ */
- $"26EE AE4B 538A CF74 588E 928B 58C7 2D93" /* &î®KSŠÏtXŽ’‹XÇ-“ */
- $"371E BC81 0ED0 9F2C 1A18 8DD7 7E65 4FBF" /* 7.¼.П,..×~eO¿ */
- $"511B 63A1 8F26 2A08 A4D3 2BF3 96E6 FC32" /* Q.c¡&*.¤Ó+ó–æü2 */
- $"D457 8287 D843 6D19 2458 0EA4 AC8F 0512" /* ÔW‚‡ØCm.$X.¤¬.. */
- $"831D D4CA 9BFF 5A6E 951A 5897 451F 750C" /* ƒ.ÔÊ›ÿZn•.X—E.u. */
- $"CAD4 89C1 94A7 4BFA 4030 4828 1E37 C049" /* ÊÔ‰Á”§Kú@0H(.7ÀI */
- $"34C4 54B1 1054 2645 14E5 6DFF 7FFF 7328" /* 4ÄT±.T&E.åmÿ.ÿs( */
- $"F1A4 AAA2 4FD2 507D 86D5 FF7F FA43 F49A" /* ñ¤ª¢OÒP}†Õÿ.úCôš */
- $"5049 0839 5964 8186 EE46 1867 158E 9E2C" /* PI.9Yd†îF.g.Žž, */
- $"D618 8FF5 D416 6838 6187 9CF7 21BC DE1F" /* Ö.õÔ.h8a‡œ÷!¼Þ. */
- $"F84F F4E9 ACDB ECD8 6CA6 6725 85B4 4049" /* øOôé¬ÛìØl¦g%…´@I */
- $"AA9E 4935 7E1F 54E7 B0D5 A026 B073 899B" /* ªžI5~.Tç°Õ &°s‰› */
- $"51C4 8C2E 483C B3BF 38A0 4BCF 2042 EE90" /* QÄŒ.H<³¿8 KÏ Bî */
- $"4E1B 8C94 420F 99A7 9EA1 7D96 12A3 8C8D" /* N.Œ”B.™§ž¡}–.£Œ */
- $"819B C97D C518 51CB 0D8A A7A1 7159 EB10" /* ›É}Å.QË.Ч¡qYë. */
- $"4A27 5CD0 0ED7 2688 5F74 CE10 DF6A 5B4F" /* J'\Ð.×&ˆ_tÎ.ßj[O */
- $"E370 A282 105D 2F43 6E74 6B07 05EC 880E" /* ãp¢‚.]/Cntk..ìˆ. */
- $"15AF 5118 9D27 327D 2552 9996 020B 2D9A" /* .¯Q.'2}%R™–..-š */
- $"9AFC 6849 6068 6491 42FA 889C 7949 285A" /* šühI`hd‘BúˆœyI(Z */
- $"7FFE 5B6D DAF2 7FFF 772D E08E B9E4 65A3" /* .þ[mÚò.ÿw-àŽ¹äe£ */
- $"B49A DDC8 FF52 8DA3 B318 F84F F4E9 99ED" /* ´šÝÈÿR£³.øOôé™í */
- $"48C4 CA7E BE77 2634 6A22 1FAD 4752 8D9B" /* HÄÊ~¾w&4j".­GR› */
- $"B935 0449 1A27 9EAB B000 C242 3BB7 72B7" /* ¹5.I.'ž«°.ÂB;·r· */
- $"3ACC B41F 0AC9 CFFD 58DA D99F 498A 21CF" /* :Ì´.ÂÉÏýXÚÙŸIŠ!Ï */
- $"50B8 A155 9BB3 B3DA 13FE 251F 14F2 3431" /* P¸¡U›³³Ú.þ%..ò41 */
- $"6DBF 2774 3EFC 55BB 9CB3 40A4 CA00 A112" /* m¿'t>üU»œ³@¤Ê.¡. */
- $"3E83 51D4 9D13 DE0D F86D 3384 AAE7 9074" /* >ƒQÔ.Þ.øm3„ªçt */
- $"F7CF 4509 F99A 70B2 2E74 43C3 1363 021F" /* ÷ÏEÆùšp².tCÃ.c.. */
- $"6482 E471 22FA 6265 2DF9 C302 43F8 9053" /* d‚äq"úbe-ùÃ.CøS */
- $"0AE9 15A2 28D4 FD7C 05AF C7B8 26D5 7C0F" /* Âé.¢(Ôý|.¯Ç¸&Õ|. */
- $"22E0 4735 518D BE4B 4E83 1EF8 3FFA BA23" /* "àG5Q¾KNƒ.ø?úº# */
- $"3AE8 F76B 1D92 2038 64C1 EA73 30FC CE72" /* :è÷k.’ 8dÁês0üÎr */
- $"0CA5 6697 157E 55C4 8BAE E703 6FF5 F743" /* .¥f—.~UÄ‹®ç.oõ÷C */
- $"B456 C85F 3BFF 2629 95B7 02F4 F580 A49B" /* ´VÈ_;ÿ&)•·.ôõ€¤› */
- $"1587 2316 D131 66C1 C6DB F3DC C409 D801" /* .‡#.Ñ1fÁÆÛóÜÄÆØ. */
- $"E2DA 30B6 73FD 99EF AA26 25D7 DF07 FBEB" /* âÚ0¶sý™ïª&%×ß.ûë */
- $"094E 2E8E BD11 3C49 81BA E6BE 7666 ECBE" /* ÆN.޽.<Iºæ¾vfì¾ */
- $"59D2 4ACC B4CE 3FAD 2173 25CB E42F 37B8" /* YÒJÌ´Î?­!s%Ëä/7¸ */
- $"F3CC 79EF 695C 10F4 0381 2D14 1B0F D632" /* óÌyïi\.ô.-...Ö2 */
- $"8A1E 9C29 F617 6A4B 204E A147 C08D 1AA5" /* Š.œ)ö.jK N¡GÀ.¥ */
- $"7418 DED9 DE83 A555 A75B AB00 C650 247F" /* t.ÞÙÞƒ¥U§[«.ÆP$. */
- $"0222 5558 731B 54DB 14F6 3A0E 1FAD A8D8" /* ."UXs.TÛ.ö:..­¨Ø */
- $"F327 DC8F AF3F 630B 3BA9 7933 8D30 458C" /* ó'ܯ?c.;©y30EŒ */
- $"4C2F 6E3A 0A64 DDC5 926A 71CB 2347 EE4D" /* L/n:ÂdÝÅ’jqË#GîM */
- $"647B D94D BE24 7F62 6A14 EBE2 696F 8735" /* d{ÙM¾$.bj.ëâio‡5 */
- $"A96F E268 6912 A4A9 3254 0293 CB09 0DC0" /* ©oâhi.¤©2T.“ËÆ.À */
- $"206B EB7B F6B9 0643 5E74 4F2C 555A AE2D" /* kë{ö¹.C^tO,UZ®- */
- $"B16B 7FA3 8ADE 7EAC 764F 9A20 BC94 05F1" /* ±k.£ŠÞ~¬vOš ¼”.ñ */
- $"9AAC 0118 36B8 6B30 D696 6E84 EEC2 5342" /* š¬..6¸k0Ö–n„îÂSB */
- $"03A8 EFD3 CB37 D50D F676 35DB AD6C 280A" /* .¨ïÓË7Õ.öv5Û­l( */
- $"DB04 D23A 0922 A2E3 5F45 EBD1 5C49 F6AA" /* Û.Ò:Æ"¢ã_EëÑ\Iöª */
- $"4579 1BA2 D94E D3F0 7A7E C24E 79B0 5D24" /* Ey.¢ÙNÓðz~ÂNy°]$ */
- $"B98E 23E7 4C4F 54D9 A3CE 389F 63F6 2426" /* ¹Ž#çLOTÙ£Î8Ÿcö$& */
- $"7087 D921 86D6 709F 768D 5684 BB90 47B7" /* p‡Ù!†ÖpŸvV„»G· */
- $"AC32 98D7 E247 3668 E954 8105 EE44 AF58" /* ¬2˜×âG6héT.îD¯X */
- $"13FF 573A 9F89 06C9 FB77 277E 08C9 09E9" /* .ÿW:Ÿ‰.Éûw'~.ÉÆé */
- $"B180 F96E C5AB 1E5D 3029 E229 CE1B B2AD" /* ±€ùnÅ«.]0)â)Î.²­ */
- $"BA11 DD98 0D9C 4C45 66DD 8553 3BA2 6F5B" /* º.ݘ.œLEfÝ…S;¢o[ */
- $"699B CEF3 48A7 6C31 63E6 E189 9C68 B9EC" /* i›ÎóH§l1cæá‰œh¹ì */
- $"A663 411F EBCB 41AB 8F7E 7EAD 87DA 5BF3" /* ¦cA.ëËA«~~­‡Ú[ó */
- $"AAC9 975B AC1F 712B F7ED DEBD 04C3 B85A" /* ªÉ—[¬.q+÷íÞ½.øZ */
- $"470D D74A B91D 0180 7BAB 4088 5671 6268" /* G.×J¹..€{«@ˆVqbh */
- $"5B4A 54FE C179 1600 7677 830B 0E81 EEB4" /* [JTþÁy..vwƒ..î´ */
- $"056E 79FF 8251 AB20 A6BC 15A5 E71F 7D4A" /* .nyÿ‚Q« ¦¼.¥ç.}J */
- $"2F6E 951A DE36 7A81 C704 9A4A F239 E1DC" /* /n•.Þ6zÇ.šJò9áÜ */
- $"FF6C DE49 B4C8 F6C1 F764 8D19 4686 DFC2" /* ÿlÞI´ÈöÁ÷d.F†ß */
- $"5C72 4A52 9784 F974 DCA4 A177 21DA 9869" /* \rJR—„ùtܤ¡w!Ú˜i */
- $"80A4 5BC6 FD54 A56B C7B1 4705 3A32 C896" /* €¤[ÆýT¥kDZG.:2È– */
- $"4539 25E5 90CC F228 B7F9 ADA5 CC2C 59CA" /* E9%åÌò(·ù­¥Ì,YÊ */
- $"D14D 4B86 9CC0 D367 7EF5 DB6D C2E1 06DB" /* ÑMK†œÀÓg~õÛmÂá.Û */
- $"58BC 0D97 DCFE 3CB1 EA45 C36F 1B60 83C9" /* X¼.—Üþ<±êEÃo.`ƒÉ */
- $"663F B883 83BA A69F 2653 0747 18C7 6D20" /* f?¸ƒƒº¦Ÿ&S.G.Çm */
- $"F2C7 6E01 47DA AB9D 2D83 D5CE 1E9C 779A" /* òÇn.GÚ«-ƒÕÎ.œwš */
- $"5FAE 6015 63DE 317A EFCA 7142 F3F8 A7E1" /* _®`.cÞ1zïÊqBóø§á */
- $"F739 60AB DF24 41BF EB6C AF15 7223 E56C" /* ÷9`«ß$A¿ël¯.r#ål */
- $"8D61 D9D1 C61F 8F8E 8435 6452 C45A 917B" /* aÙÑÆ.Ž„5dRÄZ‘{ */
- $"0856 B8BA 14E2 0A77 ABA0 E605 2E39 63EA" /* .V¸º.âÂw« æ..9cê */
- $"E7F5 4804 6535 7672 575F 37EA 9E69 1A1C" /* çõH.e5vrW_7êži.. */
- $"E380 CB7D C109 2D50 73EF 4119 54BE CBFE" /* ã€Ë}ÁÆ-PsïA.T¾Ëþ */
- $"4552 74A1 3E73 C457 1436 9DFF 3C25 8231" /* ERt¡>sÄW.6ÿ<%‚1 */
- $"2C25 ACE4 F084 E842 60E8 355D 22BE 6FEE" /* ,%¬äð„èB`è5]"¾oî */
- $"93F9 DDE6 DAED 4E44 545A FE4E 5EA4 0487" /* “ùÝæÚíNDTZþN^¤.‡ */
- $"36F1 52AF 8683 2DE8 F30B 72DE E807 2068" /* 6ñR¯†ƒ-èó.rÞè. h */
- $"742B 7262 BF7E 516C D41F CA56 9DE1 E3B8" /* t+rb¿~QlÔ.ÊVá㸠*/
- $"8D72 2993 C073 516D A343 DDE0 984D F06A" /* r)“ÀsQm£CÝà˜Mðj */
- $"CD83 D22D C161 30D7 2E9A FED4 4E85 5D2E" /* ̓Ò-Áa0×.šþÔN…]. */
- $"CF72 2181 7F23 BC37 FF83 C30D 43E0 DBC7" /* Ïr!.#¼7ÿƒÃ.CàÛÇ */
- $"A277 B4D9 4E68 1FB1 AF7B 6D8B 8F43 2A1B" /* ¢w´ÙNh.±¯{m‹C*. */
- $"9FE4 6CCC E826 C4AA 96C9 98A9 4D3B 981F" /* ŸälÌè&Ī–ɘ©M;˜. */
- $"8786 8633 89B0 2B42 4266 BC27 0098 D2B3" /* ‡††3‰°+BBf¼'.˜Ò³ */
- $"E8E4 0D2C 6E14 D34D 3613 4568 4A1E 8E5E" /* èä.,n.ÓM6.EhJ.Ž^ */
- $"E328 D89C 85D3 D8C2 C15B 3533 989F F015" /* ã(Øœ…ÓØÂÁ[53˜Ÿð. */
- $"1B49 871D 031B 2DBE D49E 880D A557 0694" /* .I‡...-¾Ôžˆ.¥W.” */
- $"60C3 47A1 CD2A 961B F73C 94A3 6B17 4268" /* `ÃG¡Í*–.÷<”£k.Bh */
- $"F766 81DC 33BC 8C1D 5571 D2D7 FB1C 9378" /* ÷fÜ3¼Œ.UqÒ×û.“x */
- $"01B7 BDCC 5DD0 9171 5FA1 50DA 7EBF 1586" /* .·½Ì]Бq_¡PÚ~¿.† */
- $"FA82 9E6F CBE4 0977 9C9C 2373 E789 5A3E" /* ú‚žoËäÆwœœ#sç‰Z> */
- $"8743 EB0E ED13 7955 DB28 2874 8065 2078" /* ‡Cë.í.yUÛ((t€e x */
- $"97A7 6C13 2283 729A CCF9 E449 A627 7652" /* —§l."ƒršÌùäI¦'vR */
- $"E821 2F1F 574E 6887 1830 6E01 5A8D 02FB" /* è!/.WNh‡.0n.Z.û */
- $"DB61 8EEF 4E08 B607 26FA 2B4C FF47 38FE" /* ÛaŽïN.¶.&ú+LÿG8þ */
- $"9B7C A3E4 DB46 F898 CFE9 8F3C 8717 2975" /* ›|£äÛFø˜Ïé<‡.)u */
- $"9BA2 582E 86D1 D882 C127 EFD7 E71A B5DD" /* ›¢X.†ÑØ‚Á'ï×ç.µÝ */
- $"7772 6391 2722 2884 AA0F 9C72 9A96 F4F8" /* wrc‘'"(„ª.œrš–ôø */
- $"BFF8 869A FD00 3B41 A8C7 DCD0 2834 270C" /* ¿ø†šý.;A¨ÇÜÐ(4'. */
- $"B93C 8702 5B16 8A32 0289 979B 0A35 3A7B" /* ¹<‡.[.Š2.‰—›Â5:{ */
- $"5870 6189 03C2 DD00 FAB2 B137 AB93 3EF5" /* Xpa‰.ÂÝ.ú²±7«“>õ */
- $"24E3 1FE1 A206 963E 1344 FE12 285A 5C52" /* $ã.á¢.–>.Dþ.(Z\R */
- $"692E D315 6C73 2CBE 7ADC 81BC EBC8 13EA" /* i.Ó.ls,¾zܼëÈ.ê */
- $"796B 6056 E9E7 D971 6E09 7086 252C 6A19" /* yk`VéçÙqnÆp†%,j. */
- $"7351 153D F4C4 FE01 6235 917F B203 171A" /* sQ.=ôÄþ.b5‘.²... */
- $"1822 B42B 9226 D163 5572 7E7E C508 BEBA" /* ."´+’&ÑcUr~~Å.¾º */
- $"D0D2 1C24 8D62 565D C183 F78D 4726 0541" /* ÐÒ.$bV]Áƒ÷G&.A */
- $"F829 10C7 1B21 E59C C4E5 7688 6268 FABC" /* ø).Ç.!åœÄåvˆbhú¼ */
- $"C0B9 6C02 8820 3F44 54A7 8C83 F14F 61B8" /* À¹l.ˆ ?DT§ŒƒñOa¸ */
- $"707C AB32 9D59 F01E D18A 37FC 40F9 5C59" /* p|«2Yð.ÑŠ7ü@ù\Y */
- $"EEA8 E442 FDC8 CA73 970F 6EE0 1348 AC8E" /* î¨äBýÈÊs—.nà.H¬Ž */
- $"9D65 4DA9 2820 AEDB A7F3 C1B4 8E3F 8780" /* eM©( ®Û§óÁ´Ž?‡€ */
- $"8DA9 F7D9 F116 DD30 778E 4FB6 49D3 AFE8" /* ©÷Ùñ.Ý0wŽO¶IÓ¯è */
- $"74B1 EB63 92B8 4210 3B22 3613 6784 41A2" /* t±ëc’¸B.;"6.g„A¢ */
- $"5953 1EFF 16A9 1769 9852 73D0 B6C2 3523" /* YS.ÿ.©.i˜RsжÂ5# */
- $"854B 1247 531D 47C5 7AFC 1B6B F0C4 2E2F" /* …K.GS.GÅzü.kðÄ./ */
- $"6C60 82C9 9C4D 2FAD 25A5 BEC6 8590 7388" /* l`‚ÉœM/­%¥¾Æ…sˆ */
- $"5D15 9A65 E013 D48B 7D9C 34B2 A617 75A8" /* ].šeà.Ô‹}œ4²¦.u¨ */
- $"8E8E 2D91 1AEC 26D5 8B9C D03C A02A A829" /* ŽŽ-‘.ì&Õ‹œÐ< *¨) */
- $"738D 9A4E 8F31 82A9 39B7 7CFE D412 810E" /* sšN1‚©9·|þÔ.. */
- $"1372 6D79 8D49 BAC1 9FFB 5D52 56AD 488F" /* .rmyIºÁŸû]RV­H */
- $"4E1D A232 7348 1FE2 483F AB9F A23C 0997" /* N.¢2sH.âH?«Ÿ¢<Æ— */
- $"678D 1AB7 7F66 8927 7DED 2A66 E03B 05C9" /* g.·.f‰'}í*fà;.É */
- $"0420 66A2 E0AE E1B9 259E 64C9 FF0E A7C7" /* . f¢à®á¹%ždÉÿ.§Ç */
- $"5E9D 69F4 DD50 394C 344E 9DA9 6BCA 3D9F" /* ^iôÝP9L4N©kÊ=Ÿ */
- $"8FA9 C156 3248 2310 8AB9 6131 B94F FF36" /* ©ÁV2H#.йa1¹Oÿ6 */
- $"DF00 9E80 5713 E9AD 3B07 879E C876 E063" /* ß.ž€W.é­;.‡žÈvàc */
- $"38D8 2776 3081 5810 1760 927C D93C EE88" /* 8Ø'v0X..`’|Ù<îˆ */
- $"518B 755A EBF1 B276 C65B 98DD 1421 8AA1" /* Q‹uZëñ²vÆ[˜Ý.!Š¡ */
- $"27D2 A8B2 5E3E B7B7 8F73 CDCB 9896 D80F" /* 'Ò¨²^>··s͢–Ø. */
- $"1D50 2E28 4F54 26A9 E68F 822C 3031 0A5B" /* .P.(OT&©æ‚,01Â[ */
- $"213A 8ED8 B1B8 C32C F5EF 6784 3641 A888" /* !:ŽØ±¸Ã,õïg„6A¨ˆ */
- $"1AF9 941B E9B2 42C0 D9BE AAD7 2727 9E13" /* .ù”.é²BÀÙ¾ª×''ž. */
- $"284F A530 1F62 679B 7860 E677 9E24 3663" /* (O¥0.bg›x`æwž$6c */
- $"E7D1 E4B5 D37B C274 9ECB CFA2 CC95 8A75" /* çÑäµÓ{ÂtžËϢ̕Šu */
- $"0C3A FB7D F074 1433 5EC7 1FC4 330E F221" /* .:û}ðt.3^Ç.Ä3.ò! */
- $"AE39 4A04 097F 4B21 27CD C193 39CB 3AB2" /* ®9J.Æ.K!'ÍÁ“9Ë:² */
- $"0B6E D8E0 54EA 0F75 15F9 D75D 0D82 624D" /* .nØàTê.u.ù×].‚bM */
- $"7D19 8E11 1AD0 764F CEA8 F0FE 2913 6841" /* }.Ž..ÐvOΨðþ).hA */
- $"89B8 CA62 C997 34B9 5950 4842 4F13 1ACD" /* ‰¸ÊbÉ—4¹YPHBO..Í */
- $"39AD 30CA 4ED2 A17D 0B09 206B 9426 EF50" /* 9­0ÊNÒ¡}.Æ k”&ïP */
- $"63C6 386E 74BB BDE0 420F 6154 5260 E1A2" /* cÆ8nt»½àB.aTR`ᢠ*/
- $"8546 3192 76D1 1F38 268E 7AC6 049F 321D" /* …F1’vÑ.8&ŽzÆ.Ÿ2. */
- $"CB51 35C7 067C 961B DA2F 4BCB E065 A8DB" /* ËQ5Ç.|–.Ú/KËàe¨Û */
- $"16C9 1F05 ABAF 93FF 333A F049 3161 6838" /* .É..«¯“ÿ3:ðI1ah8 */
- $"6E1A FEF2 564C 3F48 3800 BC9C F009 AF34" /* n.þòVL?H8.¼œðƯ4 */
- $"2241 15D4 764F 4764 CEDF 6D7D 2E9C 8141" /* "A.ÔvOGdÎßm}.œA */
- $"1E00 E109 D827 DDAA A47C 2854 9229 8998" /* ..áÆØ'ݪ¤|(T’)‰˜ */
- $"9175 1FFB 496B 36C7 3695 3631 390B 06E6" /* ‘u.ûIk6Ç6•619..æ */
- $"EB0D 3BA7 F1BE A2FF 6D3A 9FB6 FCFD ADEF" /* ë.;§ñ¾¢ÿm:Ÿ¶üý­ï */
- $"EDBA 3FDB 632F EDB1 BF6D BE7E DB9F 97ED" /* íº?Ûc/í±¿m¾~ÛŸ—í */
- $"45FD AB93 F6E8 7FED A7F7 DAC3 FC34 6F43" /* Eý«“öè.í§÷ÚÃü4oC */
- $"E1DB 5507 762F DB7E 5F51 DDF5 1DFE DD07" /* áÛU.v/Û~_QÝõ.þÝ. */
- $"E1FD A67F B4E6 7EDB 8BF6 AE3F B6BC D3E4" /* áý¦.´æ~Û‹ö®?¶¼Óä */
- $"D00B 0F87 A0FF 2AC3 3F6D 84F8 7475 99F2" /* Ð..‡ ÿ*Ã?m„øtu™ò */
- $"F382 BE95 100F 8FEE C1C8 D086 E345 E973" /* 󂾕..îÁÈІãEés */
- $"0FE4 06B6 7813 7115 B8D0 D91B C698 D10D" /* .ä.¶x.q.¸ÐÙ.ƘÑ. */
- $"A370 844F 9330 E047 0201 F880 D146 6522" /* £p„O“0àG..ø€ÑFe" */
- $"8E52 12DE 3D1A 9231 5315 682E 4706 8685" /* ŽR.Þ=.’1S.h.G.†… */
- $"DA39 C538 9828 7ED0 714F 3E27 532A 3840" /* Ú9Å8˜(~ÐqO>'S*8@ */
- $"C912 3E46 8205 3243 7835 7284 12D6 CCF5" /* É.>F‚.2Cx5r„.ÖÌõ */
- $"36AF 0975 8A27 4F44 3857 B5A3 160D 1391" /* 6¯ÆuŠ'OD8Wµ£...‘ */
- $"8005 2453 86CB 51B3 E493 EA9C 707F 7047" /* €.$S†ËQ³ä“êœp.pG */
- $"1DA8 1386 91D1 6105 7D84 1563 FC52 D5D3" /* .¨.†‘Ña.}„.cüRÕÓ */
- $"EDA7 D4A0 4AC1 BB4E 49D6 62F4 CA92 CE8E" /* í§Ô JÁ»NIÖbôÊ’ÎŽ */
- $"8DE0 84DC 418D ACE2 71AD 9206 3C98 3281" /* à„ÜA¬âq­’.<˜2 */
- $"104E A1F2 8982 6ED6 223E B67B BE6A C51F" /* .N¡ò‰‚nÖ">¶{¾jÅ. */
- $"4BF8 6C35 B6A4 5EC8 87BB 4834 7CF3 16AC" /* Køl5¶¤^ȇ»H4|ó.¬ */
- $"2453 B3DA 3503 94D6 2E70 2B6F 975E 21DB" /* $S³Ú5.”Ö.p+o—^!Û */
- $"F409 0368 9A2E DFB2 7A4B 9A6F 4165 1173" /* ôÆ.hš.ß²zKšoAe.s */
- $"A53E 329A 7925 FB80 9664 2C09 A9E5 715C" /* ¥>2šy%û€–d,Æ©åq\ */
- $"E42F 8E14 EC68 05A8 D565 53C2 9C98 86A2" /* ä/Ž.ìh.¨ÕeSœ˜†¢ */
- $"2C2D 6443 A1D0 A619 2320 6CD3 FE48 8006" /* ,-dC¡Ð¦.# lÓþH€. */
- $"FC0F 3690 DF76 1FD8 2E16 0705 D91F EEBE" /* ü.6ßv.Ø....Ù.î¾ */
- $"E961 32B9 E252 4F0E EE4A 6F73 AEBB 014A" /* éa2¹âRO.îJos®».J */
- $"8F45 1551 9123 7C3A 13F8 1B57 EB6A 0AFB" /* E.Q‘#|:.ø.WëjÂû */
- $"9AE9 65F5 9FDE 5F1C 7C23 84F1 6DCD CC52" /* šéeõŸÞ_.|#„ñmÍÌR */
- $"97DD 03E6 C571 0C23 F06B 9F21 2E2C 79D5" /* —Ý.æÅq.#ðkŸ!.,yÕ */
- $"1827 1436 E6FB C5FB BA11 617B 9B32 3DCD" /* .'.6æûÅûº.a{›2=Í */
- $"B0AD AA8F 53D0 2F20 849C D667 9436 A677" /* °­ªSÐ/ „œÖg”6¦w */
- $"38C9 1B5A 26E2 B4D4 29BB 2D9E 56D4 652D" /* 8É.Z&â´Ô)»-žVÔe- */
- $"9A12 FC7E FBD5 0075 3EC9 64FE D0CE 06A2" /* š.ü~ûÕ.u>ÉdþÐÎ.¢ */
- $"B63F 8731 DB8A 6917 26EA CCFC C1E6 10AA" /* ¶?‡1ÛŠi.&êÌüÁæ.ª */
- $"704E 20EA 7518 0416 6BBE 2867 9470 9FE6" /* pN êu...k¾(g”pŸæ */
- $"3D2A D178 6CD1 0B7D E518 4682 FC48 EA03" /* =*ÑxlÑ.}å.F‚üHê. */
- $"EFA0 ADEE B643 CDFD 796D C309 E13B 9DD3" /* ï ­î¶CÍýymÃÆá;Ó */
- $"82CC 1237 8D6B 9CB9 0438 AF1A 6190 136E" /* ‚Ì.7kœ¹.8¯.a.n */
- $"A170 6109 4BA8 FD0B 4C10 DE61 71A9 A5FF" /* ¡paÆK¨ý.L.Þaq©¥ÿ */
- $"5AD1 3895 15D0 912A BC62 5344 A7FD 7B9B" /* ZÑ8•.Б*¼bSD§ý{› */
- $"0360 8C71 DD04 20C7 4685 E6B7 7941 7BD7" /* .`ŒqÝ. ÇF…æ·yA{× */
- $"DBBB 3F61 742B D692 AD3D B778 6442 3DD1" /* Û»?at+Ö’­=·xdB=Ñ */
- $"A97E 1312 9AF4 05C1 7B33 9FE2 B3F5 D16C" /* ©~..šô.Á{3Ÿâ³õÑl */
- $"875D 7109 13EC BB96 0664 DF60 1958 8DE5" /* ‡]qÆ.ì»–.dß`.Xå */
- $"5B3F 3E75 9D21 0415 CE9C 3172 87C7 FF05" /* [?>u!..Μ1r‡Çÿ. */
- $"F787 4F14 E63B 4DCE 247D B3A3 475C 5336" /* ÷‡O.æ;MÎ$}³£G\S6 */
- $"C794 AF23 6415 68C6 B893 1B16 8C81 3F43" /* Ç”¯#d.hƸ“..Œ?C */
- $"C455 6EB8 8D5A 6919 4C3A D980 BFB1 3699" /* ÄUn¸Zi.L:Ù€¿±6™ */
- $"C790 C7D1 7B05 12AA 803A 172B DEF2 00CC" /* ÇÇÑ{..ª€:.+Þò.Ì */
- $"FF38 62C8 1815 1D3A F60D 2B9B 87A0 05C5" /* ÿ8bÈ...:ö.+›‡ .Å */
- $"3587 0181 8754 06D7 2CFC 78B8 0C65 D5BC" /* 5‡.‡T.×,üx¸.eÕ¼ */
- $"2903 C07C 0631 A0B9 E94E 192F DE4B 4924" /* ).À|.1 ¹éN./ÞKI$ */
- $"A4F0 BB9A 49C5 B751 38EB 7289 9806 FC5C" /* ¤ð»šIÅ·Q8ër‰˜.ü\ */
- $"D822 ED93 CA92 14B6 5056 017F 7826 CDE1" /* Ø"í“Ê’.¶PV..x&Íá */
- $"8401 9F6C A7F7 4AD5 E86F FDC3 05AF 6AE3" /* „.Ÿl§÷JÕèoýÃ.¯jã */
- $"5EED 07E3 E5ED 7EE7 FB97 0B99 E191 605B" /* ^í.ãåí~çû—.™á‘`[ */
- $"955A 6A3C 33C6 2BB8 9562 0E38 09C1 1ED9" /* •Zj<3Æ+¸•b.8ÆÁ.Ù */
- $"8914 73AF E9AA 7B2F 214E 7EEA 98E8 B976" /* ‰.s¯éª{/!N~ê˜è¹v */
- $"E058 E0B5 6DB4 5B1C F212 2C8E 0AE5 7100" /* àXàµm´[.ò.,ŽÂåq. */
- $"BC1E 84CD 0598 7CF9 EA4E 1E96 2B4A DE9E" /* ¼.„Í.˜|ùêN.–+JÞž */
- $"6CE9 E79B 0336 9059 E109 DF83 A2AE 9E74" /* léç›.6YáÆßƒ¢®žt */
- $"5BB1 0236 590C 66CD 0658 ECE5 50A2 EDDD" /* [±.6Y.fÍ.XìåP¢íÝ */
- $"D7BB DAF7 548B 7F21 2A40 7821 FDA2 62B6" /* ×»Ú÷T‹.!*@x!ý¢b¶ */
- $"C862 B0B2 96CF 27D5 EC9D F5C8 42D8 F42A" /* Èb°²–Ï'ÕìõÈBØô* */
- $"5962 F21A D191 6744 1AE2 64B4 6744 A1B2" /* Ybò.Ñ‘gD.âd´gD¡² */
- $"7625 FF0D F0CF A1F8 3273 C4B8 FCCE C2BC" /* v%ÿ.ðÏ¡ø2sĸüμ */
- $"EDD5 F0C6 765F 2446 5EF5 2195 04EE C94B" /* íÕðÆv_$F^õ!•.îÉK */
- $"C9C2 4F82 0D0F 6034 3560 64A8 C372 4E17" /* ÉÂO‚..`45`d¨ÃrN. */
- $"D4F6 B2DC 2162 A6DC 9B35 5F36 628E EA58" /* Ôö²Ü!b¦Ü›5_6bŽêX */
- $"B2EF D0B8 79FF 3F60 39DC 34C9 8DD1 C7DA" /* ²ïиyÿ?`9Ü4ÉÑÇÚ */
- $"BFFD 9220 B977 42CD 1F4E 00C7 1A7B F29F" /* ¿ý’ ¹wBÍ.N.Ç.{òŸ */
- $"9738 8D5E 3E5F BA1F D4BD 0592 2006 1216" /* —8^>_º.Ô½.’ ... */
- $"D478 DE72 171A A49D 9C4A 0691 CD59 6FB3" /* ÔxÞr..¤œJ.‘ÍYo³ */
- $"F3C5 B3CD DCC8 5794 133C 85B3 176A 0C6A" /* óųÍÜÈW”.<…³.j.j */
- $"323E C74F 7CE3 4042 38AB E9CA 5700 E39B" /* 2>ÇO|ã@B8«éÊW.ã› */
- $"26D3 62B7 59F8 966D A789 35AA C72D 9943" /* &Ób·Yø–m§‰5ªÇ-™C */
- $"C884 2E53 30B3 D351 EFCC 6BF8 9889 8AB6" /* È„.S0³ÓQïÌkø˜‰Š¶ */
- $"E284 F5A4 64BD F89F 98A4 8082 6292 48EB" /* â„õ¤d½øŸ˜¤€‚b’Hë */
- $"2039 4A80 D5D7 BEFC 2DC1 69A9 F484 9B4E" /* 9J€Õ×¾ü-Ái©ô„›N */
- $"94C9 6E87 31A6 6D4E 23DB 77A9 37D5 CEE9" /* ”Én‡1¦mN#Ûw©7ÕÎé */
- $"10B5 22DB 58B2 3DFB 973A E321 F02A 2985" /* .µ"ÛX²=û—:ã!ð*)… */
- $"AE7E F964 9A23 4B8D 90FD 75F4 9944 3CEB" /* ®~ùdš#Kýuô™D<ë */
- $"C5C5 B0BA DA1C AA0A B59A EFCA 903A 972B" /* ÅŰºÚ.ªÂµšïÊ:—+ */
- $"10E9 2A66 2BAB 3E63 8312 E494 A82C AEE8" /* .é*f+«>cƒ.䔨,®è */
- $"DE3B 902F 4DE5 A934 7FA5 59D8 B355 75C7" /* Þ;/Må©4.¥YسUuÇ */
- $"DC51 6208 6D60 DE89 F04A F698 FC35 5341" /* ÜQb.m`Þ‰ðJö˜ü5SA */
- $"A8C7 894B 5E8F 0638 0F21 36AB 23FF 37BF" /* ¨Ç‰K^.8.!6«#ÿ7¿ */
- $"CA6E C0CE 1C93 9BB1 FEA7 49E8 9BA5 7F32" /* ÊnÀÎ.“›±þ§I蛥.2 */
- $"4C9D C8BA 821C 1E07 F277 BE63 241C D5F6" /* LȺ‚...òw¾c$.Õö */
- $"07CB 7A98 E51E B0FC B312 223C 21BF 5DEE" /* .Ëz˜å.°ü³."<!¿]î */
- $"0229 A0EE 8B90 5918 5910 F6A6 EEB6 503D" /* .) î‹Y.Y.ö¦î¶P= */
- $"8E76 A3B6 E583 FEFF 5B3D F804 F6EE 956E" /* Žv£¶åƒþÿ[=ø.öî•n */
- $"FEE7 D95F 9D05 AE0B 4926 52B4 23C3 D17A" /* þçÙ_.®.I&R´#ÃÑz */
- $"FC0F CC41 1264 0956 8CA2 6A30 C0D0 275F" /* ü.ÌA.dÆVŒ¢j0ÀÐ'_ */
- $"0CE8 C646 CC49 EF38 CC94 8B6C 1737 9636" /* .èÆFÌIï8Ì”‹l.7–6 */
- $"4EA7 0FE7 217B F3F1 A10D 7E49 242E 6F19" /* N§.ç!{óñ¡.~I$.o. */
- $"A8CF 369A 44DE 6C99 A9D4 24DA 6909 62C3" /* ¨Ï6šDÞl™©Ô$ÚiÆbà */
- $"0C4C D4CD D80E 72E6 FF6B A90E 7080 977B" /* .LÔÍØ.ræÿk©.p€—{ */
- $"4BEB 6A2A 72BB 0574 45FB 1E12 6408 C966" /* Këj*r».tEû..d.Éf */
- $"A632 9AC7 E67D 82C9 3FED 1E27 C1FA C47A" /* ¦2šÇæ}‚É?í.'ÁúÄz */
- $"AFCF 5719 3BCA 3975 BE3A 550B 6DC9 91CC" /* ¯ÏW.;Ê9u¾:U.mÉ‘Ì */
- $"F28E 751C 1B20 E7BB 58FF 0D92 2BF7 DE26" /* òŽu.. ç»Xÿ.’+÷Þ& */
- $"DFE3 B230 78F7 C64E ADF8 7741 F45A E3BC" /* ßã²0x÷ÆN­øwAôZã¼ */
- $"5185 1323 1C74 3288 F720 5DB7 B5C9 1EFD" /* Q….#.t2ˆ÷ ]·µÉ.ý */
- $"C844 7159 7047 A9BA 6CA1 403E CE2E 3522" /* ÈDqYpG©ºl¡@>Î.5" */
- $"1088 A628 490C 5F8D 64C4 7E17 CBD3 290D" /* .ˆ¦(I._dÄ~.ËÓ). */
- $"91B1 B073 AD4A BF5B A1E9 6306 3E9A F87E" /* ‘±°s­J¿[¡éc.>šø~ */
- $"2DEC 7390 2CF5 3305 93C2 15DA 7FFF 7FC6" /* -ìs,õ3.“Â.Ú.ÿ.Æ */
- $"0578 C93E BF93 5B69 25D4 E0F9 5726 0D7E" /* .xÉ>¿“[i%ÔàùW&.~ */
- $"9C06 C76B 1BF5 3206 F26C 4F57 6A13 7488" /* œ.Çk.õ2.òlOWj.tˆ */
- $"07F4 1787 316E 19B5 2CB4 D7B8 23EE BF15" /* .ô.‡1n.µ,´×¸#î¿. */
- $"84F7 C141 CE7E 358F F83B 081D 2680 C5CB" /* „÷ÁAÎ~5ø;..&€ÅË */
- $"2002 0FFB D329 10E3 1880 E0F6 29FF 14F6" /* ..ûÓ).ã.€àö)ÿ.ö */
- $"1447 24FF 4BDD 371B 00F3 0334 6FE5 D217" /* .G$ÿKÝ7..ó.4oåÒ. */
- $"8E7D 3CCB EC04 D019 0583 0792 D4F4 59E5" /* Ž}<Ëì.Ð..ƒ.’ÔôYå */
- $"0914 52FB CE7A 2EFD B899 ED16 38FB E1D4" /* Æ.RûÎz.ý¸™í.8ûáÔ */
- $"3312 BAAE 3EF3 45B7 2A77 62F3 4787 8900" /* 3.º®>óE·*wbóG‡‰. */
- $"050D 5A64 92D3 64E7 7950 4234 FCC0 0EC6" /* ..Zd’ÓdçyPB4üÀ.Æ */
- $"004C 8652 616B B5FF 87F6 72D0 400B 9574" /* .L†Rakµÿ‡örÐ@.•t */
- $"7ADD 2EE6 F979 EE70 393F 5E65 09EC 561B" /* zÝ.æùyîp9?^eÆìV. */
- $"2FF4 F6FA 9226 2AA7 C2D2 4517 2258 15C7" /* /ôöú’&*§ÂÒE."X.Ç */
- $"D27E DE80 0000 0009 BB69 0154 3C66 FD24" /* Ò~Þ€...Æ»i.T<fý$ */
- $"D6C1 DFFC 41CF 26FD 27E3 9482 7299 C4A3" /* ÖÁßüAÏ&ý'㔂r™Ä£ */
- $"A4B0 4F99 5ED7 6507 C196 C060 D7BD 7BA6" /* ¤°O™^×e.Á–À`×½{¦ */
- $"A0A2 C1E7 0ECE 98C4 36F0 B006 0526 5FC4" /*  ¢Áç.ΘÄ6ð°..&_Ä */
- $"CDEF A25D CE59 7B6F 507F C409 957F 43E6" /* Íï¢]ÎY{oP.ÄÆ•.Cæ */
- $"20AB C4BE 33C2 E794 46B7 5341 D8C9 5487" /* «Ä¾3Âç”F·SAØÉT‡ */
- $"3000 A3E6 41BE 7D2A B553 6A8D C345 2E1E" /* 0.£æA¾}*µSjÃE.. */
- $"BF55 F536 52DD 101F D6C9 BB65 B7E4 0CFC" /* ¿Uõ6RÝ..ÖÉ»e·ä.ü */
- $"03D7 F641 F641 7A4F 8EE2 BA7A 352C ED91" /* .×öAöAzOŽâºz5,í‘ */
- $"9057 F893 C46F 62F7 A791 A8DE 8A25 BB17" /* Wø“Äob÷§‘¨ÞŠ%». */
- $"F164 F2ED 43E5 A2E2 17E9 C95D DE1C 45F4" /* ñdòíCå¢â.éÉ]Þ.Eô */
- $"3019 8090 809D D124 EE5C B48E 6C92 2A74" /* 0.€€Ñ$î\´Žl’*t */
- $"ACA0 4F0A 1777 70CF EBEC 112A 9035 16AB" /* ¬ OÂ.wpÏëì.*5.« */
- $"B36D 13D6 9F72 69CD E213 F146 6733 BAA3" /* ³m.ÖŸriÍâ.ñFg3º£ */
- $"0080 0000 0000 0000 0001 0151 0AD3 43F0" /* .€.........QÂÓCð */
- $"14A4 0000 61F0 20D9 9F3A 47FC 60A2 4780" /* .¤..að ÙŸ:Gü`¢G€ */
- $"F2D0 2A57 2C4C D349 5B9A 1BE3 0D39 80AD" /* òÐ*W,LÓI[š.ã.9€­ */
- $"72C4 873D 5028 F09E F0F5 700F B776 4B38" /* rć=P(ðžðõp.·vK8 */
- $"4FC6 7D26 AE5D 219E DDCE 4AA3 9AA9 FE19" /* OÆ}&®]!žÝÎJ£š©þ. */
- $"EC25 FEF0 0626 D259 8ECF 0364 6192 A000" /* ì%þð.&ÒYŽÏ.da’ . */
- $"0000 0000 0000 0000 0184 84B4 4FF0 1848" /* .........„„´Oð.H */
- $"4BC2 3700 0000 0000 0000 00B5 DA5E 3FF1" /* KÂ7........µÚ^?ñ */
- $"C9FC 9186 4A80 0000 0000 0000 0000 0000" /* Éü‘†J€.......... */
- $"0510 0FC3 251B 71C0 D918 64A8 0000 0000" /* ...Ã%.qÀÙ.d¨.... */
- $"0000 0000 0000 07E1 1EE1 F164 E11A 319D" /* .......á.áñdá.1 */
- $"3806 659F 8C35 7012 B17E 6096 52F0 8E96" /* 8.eŸŒ5p.±~`–RðŽ– */
- $"1438 1EBF 363A 49C9 51BD 3517 4ADA 7060" /* .8.¿6:IÉQ½5.JÚp` */
- $"0849 8F8B FCEC FD48 0000 54DF 4C0B E043" /* .I‹üìýH..TßL.àC */
- $"F3B6 1CEB 518A F2B1 5A9C 9500 0000 0000" /* ó¶.ëQŠò±Zœ•..... */
- $"0196 C058 0636 AF4B 041F 37EC DE6F 4B4E" /* .–ÀX.6¯K..7ìÞoKN */
- $"291D A2A6 3CB8 9BAC 4B0C 5017 9031 0EF1" /* ).¢¦<¸›¬K.P.1.ñ */
- $"3CF7 F63B 73A1 B4A6 9EA7 0513 C571 8EA8" /* <÷ö;s¡´¦ž§..Åqލ */
- $"5D0A 28FC DCB6 D27A 0000 0000 0159 D076" /* ]Â(üܶÒz.....YÐv */
- $"3D1E 84A9 1C76 876E 7B6B 8519 1F9F 01C6" /* =.„©.v‡n{k…..Ÿ.Æ */
- $"1A11 B2A2 4841 4D47 5463 5D18 2AFE 54F5" /* ..²¢HAMGTc].*þTõ */
- $"591E 5FF1 39C7 C0CD 0D20 F366 59DE FE22" /* Y._ñ9ÇÀÍ. ófYÞþ" */
- $"B12C 4608 009D F105 49C8 16B5 417A 6079" /* ±,F..ñ.IÈ.µAz`y */
- $"40B0 7E7A C4B3 83B8 485D 42B1 4000 0000" /* @°~zijƒ¸H]B±@... */
- $"0E9F 0340 5469 49BB 5767 B4BE 47AF 19B3" /* .Ÿ.@TiI»Wg´¾G¯.³ */
- $"4E69 B99F 25DF C3C0 1B9C 5455 41D2 F508" /* Ni¹Ÿ%ßÃÀ.œTUAÒõ. */
- $"9900 1F13 B43E C345 C4B3 C066 8A27 C3D3" /* ™...´>ÃEijÀfŠ'ÃÓ */
- $"7A8A 6368 2F2C 3F2F 5D43 59ED 5E40 9E4F" /* zŠch/,?/]CYí^@žO */
- $"59BB 6A03 B7F8 083A 021D F8F0 79AF 43B0" /* Y»j.·ø.:..øðy¯C° */
- $"2270 F775 B8D8 FB59 371A 8B22 9F0B 55FA" /* "p÷u¸ØûY7.‹"Ÿ.Uú */
- $"C9B1 5565 0914 AA67 2D9E 81B2 60FC 1333" /* ɱUeÆ.ªg-ž²`ü.3 */
- $"318F 21E9 97E4 1400 F69E F709 7AE3 82A5" /* 1!é—ä..öž÷Æzã‚¥ */
- $"C9DE 7D16 1DF8 EDF8 FC5E DB3E FC2A F822" /* ÉÞ}..øíøü^Û>ü*ø" */
- $"886E F247 9BC1 250E 905C 4AF7 4B22 3595" /* ˆnòG›Á%.\J÷K"5• */
- $"0835 2567 EEC1 C4C8 B70D D782 6A22 C9DA" /* .5%gîÁÄÈ·.ׂj"ÉÚ */
- $"ADA3 0370 EED9 E428 E163 963A E6F0 5D4A" /* ­£.pîÙä(ác–:æð]J */
- $"F42A D11F B46D 7FBC 2D87 4274 4756 896E" /* ô*Ñ.´m.¼-‡BtGV‰n */
- $"C489 80C0 62F6 88A8 184A 79BE 3068 A9AF" /* ĉ€Àböˆ¨.Jy¾0h©¯ */
- $"D703 390B 1A76 3136 B799 726A AAA8 C23D" /* ×.9..v16·™rjª¨Â= */
- $"EEB0 E0F1 49E1 A6B7 204F 7BF3 6E44 F25E" /* î°àñIᦷ O{ónDò^ */
- $"7E0A 5125 CA89 B477 15CD 83CC CD21 C6BE" /* ~ÂQ%ʉ´w.̓ÌÍ!ƾ */
- $"F20B 99F3 C30C 5113 2E0A FF7E 1034 1BFF" /* ò.™óÃ.Q..Âÿ~.4.ÿ */
- $"0378 72CF B0EE D132 2A2D 14A9 E37F 6B10" /* .xrϰîÑ2*-.©ã.k. */
- $"B5CE 0500 0000 0000 0000 0160 A7E3 A715" /* µÎ.........`§ã§. */
- $"0C13 DE44 025B 9720 0000 0000 0000 0001" /* ..ÞD.[— ........ */
- $"E0F5 5A21 77FB C1F6 EAF0 244A EE78 B6FA" /* àõZ!wûÁöêð$Jîx¶ú */
- $"1769 3D98 AA28 2EB6 9826 A16B D6B8 BA89" /* .i=˜ª(.¶˜&¡kÖ¸º‰ */
- $"26C6 25C9 9E66 FD9C 6D2D FCDA FCB9 6AB2" /* &Æ%Éžfýœm-üÚü¹j² */
- $"B42A 7008 5069 CB61 D530 B47A FCFF 7F95" /* ´*p.PiËaÕ0´züÿ.• */
- $"FA58 2D11 111A 53BF FB17 59E1 63E7 0FAD" /* úX-...S¿û.Yácç.­ */
- $"B016 A862 3107 8DF0 7112 DD6A B6E3 2477" /* °.¨b1.ðq.Ýj¶ã$w */
- $"3162 94F0 6826 75B0 D0B8 4C13 21C7 E4BC" /* 1b”ðh&u°Ð¸L.!Çä¼ */
- $"FB86 7A83 DF1C A4D9 C3B4 E3DE C334 1633" /* û†zƒß.¤ÙôãÞÃ4.3 */
- $"DC27 76B9 7ADF 50CA F95E C7C9 D5EB 402C" /* Ü'v¹zßPÊù^ÇÉÕë@, */
- $"276F A0B0 D88B CF4A 0FD2 380A E3E7 2BA5" /* 'o °Ø‹ÏJ.Ò8Âãç+¥ */
- $"DD24 A247 B631 75B1 6D3A 4C60 9BAB E4C5" /* Ý$¢G¶1u±m:L`›«äÅ */
- $"BBCB 2972 36B9 AC74 5FF5 B5DB 231B 95F3" /* »Ë)r6¹¬t_õµÛ#.•ó */
- $"7CFF 8E5F 86E9 1906 B3DF 75C7 0364 6192" /* |ÿŽ_†é..³ßuÇ.da’ */
- $"A000 0000 0000 0000 0000 003B B1A0 0000" /*  ..........;± .. */
- $"0000 0000 0000 0000 0000 0016 D51B CEEA" /* ............Õ.Îê */
- $"0406 C003 4E50 C0B8 8DB2 F37C FF8E 5F86" /* ..À.NPÀ¸²ó|ÿŽ_† */
- $"E919 06B3 DF75 C703 6461 92A0 0000 0000" /* é..³ßuÇ.da’ .... */
- $"0000 0000 0000 3BB1 A000 0000 0000 0000" /* ......;± ....... */
- $"0000 0000 0000 16D5 1BCE EA04 06C0 034E" /* .......Õ.Îê..À.N */
- $"50C0 B88D B2F4 4BED 0C57 2F64 38E7 DFE6" /* PÀ¸²ôKí.W/d8çßæ */
- $"95DB 93EF B9ED 1250 6A6A A6E3 4478 1E7E" /* •Û“ï¹í.Pjj¦ãDx.~ */
- $"F105 8E1B 961B 230C 9500 0000 0000 0C18" /* ñ.Ž.–.#.•....... */
- $"0EA3 5F13 6306 E1B5 4B22 3D26 79A1 06E4" /* .£_.c.áµK"=&y¡.ä */
- $"228F F320 0B74 8820 0000 0000 0000 0007" /* "ó .tˆ ........ */
- $"9F62 443B 9A51 EAB0 7C1A A374 E7F1 52F3" /* ŸbD;šQê°|.£tçñRó */
- $"3BB8 C1E0 5919 6C04 A2E2 1032 6917 1394" /* ;¸ÁàY.l.¢â.2i..” */
- $"CCBE 472A 0652 C144 6D1E 755C ECF9 9725" /* ̾G*.RÁDm.u\ìù—% */
- $"A84A 55AE 7A0E 6730 FCA7 B6E0 FF31 08C0" /* ¨JU®z.g0ü§¶àÿ1.À */
- $"3E76 4DDC 9E24 A60B C4A7 4CDD C221 1941" /* >vMÜž$¦.ħLÝÂ!.A */
- $"0810 2DE3 206F C551 4910 77AA 762A 1FF2" /* ..-ã oÅQI.wªv*.ò */
- $"D39A 0ADC 1089 90F8 D098 1E77 BDD1 AF74" /* ÓšÂÜ.‰øÐ˜.w½Ñ¯t */
- $"4DEF D00D 0B2C CA2F 9EDC 27C4 35F9 F924" /* MïÐ..,Ê/žÜ'Ä5ùù$ */
- $"67FF 74E5 A746 B627 6267 F6D0 9B94 22D4" /* gÿtå§F¶'bgöЛ”"Ô */
- $"5FFE DF67 A7A9 E3CA 02A5 44D1 E926 DCA4" /* _þßg§©ãÊ.¥DÑé&ܤ */
- $"7490 4AB8 E094 7037 FF7C 8CF7 2A9B B784" /* tJ¸à”p7ÿ|Œ÷*›·„ */
- $"794E 9026 D48F FF7F F013 AABF F874 63DA" /* yN&Ôÿ.ð.ª¿øtcÚ */
- $"0302 FBFA AA6A 31D5 E2DF 85F7 2ACD D98C" /* ..ûúªj1Õâß…÷*ÍÙŒ */
- $"175D 1243 F1C0 CEA2 344C B6FC ADCF C6AA" /* .].CñÀ΢4L¶ü­Ïƪ */
- $"5CAE FA82 783F 58DD 754D 5C63 A018 19F8" /* \®ú‚x?XÝuM\c ..ø */
- $"7EFE 8953 AE16 22B9 4ED7 43D2 8A0B FA52" /* ~þ‰S®."¹N×CÒŠ.úR */
- $"5703 08CA 555B E51E 307B 0565 E165 22F3" /* W..ÊU[å.0{.eáe"ó */
- $"7130 0CEC CA23 576D 8D58 BED1 FEB6 9A2F" /* q0.ìÊ#WmX¾Ñþ¶š/ */
- $"DCEA 3288 3EEC B12A D43C B191 2627 7723" /* Üê2ˆ>ì±*Ô<±‘&'w# */
- $"F40F 1B7A F1E3 9A7E 366D 7490 EE80 3570" /* ô..zñãš~6mtî€5p */
- $"CB59 D05D F384 AA96 71FE 68E8 4D32 F9D2" /* ËYÐ]󄪖qþhèM2ùÒ */
- $"48BC 7B03 EA3B 879E 2E96 671F 8098 CE76" /* H¼{.ê;‡ž.–g.€˜Îv */
- $"87D8 0336 5C88 91F4 3C69 D76B 4DEF 29DA" /* ‡Ø.6\ˆ‘ô<i×kMï)Ú */
- $"F378 1035 720A CE61 C2E3 5776 CA53 F43B" /* óx.5rÂÎaÂãWvÊSô; */
- $"4FCB 79E4 5164 1270 A23E 6048 2089 7B12" /* OËyäQd.p¢>`H ‰{. */
- $"BCA8 E157 DFD5 E879 C14C 1B1A 3431 2856" /* ¼¨áWßÕèyÁL..41(V */
- $"0E74 D87F 7691 A923 632A 5EBC 6E95 6A46" /* .tØ.v‘©#c*^¼n•jF */
- $"8E68 7118 3704 6E41 37CB C9AC 7F84 1005" /* Žhq.7.nA7Ëɬ.„.. */
- $"C308 7C90 C6E0 B56C 8CF8 3C33 A97E C46C" /* Ã.|ÆàµlŒø<3©~Äl */
- $"E373 91A9 4A3F 7331 481D 843F 0472 59DC" /* ãs‘©J?s1H.„?.rYÜ */
- $"0837 85BA 4867 C202 6BFC 7433 F093 530F" /* .7…ºHgÂ.küt3ð“S. */
- $"D721 8927 26CF AA6B B4E1 7981 FCE4 9F4E" /* ×!‰'&Ϫk´áyüäŸN */
- $"1105 9E7B 7F68 1CE7 D811 E270 FCA3 9CDE" /* ..ž{.h.çØ.âpü£œÞ */
- $"BFE6 48BA AC07 B55E 4E7F 5946 115B B1DC" /* ¿æHº¬.µ^N.YF.[±Ü */
- $"F694 3A9B EADD 7971 E0F1 B6E1 C6FF 4337" /* ö”:›êÝyqàñ¶áÆÿC7 */
- $"F543 A074 FC74 AD1F 45BF 7867 C472 7605" /* õC tüt­.E¿xgÄrv. */
- $"1786 E496 2D22 22BE 5760 9ACE A5C9 22B9" /* .†ä–-""¾W`šÎ¥É"¹ */
- $"9A14 4136 93E4 3E4A 715C 6F69 8447 5764" /* š.A6“ä>Jq\oi„GWd */
- $"D761 77A8 2C3F E200 ACAD 8331 11D0 ABE6" /* ×aw¨,?â.¬­ƒ1.Ыæ */
- $"EA7B 5A22 58CF 097E 732F 894B E99C 6BAF" /* ê{Z"XÏÆ~s/‰Kéœk¯ */
- $"B36C 68AA 5668 EF92 66E9 DDF9 FF78 DB89" /* ³lhªVhï’féÝùÿxÛ‰ */
- $"FC78 2032 99D9 62F0 1380 3FE8 41DF F341" /* üx 2™Ùbð.€?èAßóA */
- $"F1FD 7F08 CE2E F09A 9335 6735 0FAD 8093" /* ñý..Î.ðš“5g5.­€“ */
- $"B6B1 53A2 964F EA7E 72A2 9A29 794D 98F0" /* ¶±S¢–Oê~r¢š)yM˜ð */
- $"DD57 AE65 C61E DDEC BDB4 35C2 D050 E063" /* ÝW®eÆ.Ýì½´5ÂÐPàc */
- $"5F54 BCA5 928D 786D CAE3 8F96 BFEB 027E" /* _T¼¥’xmÊã–¿ë.~ */
- $"6BBC 8795 7C88 1A2C 9908 36A1 6CAB 9268" /* k¼‡•|ˆ.,™.6¡l«’h */
- $"EB0D 816F F34D 55F5 B562 BCFF 4190 EE42" /* ë.oóMUõµb¼ÿAîB */
- $"F195 E7F3 E220 7E51 74A2 FA23 23F7 20F0" /* ñ•çóâ ~Qt¢ú##÷ ð */
- $"985F 011C 34B8 C988 C519 C623 81BC D026" /* ˜_..4¸ÉˆÅ.Æ#¼Ð& */
- $"A8C5 B82C 7A7F 86F7 E60E 44F2 CD53 6FAB" /* ¨Å¸,z.†÷æ.DòÍSo« */
- $"2D69 1FD4 75B7 A011 80E7 09B3 B9CF 4503" /* -i.Ôu· .€çƳ¹ÏE. */
- $"F4A5 1DE3 AE8A 96F7 E245 0DF9 3859 24FA" /* ô¥.㮊–÷âE.ù8Y$ú */
- $"7B43 665F B15E D4D3 FB2A 666E FB6A 6CA8" /* {Cf_±^ÔÓû*fnûjl¨ */
- $"9CAF C052 D658 6DC3 BDD1 C752 21FA 6426" /* œ¯ÀRÖXmýÑÇR!úd& */
- $"857C D05D 41C2 0241 306C 6FD4 81E3 69F7" /* …|Ð]AÂ.A0loÔãi÷ */
- $"A6F5 227F 39F9 780E 829A 17A9 C649 2BF5" /* ¦õ".9ùx.‚š.©ÆI+õ */
- $"01DD E500 A973 E599 890C A548 CE34 2877" /* .Ýå.©s噉.¥HÎ4(w */
- $"D160 A2EE 4B3B CC7A 0C87 6723 51FD C222" /* Ñ`¢îK;Ìz.‡g#QýÂ" */
- $"9BFB E72D 2769 6250 2054 22C9 ABB2 3125" /* ›ûç-'ibP T"É«²1% */
- $"7DA0 73A3 C083 1AAD 90F2 F0A8 C22D 9DF5" /* } s£Àƒ.­òð¨Â-õ */
- $"3FFB 6B56 18BE 61A6 B198 F1BC 1E4E 0CFE" /* ?ûkV.¾a¦±˜ñ¼.N.þ */
- $"B323 8275 A644 CAC4 D36B 9AF9 FCC8 5DEC" /* ³#‚u¦DÊÄÓkšùüÈ]ì */
- $"292B CC9B A0B6 9148 09DF E46D 1B2C 4EDF" /* )+Ì› ¶‘HÆßäm.,Nß */
- $"EDB9 2DB4 BAD5 C50B 2115 C476 E09A F407" /* í¹-´ºÕÅ.!.Ävàšô. */
- $"5EE8 2E9F 870F A319 32D4 EBEC CB7B FDE9" /* ^è.Ÿ‡.£.2ÔëìË{ýé */
- $"FB5C 0D41 61F3 BA97 0F9E 558F 6E39 C213" /* û\.Aaóº—.žUn9Â. */
- $"3101 A5E8 ECEC 15E5 4F29 F69A 58CD D82D" /* 1.¥èìì.åO)öšXÍØ- */
- $"986E E8E0 6898 17CC 98C4 C851 AC75 9306" /* ˜nèàh˜.̘ÄÈQ¬u“. */
- $"5241 0350 E2EB 38CA 1682 6132 FF45 578A" /* RA.Pâë8Ê.‚a2ÿEWŠ */
- $"FA7F 7557 AC2C 9A18 3835 A62B 7D09 0992" /* ú.uW¬,š.85¦+}ÆÆ’ */
- $"EF78 BD49 5317 373A B07D 6420 DC30 5067" /* ïx½IS.7:°}d Ü0Pg */
- $"A659 F316 4436 8E8E 9786 1163 A6A5 B841" /* ¦Yó.D6ŽŽ—†.c¦¥¸A */
- $"99AA 4E1C 6163 309A 3C23 0208 FF4B 2967" /* ™ªN.ac0š<#..ÿK)g */
- $"B7F7 37E4 A337 D0DC C48A A742 FB2D C529" /* ·÷7ä£7ÐÜÄŠ§Bû-Å) */
- $"BC6C 5BBE BC5C 03B1 F87F D7EA F5AC B94B" /* ¼l[¾¼\.±ø.×êõ¬¹K */
- $"5A88 84AB E44E BE6A F337 96B0 7CB6 1140" /* Zˆ„«äN¾jó7–°|¶.@ */
- $"25CB 45D6 BE02 A9D4 7868 1EDD F660 7963" /* %ËEÖ¾.©Ôxh.Ýö`yc */
- $"B438 C030 3EA5 51FA F451 FA84 A6FF 2E5A" /* ´8À0>¥QúôQú„¦ÿ.Z */
- $"EA95 2300 C0F4 39AA 42BA 4120 4EEC AFDD" /* ê•#.Àô9ªBºA Nì¯Ý */
- $"20B4 6C42 0552 1177 6F1A AC6D FE8B 98E1" /* ´lB.R.wo.¬mþ‹˜á */
- $"D3FB F52E BCE3 5BB1 7235 F597 3E0D 8C46" /* Óûõ.¼ã[±r5õ—>.ŒF */
- $"7361 1E2A C081 CA97 C8EA CD3F E91D 823F" /* sa.*ÀÊ—ÈêÍ?é.‚? */
- $"73A7 5EA1 F641 9CBD 219D D7E4 EE0D 270E" /* s§^¡öAœ½!×äî.'. */
- $"14DF F756 B4E5 062C 8251 4AD0 B090 A0AF" /* .ß÷V´å.,‚QJа ¯ */
- $"CD2A 3C80 6068 C9CD C3D7 3D7F 258B 365A" /* Í*<€`hÉÍÃ×=.%‹6Z */
- $"5E1A 90DC D058 4ED9 DF50 6F40 07A9 2BDE" /* ^.ÜÐXNÙßPo@.©+Þ */
- $"8486 5404 AB9C E323 0C4E D3DB 8352 0C0F" /* „†T.«œã#.NÓÛƒR.. */
- $"CD59 A5F5 56CC 0BB2 B603 85C3 C709 7D6E" /* ÍY¥õVÌ.²¶.…ÃÇÆ}n */
- $"A10E 33C2 AE0F D52F 5AD7 2279 E6EB 7E6C" /* ¡.3®.Õ/Z×"yæë~l */
- $"1757 589D C6DC B4FD 470C FFD9" /* .WXÆÜ´ýG.ÿÙ */
-};
-
diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
deleted file mode 100644
index 495ec37f53..0000000000
--- a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns
deleted file mode 100644
index da5307e389..0000000000
--- a/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/publicnightly-dmg/background.jpg b/indra/newview/installers/darwin/publicnightly-dmg/background.jpg
deleted file mode 100644
index 55294dcc9a..0000000000
--- a/indra/newview/installers/darwin/publicnightly-dmg/background.jpg
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r b/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r
deleted file mode 100644
index aa3cfb87d8..0000000000
--- a/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r
+++ /dev/null
@@ -1,6996 +0,0 @@
-data 'alis' (0) {
- $"0000 0000 0112 0002 0001 036D 6277 0000" /* ...........mbw.. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 C135 A717 482B 0000 0000" /* ......Á5§.H+.... */
- $"0002 0C41 7070 6C69 6361 7469 6F6E 7300" /* ...Applications. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 00E2 4F18 C2E8 9FB0 0000 0000 0000" /* ...âO.Â蟰...... */
- $"0000 FFFF FFFF 0000 0920 0000 0000 0000" /* ..ÿÿÿÿ..Æ ...... */
- $"0000 0000 0000 0000 0003 6D62 7700 0010" /* ..........mbw... */
- $"0008 0000 C136 0987 0000 0011 0008 0000" /* ....Á6Ƈ........ */
- $"C2E9 0220 0000 0001 0000 0002 0010 6D62" /* Âé. ..........mb */
- $"773A 4170 706C 6963 6174 696F 6E73 000E" /* w:Applications.. */
- $"001A 000C 0041 0070 0070 006C 0069 0063" /* .....A.p.p.l.i.c */
- $"0061 0074 0069 006F 006E 0073 000F 0008" /* .a.t.i.o.n.s.... */
- $"0003 006D 0062 0077 0012 000C 4170 706C" /* ...m.b.w....Appl */
- $"6963 6174 696F 6E73 0013 0001 2F00 FFFF" /* ications..../.ÿÿ */
- $"0000" /* .. */
-};
-
-
-data 'icns' (-16455) {
- $"6963 6E73 0001 B3AC 6973 3332 0000 0224" /* icns..³¬is32...$ */
- $"9F00 005F 8061 005D 8700 055D 9AA2 A0A4" /* Ÿ.._€a.]‡..]𢠤 */
- $"8986 0008 557D B3B2 B1B3 A881 8081 8104" /* ‰†..U}³²±³¨€. */
- $"826F 577E AF82 A801 B3AE 82AD 03AF 7B7A" /* ‚oW~¯‚¨.³®‚­.¯{z */
- $"A781 A203 9EB7 C89D 81A2 03A6 776E 9A80" /* §¢.ž·È¢.¦wnš€ */
- $"9705 959F D3DC A295 8097 5899 6C67 8F8D" /* —.•ŸÓÜ¢•€—X™lg */
- $"8E89 85C9 BCA9 C883 898D 8D8E 6561 8585" /* މ…ɼ©Èƒ‰Žea…… */
- $"83A8 B7F3 BAB4 DFB6 AA84 8585 605E 7B7D" /* ƒ¨·óº´ß¶ª„……`^{} */
- $"79D0 F9E0 F0F2 DAE1 D87C 7D7B 5D5B 7476" /* yÐùàðòÚáØ|}{][tv */
- $"7099 D876 7373 76CA 8A72 7673 5B5A 6D70" /* p™ØvssvÊŠrvs[Zmp */
- $"6B9B 816C 6F6F 67B3 C567 706C 5A59 686B" /* k›loog³ÅgplZYhk */
- $"6B67 686B 806A 056B 6F6A 6B67 5A88 5900" /* kghk€j.kojkgZˆY. */
- $"5882 598A 5801 0059 9F00 0482 8383 8480" /* X‚YŠX..YŸ..‚ƒƒ„€ */
- $"8700 057F B7BE BDC0 A786 0008 799E D0CE" /* ‡...·¾½À§†..yžÐÎ */
- $"CECF C5A1 A081 A105 A390 7AA0 D0CA 80C9" /* ÎÏÅ¡ ¡.£z ÐÊ€É */
- $"01CA D183 CE03 D09C 9ECD 81C9 03C7 D4DE" /* .ÊуÎ.МžÍÉ.ÇÔÞ */
- $"C681 C903 CD9A 94C5 80C2 05C1 C6E3 E9C8" /* ÆÉ.Íš”Å€Â.ÁÆãéÈ */
- $"C180 C20D C491 8DBD BBBC B9B6 DDD7 CCDD" /* Á€Â.Ä‘½»¼¹¶Ý×ÌÝ */
- $"B5B9 80BC 468B 87B4 B4B3 C8D1 F7D3 CFEA" /* µ¹€¼F‹‡´´³ÈÑ÷ÓÏê */
- $"D0C9 B4B4 B385 83AA ABA9 E0FB EAF5 F6E5" /* ÐÉ´´³…ƒª«©àûêõöå */
- $"EAE5 AAAB A981 80A0 A39E BAE4 A2A0 A1A2" /* ê媫©€ £žºä¢ ¡¢ */
- $"DAAF 9FA3 9F7F 7E97 9B97 B8A6 979A 9A94" /* Ú¯Ÿ£Ÿ.~—›—¸¦—šš” */
- $"CAD6 949B 977D 7D90 9493 9091 8293 0496" /* ÊÖ”›—}}”“‘‚“.– */
- $"9294 907D 8E7C 8A7B 0100 7C9F 0000 7A80" /* ’”}Ž|Š{..|Ÿ..z€ */
- $"7C00 7887 0005 77B1 B8B7 BBA0 8600 0871" /* |.x‡..w±¸·» †..q */
- $"97CB C9C8 CAC0 9B99 819A 049C 8972 99CA" /* —ËÉÈÊÀ›™š.œ‰r™Ê */
- $"82C3 00CB 83C8 03CA 9596 C681 C203 BFCF" /* ‚Ã.˃È.Ê•–ÆÂ.¿Ï */
- $"DABF 81C2 03C6 938C BD80 BA05 B9BF E0E7" /* Ú¿Â.Æ“Œ½€º.¹¿àç */
- $"C1B9 80BA 57BC 8985 B5B3 B3B0 ADD9 D2C6" /* Á¹€ºW¼‰…µ³³°­ÙÒÆ */
- $"D9AC B0B3 B3B4 827F ACAB AAC2 CCF6 CECA" /* Ù¬°³³´‚.¬«ªÂÌöÎÊ */
- $"E8CB C3AB ACAA 7D7B A1A3 A0DD FAE9 F4F5" /* èË묪}{¡£ Ýúéôõ */
- $"E3E8 E3A2 A3A0 7A78 989B 96B3 E29A 9898" /* ãè㢣 zx˜›–³âš˜˜ */
- $"9AD7 A897 9B97 7776 8F93 8FB2 9F8F 9292" /* š×¨—›—wv“²Ÿ’’ */
- $"8BC5 D28C 938F 7575 888C 8B89 8982 8B04" /* ‹ÅÒŒ“uuˆŒ‹‰‰‚‹. */
- $"8F8A 8C88 758E 748A 7301 0074 7338 6D6B" /* ŠŒˆuŽtŠs..ts8mk */
- $"0000 0108 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 1E24 2424 1600 0000 0000" /* .......$$$...... */
- $"0000 0000 0011 BDC8 C8C8 9600 0000 0000" /* ......½ÈÈÈ–..... */
- $"0000 0000 048C FFFF FFFF F5A7 9C9E 9E9E" /* .....Œÿÿÿÿõ§œžžž */
- $"9E9E 6003 8AFF FCFC FCFC FEFF FFFF FFFF" /* žž`.Šÿüüüüþÿÿÿÿÿ */
- $"FFFF FF7A 89FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿz‰ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF7A 73FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿzsÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF64 62FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdbÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF53 53FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿSSÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF45 48FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿEHÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FF3C 41FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿ<Aÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FD35 3DFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿý5=ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FA30 3CFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿú0<ÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FB2F 1247 4B4A 4A4A 4A4A 4A4A 4A4A" /* ÿÿû/.GKJJJJJJJJJ */
- $"4A4B 450F 0101 0201 0101 0101 0101 0101" /* JKE............. */
- $"0102 0001 696C 3332 0000 05AB FF00 BE00" /* ....il32...«ÿ.¾. */
- $"025A 7881 847F 0064 9200 0262 BBC4 83C2" /* .Zx„..d’..b»ÄƒÂ */
- $"02C7 8451 9000 0255 86BF 84BC 03BF A064" /* .Ç„Q..U†¿„¼.¿ d */
- $"6389 6400 6281 0003 5770 A2A2 85A1 01A3" /* c‰d.b..Wp¢¢…¡.£ */
- $"9D89 9B07 9C97 6758 005B 95AC 88A7 02A8" /* ‰›.œ—gX.[•¬ˆ§.¨ */
- $"A4A7 89A8 05AB 925A 61A7 AE88 AC03 ABCA" /* ¤§‰¨.«’Za§®ˆ¬.«Ê */
- $"AEAB 88AC 05AE A15E 5B9A A788 A503 A0D7" /* ®«ˆ¬.®¡^[š§ˆ¥. × */
- $"D79F 88A5 05A8 9559 5990 A288 9F04 9BAB" /* ןˆ¥.¨•YY¢ˆŸ.›« */
- $"FBAE 9C87 9F05 A28B 5857 879D 879A 0595" /* û®œ‡Ÿ.¢‹XW‡‡š.• */
- $"BDD6 E6E3 9487 9A05 9D82 5656 7F97 8594" /* ½Öæã”‡š.‚VV.—…” */
- $"0995 8FB3 F4CF B1FF AD90 9585 9405 977A" /* Æ•³ôϱÿ­•…”.—z */
- $"0000 7793 8690 078D CDF8 B886 E8E5 8B86" /* ..w“†.Íø¸†è勆 */
- $"9005 9372 0000 708F 828C 808B 0984 BBF7" /* .“r..p‚Œ€‹Æ„»÷ */
- $"C687 85AB FFA9 8580 8B82 8C05 8E6D 0000" /* Ƈ…«ÿ©…€‹‚Œ.Žm.. */
- $"6B8A 8287 0D88 8785 8FF3 FDA1 8186 84E5" /* kŠ‚‡.ˆ‡…óý¡†„å */
- $"E484 8684 8705 8868 0000 6685 8183 117E" /* 䄆„‡.ˆh..f…ƒ.~ */
- $"B3E3 D0D2 FFDC D4DF DDDB D2FD D0DE E2B7" /* ³ãÐÒÿÜÔßÝÛÒýÐÞâ· */
- $"8082 8304 6400 0062 8081 7F06 76C5 FFDB" /* €‚ƒ.d..b€..vÅÿÛ */
- $"F9F3 E381 FF06 F6D4 BFF4 FFD3 7882 7F03" /* ùóãÿ.öÔ¿ôÿÓx‚.. */
- $"6100 005F 827B 0675 B0D9 E1FF C8D8 82DF" /* a.._‚{.u°ÙáÿÈØ‚ß */
- $"05BF F3C9 DCB9 7681 7B04 7A5E 0000 5C82" /* .¿óÉܹv{.z^..\‚ */
- $"7706 786F 96FF E879 7281 7306 7278 C8C2" /* w.xo–ÿèyrs.rxÈÂ */
- $"7074 7880 7706 7875 5C00 005A 7382 7405" /* ptx€w.xu\..Zs‚t. */
- $"71C1 E19A 6D74 8173 0574 6BA2 FFAD 6C81" /* qÁášmts.tk¢ÿ­l */
- $"7406 7571 5B00 005A 6F81 7104 6F77 F2AF" /* t.uq[..Zoq.owò¯ */
- $"6984 7105 6E7E FAFB 836D 8071 0772 6D5A" /* i„q.n~úûƒm€q.rmZ */
- $"0000 586C 6F80 6E03 6C7B 9368 866E 0467" /* ..Xlo€n.l{“h†n.g */
- $"C3FA 8B69 806E 076F 6A59 0000 586A 6E81" /* Ãú‹i€n.ojY..Xjn */
- $"6D01 6C68 876D 036B 717D 6B81 6D07 6E69" /* m.lh‡m.kq}km.ni */
- $"5900 0058 666A 8E69 0168 6682 6903 6A65" /* Y..XfjŽi.hf‚i.je */
- $"5900 BD59 0000 9B59 9E00 FF00 BE00 027D" /* Y.½Y..›Yž.ÿ.¾..} */
- $"98A0 829E 029F 9E85 9200 0284 D5DE 83DC" /* ˜ ‚ž.Ÿž…’..„ÕÞƒÜ */
- $"02E0 A275 9000 0279 A7DB 84D8 03DB BD87" /* .à¢u..y§Û„Ø.Û½‡ */
- $"8689 8700 8581 0003 7A92 C0C0 85BF 01C0" /* †‰‡.…..z’ÀÀ…¿.À */
- $"BB89 B907 BAB4 887B 007E B7CC 88C7 01C8" /* »‰¹.º´ˆ{.~·ÌˆÇ.È */
- $"C68A C805 CBB2 7C84 CAD1 89CF 02DE CFCE" /* ÆŠÈ.˲|„ÊщÏ.ÞÏÎ */
- $"88CF 05D2 C380 7FBF CC88 CA03 C7E8 E5C6" /* ˆÏ.ÒÀ.¿ÌˆÊ.ÇèåÆ */
- $"88CA 05CD B87C 7CB7 CA88 C704 C4CD FCCD" /* ˆÊ.͸||·ÊˆÇ.ÄÍüÍ */
- $"C587 C705 CAB0 7A7A AFC7 87C4 05C1 D4E3" /* ŇÇ.ʰzz¯Ç‡Ä.ÁÔã */
- $"F0ED C087 C405 C8A8 7979 A7C4 85C0 09C1" /* ðíÀ‡Ä.Ȩyy§Ä…ÀÆÁ */
- $"BDD0 F7E1 D1FF CDBE C185 C005 C4A1 0000" /* ½Ð÷áÑÿ;Á…À.Ä¡.. */
- $"A0C1 86BD 07BA DEFB D5B7 F2EE B986 BD05" /*  Á†½.ºÞûÕ·ò½. */
- $"C09A 0000 9ABE 85BA 09B6 D4F9 DBB8 B6CD" /* Àš..š¾…ºÆ¶ÔùÛ¸¶Í */
- $"FFCA B785 BA05 BD94 0000 94B9 83B6 0EB4" /* ÿÊ·…º.½”..”¹ƒ¶.´ */
- $"B3B9 F7FE C4B0 B4B2 EFED B2B4 B4B5 82B6" /* ³¹÷þİ´²ïí²´´µ‚¶ */
- $"05B8 8F00 008E B481 B211 AFCD EBDF E0FF" /* .¸..Ž´².¯Íëßàÿ */
- $"E8E2 E9E8 E6E0 FEDF E8EA D0B0 81B2 05B3" /* èâéèæàþßèêа².³ */
- $"8A00 0089 AF81 AD06 A8D9 FFE7 FBF7 EB81" /* Š..‰¯­.¨Ùÿçû÷ë */
- $"FF06 F9E1 D3F8 FFE3 A980 AD05 AEAD 8600" /* ÿ.ùáÓøÿã©€­.®­†. */
- $"0086 82A9 06A5 CBE5 EAFF DAE5 82EA 05D3" /* .†‚©.¥ËåêÿÚå‚ê.Ó */
- $"F7DA E8D1 A680 A906 AAA7 8300 0082 A382" /* ÷ÚèѦ€©.ª§ƒ..‚£‚ */
- $"A405 9FB7 FFF0 A5A1 81A2 05A1 A5D9 D39F" /* ¤.Ÿ·ÿ𥡢.¡¥ÙÓŸ */
- $"A281 A406 A5A1 8000 0080 9F82 A004 9ED2" /* ¢¤.¥¡€..€Ÿ‚ .žÒ */
- $"E9BA 9B83 A004 9ABF FFC5 9A81 A007 A19C" /* 麛ƒ .š¿ÿÅš .¡œ */
- $"7F00 007E 999D 809B 059A 9FF6 C696 9C83" /* ...~™€›.šŸöÆ–œƒ */
- $"9B05 99A4 FBFB A799 809B 079C 977D 0000" /* ›.™¤ûû§™€›.œ—}.. */
- $"7C95 9980 9803 97A1 B295 8698 0494 D5FC" /* |•™€˜.—¡²•†˜.”Õü */
- $"AC95 8098 0799 937C 0000 7C93 9782 9600" /* ¬•€˜.™“|..|“—‚–. */
- $"9387 9603 9599 A295 8196 0797 917C 0000" /* “‡–.•™¢•–.—‘|.. */
- $"7B8E 928D 9102 9290 8F82 9103 928C 7B00" /* {Ž’‘.’‚‘.’Œ{. */
- $"BD7C 0000 9B7C 9E00 FF00 BE00 0275 9199" /* ½|..›|ž.ÿ.¾..u‘™ */
- $"8498 007E 9200 027D D0D9 83D7 02DB 9B6C" /* „˜.~’..}ÐÙƒ×.Û›l */
- $"9000 0271 A0D5 84D2 03D5 B67F 7E89 7F00" /* ..q Õ„Ò.Õ¶.~‰.. */
- $"7D81 0003 728B BBBB 85BA 02BB B6B3 88B4" /* }..r‹»»…º.»¶³ˆ´ */
- $"08B5 AF81 7300 76B0 C6C2 87C1 01C2 C089" /* .µ¯s.v°ÆÂ‡Á.ÂÀ‰ */
- $"C206 C3C5 AB75 7CC3 CA89 C801 DBC9 89C8" /* Â.ÃÅ«u|ÃʉÈ.ÛÉ‰È */
- $"05CB BD78 77B9 C588 C304 C0E5 E2BF C487" /* .˽xw¹ÅˆÃ.Àåâ¿Ä‡ */
- $"C305 C6B2 7574 B0C3 87C0 05BF BCC7 FCC7" /* Ã.Ʋut°Ã‡À.¿¼ÇüÇ */
- $"BE87 C005 C3A9 7272 A7BF 87BC 05B9 D0E1" /* ¾‡À.érr§¿‡¼.¹Ðá */
- $"EEEB B887 BC05 C0A1 7171 A0BC 86B8 07B5" /* î븇¼.À¡qq ¼†¸.µ */
- $"CBF6 DDCB FFC7 B586 B805 BB99 0000 98B9" /* ËöÝËÿǵ†¸.»™..˜¹ */
- $"86B5 07B2 DBFA D0AE F0EC B186 B505 B892" /* †µ.²ÛúЮð챆µ.¸’ */
- $"0000 91B5 82B2 80B1 09AC D0F9 D7AF ADC7" /* ..‘µ‚²€±Æ¬Ðùׯ­Ç */
- $"FFC4 AD80 B182 B205 B48C 0000 8BB1 81AD" /* ÿÄ­€±‚².´Œ..‹±­ */
- $"11AE ADAC ABB1 F6FD BDA8 ABAA EDEB A9AB" /* .®­¬«±öý½¨«ªíë©« */
- $"ACAC AE81 AD05 AF87 0000 86AB 81A9 11A6" /* ¬¬®­.¯‡..†«©.¦ */
- $"C8E9 DCDE FFE5 DFE7 E6E4 DDFE DCE6 E9CB" /* ÈéÜÞÿåßçæäÝþÜæéË */
- $"A781 A905 AA82 0000 81A6 81A5 069F D6FF" /* §©.ª‚..¦¥.ŸÖÿ */
- $"E4FA F6EA 81FF 06F8 DFCF F7FF E0A0 80A5" /* äúöêÿ.øßÏ÷ÿà €¥ */
- $"05A6 A47E 0000 7D82 A006 9BC6 E3E8 FFD6" /* .¦¤~..}‚ .›ÆãèÿÖ */
- $"E282 E805 CFF6 D7E6 CC9C 80A0 06A1 9E7B" /* â‚è.Ïö×æÌœ€ .¡ž{ */
- $"0000 7A9B 829C 0496 B1FF EF9D 8399 049C" /* ..z›‚œ.–±ÿ.œ */
- $"D6D0 969A 819C 069D 9979 0000 7897 8198" /* ÖЖšœ.™y..x—˜ */
- $"0597 95CF E7B4 9283 9704 91BA FFC0 9181" /* .—•Ïç´’ƒ—.‘ºÿÀ‘ */
- $"9807 9994 7700 0076 9295 8094 0493 98F5" /* ˜.™”w..v’•€”.“˜õ */
- $"C28E 8494 0592 9DFB FBA0 9180 9407 958F" /* ÂŽ„”.’ûû ‘€”.• */
- $"7500 0074 8E91 8090 038F 9AAC 8C86 9004" /* u..tŽ‘€.š¬Œ†. */
- $"8BD1 FBA6 8C80 9007 918B 7400 0074 8B8F" /* ‹Ñû¦Œ€.‘‹t..t‹ */
- $"808E 048F 8E8B 8E8F 848E 048F 8D91 9B8D" /* €Ž.ދބŽ.‘› */
- $"818E 078F 8974 0000 7487 8B8E 8A01 8987" /* Ž.‰t..t‡‹ŽŠ.‰‡ */
- $"828A 038B 8574 00BD 7400 009B 749E 006C" /* ‚Š.‹…t.½t..›tž.l */
- $"386D 6B00 0004 0800 0000 0000 0000 0000" /* 8mk............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0B76 8889 8989" /* ...........vˆ‰‰‰ */
- $"8989 8988 3800 0000 0000 0000 0000 0000" /* ‰‰‰ˆ8........... */
- $"0000 0000 0000 0000 0000 36FF FFFF FFFF" /* ..........6ÿÿÿÿÿ */
- $"FFFF FFFF A301 0000 0000 0000 0000 0000" /* ÿÿÿÿ£........... */
- $"0000 0000 0000 0000 0006 A4FF FFFF FFFF" /* ..........¤ÿÿÿÿÿ */
- $"FFFF FFFF DE59 3F40 4040 4040 4040 4040" /* ÿÿÿÿÞY?@@@@@@@@@ */
- $"4040 4033 0000 0000 1384 F8F3 F3F3 F3F3" /* @@@3.....„øóóóóó */
- $"F3F3 F3F3 F7F9 F7F7 F7F7 F7F7 F7F7 F7F7" /* óóóó÷ù÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F1 520D 001D E1FF FAFB FBFB FBFB" /* ÷÷÷ñR...áÿúûûûûû */
- $"FBFB FBFB FBFB FBFB FBFB FBFB FBFB FBFB" /* ûûûûûûûûûûûûûûûû */
- $"FBFB FBFB FFCD 0E39 FFFF FFFF FFFF FFFF" /* ûûûûÿÍ.9ÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 1F26 F6FF FFFF FFFF FFFF" /* ÿÿÿÿÿø.&öÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE5 1318 ECFF FFFF FFFF FFFF" /* ÿÿÿÿÿå..ìÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD5 0A0F DDFF FFFF FFFF FFFF" /* ÿÿÿÿÿÕÂ.Ýÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC6 0206 D0FF FFFF FFFF FFFF" /* ÿÿÿÿÿÆ..Ðÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB6 0000 C2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¶..Âÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 0000 B2FF FFFF FFFF FFFF" /* ÿÿÿÿÿ¥..²ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF95 0000 A4FF FFFF FFFF FFFF" /* ÿÿÿÿÿ•..¤ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF87 0000 96FF FFFF FFFF FFFF" /* ÿÿÿÿÿ‡..–ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF7A 0000 8AFF FFFF FFFF FFFF" /* ÿÿÿÿÿz..Šÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6D 0000 7FFF FFFF FFFF FFFF" /* ÿÿÿÿÿm...ÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF63 0000 77FF FFFF FFFF FFFF" /* ÿÿÿÿÿc..wÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5A 0000 6FFF FFFF FFFF FFFF" /* ÿÿÿÿÿZ..oÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF54 0000 69FF FFFF FFFF FFFF" /* ÿÿÿÿÿT..iÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4F 0000 65FF FFFF FFFF FFFF" /* ÿÿÿÿÿO..eÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4C 0000 64FF FFFF FFFF FFFF" /* ÿÿÿÿÿL..dÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF4B 0000 61FF FFFF FFFF FFFF" /* ÿÿÿÿÿK..aÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF48 0004 2C6D 7574 7474 7474" /* ÿÿÿÿÿH..,muttttt */
- $"7474 7474 7474 7474 7474 7474 7474 7474" /* tttttttttttttttt */
- $"7474 7475 6824 0202 0D18 1C1C 1C1C 1C1C" /* tttuh$.......... */
- $"1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C 1C1C" /* ................ */
- $"1C1C 1C1C 170C 0100 0103 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0301 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0069 6833 3200 0009 DEFF" /* .......ih32..ÆÞÿ */
- $"00FF 00FF 00AD 0001 5E66 8865 0261 5859" /* .ÿ.ÿ.­..^fˆe.aXY */
- $"9C00 025E A6BA 87B7 04B9 AE67 5659 9B00" /* œ..^¦º‡·.¹®gVY›. */
- $"0266 BABF 87BE 04BF BC70 5459 9A00 0252" /* .fº¿‡¾.¿¼pTYš..R */
- $"81BD 89BA 03BC 8652 5491 5585 0003 5580" /* ½‰º.¼†RT‘U…..U€ */
- $"B7BA 89B9 02BA B497 918F 0191 7683 0003" /* ·º‰¹.º´—‘.‘vƒ.. */
- $"5864 9399 8B97 0098 929B 039D 855F 5A80" /* Xd“™‹—.˜’›.…_Z€ */
- $"0002 649D A990 A500 A490 A509 A6A9 9B65" /* ..d©¥.¤¥Æ¦©›e */
- $"0000 85B4 AFAF 8EAE 03B0 AEAC AF8E AE07" /* ..…´¯¯Ž®.°®¬¯Ž®. */
- $"AFAF B280 0000 80AD 8FA9 04A8 B2E7 ACA8" /* ¯¯²€..€­©.¨²ç¬¨ */
- $"90A9 05AB 7A00 0076 A98F A604 A5A4 F1E0" /* ©.«z..v©¦.¥¤ñà */
- $"A08F A606 A7A6 7100 006D A390 A204 9DC8" /*  ¦.§¦q..m£¢.È */
- $"FFB9 9C8E A207 A3A0 6A00 0065 9D9F 8D9E" /* ÿ¹œŽ¢.£ j..eŸž */
- $"069F 9C96 A2FA EF9C 8E9E 079F 9A65 0000" /* .Ÿœ–¢úž.Ÿše.. */
- $"6097 9C8D 9B07 97A5 E2C6 D2FF C394 8D9B" /* `—œ›.—¥âÆÒÿÔ› */
- $"079C 9461 0000 5E90 988C 9709 959A D5CE" /* .œ”a..^˜Œ—Æ•šÕÎ */
- $"E4B2 FCF4 9A95 8C97 0799 8D5E 0000 5A8B" /* ä²üôš•Œ—.™^..Z‹ */
- $"968C 9409 8EC8 FFF6 C18D DDFF C78C 8C94" /* –Œ”ÆŽÈÿöÁÝÿÇŒŒ” */
- $"0796 875B 0000 5885 938B 910B 8F8F E5FF" /* .–‡[..X…“‹‘.åÿ */
- $"FFA9 87AA FFF7 988E 8B91 0793 8159 0000" /* ÿ©‡ªÿ÷˜Ž‹‘.“Y.. */
- $"577F 908B 8E0B 87CF D4D0 CA89 8D8B E0FF" /* W.‹Ž.‡ÏÔÐʉ‹àÿ */
- $"C786 8B8E 0790 7B58 0000 5779 8C86 8A81" /* dž‹Ž.{X..WyŒ†Š */
- $"8B0D 84A5 FFFF E38B 898B 85A8 FFF8 9387" /* ‹.„¥ÿÿ㋉‹…¨ÿø“‡ */
- $"818B 868A 078C 7557 0000 5674 8A85 8800" /* ‹†Š.ŒuW..VtŠ…ˆ. */
- $"8680 820E 8385 E4FF FFB9 7C83 8381 7FDD" /* †€‚.ƒ…äÿÿ¹|ƒƒ.Ý */
- $"FFC6 7E81 8200 8585 8807 8A71 5759 0056" /* ÿÆ~‚.……ˆ.ŠqWY.V */
- $"6F87 8485 1983 929F A3A0 94B0 FFFF E39D" /* o‡„….ƒ’Ÿ£ ”°ÿÿã */
- $"9F9E 9DA3 9AB0 FBF4 98A0 A09F A192 8484" /* Ÿž£š°ûô˜  Ÿ¡’„„ */
- $"8507 876D 5759 0056 6984 8482 197C A7EB" /* ….‡mWY.Vi„„‚.|§ë */
- $"FBF1 C2EC FFFB C1ED F2F6 ECFB EDD9 DBFF" /* ûñÂìÿûÁíòöìûíÙÛÿ */
- $"D4EE F0F6 F6B7 7C84 8207 8369 5700 5956" /* Ôîðöö·|„‚.ƒiW.YV */
- $"6481 847F 0979 A3FF FFEB CCFF FFD5 E084" /* d„.Æy£ÿÿëÌÿÿÕà„ */
- $"FF03 C8F1 BCC4 80FF 01C0 7785 7F06 6557" /* ÿ.Èñ¼Ä€ÿ.Àw…..eW */
- $"5959 5661 7E84 7D08 76A3 FFFF C3F4 FFF5" /* YYVa~„}.v£ÿÿÃôÿõ */
- $"CB85 FF08 EDA8 CCC0 F2FF FFC1 7485 7D06" /* Ë…ÿ.í¨ÌÀòÿÿÁt…}. */
- $"6358 5959 575E 7B84 7A09 7692 D0BE D6FF" /* cXYYW^{„zÆv’оÖÿ */
- $"FFC2 B9D0 84CF 08CD B9FF F1B1 CED0 A574" /* ÿ¹ЄÏ.͹ÿñ±ÎÐ¥t */
- $"847A 0679 6058 5959 585D 8678 0776 6A9C" /* „z.y`XYYX]†x.vjœ */
- $"FFFF F081 7086 7106 75D1 D89D 6A71 7484" /* ÿÿðp†q.uÑØjqt„ */
- $"7808 7976 5E58 5959 585B 7486 7505 73B9" /* x.yv^XYYX[t†u.s¹ */
- $"F5FF AC6D 8775 0570 8CEB F889 6F85 7508" /* õÿ¬m‡u.pŒëø‰o…u. */
- $"7672 5C58 5959 5859 7285 7306 6F8A E1C6" /* vr\XYYXYr…s.oŠáÆ */
- $"C176 7287 7306 7179 EEFF E173 7184 7308" /* Ávr‡s.qyîÿásq„s. */
- $"7470 5B58 5959 5859 7085 7205 6B97 FFE7" /* tp[XYYXYp…r.k—ÿç */
- $"776E 8972 0569 C6FF FFB4 6A84 7202 736E" /* wn‰r.iÆÿÿ´j„r.sn */
- $"5A81 5901 586D 856F 0567 B9D9 786B 7089" /* ZY.Xm…o.g¹Ùxkp‰ */
- $"6F06 6993 FFFF F173 6D83 6F01 706B 8259" /* o.i“ÿÿñsmƒo.pk‚Y */
- $"0157 6B85 6E03 6C8C 7269 8B6E 066D 6BD3" /* .Wk…n.lŒri‹n.mkÓ */
- $"FFCB 6C6D 836E 026F 6958 8159 0256 6A6E" /* ÿËlmƒn.oiXY.Vjn */
- $"856D 0169 6B8D 6D04 6A73 8A6D 6B84 6D02" /* …m.ikm.jsŠmk„m. */
- $"6E68 5881 5902 566A 6E98 6D02 6B67 6C85" /* nhXY.Vjn˜m.kgl… */
- $"6D02 6E68 5881 5902 5665 69A3 6802 6963" /* m.nhXY.Vei£h.ic */
- $"5881 5901 5858 A559 0058 B059 0000 AB59" /* XY.XX¥Y.X°Y..«Y */
- $"8000 A959 DF00 FF00 FF00 FF00 AD00 0081" /* €.©Yß.ÿ.ÿ.ÿ.­.. */
- $"8987 0283 7B7C 9C00 0280 C1D3 87D1 04D2" /* ‰‡.ƒ{|œ..€ÁÓ‡Ñ.Ò */
- $"C787 7A7C 9B00 0288 D4DA 87D9 04DA D68F" /* LJz|›..ˆÔÚ‡Ù.ÚÖ */
- $"787C 9A00 0276 A2D8 89D6 02D7 A476 9278" /* x|š..v¢Ø‰Ö.פv’x */
- $"8500 0379 A2D3 D789 D503 D6D0 B5AD 90AE" /* …..y¢Ó׉Õ.Öе­® */
- $"01B0 9683 0003 7C87 B1B7 8BB5 00B6 92B9" /* .°–ƒ..|‡±·‹µ.¶’¹ */
- $"03BA A282 7D80 0003 87BD C8C5 90C4 00C5" /* .º¢‚}€..‡½ÈÅÄ.Å */
- $"8FC4 08C5 C8B9 8700 00A7 D6D1 90D0 01CD" /* Ä.Åȹ‡..§ÖÑÐ.Í */
- $"CF90 D006 D1D3 A000 00A3 D18F CD04 CCD1" /* ÏÐ.ÑÓ ..£ÑÍ.ÌÑ */
- $"EECC CC90 CD05 CF9B 0000 9ACE 90CB 03CA" /* îÌÌÍ.Ï›..šÎË.Ê */
- $"F7E9 C68F CB07 CCCB 9300 0091 C9C9 8FC8" /* ÷éÆË.ÌË“..‘ÉÉÈ */
- $"04C6 DFFF D2C5 8EC8 07C9 C68D 0000 8BC5" /* .ÆßÿÒÅŽÈ.ÉÆ..‹Å */
- $"C78D C606 C7C5 BFC7 FDF3 C38E C607 C7C0" /* ÇÆ.ÇÅ¿ÇýóÃŽÆ.ÇÀ */
- $"8800 0086 C0C5 8DC4 07C2 C7EB DAE4 FFD9" /* ˆ..†ÀÅÄ.ÂÇëÚäÿÙ */
- $"C08D C407 C6BC 8400 0082 BBC4 8CC2 09C1" /* ÀÄ.Ƽ„..‚»ÄŒÂÆÁ */
- $"C2E2 DEED D1FD F7C1 C18C C207 C4B6 8100" /* ÂâÞíÑý÷ÁÁŒÂ.Ķ. */
- $"007F B5C2 8CC0 09BC DBFF F8D7 BBEA FFDB" /* ..µÂŒÀƼÛÿø×»êÿÛ */
- $"BA8C C007 C2B0 7E00 007C B0C0 8BBE 0BBD" /* ºŒÀ.°~..|°À‹¾.½ */
- $"BAED FFFF CCB8 CCFF F9BF BC8B BE07 C0AA" /* ºíÿÿ̸Ìÿù¿¼‹¾.Àª */
- $"7C00 007B ABBF 8BBC 0BB7 DEE1 DFDF B9BB" /* |..{«¿‹¼.·Þáßß¹» */
- $"BAED FFDA B78B BC07 BFA5 7B00 007A A5BC" /* ºíÿÚ·‹¼.¿¥{..z¥¼ */
- $"89B9 0EBA B6C6 FFFF ECB9 B9BA B6CB FFFA" /* ‰¹.º¶Æÿÿì¹¹º¶Ëÿú */
- $"BCB8 8AB9 07BC 9F7A 0000 799F B984 B601" /* ¼¸Š¹.¼Ÿz..yŸ¹„¶. */
- $"B7B5 82B3 0CEC FFFF D4AF B3B3 B2B1 EAFF" /* ·µ‚³.ìÿÿÔ¯³³²±êÿ */
- $"D9B0 81B3 01B5 B784 B607 B899 797C 0079" /* Ù°³.µ·„¶.¸™y|.y */
- $"99B7 84B4 13B3 B9BE C1C0 B9CB FFFF EDBE" /* ™·„´.³¹¾ÁÀ¹Ëÿÿí¾ */
- $"BFBE BEC1 BCCB FCF7 BB80 BF02 C0B9 B384" /* ¿¾¾Á¼Ëü÷»€¿.À¹³„ */
- $"B407 B694 797C 0079 93B4 84B1 19AD C7F1" /* ´.¶”y|.y“´„±.­Çñ */
- $"FBF5 D6F1 FFFD D5F2 F5F8 F1FB F2E4 E7FF" /* ûõÖñÿýÕòõøñûòäçÿ */
- $"E2F3 F4F8 F8D0 AD84 B107 B290 7A00 7C79" /* âóôøøÐ­„±.²z.|y */
- $"8DB0 84AE 09AA C3FF FFF2 DCFF FFE2 E984" /* °„®ÆªÃÿÿòÜÿÿâé„ */
- $"FF03 D9F6 D1D8 80FF 01D6 A985 AE06 8C7A" /* ÿ.ÙöÑØ€ÿ.Ö©…®.Œz */
- $"7C7C 7989 AD84 AB08 A7C3 FFFF D5F7 FFF8" /* ||y‰­„«.§ÃÿÿÕ÷ÿø */
- $"DA85 FF08 F2C2 DAD3 F6FF FFD7 A583 AB08" /* Ú…ÿ.òÂÚÓöÿÿ×¥ƒ«. */
- $"ACAA 897A 7C7C 7A86 A984 A809 A5B7 E0D3" /* ¬ª‰z||z†©„¨Æ¥·àÓ */
- $"E2FF FFD6 D0E0 84DF 08DD CFFF F5CB DFE0" /* âÿÿÖÐà„ß.ÝÏÿõËßà */
- $"C3A4 83A8 07A9 A686 7A7C 7C7A 8386 A506" /* 䃨.©¦†z||zƒ†¥. */
- $"A39B BAFF FFF5 AA87 A006 A3DF E2BA 9BA1" /* £›ºÿÿõª‡ .£ß⺛¡ */
- $"A284 A507 A6A2 837B 7C7C 7B82 87A2 059F" /* ¢„¥.¦¢ƒ{||{‚‡¢.Ÿ */
- $"CCF8 FFC7 9C87 A205 9EAF F0F9 AD9E 85A2" /* ÌøÿÇœ‡¢.ž¯ðù­ž…¢ */
- $"08A3 9F81 7B7C 7C7B 7F9D 859F 069C AEE8" /* .£Ÿ{||{.…Ÿ.œ®è */
- $"D4D3 A09E 879F 069D A3F4 FFE8 9D9E 849F" /* ÔÓ ž‡Ÿ.£ôÿèž„Ÿ */
- $"09A0 9B7F 7B7C 7C7B 7E9A 9D84 9C05 98B5" /* Æ ›.{||{~š„œ.˜µ */
- $"FFEE 9F99 899C 0596 D7FF FFC9 9684 9C09" /* ÿ‰œ.–×ÿÿÉ–„œÆ */
- $"9D97 7E7B 7C7C 7B7C 989B 849A 0494 CCE4" /* —~{||{|˜›„š.”Ìä */
- $"A097 8A9A 0695 B3FF FFF4 9C99 839A 019B" /*  —Šš.•³ÿÿôœ™ƒš.› */
- $"9482 7C02 7B95 9984 9803 97AD 9B95 8B98" /* ”‚|.{•™„˜.—­›•‹˜ */
- $"0697 96E0 FFDA 9797 8398 0199 9282 7C02" /* .—–àÿÚ——ƒ˜.™’‚|. */
- $"7A93 9785 9601 9395 8D96 0494 9AAB 9695" /* z“—…–.“•–.”š«–• */
- $"8496 0297 8F7B 817C 027A 9297 9896 0294" /* „–.—{|.z’—˜–.” */
- $"9295 8596 0297 8F7B 817C 027A 8C91 A390" /* ’•…–.—{|.zŒ‘£ */
- $"0291 897A 817C 017B 7BA5 7C00 7BB0 7C00" /* .‘‰z|.{{¥|.{°|. */
- $"00AB 7C80 00A9 7CDF 00FF 00FF 00FF 00AD" /* .«|€.©|ß.ÿ.ÿ.ÿ.­ */
- $"0000 7A89 8002 7C73 749C 0002 79BC CE87" /* ..z‰€.|stœ..y¼Î‡ */
- $"CC04 CDC2 8172 749B 0002 80CF D587 D304" /* Ì.ÍÂrt›..€ÏÕ‡Ó. */
- $"D4D1 8870 749A 0002 6E9B D288 D003 D1D2" /* Ôшptš..n›ÒˆÐ.ÑÒ */
- $"9E6E 9270 8500 0371 9BCE D289 D002 D1CB" /* žn’p…..q›ÎÒ‰Ð.ÑË */
- $"AF91 A801 AA90 8300 0474 80AC B2AF 8AB0" /* ¯‘¨.ªƒ..t€¬²¯Š° */
- $"02B1 B3B4 90B3 03B5 9D7A 7580 0002 80B7" /* .±³´³.µzu€..€· */
- $"C3A4 BF09 C0C3 B57F 0000 A0CF CACA 8DC9" /* ä¿ÆÀõ... ÏÊÊÉ */
- $"04CA CAC6 C8CA 8EC9 07CA CACD 9900 009C" /* .ÊÊÆÈÊŽÉ.ÊÊÍ™..œ */
- $"CA8F C604 C5CB EDC5 C58F C606 C7C8 9400" /* ÊÆ.ÅËíÅÅÆ.ÇÈ”. */
- $"0093 C790 C403 C3F6 E7BF 8FC4 07C5 C48B" /* .“ÇÄ.Ãöç¿Ä.ÅÄ‹ */
- $"0000 8AC2 C28F C104 BEDA FFCE BE8E C107" /* ..ŠÂÂÁ.¾ÚÿξŽÁ. */
- $"C2BF 8600 0083 BEC0 8DBF 06C0 BEB8 C1FC" /* ¿†..ƒ¾À¿.À¾¸Áü */
- $"F3BC 8EBF 07C0 BA81 0000 7EB9 BE8D BD07" /* 󼎿.Àº..~¹¾½. */
- $"BAC0 E9D6 E1FF D5B8 8DBD 07BF B57C 0000" /* ºÀéÖáÿÕ¸½.¿µ|.. */
- $"7AB3 BC8C BA09 B9BB DFDB EBCB FDF7 BAB9" /* z³¼ŒºÆ¹»ßÛëËý÷º¹ */
- $"8CBA 07BC AE79 0000 77AE B98C B709 B3D7" /* Œº.¼®y..w®¹Œ·Æ³× */
- $"FFF8 D3B2 E8FF D7B1 8CB7 07B9 A876 0000" /* ÿøÓ²èÿ×±Œ·.¹¨v.. */
- $"74A9 B78A B50C B6B5 B2EC FFFF C6AF C6FF" /* t©·Šµ.¶µ²ìÿÿƯÆÿ */
- $"F9B8 B48B B507 B7A3 7400 0073 A3B6 8BB3" /* ù¸´‹µ.·£t..s£¶‹³ */
- $"0BAE DBDE DDDB B0B3 B1EA FFD7 AE8B B307" /* .®ÛÞÝÛ°³±êÿ×®‹³. */
- $"B59D 7300 0072 9CB3 8AB0 04AD C0FF FFEA" /* µs..rœ³Š°.­Àÿÿê */
- $"80B0 05AD C4FF F9B4 AF8A B007 B397 7200" /* €°.­Äÿù´¯Š°.³—r. */
- $"0071 97B1 85AE 00AC 80AA 0EAB AAEA FFFF" /* .q—±…®.¬€ª.«ªêÿÿ */
- $"CFA6 AAAA A9A7 E7FF D5A7 81AA 00AC 85AE" /* Ϧªª©§çÿÕ§ª.¬…® */
- $"07B0 9171 7400 7191 AE84 AB13 AAB2 B9BB" /* .°‘qt.q‘®„«.ª²¹» */
- $"BAB2 C6FF FFEB B7B9 B8B7 BBB6 C5FC F7B5" /* º²Æÿÿë·¹¸·»¶Åü÷µ */
- $"80B9 01BA B285 AB07 AD8C 7174 0070 8BAB" /* €¹.º²…«.­Œqt.p‹« */
- $"84A8 19A4 C1EF FBF4 D2F0 FFFC D1F1 F4F8" /* „¨.¤ÁïûôÒðÿüÑñôø */
- $"F0FB F1E2 E5FF DFF2 F3F8 F8CB A484 A807" /* ðûñâåÿßòóøøË¤„¨. */
- $"A988 7200 7471 85A7 84A5 09A1 BDFF FFF0" /* ©ˆr.tq…§„¥Æ¡½ÿÿð */
- $"D9FF FFE0 E784 FF03 D6F5 CDD4 80FF 01D2" /* Ùÿÿàç„ÿ.ÖõÍÔ€ÿ.Ò */
- $"9F85 A506 8472 7474 7181 A484 A208 9EBD" /* Ÿ…¥.„rttq¤„¢.ž½ */
- $"FFFF D2F6 FFF7 D785 FF08 F1BD D8CF F6FF" /* ÿÿÒöÿ÷×…ÿ.ñ½ØÏöÿ */
- $"FFD3 9C83 A208 A3A2 8172 7474 727E A084" /* ÿÓœƒ¢.£¢rttr~ „ */
- $"9F09 9CB0 DDCF DFFF FFD2 CCDD 84DC 08DA" /* ŸÆœ°ÝÏßÿÿÒÌÝ„Ü.Ú */
- $"CBFF F4C6 DCDD BE9B 839F 08A0 9E7E 7274" /* ËÿôÆÜݾ›ƒŸ. ž~rt */
- $"7472 7C9D 849C 089D 9B93 B5FF FFF4 A397" /* tr|„œ.›“µÿÿô£— */
- $"8598 0897 9BDD E0B4 9398 9A9D 839C 089D" /* …˜.—›Ýà´“˜šƒœ. */
- $"9A7B 7374 7473 7998 8699 0597 C8F7 FFC1" /* š{sttsy˜†™.—È÷ÿÁ */
- $"9387 9905 96A9 EEF9 A695 8599 089A 9679" /* “‡™.–©îù¦•…™.š–y */
- $"7374 7473 7795 8596 0693 A7E6 D1D0 9895" /* sttsw•…–.“§æÑИ• */
- $"8796 0695 9BF3 FFE7 9595 8496 0897 9377" /* ‡–.•›óÿç••„–.—“w */
- $"7374 7473 7693 8595 058F B0FF ED98 9289" /* sttsv“…•.°ÿ혒‰ */
- $"9505 8ED4 FFFF C58E 8495 0996 9076 7374" /* •.ŽÔÿÿÅŽ„•Æ–vst */
- $"7473 7490 9384 9204 8BC8 E299 8F8A 9206" /* tst“„’.‹È♊’. */
- $"8DAD FFFF F494 9183 9202 938C 7581 7402" /* ­ÿÿô”‘ƒ’.“Œut. */
- $"738D 9184 9003 8EA7 938D 8B90 068F 8EDD" /* s‘„.ާ“‹.ŽÝ */
- $"FFD7 8E8F 8390 0191 8A82 7402 728B 8F85" /* ÿ׎ƒ.‘Š‚t.r‹… */
- $"8E01 8B8D 8D8E 048C 93A4 8E8D 848E 028F" /* Ž.‹Ž.Œ“¤Ž„Ž. */
- $"8773 8174 0272 8B8F 988E 028C 8A8D 858E" /* ‡st.r‹˜Ž.ŒŠ…Ž */
- $"028F 8773 8174 0272 8489 A388 0289 8173" /* .‡st.r„‰£ˆ.‰s */
- $"8174 0173 73A5 7400 73B0 7400 00AB 7480" /* t.ss¥t.s°t..«t€ */
- $"00A9 74DF 0068 386D 6B00 0009 0800 0000" /* .©tß.h8mk..Æ.... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 002E 4549 4A4A 4A4A 4A4A 4A4A 4A4A" /* ....EIJJJJJJJJJJ */
- $"3B0A 0400 0000 0000 0000 0000 0000 0000" /* ;Â.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 2FF9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ../ùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FD52 0802 0000 0000 0000 0000 0000 0000" /* ýR.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 4DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Mÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FF7E 1306 0000 0000 0000 0000 0000 0000" /* ÿ~.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0002 ABFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..«ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFBB 2C11 0B0B 0B0B 0B0B 0B0B 0B0B 0B0B" /* ÿ»,............. */
- $"0B0B 0B0B 0B0B 0903 0000 0000 0000 0000" /* ......Æ......... */
- $"08B2 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF DFCC CCCC CCCC CCCC CCCC CCCC CCCC" /* ÿÿßÌÌÌÌÌÌÌÌÌÌÌÌÌ */
- $"CCCC CCCC CCCC CBC9 8000 0000 0000 0026" /* ÌÌÌÌÌÌËÉ€......& */
- $"71F2 EDEE EFEF EFEF EFEF EFEF EFEF EFEF" /* qòíîïïïïïïïïïïïï */
- $"EFEF F4F7 F7F7 F7F7 F7F7 F7F7 F7F7 F7F7" /* ïïô÷÷÷÷÷÷÷÷÷÷÷÷÷ */
- $"F7F7 F7F7 F7F7 F7F5 CE41 2000 0000 5EF7" /* ÷÷÷÷÷÷÷õÎA ...^÷ */
- $"FFF8 F8F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ÿøøùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F8 FAFF EE41 0000 C4FF" /* ùùùùùùùøúÿîA..Äÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFA1 0000 B6FF" /* ÿÿÿÿÿÿÿÿÿÿÿ¡..¶ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF91 0000 A2FF" /* ÿÿÿÿÿÿÿÿÿÿÿ‘..¢ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF7A 0000 8FFF" /* ÿÿÿÿÿÿÿÿÿÿÿz..ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF68 0000 79FF" /* ÿÿÿÿÿÿÿÿÿÿÿh..yÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF57 0000 5EFF" /* ÿÿÿÿÿÿÿÿÿÿÿW..^ÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FF48 0000 4BFF" /* ÿÿÿÿÿÿÿÿÿÿÿH..Kÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FD3B 0000 3FFE" /* ÿÿÿÿÿÿÿÿÿÿý;..?þ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF F62F 0000 33F8" /* ÿÿÿÿÿÿÿÿÿÿö/..3ø */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF ED23 0000 27F2" /* ÿÿÿÿÿÿÿÿÿÿí#..'ò */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF DE1A 0000 1FE9" /* ÿÿÿÿÿÿÿÿÿÿÞ....é */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF CE10 0000 1ADF" /* ÿÿÿÿÿÿÿÿÿÿÎ....ß */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF C10B 0100 14D5" /* ÿÿÿÿÿÿÿÿÿÿÁ....Õ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF B509 0100 0FCD" /* ÿÿÿÿÿÿÿÿÿÿµÆ...Í */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF AA07 0001 0BC2" /* ÿÿÿÿÿÿÿÿÿÿª.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF A005 0101 09B3" /* ÿÿÿÿÿÿÿÿÿÿ ...Ƴ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 9504 0101 08A6" /* ÿÿÿÿÿÿÿÿÿÿ•....¦ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8D04 0101 069A" /* ÿÿÿÿÿÿÿÿÿÿ....š */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 8505 0101 0691" /* ÿÿÿÿÿÿÿÿÿÿ…....‘ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7D05 0101 078B" /* ÿÿÿÿÿÿÿÿÿÿ}....‹ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7606 0101 0885" /* ÿÿÿÿÿÿÿÿÿÿv....… */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 7106 0102 0881" /* ÿÿÿÿÿÿÿÿÿÿq.... */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6D07 0102 0A7E" /* ÿÿÿÿÿÿÿÿÿÿm...Â~ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6A08 0102 0B7B" /* ÿÿÿÿÿÿÿÿÿÿj....{ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 6709 0102 0C7C" /* ÿÿÿÿÿÿÿÿÿÿgÆ...| */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 670A 0102 0C75" /* ÿÿÿÿÿÿÿÿÿÿgÂ...u */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF 600B 0102 113A" /* ÿÿÿÿÿÿÿÿÿÿ`....: */
- $"7B85 8585 8585 8585 8585 8585 8585 8585" /* {……………………………………… */
- $"8585 8585 8585 8585 8585 8585 8585 8585" /* ………………………………………… */
- $"8585 8585 8585 8585 8574 310F 0101 0B1E" /* ………………………t1..... */
- $"2B34 3535 3535 3535 3535 3535 3535 3535" /* +455555555555555 */
- $"3535 3535 3535 3535 3535 3535 3535 3535" /* 5555555555555555 */
- $"3535 3535 3535 3535 332A 1C0A 0100 040C" /* 555555553*.Â.... */
- $"1418 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1818 1818 1818 1818" /* ................ */
- $"1818 1818 1818 1818 1813 0B03 0000 0002" /* ................ */
- $"0304 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0402 0100 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0069 7433" /* .............it3 */
- $"3200 0025 F700 0000 00FF 00FF 00FF 00FF" /* 2..%÷....ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 59D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.ŸY× */
- $"00A6 59D3 0001 5959 8000 9D58 8459 D000" /* .¦YÓ..YY€.X„YÐ. */
- $"0359 5900 569F 5901 5658 8359 D000 0257" /* .YY.VŸY.VXƒYÐ..W */
- $"6287 9D95 0494 917F 5E58 8359 CD00 0459" /* b‡•.”‘.^XƒYÍ..Y */
- $"005C 9ABA 9EBC 03B9 AE85 5883 59CD 0004" /* .\šºž¼.¹®…XƒYÍ.. */
- $"5900 6EB3 BE9E BF04 BEB6 9D62 5782 59CD" /* Y.n³¾ž¿.¾¶bW‚YÍ */
- $"0003 5900 74B6 A0BE 03B8 9F63 5782 59CC" /* ..Y.t¶ ¾.¸ŸcW‚YÌ */
- $"0004 5959 547A B8A0 BC03 B7A0 6357 8359" /* ..YYTz¸ ¼.· cWƒY */
- $"CB00 0459 5954 88B9 A0BB 03B7 A366 56B8" /* Ë..YYTˆ¹ ».·£fV¸ */
- $"5995 0005 5959 005B A0B9 A0BA 03B8 AA73" /* Y•..YY.[ ¹ º.¸ªs */
- $"55BA 5992 0006 5959 0053 7BB4 B9A0 BA04" /* UºY’..YY.S{´¹ º. */
- $"B9B2 905A 56BA 5990 0006 5959 0054 73AB" /* ¹²ZVºY..YY.Ts« */
- $"B8A2 B903 B5AB 865E B756 0300 5859 598E" /* ¸¢¹.µ«†^·V..XYYŽ */
- $"0007 5959 005A 83AD B6B7 A2B8 04B7 B4AD" /* ..YY.Zƒ­¶·¢¸.·´­ */
- $"9B87 B57D 047B 725D 0059 8D00 0759 5900" /* ›‡µ}.{r].Y..YY. */
- $"5A8F B2B6 B6A4 B704 B6B5 B4B2 B1B4 B003" /* Z²¶¶¤·.¶µ´²±´°. */
- $"ADA0 7600 8059 8900 8159 0355 77AC B0E2" /* ­ v.€Y‰.Y.Uw¬°â */
- $"B103 AFA4 7D56 8259 8600 0159 5980 0003" /* ±.¯¤}V‚Y†..YY€.. */
- $"5279 9697 E298 0496 9073 5456 8000 0159" /* Ry–—â˜.–sTV€..Y */
- $"5984 0008 5900 5457 6268 686D 7284 73A1" /* Y„..Y.TWbhhmr„s¡ */
- $"74B9 7309 706C 6868 6763 5900 5959 8200" /* t¹sÆplhhgcY.YY‚. */
- $"0759 0052 6E96 A4A7 A8E7 A980 A706 A6A0" /* .Y.Rn–¤§¨ç©€§.¦  */
- $"8E6A 5759 5982 0002 536F A782 B0E5 AF81" /* ŽjWYY‚..So§‚°å¯ */
- $"B006 AFAF AB99 6A00 5980 0004 5900 5A9B" /* °.¯¯«™j.Y€..Y.Z› */
- $"AEF0 AF0B AEA6 895B 0059 0000 5900 6CA7" /* ®ð¯.®¦‰[.Y..Y.l§ */
- $"B4AE 03AF ABAE AFB7 AE0A A996 6500 5900" /* ´®.¯«®¯·®Â©–e.Y. */
- $"0059 5470 A7B3 AD05 AEA8 A299 A8AE B6AD" /* .YTp§³­.®¨¢™¨®¶­ */
- $"0AA8 9666 0059 0059 5900 6CA3 B4AB 05A6" /* ¨–f.Y.YY.l£´«.¦ */
- $"EDE9 99A7 ACB5 AB0A A692 6200 5900 5959" /* íé™§¬µ«Â¦’b.Y.YY */
- $"0063 9EB3 A905 A8A8 ECFF E195 B6A9 0BA3" /* .cž³©.¨¨ìÿá•¶©.£ */
- $"8D5F 5859 0059 5900 6099 A7B3 A806 A4DC" /* _XY.YY.`™§³¨.¤Ü */
- $"FFFF CA96 AAB4 A80B A187 5B58 5900 5959" /* ÿÿÊ–ª´¨.¡‡[XY.YY */
- $"005C 94A6 B3A7 01A3 C580 FF02 AD9D A8B3" /* .\”¦³§.£Å€ÿ.­¨³ */
- $"A70B 9F82 5A58 5900 5959 5857 8DA5 B3A6" /* §.Ÿ‚ZXY.YYXW¥³¦ */
- $"07A4 AEF8 FFFF ED97 A4B2 A603 A59C 7C58" /* .¤®øÿÿí—¤²¦.¥œ|X */
- $"8359 0257 87A3 B4A4 01A1 E180 FF02 CB94" /* ƒY.W‡£´¤.¡á€ÿ.Ë” */
- $"A6B1 A403 A399 7657 8359 0254 80A1 B4A2" /* ¦±¤.£™vWƒY.T€¡´¢ */
- $"019D C180 FF03 FEA4 9BA3 B0A2 03A1 9672" /* .Á€ÿ.þ¤›£°¢.¡–r */
- $"5783 5902 547A 9FB4 A202 A0A6 F380 FF02" /* WƒY.TzŸ´¢. ¦ó€ÿ. */
- $"E192 A3B0 A203 A094 6D56 8359 0255 759D" /* á’£°¢. ”mVƒY.Uu */
- $"B5A0 019B D381 FF02 B495 A1AF A006 9D90" /* µ .›Óÿ.´•¡¯ . */
- $"6957 5959 0080 5902 546D 9BB1 9E00 9F80" /* iWYY.€Y.Tm›±ž.Ÿ€ */
- $"A002 9CAF FD80 FF02 EF93 9DAF 9E06 9B8C" /*  .œ¯ý€ÿ.ž.›Œ */
- $"6657 5959 0080 5902 5568 97B0 9D07 9F95" /* fWYY.€Y.Uh—°.Ÿ• */
- $"8A89 8B98 9CE2 81FF 02C3 8F9E AE9D 0699" /* Љ‹˜œâÿ.Þ®.™ */
- $"8861 5759 5900 8059 0256 6494 AF9C 089D" /* ˆaWYY.€Y.Vd”¯œ. */
- $"8C9E D0DD C793 8CBC 81FF 02F7 9899 AE9C" /* ŒžÐÝÇ“Œ¼ÿ.÷˜™®œ */
- $"0697 855F 5859 5900 8059 0257 5E91 AF9B" /* .—…_XYY.€Y.W^‘¯› */
- $"0195 B781 FF03 F69B 96ED 81FF 02CE 8B9C" /* .•·ÿ.ö›–íÿ.΋œ */
- $"AD9B 0D95 815D 5859 5900 0059 5957 5B8C" /* ­›.•]XYY..YYW[Œ */
- $"98AD 9903 9889 9AD8 81FF 02E0 89C4 81FF" /* ˜­™.˜‰šØÿ.à‰Äÿ */
- $"02FD 9E93 AD99 0D93 7C5A 5859 5900 0059" /* .ýž“­™.“|ZXYY..Y */
- $"5958 5987 96AC 970C 9889 D3CE 88A1 E8FF" /* YXY‡–¬—.˜‰ÓΈ¡èÿ */
- $"FFF9 9B9D F481 FF02 D788 98AC 9702 9079" /* ÿù›ôÿ.׈˜¬—.y */
- $"5A80 5901 0000 8059 0255 8395 AB96 0D97" /* Z€Y...€Y.Uƒ•«–.— */
- $"8DA4 FFFF F6B2 84B4 F6FB A28E CC82 FF02" /* ¤ÿÿö²„´öû¢ŽÌ‚ÿ. */
- $"A28F 97AB 9601 8E75 8159 0100 0080 5902" /* ¢—«–.ŽuY...€Y. */
- $"547F 94AB 9502 9688 E481 FF07 E99E 8CBC" /* T.”«•.–ˆäÿ.鞌¼ */
- $"9991 A2F8 81FF 02DD 8896 AA95 0394 8D71" /* ™‘¢øÿ.݈–ª•.”q */
- $"5880 5901 0000 8059 0255 7993 AA94 0295" /* X€Y...€Y.Uy“ª”.• */
- $"87B4 84FF 05D4 8C93 948F D182 FF02 A68C" /* ‡´„ÿ.ÔŒ“”Ñ‚ÿ.¦Œ */
- $"95A9 9403 938A 6D57 8059 0700 0059 595A" /* •©”.“ŠmW€Y...YYZ */
- $"5374 91AA 9302 908C F284 FF06 DD92 9293" /* St‘ª“.Œò„ÿ.Ý’’“ */
- $"8FA4 FB81 FF01 E086 AA93 0391 876A 5780" /* ¤ûÿ.à†ª“.‘‡jW€ */
- $"5907 0000 5959 5A53 6F8F A991 0292 87CA" /* Y...YYZSo©‘.’‡Ê */
- $"84FF 02F8 A18D 8091 018D D782 FF02 A788" /* „ÿ.ø¡€‘.ׂÿ.§ˆ */
- $"92A8 9103 8F84 6757 8059 0100 0080 5902" /* ’¨‘.„gW€Y...€Y. */
- $"556B 8DA9 9002 8E85 DB84 FF01 C78A 8190" /* Uk©.Ž…Û„ÿ.ÇŠ */
- $"028B A8FE 81FF 01E2 84A9 9003 8E82 6357" /* .‹¨þÿ.â„©.Ž‚cW */
- $"8059 0100 0080 5902 5466 8CA8 9005 9186" /* €Y...€Y.TfŒ¨.‘† */
- $"AB85 A6EE 81FF 02EE 958E 8190 028F 8CDC" /* «…¦îÿ..ŒÜ */
- $"82FF 02AA 8591 A790 038D 7F62 5880 5901" /* ‚ÿ.ª…‘§..bX€Y. */
- $"0000 8059 0254 618A A78E 0C8F 84A5 FFF0" /* ..€Y.TaЧŽ.„¥ÿð */
- $"A480 BBF9 FFFF B688 838E 0189 A982 FF01" /* ¤€»ùÿÿ¶ˆƒŽ.‰©‚ÿ. */
- $"E583 A88E 038B 7C5F 5880 5901 0000 8059" /* 僨Ž.‹|_X€Y...€Y */
- $"0256 5F87 A78D 028C 83E8 80FF 06DF 9087" /* .V_‡§.Œƒè€ÿ.߇ */
- $"D4E0 8C8C 838D 028C 8ADE 82FF 02AB 838E" /* ÔàŒŒƒ.ŒŠÞ‚ÿ.«ƒŽ */
- $"A68D 038A 7A5D 5880 5901 0000 8059 0257" /* ¦.Šz]X€Y...€Y.W */
- $"5C84 A68C 028D 7EB7 83FF 03C9 8B8E 8B85" /* \„¦Œ.~·ƒÿ.ɋދ… */
- $"8C01 87AA 82FF 01E6 82A7 8C03 8877 5C58" /* Œ.‡ª‚ÿ.æ‚§Œ.ˆw\X */
- $"8059 0100 0080 5902 5757 81A6 8A02 878A" /* €Y...€Y.WW¦Š.‡Š */
- $"F584 FF01 CB83 868A 0289 88E0 82FF 02A8" /* õ„ÿ.˃†Š.‰ˆà‚ÿ.¨ */
- $"808B A58A 0386 735B 5880 5901 0000 8059" /* €‹¥Š.†s[X€Y...€Y */
- $"0258 557F A58A 028B 7BC9 84FF 02F6 9987" /* .XU.¥Š.‹{É„ÿ.ö™‡ */
- $"878A 0184 AB82 FF01 E580 A68A 0285 715A" /* ‡Š.„«‚ÿ.倦Š.…qZ */
- $"8159 0100 0081 5902 577B 88A3 8902 8A81" /* Y...Y.W{ˆ£‰.Š */
- $"9685 FF01 BF82 8889 0288 87E0 82FF 02A7" /* –…ÿ.¿‚ˆ‰.ˆ‡à‚ÿ.§ */
- $"7F8A A489 0183 6F82 5901 0000 8159 0254" /* .Ф‰.ƒo‚Y...Y.T */
- $"7787 A488 017A DC84 FF02 EA8C 8689 8801" /* w‡¤ˆ.zÜ„ÿ.ꌆ‰ˆ. */
- $"82A9 82FF 01E3 7EA4 8802 8781 6C82 5901" /* ‚©‚ÿ.ã~¤ˆ.‡l‚Y. */
- $"0000 8159 0151 7497 860E 8784 8686 8486" /* ..Y.Qt—†.‡„††„† */
- $"8684 8685 8486 877B A685 FF11 AD7D 8685" /* †„†…„†‡{¦…ÿ.­}†… */
- $"8486 8584 8784 8487 8485 8783 83DF 82FF" /* „†…„‡„„‡„…‡ƒƒß‚ÿ */
- $"0FA4 7D87 8584 8785 8487 8485 8784 8586" /* .¤}‡…„‡…„‡„…‡„…† */
- $"8596 8602 7F69 5881 5901 0000 8059 035A" /* …–†..iXY...€Y.Z */
- $"5170 8496 850E 8182 7F7F 827F 8082 7E81" /* Qp„–….‚..‚.€‚~ */
- $"8280 837E EC84 FF12 DB7E 817F 8082 7E81" /* ‚€ƒ~ì„ÿ.Û~.€‚~ */
- $"827E 8182 7E82 817E 827B A682 FF10 E07B" /* ‚~‚~‚~‚{¦‚ÿ.à{ */
- $"8380 827E 8181 7E82 817E 8280 7F81 8494" /* ƒ€‚~~‚~‚€.„” */
- $"8503 847D 6758 8159 0100 0080 5903 5A53" /* ….„}gXY...€Y.ZS */
- $"6E84 9585 0E82 90FB BCAC FFA4 B9FF 9BD3" /* n„•….‚û¼¬ÿ¤¹ÿ›Ó */
- $"FC97 7BB9 84FF 14FC 91AA FFA8 BFFF 92D1" /* ü—{¹„ÿ.ü‘ªÿ¨¿ÿ’Ñ */
- $"FB92 E5ED 87F4 DC95 FFCB 73DF 82FF 0FA0" /* û’åí‡ôÜ•ÿËsß‚ÿ.  */
- $"79DC F889 E5ED 90F6 D88F FFC7 AAC2 7D94" /* yÜø‰åíöØÿǪÂ}” */
- $"8503 847C 6558 8159 0100 0080 5903 5A52" /* ….„|eXY...€Y.ZR */
- $"6983 9584 0E81 92FF BCAA FFC4 D2FF 96D4" /* iƒ•„.’ÿ¼ªÿÄÒÿ–Ô */
- $"FF9A 82F8 84FF 14C6 78CE FFA6 BFFF B6E4" /* ÿš‚ø„ÿ.ÆxÎÿ¦¿ÿ¶ä */
- $"FF8D E8F9 AFFE DE91 FFE3 899E 82FF 0FDB" /* ÿèù¯þÞ‘ÿ㉞‚ÿ.Û */
- $"74E2 FFB1 F3F0 8AFA E9B4 FFC8 A6C7 7C94" /* tâÿ±óðŠúé´ÿȦÇ|” */
- $"8403 8379 6258 8159 0100 0080 5903 5A51" /* „.ƒybXY...€Y.ZQ */
- $"6581 9582 047F 90FF D5C8 81FF 04BB E5F9" /* e•‚..ÿÕÈÿ.»åù */
- $"86CA 84FF 06F2 82D6 FFFF C6D6 80FF 02FC" /* †Ê„ÿ.ò‚ÖÿÿÆÖ€ÿ.ü */
- $"B5EF 80FF 06E9 B8FF FFFA 8AD6 82FF 0196" /* µï€ÿ.é¸ÿÿúŠÖ‚ÿ.– */
- $"C680 FF02 F4B4 FA80 FF03 DCC9 C57A 9482" /* Æ€ÿ.ô´ú€ÿ.ÜÉÅz”‚ */
- $"0381 7761 5881 5901 0000 8059 035A 5262" /* .waXY...€Y.ZRb */
- $"7F95 8102 7E8F FA85 FF01 B190 85FF 01AC" /* .•.~ú…ÿ.±…ÿ.¬ */
- $"9A90 FF01 C494 82FF 02D5 8DF9 87FF 01BF" /* šÿ.Ä”‚ÿ.Õù‡ÿ.¿ */
- $"7994 8103 8075 5F58 8159 0100 0081 5902" /* y”.€u_XY...Y. */
- $"5461 7D95 8002 7D8E FA84 FF02 E779 DD84" /* Ta}•€.}Žú„ÿ.çyÝ„ */
- $"FF02 E47C E690 FF02 FC8A D281 FF02 FC8C" /* ÿ.ä|æÿ.üŠÒÿ.üŒ */
- $"C787 FF01 BF77 9480 037E 725E 5881 5901" /* LJÿ.¿w”€.~r^XY. */
- $"0000 8159 0254 5D7C 957F 027C 8EFA 84FF" /* ..Y.T]|•..|Žú„ÿ */
- $"019C A285 FF01 97AD 92FF 01C7 8F80 FF04" /* .œ¢…ÿ.—­’ÿ.Ç€ÿ. */
- $"FBC0 748B F986 FF01 BE76 947F 037D 715C" /* ûÀt‹ù†ÿ.¾v”..}q\ */
- $"5881 5901 0000 8159 0254 597B 957F 027C" /* XY...Y.TY{•..| */
- $"8EFA 83FF 02D7 7BEF 84FF 02D1 7EF4 92FF" /* Žúƒÿ.×{ï„ÿ.Ñ~ô’ÿ */
- $"09FE 8CC9 F8CB 8C64 9F83 C386 FF01 BE76" /* ÆþŒÉøËŒdŸƒÃ†ÿ.¾v */
- $"947F 037C 6F5B 5881 5901 0000 8159 0355" /* ”..|o[XY...Y.U */
- $"5779 7E94 7D02 7A8C FA82 FF02 FD8A B884" /* Wy~”}.zŒú‚ÿ.ýЏ„ */
- $"FF02 FA86 C094 FF09 CF74 7C64 7FCB FFC0" /* ÿ.ú†À”ÿÆÏt|d.ËÿÀ */
- $"80F7 85FF 01BD 7494 7D02 7A6D 5B82 5901" /* €÷…ÿ.½t”}.zm[‚Y. */
- $"0000 8159 0256 5677 957C 0279 8BFA 82FF" /* ..Y.VVw•|.y‹ú‚ÿ */
- $"02C3 82FB 84FF 02BB 86FE 95FF 088C 99D5" /* .Âû„ÿ.»†þ•ÿ.Œ™Õ */
- $"FCFF FFFA 7FBC 85FF 01BD 7394 7C02 796B" /* üÿÿú.¼…ÿ.½s”|.yk */
- $"5A82 5901 0000 8159 0257 5575 957B 0277" /* Z‚Y...Y.WUu•{.w */
- $"8BFA 81FF 02F4 7DCE 84FF 02EE 7BD6 96FF" /* ‹úÿ.ô}΄ÿ.î{Ö–ÿ */
- $"01D0 A782 FF02 C47B F484 FF01 BC72 947B" /* .Ч‚ÿ.Ä{ô„ÿ.¼r”{ */
- $"0178 6983 5901 0000 8159 0258 5272 957A" /* .xiƒY...Y.XRr•z */
- $"0877 8AE8 EEEC ECF2 AA91 85FF 02A8 92F2" /* .wŠèîììòª‘…ÿ.¨’ò */
- $"95EC 03ED ED93 DC81 FF03 FD83 B2F2 82EC" /* •ì.íí“Üÿ.ýƒ²ò‚ì */
- $"02F3 B573 947A 0176 6783 5901 0000 8159" /* .óµs”z.vgƒY...Y */
- $"0258 5070 9679 007A 817F 027E 71E3 84FF" /* .XPp–y.z..~qã„ÿ */
- $"03DF 797F 8096 7F02 8078 A382 FF02 C970" /* .ßy.€–..€x£‚ÿ.Ép */
- $"8083 7F00 7D95 7902 7565 5882 5901 0000" /* €ƒ..}•y.ueX‚Y... */
- $"8159 0258 4F6F 9779 8077 0278 69AB 85FF" /* Y.XOo—y€w.xi«…ÿ */
- $"029B 7378 9977 0178 DF81 FF02 B468 7583" /* .›sx™w.xßÿ.´huƒ */
- $"7700 7895 7902 7464 5882 5901 0000 8259" /* w.x•y.tdX‚Y...‚Y */
- $"0150 6D9A 7802 747A F384 FF02 CD72 779A" /* .Pmšx.tzó„ÿ.Írwš */
- $"7808 71A0 FFFF D98C 8FC6 6D9C 7801 7363" /* x.q ÿÿÙŒÆmœx.sc */
- $"8359 0100 0082 5901 516B 9A77 016B C484" /* ƒY...‚Y.Qkšw.kÄ„ */
- $"FF02 F68A 729B 770A 7677 9B8A 80BD FDFF" /* ÿ.öŠr›wÂvw›Š€½ýÿ */
- $"9C6A 789A 7702 7261 5882 5901 0000 8159" /* œjxšw.raX‚Y...Y */
- $"035A 4F68 7598 7602 737B F184 FF01 B96E" /* .ZOhu˜v.s{ñ„ÿ.¹n */
- $"9D76 0371 85D7 FB80 FF02 F076 719A 7602" /* v.q…×û€ÿ.ðvqšv. */
- $"7060 5882 5901 0000 8159 035A 4E66 7498" /* p`X‚Y...Y.ZNft˜ */
- $"7504 7380 77C3 FE81 FF02 E97B 729D 7502" /* u.s€wÃþÿ.é{ru. */
- $"727F EF82 FF01 CD66 9A75 026F 5E58 8259" /* r.ï‚ÿ.Ífšu.o^X‚Y */
- $"0100 0081 5903 5A4D 6473 9774 0672 76EE" /* ...Y.ZMds—t.rvî */
- $"CC73 83DA 80FF 01A4 6C9F 7401 6CBE 83FF" /* ÌsƒÚ€ÿ.¤lŸt.l¾ƒÿ */
- $"02A5 6575 9874 026D 5C58 8259 0100 0081" /* .¥eu˜t.m\X‚Y... */
- $"5902 5A4D 6298 730B 6F82 FAFF F9AD 6A97" /* Y.ZMb˜s.o‚úÿù­j— */
- $"F1DC 7172 9F73 016D 9283 FF03 F981 6B74" /* ñÜqrŸs.m’ƒÿ.ùkt */
- $"9773 026C 5B58 8259 0100 0081 5902 5A4D" /* —s.l[X‚Y...Y.ZM */
- $"6098 7301 6C94 81FF 04EC 957B 8470 A073" /* `˜s.l”ÿ.ì•{„p s */
- $"0271 75E7 83FF 02DD 6972 9773 026B 5C58" /* .quçƒÿ.Ýir—s.k\X */
- $"8259 0100 0081 5902 5A50 5F98 7201 69A8" /* ‚Y...Y.ZP_˜r.i¨ */
- $"83FF 019B 69A2 7201 6ABF 84FF 02AF 6473" /* ƒÿ.›i¢r.j¿„ÿ.¯ds */
- $"9672 026A 5B58 8259 0100 0081 5903 5A51" /* –r.j[X‚Y...Y.ZQ */
- $"5D70 9771 0167 BD81 FF02 F6A1 6FA3 7101" /* ]p—q.g½ÿ.ö¡o£q. */
- $"6B94 84FF 02F7 7B6D 9671 0169 5A83 5901" /* k”„ÿ.÷{m–q.iZƒY. */
- $"0000 8159 035A 505B 6F97 7101 69D5 80FF" /* ..Y.ZP[o—q.iÕ€ÿ */
- $"03E8 8B68 70A3 7102 6F74 E984 FF02 BC65" /* .è‹hp£q.oté„ÿ.¼e */
- $"7294 7102 7067 5883 5901 0000 8159 035A" /* r”q.pgXƒY...Y.Z */
- $"5059 6F96 7007 6F6F E7FF FFD4 7A69 A670" /* PYo–p.ooçÿÿÔzi¦p */
- $"0168 BD84 FF02 EC71 6E94 7002 6F67 5883" /* .h½„ÿ.ìqn”p.ogXƒ */
- $"5901 0000 8159 035A 5058 6E96 6F06 6C79" /* Y...Y.ZPXn–o.ly */
- $"F7FF BD6E 6BA7 6F02 6A8B FD83 FF02 FC83" /* ÷ÿ½nk§o.j‹ýƒÿ.üƒ */
- $"6B94 6F02 6E66 5783 5901 0000 8159 035A" /* k”o.nfWƒY...Y.Z */
- $"5056 6D96 6E05 688E FBA5 676C A86E 026D" /* PVm–n.hŽû¥gl¨n.m */
- $"6AD0 83FF 02F5 7D6B 946E 026D 6456 8359" /* jЃÿ.õ}k”n.mdVƒY */
- $"0100 0081 5903 5A4F 556C 966D 0468 9294" /* ...Y.ZOUl–m.h’” */
- $"656C AA6D 0268 87F8 82FF 01BC 6995 6D02" /* elªm.h‡ø‚ÿ.¼i•m. */
- $"6C63 5683 5901 0000 8159 035A 5054 6C97" /* lcVƒY...Y.ZPTl— */
- $"6D01 6C68 AD6D 0866 9EF7 FFFF F3B1 6C6B" /* m.lh­m.fž÷ÿÿó±lk */
- $"956D 026C 6256 8359 0100 0081 5903 5A50" /* •m.lbVƒY...Y.ZP */
- $"546C CA6D 0667 81A6 9D7A 666C 966D 026C" /* TlÊm.g¦zfl–m.l */
- $"6256 8359 0100 0081 5903 5A51 536C CB6D" /* bVƒY...Y.ZQSlËm */
- $"0369 6565 6998 6D02 6C62 5783 5901 0000" /* .ieei˜m.lbWƒY... */
- $"8159 035A 5152 6AEA 6C02 6B61 5783 5901" /* Y.ZQRjêl.kaWƒY. */
- $"0000 8159 035A 5252 6AEA 6C02 6B61 5783" /* ..Y.ZRRjêl.kaWƒ */
- $"5901 0000 8159 035A 5252 6AEA 6C02 6B61" /* Y...Y.ZRRjêl.ka */
- $"5783 5901 0000 8159 035A 5352 6AEA 6C02" /* WƒY...Y.ZSRjêl. */
- $"6B61 5783 5900 0082 5903 5A54 5168 EA6B" /* kaWƒY..‚Y.ZTQhêk */
- $"0269 5E56 8359 0000 8359 0257 4D5E EA63" /* .i^VƒY..ƒY.WM^êc */
- $"0260 5756 8359 0100 0082 5902 5A55 53EA" /* .`WVƒY...‚Y.ZUSê */
- $"5601 5556 8459 0100 00FB 5901 0000 FB59" /* V.UV„Y...ûY...ûY */
- $"0100 00FB 5901 0000 FB59 0100 00FA 5981" /* ...ûY...ûY...úY */
- $"00F9 5982 00F7 5983 00F6 5986 00F3 59FF" /* .ùY‚.÷Yƒ.öY†.óYÿ */
- $"00FF 0000 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ...ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00DF 009F 7CD7 00A6 7CD3" /* .ÿ.ÿ.ÿ.ß.Ÿ|×.¦|Ó */
- $"0001 7C7C 8000 9D7B 847C D000 037C 7C00" /* ..||€.{„|Ð..||. */
- $"7C9F 7F01 7B7B 837C D000 027B 88A5 9EB0" /* |Ÿ..{{ƒ|Ð..{ˆ¥ž° */
- $"03AC 9D81 7B83 7CCD 0004 7C00 81B3 D09E" /* .¬{ƒ|Í..|.³Ðž */
- $"D302 D0C3 A184 7CCD 0004 7C00 8FCA D79F" /* Ó.Ðá„|Í..|.Êן */
- $"D803 CEB4 837A 827C CD00 037C 0095 CEA0" /* Ø.δƒz‚|Í..|.•Π */
- $"D803 D1B7 847A 827C CC00 047C 7C78 9BD0" /* Ø.Ñ·„z‚|Ì..||x›Ð */
- $"A0D7 03D1 B884 7A83 7CCB 0004 7C7C 79A8" /*  ×.Ѹ„zƒ|Ë..||y¨ */
- $"D3A0 D703 D2BC 867A B87C 9500 057C 7C00" /* Ó ×.Ò¼†z¸|•..||. */
- $"81BD D5A0 D603 D3C3 9278 BA7C 9200 067C" /* ½Õ Ö.ÓÃ’xº|’..| */
- $"7C00 799D CED5 A0D6 04D4 CBAC 7D79 BA7C" /* |.yÎÕ Ö.Ôˬ}yº| */
- $"9000 067C 7C00 7B97 C5D3 A2D5 03D1 C4A3" /* ..||.{—ÅÓ¢Õ.ÑÄ£ */
- $"8280 7AB4 7B03 007B 7C7C 8E00 077C 7C00" /* ‚€z´{..{||Ž..||. */
- $"81A4 C8D2 D4A2 D505 D4D0 C8B7 A69F B19E" /* ¤ÈÒÔ¢Õ.ÔÐÈ·¦Ÿ±ž */
- $"079F 9F9E 9D94 8100 7C8D 0007 7C7C 0081" /* .ŸŸž”.|..||. */
- $"ADCD D3D3 A4D4 03D3 D2D0 CE80 CCB2 CB03" /* ­ÍÓÓ¤Ô.ÓÒÐ΀̲Ë. */
- $"C7B9 9500 807C 8900 817C 037A 98C6 CDE2" /* ǹ•.€|‰.|.z˜ÆÍâ */
- $"CE03 CCBE 9B7A 827C 8600 017C 7C80 0002" /* Î.̾›z‚|†..||€.. */
- $"7697 B181 B403 B5B5 B4B4 9EB5 01B4 B4B6" /* v—±´.µµ´´žµ.´´¶ */
- $"B506 B4B4 B3AA 9177 7980 0001 7C7C 8400" /* µ.´´³ª‘wy€..||„. */
- $"097C 0078 7D87 8B8B 8D94 95E2 960A 9592" /* Æ|.x}‡‹‹”•â–•’ */
- $"8E8C 8B8B 867D 007C 7C82 0009 7C00 7892" /* ŽŒ‹‹†}.||‚.Æ|.x’ */
- $"B5C1 C4C5 C6C6 81C7 03C6 C6C7 C79E C601" /* µÁÄÅÆÆÇ.ÆÆÇÇžÆ. */
- $"C7C7 82C6 01C7 C7AC C683 C70A C6C6 C4C3" /* ÇÇ‚Æ.ÇǬƃÇÂÆÆÄà */
- $"C3BD AB8C 7A7C 7C82 0005 7893 C5CE CFD0" /* ý«Œz||‚..x“ÅÎÏÐ */
- $"E9CF 08D0 D0CF CEC9 B58B 007C 8000 047C" /* éÏ.ÐÐÏÎɵ‹.|€..| */
- $"0080 B9CE F0D0 0CCF C5A7 7E00 7C00 007C" /* .€¹ÎðÐ.Ïŧ~.|..| */
- $"008F C5CE B3CF 03D0 CDCF D0B7 CF0A C9B2" /* .ÅγÏ.ÐÍÏзÏÂɲ */
- $"8600 7C00 007C 7894 C6B3 CF05 D0CB BEBA" /* †.|..|x”ƳÏ.Ð˾º */
- $"CCD0 B6CF 0ACA B487 007C 007C 7C00 8FC4" /* ÌжÏÂÊ´‡.|.||.Ä */
- $"B4CE 05C9 F2ED B9CC CFB5 CE0B C8B1 8400" /* ´Î.Éòí¹ÌϵÎ.ȱ„. */
- $"7C00 7C7C 0089 C0CC B3CD 05CC F3FF E7B9" /* |.||.‰À̳Í.Ìóÿç¹ */
- $"CEB5 CD0B C5AC 817B 7C00 7C7C 0085 BCCB" /* εÍ.Ŭ{|.||.…¼Ë */
- $"B3CC 06C9 EAFF FFD8 BDCE B4CC 0BC4 A77D" /* ³Ì.ÉêÿÿؽδÌ.ħ} */
- $"7B7C 007C 7C00 81B6 CAB3 CC01 C9DC 80FF" /* {|.||.¶Ê³Ì.ÉÜ€ÿ */
- $"02C6 C4CD B2CC 0DCB C1A3 7D7B 7C00 7C7C" /* .ÆÄͲÌ.ËÁ£}{|.|| */
- $"7B7D B1C9 CBB2 CA07 C9CF FBFF FFF1 BACB" /* {}±É˲Ê.ÉÏûÿÿñºË */
- $"B2CA 03C9 BE9D 7B83 7C02 7BAB C8B4 CA01" /* ²Ê.ɾ{ƒ|.{«È´Ê. */
- $"C8ED 80FF 02D9 BCCB B1CA 03C9 BC98 7A83" /* Èí€ÿ.ټ˱Ê.ɼ˜zƒ */
- $"7C02 7AA5 C6B4 C901 C6DA 80FF 03FD C1C4" /* |.z¥Æ´É.ÆÚ€ÿ.ýÁÄ */
- $"CAB0 C903 C7B9 957A 837C 0279 9FC4 B4C8" /* ʰÉ.ǹ•zƒ|.yŸÄ´È */
- $"02C7 CAF7 80FF 02E8 B8C9 B0C8 03C5 B68F" /* .ÇÊ÷€ÿ.è¸É°È.Ŷ */
- $"7A83 7C02 799A C2B5 C701 C4E4 81FF 02CA" /* zƒ|.yšÂµÇ.Ääÿ.Ê */
- $"BFC8 AFC7 06C4 B38B 7A7C 7C00 807C 0278" /* ¿È¯Ç.ij‹z||.€|.x */
- $"93C0 B1C6 00C7 80C8 02C4 CFFD 80FF 01F2" /* “À±Æ.Ç€È.ÄÏý€ÿ.ò */
- $"B8B0 C606 C2AF 897A 7C7C 0080 7C02 798F" /* ¸°Æ.¯‰z||.€|.y */
- $"BEB0 C607 C8C0 B4B2 B6C3 C6ED 81FF 02D4" /* ¾°Æ.ÈÀ´²¶ÃÆíÿ.Ô */
- $"BBC7 AEC6 06C1 AC84 7A7C 7C00 807C 0279" /* »Ç®Æ.Á¬„z||.€|.y */
- $"8BBB AFC5 08C6 B6BA DCE5 D5B3 BAD8 81FF" /* ‹»¯Å.ƶºÜåÕ³ºØÿ */
- $"02F9 BBC4 AEC5 06C0 A982 7B7C 7C00 807C" /* .ù»Ä®Å.À©‚{||.€| */
- $"027A 85B7 AEC4 02C5 C1CE 81FF 03F7 BAC1" /* .z…·®Ä.ÅÁÎÿ.÷ºÁ */
- $"F481 FF02 DCB7 C6AD C40D BDA5 817B 7C7C" /* ôÿ.Ü·Æ­Ä.½¥{|| */
- $"0000 7C7C 7A83 B4C3 ADC4 03C3 B3BE E981" /* ..||zƒ´Ã­Ä.ó¾é */
- $"FF02 E8B6 DC81 FF02 FDBE C0AD C40D BCA1" /* ÿ.è¶Üÿ.ý¾À­Ä.¼¡ */
- $"7E7B 7C7C 0000 7C7C 7B80 B0C2 ACC3 0CC4" /* ~{||..||{€°Â¬Ã.Ä */
- $"B5DD DAAE C4F2 FFFF FAC2 C5F8 81FF 02E2" /* µÝÚ®ÄòÿÿúÂÅøÿ.â */
- $"B5C4 ACC3 01B9 9D81 7C07 0000 7C7C 7B7C" /* µÄ¬Ã.¹|...||{| */
- $"ABC0 ABC1 0DC2 BCC1 FFFF F7C7 ACD0 FBFC" /* «À«Á.¼Áÿÿ÷ǬÐûü */
- $"C7BC E082 FF02 C0BD C2AB C101 B79A 817C" /* Ǽà‚ÿ.À½Â«Á.·š| */
- $"0100 0080 7C02 7BA7 BFAB C102 C2B2 EB81" /* ...€|.{§¿«Á.²ë */
- $"FF07 EDB9 B3D7 C3BF C7FA 81FF 02E6 B3C2" /* ÿ.í¹³×ÿÇúÿ.æ³Â */
- $"AAC1 03C0 B595 7B80 7C01 0000 807C 027A" /* ªÁ.Àµ•{€|...€|.z */
- $"A3BE AAC0 02C1 B6CA 84FF 05DE B8C0 C0BD" /* £¾ªÀ.Á¶Ê„ÿ.Þ¸ÀÀ½ */
- $"E382 FF02 C2BA C1A9 C003 BFB2 927A 807C" /* ã‚ÿ.ºÁ©À.¿²’z€| */
- $"0100 0080 7C02 789D BCAA BF02 BEB3 F584" /* ...€|.x¼ª¿.¾³õ„ */
- $"FF06 EBBF BEBF BDC9 FC81 FF02 E8B2 C0A9" /* ÿ.뿾¿½Éüÿ.è²À© */
- $"BF03 BEB0 8F7A 807C 0100 0080 7C02 7898" /* ¿.¾°z€|...€|.x˜ */
- $"BAA9 BE02 BFB5 D984 FF02 FBC7 BC80 BE01" /* º©¾.¿µÙ„ÿ.ûǼ€¾. */
- $"BBE7 82FF 02C3 B7BF A8BE 03BC AD8B 7A80" /* »ç‚ÿ.÷¿¨¾.¼­‹z€ */
- $"7C01 0000 807C 0278 95B9 A9BD 02BC B3E9" /* |...€|.x•¹©½.¼³é */
- $"84FF 01DD B981 BD02 BACB FE81 FF02 EAB0" /* „ÿ.ݹ½.ºËþÿ.ê° */
- $"BEA8 BD03 BAAA 887A 807C 0100 0080 7C02" /* ¾¨½.ºªˆz€|...€|. */
- $"7890 B8A8 BD05 BEB2 C1AC C7F6 81FF 02F4" /* x¸¨½.¾²Á¬Çöÿ.ô */
- $"C0BC 82BD 01BB EA82 FF02 C4B6 BEA7 BD03" /* À¼‚½.»ê‚ÿ.;§½. */
- $"BAA8 867A 807C 0100 0080 7C02 788B B5A7" /* º¨†z€|...€|.x‹µ§ */
- $"BC0C BDB5 C1FF F2BD AAD5 FCFF FFD3 B983" /* ¼.½µÁÿò½ªÕüÿÿÓ¹ƒ */
- $"BC01 B9CC 82FF 02EB AFBD A7BC 03B8 A584" /* ¼.¹Ì‚ÿ.믽§¼.¸¥„ */
- $"7B80 7C01 0000 807C 0279 88B3 A8BC 01AE" /* {€|...€|.yˆ³¨¼.® */
- $"ED80 FF06 E5B1 B1E6 ECBB BB84 BC01 B9EB" /* í€ÿ.å±±æì»»„¼.¹ë */
- $"82FF 02C5 B4BD A6BC 03B7 A381 7B80 7C01" /* ‚ÿ.Å´½¦¼.·£{€|. */
- $"0000 807C 027A 85B1 A6BB 02BC AFCC 82FF" /* ..€|.z…±¦».¼¯Ì‚ÿ */
- $"04FE D6AF BBBA 85BB 01B7 CC82 FF02 ECAE" /* .þÖ¯»º…».·Ì‚ÿ.ì® */
- $"BCA6 BB03 B5A0 807B 807C 0100 0080 7C03" /* ¼¦».µ €{€|...€|. */
- $"7A80 ADB9 A5BA 02B8 B0F7 84FF 01DE B486" /* z€­¹¥º.¸°÷„ÿ.Þ´† */
- $"BA02 B9B8 EB82 FF02 C3B2 BBA5 BA03 B39C" /* º.¹¸ë‚ÿ.ò»¥º.³œ */
- $"7F7B 807C 0100 0080 7C03 7B7E AAB7 A4B8" /* .{€|...€|.{~ª·¤¸ */
- $"02BA ABD8 84FF 02F9 C1B6 87B8 01B5 CC82" /* .º«Ø„ÿ.ùÁ¶‡¸.µÌ‚ */
- $"FF02 EBAC B9A5 B803 B199 7D7B 807C 0100" /* ÿ.묹¥¸.±™}{€|.. */
- $"0080 7C03 7B7D A7B6 A4B7 02B2 B7FE 84FF" /* .€|.{}§¶¤·.²·þ„ÿ */
- $"01D7 B388 B702 B6B6 EB82 FF02 C2B0 B8A4" /* .׳ˆ·.¶¶ë‚ÿ.°¸¤ */
- $"B701 AF96 827C 0100 0081 7C02 7BA3 B5A3" /* ·.¯–‚|...|.{£µ£ */
- $"B602 B7A8 E584 FF02 F1B8 B589 B601 B3CA" /* ¶.·¨å„ÿ.ñ¸µ‰¶.³Ê */
- $"82FF 02EA AAB7 A4B6 01AD 9382 7C01 0000" /* ‚ÿ.ꪷ¤¶.­“‚|... */
- $"817C 0278 9FB4 97B5 0DB4 B5B6 B4B6 B5B4" /* |.xŸ´—µ.´µ¶´¶µ´ */
- $"B6B5 B4B6 B6AD C085 FF11 CCB0 B6B5 B4B6" /* ¶µ´¶¶­À…ÿ.̰¶µ´¶ */
- $"B5B4 B6B5 B4B6 B4B5 B6B3 B4EB 82FF 0EC0" /* µ´¶µ´¶´µ¶³´ë‚ÿ.À */
- $"AFB6 B5B4 B6B4 B4B6 B4B5 B6B4 B5B6 97B5" /* ¯¶µ´¶´´¶´µ¶´µ¶—µ */
- $"01AB 9082 7C01 0000 817C 0278 9CB3 95B5" /* .«‚|...|.xœ³•µ */
- $"0FB6 AFA7 A9AA A7AA AAA7 ABA9 A7AC B1A9" /* .¶¯§©ª§ªª§«©§¬±© */
- $"F084 FF12 E9AA A6AA AAA7 ABA9 A7AB A8A8" /* ð„ÿ.骦ªª§«©§«¨¨ */
- $"ACA8 A8AB A7A5 C882 FF0F E8A8 B2A8 A8AB" /* ¬¨¨«§¥È‚ÿ.訲¨¨« */
- $"A8A8 ACA8 A9AC A7A9 AAAB 95B5 03B4 A98E" /* ¨¨¬¨©¬§©ª«•µ.´©Ž */
- $"7B81 7C01 0000 817C 0278 99B2 95B4 0EB3" /* {|...|.x™²•´.³ */
- $"B7F9 D2C7 FFC1 CEFF BCE1 FABB AACD 84FF" /* ·ùÒÇÿÁÎÿ¼áú»ªÍ„ÿ */
- $"14FD BAC6 FFC5 D3FF B7DF F9B7 EBF2 B0F6" /* .ýºÆÿÅÓÿ·ßù·ëò°ö */
- $"E6B9 FDDA A7EB 82FF 0FBD AAE6 F8B0 EBF1" /* æ¹ýÚ§ë‚ÿ.½ªæø°ëñ */
- $"B5F7 E3B4 FED9 C5D5 AF94 B403 B3A7 8B7B" /* µ÷ã´þÙÅÕ¯”´.³§‹{ */
- $"817C 0100 0081 7C02 7794 B195 B30E B1B9" /* |...|.w”±•³.±¹ */
- $"FFD2 C7FF D3DE FFBA E3FF BDAA F984 FF14" /* ÿÒÇÿÓÞÿºãÿ½ªù„ÿ. */
- $"DBA2 DAFF C4D4 FFCA EBFE B4EF FBC4 FEE9" /* Û¢ÚÿÄÔÿÊëþ´ïûÄþé */
- $"B6FF EAAB C082 FF0F E4A3 ECFF C5F6 F5B2" /* ¶ÿê«À‚ÿ.ä£ìÿÅöõ² */
- $"FBEF C8FF DAC4 DAAE 94B3 03B2 A589 7B81" /* ûïÈÿÚÄÚ®”³.²¥‰{ */
- $"7C01 0000 807C 037D 7690 AE95 B104 AFB7" /* |...€|.}v®•±.¯· */
- $"FFE0 D681 FF04 CDEC FCAE D884 FF06 F7AC" /* ÿàÖÿ.Íìü®Ø„ÿ.÷¬ */
- $"E0FF FFD4 E180 FF02 FDC9 F380 FF06 EFCA" /* àÿÿÔá€ÿ.ýÉó€ÿ.ïÊ */
- $"FFFF FAAE E582 FF01 B6DA 80FF 02F7 C7FB" /* ÿÿú®å‚ÿ.¶Ú€ÿ.÷Çû */
- $"80FF 03E5 D6D9 AC94 B103 B0A2 877B 817C" /* €ÿ.åÖÙ¬”±.°¢‡{| */
- $"0100 0081 7C02 768D AC95 B002 AEB7 FB85" /* ...|.v¬•°.®·û… */
- $"FF01 CDB1 85FF 01C9 B890 FF01 D5B8 82FF" /* ÿ.ͱ…ÿ.ɸÿ.Õ¸‚ÿ */
- $"02E0 B3FC 87FF 01D5 AA94 B003 AE9F 857B" /* .à³ü‡ÿ.Õª”°.®Ÿ…{ */
- $"817C 0100 0081 7C02 788A AB95 AF02 ADB6" /* |...|.xŠ«•¯.­¶ */
- $"FB84 FF02 F0A5 E584 FF02 EEA6 EC90 FF02" /* û„ÿ.ð¥å„ÿ.î¦ìÿ. */
- $"FCAE E281 FF02 FCB4 DB87 FF01 D5A9 94AF" /* ü®âÿ.ü´Û‡ÿ.Õ©”¯ */
- $"03AC 9D83 7B81 7C01 0000 817C 0278 86A9" /* .¬ƒ{|...|.x†© */
- $"95AD 02AB B4FB 84FF 01BE BD85 FF01 BAC3" /* •­.«´û„ÿ.¾½…ÿ.ºÃ */
- $"92FF 01D6 B480 FF04 FCD8 A4B3 FB86 FF01" /* ’ÿ.Ö´€ÿ.üؤ³û†ÿ. */
- $"D4A7 94AD 03AB 9A81 7B81 7C01 0000 817C" /* Ô§”­.«š{|...| */
- $"0278 83A7 95AC 02AA B3FB 83FF 02E5 A3F2" /* .xƒ§•¬.ª³ûƒÿ.å£ò */
- $"84FF 02E1 A5F6 92FF 09FD AEDC FBDE B595" /* „ÿ.á¥ö’ÿÆý®ÜûÞµ• */
- $"B6A9 D886 FF01 D3A6 94AC 03A9 9880 7B81" /* ¶©Ø†ÿ.Ó¦”¬.©˜€{ */
- $"7C01 0000 817C 0278 80A5 95AC 02AA B3FB" /* |...|.x€¥•¬.ª³û */
- $"82FF 02FE B0CB 84FF 02FC ADD0 94FF 09DB" /* ‚ÿ.þ°Ë„ÿ.ü­Ð”ÿÆÛ */
- $"A1A8 95A2 D6FF D1AA FA85 FF01 D3A6 94AC" /* ¡¨•¢ÖÿѪú…ÿ.Ó¦”¬ */
- $"03A8 967F 7B81 7C01 0000 817C 0279 7FA3" /* .¨–.{|...|.y.£ */
- $"95AB 02A9 B2FB 82FF 02D7 A7FB 84FF 02D2" /* •«.©²û‚ÿ.×§û„ÿ.Ò */
- $"AAFD 95FF 08AD B4DD FCFF FFFA A5D3 85FF" /* ªý•ÿ.­´Ýüÿÿú¥Ó…ÿ */
- $"01D3 A594 AB03 A694 7E7B 817C 0100 0081" /* .Ó¥”«.¦”~{|... */
- $"7C02 7A7D A095 A902 A7B1 FB81 FF02 F8A5" /* |.z} •©.§±ûÿ.ø¥ */
- $"DA84 FF02 F4A4 E096 FF01 DCC2 82FF 02D3" /* Ú„ÿ.ô¤à–ÿ.Ü‚ÿ.Ó */
- $"A5F8 84FF 01D2 A394 A902 A491 7D82 7C01" /* ¥ø„ÿ.Ò£”©.¤‘}‚|. */
- $"0000 817C 027A 7A9E 95A8 08A6 B1EF F3F2" /* ..|.zzž•¨.¦±ïóò */
- $"F2F6 C6B0 85FF 02C5 B4F5 95F2 03F3 F2B5" /* òöư…ÿ.Å´õ•ò.óòµ */
- $"E881 FF03 FCA7 CCF6 82F2 02F7 CDA3 94A8" /* èÿ.ü§Ìö‚ò.÷Í£”¨ */
- $"01A3 8F83 7C01 0000 817C 027B 779C 96A7" /* .£ƒ|...|.{wœ–§ */
- $"00A8 82AB 019C E984 FF03 E9A6 AAAC 96AB" /* .¨‚«.œé„ÿ.馪¬–« */
- $"02AC A6C1 82FF 02D8 A0AC 83AB 00A9 95A7" /* .¬¦Á‚ÿ.Ø ¬ƒ«.©•§ */
- $"01A1 8D83 7C01 0000 817C 037B 7699 A595" /* .¡ƒ|...|.{v™¥• */
- $"A600 A580 A402 A599 C085 FF02 BCA1 A599" /* ¦.¥€¤.¥™À…ÿ.¼¡¥™ */
- $"A401 A5E9 81FF 02CB 96A3 83A4 00A5 95A6" /* ¤.¥éÿ.Ë–£ƒ¤.¥•¦ */
- $"029F 8A7B 827C 0100 0082 7C02 7596 A399" /* .ŸŠ{‚|...‚|.u–£™ */
- $"A402 A29F F584 FF01 DDA0 9BA4 09A0 BFFF" /* ¤.¢Ÿõ„ÿ.Ý ›¤Æ ¿ÿ */
- $"FFE6 ADAB D299 A59B A402 9D88 7B82 7C01" /* ÿæ­«Ò™¥›¤.ˆ{‚|. */
- $"0000 827C 0276 94A2 98A3 02A4 98D1 84FF" /* ..‚|.v”¢˜£.¤˜Ñ„ÿ */
- $"02F9 AFA0 9CA3 09A4 B9A9 A0CB FCFF B599" /* .ù¯ œ£Æ¤¹© Ëüÿµ™ */
- $"A49A A302 9C87 7B82 7C01 0000 827C 0275" /* ¤š£.œ‡{‚|...‚|.u */
- $"92A2 98A3 02A1 A4F5 84FF 01CF 9E9D A303" /* ’¢˜£.¡¤õ„ÿ.Ïž£. */
- $"A0A9 DEFB 80FF 02F3 9CA0 9AA3 029B 867B" /*  ©Þû€ÿ.󜠚£.›†{ */
- $"827C 0100 0081 7C03 7D74 8FA1 97A2 05A3" /* ‚|...|.}t¡—¢.£ */
- $"9FA0 9ED6 FE81 FF02 F0A6 A09D A202 A0A9" /* Ÿ žÖþÿ.𦠢. © */
- $"F382 FF01 D893 9AA2 0299 837B 827C 0100" /* ó‚ÿ.Ø“š¢.™ƒ{‚|.. */
- $"0081 7C03 7D73 8D9F 97A0 069F 9FF1 D697" /* .|.}sŸ— .ŸŸñÖ— */
- $"A6E6 80FF 01C1 9B9F A001 9BD2 83FF 02BB" /* ¦æ€ÿ.Á›Ÿ .›Òƒÿ.» */
- $"94A1 98A0 0297 827B 827C 0100 0081 7C03" /* ”¡˜ .—‚{‚|...|. */
- $"7D72 8A9E 979F 0B9D A6FB FFF9 BF91 B6F6" /* }rŠž—Ÿ.¦ûÿù¿‘¶ö */
- $"E69E 9E9F 9F01 9BB4 83FF 03FA A199 A096" /* æžžŸŸ.›´ƒÿ.ú¡™ – */
- $"9F03 9E95 807B 827C 0100 0081 7C03 7D72" /* Ÿ.ž•€{‚|...|.}r */
- $"889D 979E 0199 B281 FF04 EFAD 9EA9 9CA0" /* ˆ—ž.™²ÿ.ï­ž©œ  */
- $"9E02 9D9F EE83 FF01 E492 979E 039D 9480" /* ž.Ÿîƒÿ.ä’—ž.”€ */
- $"7B82 7C01 0000 817C 037D 7487 9B97 9D01" /* {‚|...|.}t‡›—. */
- $"96BF 82FF 02FE B697 A29D 0198 D184 FF02" /* –¿‚ÿ.þ¶—¢.˜Ñ„ÿ. */
- $"C191 9E95 9D03 9C92 7F7B 827C 0100 0081" /* Á‘ž•.œ’.{‚|... */
- $"7C03 7D75 849A 979C 0194 CE81 FF02 F8BD" /* |.}u„š—œ.”Îÿ.ø½ */
- $"9BA3 9C01 98B4 84FF 02F8 9D99 959C 039B" /* ›£œ.˜´„ÿ.ø™•œ.› */
- $"907E 7B82 7C01 0000 817C 037D 7482 9997" /* ~{‚|...|.}t‚™— */
- $"9B01 94DF 80FF 03EE AD95 9AA3 9B02 9A9D" /* ›.”߀ÿ.î­•š£›.š */
- $"EF84 FF02 CC91 9C94 9B03 9A8F 7C7B 827C" /* ï„ÿ.Ì‘œ”›.š|{‚| */
- $"0100 0081 7C03 7D74 8098 979A 0697 ECFF" /* ...|.}t€˜—š.—ìÿ */
- $"FFE0 A195 A69A 0195 D084 FF02 F098 9994" /* ÿà¡•¦š.•Єÿ.𘙔 */
- $"9A02 998D 7B83 7C01 0000 817C 037D 737E" /* š.™{ƒ|...|.}s~ */
- $"9896 9A06 989F F9FF D099 97A7 9A02 96AD" /* ˜–š.˜ŸùÿЙ—§š.–­ */
- $"FD83 FF02 FCA6 9794 9A02 998D 7B83 7C01" /* ýƒÿ.ü¦—”š.™{ƒ|. */
- $"0000 817C 037D 737D 9796 9905 95AD FCBE" /* ..|.}s}—–™.•­ü¾ */
- $"9498 A999 0196 DD83 FF02 F7A3 9794 9902" /* ”˜©™.–݃ÿ.÷£—”™. */
- $"988C 7A83 7C01 0000 817C 037D 737B 9696" /* ˜Œzƒ|...|.}s{–– */
- $"9803 95B0 B392 AB98 0294 AAF9 82FF 01CF" /* ˜.•°³’«˜.”ªù‚ÿ.Ï */
- $"9595 9802 978A 7A83 7C01 0000 817C 037D" /* ••˜.—Šzƒ|...|.} */
- $"747B 9498 9700 94AD 9708 93B9 F9FF FFF6" /* t{”˜—.”­—.“¹ùÿÿö */
- $"C797 9695 9702 9688 7983 7C01 0000 817C" /* Ç—–•—.–ˆyƒ|...| */
- $"037D 7479 93CA 9606 92A4 BEB8 9F91 9596" /* .}ty“Ê–.’¤¾¸Ÿ‘•– */
- $"9602 9588 7983 7C01 0000 817C 037D 7478" /* –.•ˆyƒ|...|.}tx */
- $"93CB 9603 9390 9193 9896 0294 8779 837C" /* “Ë–.“‘“˜–.”‡yƒ| */
- $"0100 0081 7C03 7D75 7892 EA95 0293 8679" /* ...|.}ux’ê•.“†y */
- $"837C 0100 0081 7C03 7D75 7892 EA95 0293" /* ƒ|...|.}ux’ê•.“ */
- $"8679 837C 0100 0081 7C03 7D76 7792 EA95" /* †yƒ|...|.}vw’ê• */
- $"0293 8679 837C 0100 0081 7C03 7D76 7792" /* .“†yƒ|...|.}vw’ */
- $"EA95 0293 8579 837C 0000 827C 037D 7776" /* ê•.“…yƒ|..‚|.}wv */
- $"8FEA 9402 9182 7883 7C00 0083 7C03 7A70" /* ê”.‘‚xƒ|..ƒ|.zp */
- $"8288 E989 0285 7A79 837C 0100 0082 7C02" /* ‚ˆé‰.…zyƒ|...‚|. */
- $"7D78 76EA 7901 7779 847C 0100 00FB 7C01" /* }xvêy.wy„|...û|. */
- $"0000 FB7C 0100 00FB 7C01 0000 FB7C 0100" /* ..û|...û|...û|.. */
- $"00FA 7C81 00F9 7C82 00F7 7C83 00F6 7C86" /* .ú|.ù|‚.÷|ƒ.ö|† */
- $"00F3 7CFF 00FF 0000 00FF 00FF 00FF 00FF" /* .ó|ÿ.ÿ...ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00FF 00FF 00FF" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ.ÿ */
- $"00FF 00FF 00FF 00FF 00FF 00DF 009F 74D7" /* .ÿ.ÿ.ÿ.ÿ.ÿ.ß.Ÿt× */
- $"00A6 74D3 0001 7474 8000 9D73 8474 D000" /* .¦tÓ..tt€.s„tÐ. */
- $"0374 7400 749E 7702 7673 7283 74D0 0003" /* .tt.tžw.vsrƒtÐ.. */
- $"7381 9FAB 9DAC 03A8 977A 7383 74CD 0004" /* sŸ«¬.¨—zsƒtÍ.. */
- $"7400 79AF CC9E CF03 CCBF 9B73 8374 CD00" /* t.y¯ÌžÏ.Ì¿›sƒtÍ. */
- $"0474 0088 C6D2 9FD3 03CA AF7C 7282 74CD" /* .t.ˆÆÒŸÓ.ʯ|r‚tÍ */
- $"0003 7400 8EC9 A0D3 03CC B27D 7282 74CC" /* ..t.ŽÉ Ó.̲}r‚tÌ */
- $"0004 7474 7094 CBA0 D203 CCB3 7C72 8374" /* ..ttp”Ë Ò.̳|rƒt */
- $"CB00 0474 7471 A1CE A0D1 03CC B67F 72B8" /* Ë..ttq¡Î Ñ.̶.r¸ */
- $"7495 0005 7474 0078 B7D0 A0D1 03CE BE8B" /* t•..tt.x·Ð Ñ.ξ‹ */
- $"70BA 7492 0006 7474 0070 96C9 CFA0 D004" /* pºt’..tt.p–ÉÏ Ð. */
- $"CFC6 A675 71BA 7490 0006 7474 0072 8FC0" /* ÏÆ¦uqºt..tt.rÀ */
- $"CDA2 CF03 CBBF 9D7A B672 0473 0073 7474" /* Í¢Ï.Ë¿z¶r.s.stt */
- $"8E00 0674 7400 799D C3CD A3CF 04CE CAC3" /* Ž..tt.yÃÍ£Ï.ÎÊà */
- $"B2A0 B598 0496 8D79 0074 8D00 0774 7400" /* ² µ˜.–y.t..tt. */
- $"79A8 C8CE CEA4 CF03 CECD CBC9 B5C7 03C3" /* y¨ÈÎΤÏ.ÎÍËɵÇ.à */
- $"B58F 0080 7489 0081 7403 7192 C1C8 E2C9" /* µ.€t‰.t.q’ÁÈâÉ */
- $"03C7 B995 7282 7486 0001 7474 8000 026E" /* .ǹ•r‚t†..tt€..n */
- $"91AC E3AF 04AE A58A 6F71 8000 0174 7484" /* ‘¬ã¯.®¥Šoq€..tt„ */
- $"0008 7400 7075 8085 8487 8E80 8FAA 9000" /* ..t.pu€…„‡Ž€ª. */
- $"8FB0 9080 8F09 8B87 8584 847F 7600 7474" /* °€Æ‹‡…„„.v.tt */
- $"8200 0774 0070 8BAF BCBF C0E7 C109 C0BF" /* ‚..t.p‹¯¼¿ÀçÁÆÀ¿ */
- $"BEBE B8A6 8572 7474 8200 0370 8DC0 C9EE" /* ¾¾¸¦…rtt‚..pÀÉî */
- $"CA05 C9C4 B185 0074 8000 0474 0078 B4C8" /* Ê.Éı….t€..t.x´È */
- $"F0CA 0CC9 BFA1 7600 7400 0074 0088 BFC8" /* ðÊ.É¿¡v.t..t.ˆ¿È */
- $"B3C9 03CA C7C9 CAB7 C90A C3AD 7F00 7400" /* ³É.ÊÇÉÊ·ÉÂí..t. */
- $"0074 708C C0B3 C805 C9C3 B8B3 C4C9 B6C8" /* .tpŒÀ³È.Éø³ÄÉ¶È */
- $"0AC3 AE7F 0074 0074 7400 88BD B4C7 05C2" /* Âî..t.tt.ˆ½´Ç. */
- $"F1EC B2C4 C8B5 C70B C1AB 7C00 7400 7474" /* ñì²ÄȵÇ.Á«|.t.tt */
- $"0082 BAC6 B3C7 04C6 F2FF E6B3 B6C7 0BC0" /* .‚ºÆ³Ç.Æòÿæ³¶Ç.À */
- $"A67A 7374 0074 7400 7DB5 C5B3 C606 C3E7" /* ¦zst.tt.}µÅ³Æ.Ãç */
- $"FFFF D5B6 C8B4 C60B BDA1 7573 7400 7474" /* ÿÿÕ¶È´Æ.½¡ust.tt */
- $"0079 B0C4 B3C5 01C2 D880 FF02 C0BD C6B2" /* .y°Ä³Å.ÂØ€ÿ.À½Æ² */
- $"C50C C4BB 9D75 7374 0074 7473 75AA C2B3" /* Å.Ä»ust.ttsuªÂ³ */
- $"C406 C3C9 FAFF FFF0 B3B3 C403 C3B8 9673" /* Ä.ÃÉúÿÿð³³Ä.ø–s */
- $"8474 01A5 C1B4 C301 C1EB 80FF 02D6 B4C5" /* „t.¥Á´Ã.Áë€ÿ.Ö´Å */
- $"B1C3 03C2 B591 7283 7402 719E BFB4 C201" /* ±Ã.µ‘rƒt.qž¿´Â. */
- $"BFD5 80FF 03FD BBBD C3B0 C203 C0B2 8E72" /* ¿Õ€ÿ.ý»½Ã°Â.À²Žr */
- $"8374 0270 99BD B4C1 02C0 C4F6 80FF 02E6" /* ƒt.p™½´Á.ÀÄö€ÿ.æ */
- $"B1C2 B0C1 03BE AF87 7283 7402 7193 BBB5" /* ±Â°Á.¾¯‡rƒt.q“»µ */
- $"C001 BCE1 81FF 02C6 B7C1 AFC0 06BD AC84" /* À.¼áÿ.Æ·Á¯À.½¬„ */
- $"7274 7400 8074 0270 8CB9 B1BF 00C0 80C1" /* rtt.€t.pŒ¹±¿.À€Á */
- $"02BD CAFD 80FF 01F1 B1B0 BF06 BBA9 8172" /* .½Êý€ÿ.ñ±°¿.»©r */
- $"7474 0080 7402 7088 B7B0 BF07 C1B9 ACAB" /* tt.€t.pˆ·°¿.Á¹¬« */
- $"AEBC BEEB 81FF 02D1 B3C0 AEBF 06BA A67C" /* ®¼¾ëÿ.ѳÀ®¿.º¦| */
- $"7274 7400 8074 0271 83B4 AFBE 08BF AFB4" /* rtt.€t.qƒ´¯¾.¿¯´ */
- $"D9E3 D2AD B1D3 81FF 02F8 B4BC AEBE 06B8" /* ÙãÒ­±Óÿ.ø´¼®¾.¸ */
- $"A27A 7374 7400 8074 0372 7DB1 BCAE BD01" /* ¢zstt.€t.r}±¼®½. */
- $"B9CA 81FF 03F6 B4B9 F381 FF02 D8AF BEAD" /* ¹Êÿ.ö´¹óÿ.د¾­ */
- $"BD0D B69F 7973 7474 0000 7474 727A ADBB" /* ½.¶Ÿystt..ttrz­» */
- $"ADBC 03BB ABB7 E681 FF02 E6AE D881 FF02" /* ­¼.»«·æÿ.æ®Øÿ. */
- $"FDB7 B8AD BC0D B49A 7673 7474 0000 7474" /* ý·¸­¼.´švstt..tt */
- $"7378 A9BA ACBB 0CBC ACDB D7A6 BDF0 FFFF" /* sx©º¬».¼¬Ûצ½ðÿÿ */
- $"FABA BEF7 81FF 02DF ACBC ACBB 01B2 9781" /* úº¾÷ÿ.߬¼¬».²— */
- $"7407 0000 7474 7374 A4B8 ABB9 0DBA B3BB" /* t...ttst¤¸«¹.º³» */
- $"FFFF F7C2 A4CB FAFC C0B4 DC82 FF02 BAB4" /* ÿÿ÷¤ËúüÀ´Ü‚ÿ.º´ */
- $"BAAB B901 B093 8174 0100 0080 7402 729F" /* º«¹.°“t...€t.rŸ */
- $"B6AB B902 BAAA E981 FF07 ECB3 ABD1 BBB6" /* ¶«¹.ºªéÿ.쳫ѻ¶ */
- $"C0FA 81FF 02E4 AABA AAB9 03B8 AD8E 7380" /* Àúÿ.䪺ª¹.¸­Žs€ */
- $"7401 0000 8074 0272 9BB6 AAB8 02B9 ADC6" /* t...€t.r›¶ª¸.¹­Æ */
- $"84FF 05DC AFB7 B8B4 E082 FF02 BCB1 B9A9" /* „ÿ.ܯ·¸´à‚ÿ.¼±¹© */
- $"B803 B6AB 8A72 8074 0100 0080 7402 7095" /* ¸.¶«Šr€t...€t.p• */
- $"B4AA B602 B5AB F484 FF06 E9B6 B5B6 B4C2" /* ´ª¶.µ«ô„ÿ.é¶µ¶´Â */
- $"FC81 FF02 E6A9 B7A9 B603 B5A8 8872 8074" /* üÿ.æ©·©¶.µ¨ˆr€t */
- $"0100 0080 7402 6F91 B3A9 B602 B7AD D684" /* ...€t.o‘³©¶.·­Ö„ */
- $"FF02 FAC0 B480 B601 B3E4 82FF 02BD AFB7" /* ÿ.úÀ´€¶.³ä‚ÿ.½¯· */
- $"A8B6 03B4 A584 7280 7401 0000 8074 0270" /* ¨¶.´¥„r€t...€t.p */
- $"8DB2 A9B6 02B4 ACE7 84FF 01D9 B181 B602" /* ²©¶.´¬ç„ÿ.Ù±¶. */
- $"B3C5 FE81 FF02 E8A8 B7A8 B603 B3A3 8172" /* ³Åþÿ.訷¨¶.³£r */
- $"8074 0100 0080 7402 7087 B0A8 B505 B6AA" /* €t...€t.p‡°¨µ.¶ª */
- $"BDA4 C1F5 81FF 02F3 B8B4 82B5 01B2 E782" /* ½¤Áõÿ.ó¸´‚µ.²ç‚ */
- $"FF02 BFAD B6A7 B503 B2A1 7F72 8074 0100" /* ÿ.¿­¶§µ.²¡.r€t.. */
- $"0080 7402 7083 ADA7 B40C B5AC BBFF F2B8" /* .€t.pƒ­§´.µ¬»ÿò¸ */
- $"A2D0 FBFF FFCE B083 B401 B1C5 82FF 02EA" /* ¢Ðûÿÿΰƒ´.±Å‚ÿ.ê */
- $"A7B5 A7B4 03B0 9E7C 7380 7401 0000 8074" /* §µ§´.°ž|s€t...€t */
- $"0271 80AB A8B3 01A5 EC80 FF06 E4AA A9E2" /* .q€«¨³.¥ì€ÿ.䪩â */
- $"EAB2 B284 B301 B1E8 82FF 02BF ABB4 A6B3" /* ê²²„³.±è‚ÿ.¿«´¦³ */
- $"03AE 9B79 7380 7401 0000 8074 0272 7DA8" /* .®›ys€t...€t.r}¨ */
- $"A6B2 02B3 A6C8 82FF 04FE D3A8 B2B1 85B2" /* ¦².³¦È‚ÿ.þÓ¨²±…² */
- $"01AE C582 FF02 EAA6 B3A6 B203 AC98 7873" /* .®Å‚ÿ.꦳¦².¬˜xs */
- $"8074 0100 0080 7403 7278 A5B0 A5B1 02AF" /* €t...€t.rx¥°¥±.¯ */
- $"A9F7 84FF 01DA AB86 B102 B0AF E982 FF02" /* ©÷„ÿ.Ú«†±.°¯é‚ÿ. */
- $"BEA9 B2A5 B103 AB95 7773 8074 0100 0080" /* ¾©²¥±.«•ws€t...€ */
- $"7403 7276 A2AF A4B0 02B1 A2D5 84FF 02F8" /* t.rv¢¯¤°.±¢Õ„ÿ.ø */
- $"BAAE 87B0 01AC C682 FF02 EAA4 B1A5 B003" /* º®‡°.¬Æ‚ÿ.ꤱ¥°. */
- $"A991 7573 8074 0100 0080 7402 7375 9FA4" /* ©‘us€t...€t.suŸ¤ */
- $"AE03 AFA9 B0FE 84FF 01D3 AA88 AE02 ADAD" /* ®.¯©°þ„ÿ.Óªˆ®.­­ */
- $"E982 FF02 BCA7 AFA4 AE01 A78E 8274 0100" /* é‚ÿ.¼§¯¤®.§Ž‚t.. */
- $"0081 7402 729B ADA3 AE02 AFA0 E384 FF02" /* .t.r›­£®.¯ ã„ÿ. */
- $"F0B0 AD89 AE01 AAC4 82FF 02E9 A2AF A4AE" /* ð°­‰®.ªÄ‚ÿ.颯¤® */
- $"01A5 8C82 7401 0000 8174 0270 98AC 97AD" /* .¥Œ‚t...t.p˜¬—­ */
- $"0DAC ADAE ACAE ADAC AEAD ACAE AEA4 BB85" /* .¬­®¬®­¬®­¬®®¤»… */
- $"FF11 C7A7 AEAD ACAE ADAC AEAC ACAE ACAD" /* ÿ.ǧ®­¬®­¬®¬¬®¬­ */
- $"AEAB ABE9 82FF 0EBB A6AE ADAC AEAC ACAE" /* ®««é‚ÿ.»¦®­¬®¬¬® */
- $"ACAD AEAC ADAE 97AD 01A3 8982 7401 0000" /* ¬­®¬­®—­.£‰‚t... */
- $"8174 0270 94AA 95AC 0FAD A79F A1A2 9FA2" /* t.p”ª•¬.­§Ÿ¡¢Ÿ¢ */
- $"A29F A2A1 9FA4 A9A1 EF84 FF12 E6A2 9FA2" /* ¢Ÿ¢¡Ÿ¤©¡ï„ÿ.梟¢ */
- $"A1A0 A3A1 A0A2 A0A0 A3A0 A0A2 9F9D C282" /* ¡ £¡ ¢  £  ¢ŸÂ‚ */
- $"FF10 E6A0 A9A0 A0A2 A0A0 A2A0 A1A3 A0A1" /* ÿ.æ ©  ¢  ¢ ¡£ ¡ */
- $"A2A2 AB94 AC03 ABA1 8673 8174 0100 0081" /* ¢¢«”¬.«¡†st... */
- $"7402 7091 A995 AB0E A9AF FACE C2FF BCCA" /* t.p‘©•«.©¯úÎÂÿ¼Ê */
- $"FFB6 DEFA B4A1 C884 FF14 FDB2 C0FF BFCF" /* ÿ¶Þú´¡È„ÿ.ý²Àÿ¿Ï */
- $"FFAF DCFA AFEA F1A8 F5E4 B2FE D79D E982" /* ÿ¯Üú¯êñ¨õä²þ×é‚ */
- $"FF0F B8A1 E4F8 A9EA F0AE F7E0 ACFF D5C0" /* ÿ.¸¡äø©êð®÷à¬ÿÕÀ */
- $"D1A5 94AB 03AA 9F84 7381 7401 0000 8174" /* Ñ¥”«.ªŸ„st...t */
- $"026F 8CA8 95A9 0EA7 B1FF CEC2 FFD0 DBFF" /* .oŒ¨•©.§±ÿÎÂÿÐÛÿ */
- $"B3E0 FFB6 A2F9 84FF 14D7 99D8 FFBE D0FF" /* ³àÿ¶¢ù„ÿ.×™Øÿ¾Ðÿ */
- $"C5E9 FFAC EEFA C0FE E7B0 FFE8 A3B9 82FF" /* Åéÿ¬îúÀþç°ÿ裹‚ÿ */
- $"0FE2 99EA FFC1 F5F4 ABFB EDC4 FFD7 BED6" /* .â™êÿÁõô«ûíÄÿ×¾Ö */
- $"A394 A903 A89C 8173 8174 0100 0080 7403" /* £”©.¨œst...€t. */
- $"756E 88A6 95A8 04A6 B0FF DDD3 81FF 04C9" /* unˆ¦•¨.¦°ÿÝÓÿ.É */
- $"EBFB A6D5 84FF 06F6 A3DE FFFF D1DE 80FF" /* ëû¦Õ„ÿ.ö£ÞÿÿÑÞ€ÿ */
- $"02FD C4F2 80FF 06EE C6FF FFFA A7E2 82FF" /* .ýÄò€ÿ.îÆÿÿú§â‚ÿ */
- $"01B0 D780 FF02 F6C3 FB80 FF03 E3D3 D5A2" /* .°×€ÿ.öÃû€ÿ.ãÓÕ¢ */
- $"94A8 03A7 9A7F 7381 7401 0000 8074 0375" /* ”¨.§š.st...€t.u */
- $"6E85 A495 A702 A5AF FA85 FF01 C7AB 85FF" /* n…¤•§.¥¯ú…ÿ.Ç«…ÿ */
- $"01C4 B290 FF01 D1B1 82FF 02DD ACFB 87FF" /* .IJÿ.ѱ‚ÿ.ݬû‡ÿ */
- $"01D1 A194 A703 A598 7D73 8174 0100 0081" /* .Ñ¡”§.¥˜}st... */
- $"7402 7082 A295 A602 A4AE FB84 FF02 EF9C" /* t.p‚¢•¦.¤®û„ÿ.ïœ */
- $"E484 FF02 EC9E EB90 FF02 FCA7 DF81 FF02" /* ä„ÿ.ìžëÿ.ü§ßÿ. */
- $"FCAD D787 FF01 D0A0 94A6 03A3 957B 7381" /* ü­×‡ÿ.Р”¦.£•{s */
- $"7401 0000 8174 0270 7EA1 95A6 02A4 AEFB" /* t...t.p~¡•¦.¤®û */
- $"84FF 01B8 B885 FF01 B4BF 92FF 01D4 AD80" /* „ÿ.¸¸…ÿ.´¿’ÿ.Ô­€ */
- $"FF04 FCD4 9CAC FA86 FF01 D0A0 94A6 03A3" /* ÿ.üÔœ¬ú†ÿ.Р”¦.£ */
- $"937A 7381 7401 0000 8174 0270 7B9F 95A4" /* “zst...t.p{Ÿ•¤ */
- $"02A2 ACFA 83FF 02E3 9BF1 84FF 02DE 9EF5" /* .¢¬úƒÿ.ã›ñ„ÿ.Þžõ */
- $"92FF 09FD A8D9 FADB AD8B B1A1 D486 FF01" /* ’ÿÆý¨ÙúÛ­‹±¡Ô†ÿ. */
- $"CF9E 94A4 03A1 9178 7381 7401 0000 8174" /* Ïž”¤.¡‘xst...t */
- $"0270 779D 95A3 02A1 ACFA 82FF 02FD A9C7" /* .pw•£.¡¬ú‚ÿ.ý©Ç */
- $"84FF 02FC A5CD 94FF 09D9 989F 8B9B D3FF" /* „ÿ.ü¥Í”ÿÆÙ˜Ÿ‹›Óÿ */
- $"CDA1 F985 FF01 CF9D 94A3 03A0 8E77 7381" /* Í¡ù…ÿ.Ï”£. Žws */
- $"7401 0000 8174 0271 779A 95A2 02A0 ABFA" /* t...t.qwš•¢. «ú */
- $"82FF 02D4 A0FB 84FF 02CE A2FD 95FF 08A6" /* ‚ÿ.Ô û„ÿ.΢ý•ÿ.¦ */
- $"AEDB FCFF FFFA 9ECF 85FF 01CE 9C94 A203" /* ®ÛüÿÿúžÏ…ÿ.Μ”¢. */
- $"9E8C 7673 8174 0100 0081 7402 7275 9895" /* žŒvst...t.ru˜• */
- $"A102 9FAA FA81 FF02 F79D D784 FF02 F29C" /* ¡.Ÿªúÿ.÷ׄÿ.òœ */
- $"DE96 FF01 DABD 82FF 02D0 9DF8 84FF 01CE" /* Þ–ÿ.Ú½‚ÿ.Ðø„ÿ.Î */
- $"9A94 A102 9C8A 7582 7401 0000 8174 0272" /* š”¡.œŠu‚t...t.r */
- $"7196 959F 089D A9EE F2F1 F1F6 C0AA 85FF" /* q–•Ÿ.©îòññöÀª…ÿ */
- $"02C0 ADF5 95F1 03F2 F1AE E681 FF03 FCA0" /* .À­õ•ñ.òñ®æÿ.ü  */
- $"C7F5 82F1 02F6 C89A 949F 029A 8775 8274" /* Çõ‚ñ.öÈš”Ÿ.š‡u‚t */
- $"0100 0081 7402 736F 9396 9E00 9F82 A201" /* ...t.so“–ž.Ÿ‚¢. */
- $"93E8 84FF 03E8 9EA2 A396 A202 A39D BB82" /* “è„ÿ.螢£–¢.£»‚ */
- $"FF02 D597 A383 A200 A195 9E01 9985 8374" /* ÿ.Õ—£ƒ¢.¡•ž.™…ƒt */
- $"0100 0081 7403 736E 929D 959E 009D 809C" /* ...t.sn’•ž.€œ */
- $"029D 91BC 84FF 03FE B599 9D99 9C01 9DE7" /* .‘¼„ÿ.þµ™™œ.ç */
- $"81FF 02C7 8D9B 839C 009D 959E 0198 8383" /* ÿ.Ç›ƒœ.•ž.˜ƒƒ */
- $"7401 0000 8274 016E 8F9A 9C02 9A98 F484" /* t...‚t.nšœ.š˜ô„ */
- $"FF01 DA99 9B9C 0997 B9FF FFE4 A7A6 CF91" /* ÿ.Ú™›œÆ—¹ÿÿ䧦ϑ */
- $"9D9B 9C02 9681 7382 7401 0000 8274 026F" /* ›œ.–s‚t...‚t.o */
- $"8C9A 989B 029C 90CF 84FF 02F8 A998 9D9B" /* Œš˜›.œÏ„ÿ.ø©˜› */
- $"08B3 A39A C8FC FFB0 919C 9A9B 0294 8073" /* .³£šÈüÿ°‘œš›.”€s */
- $"8274 0100 0082 7402 6D8A 9998 9A02 989C" /* ‚t...‚t.mŠ™˜š.˜œ */
- $"F484 FF01 CB94 9D9A 0397 A2DD FB80 FF02" /* ô„ÿ.Ë”š.—¢Ýû€ÿ. */
- $"F294 979A 9A02 927E 7382 7401 0000 8174" /* ò”—šš.’~s‚t...t */
- $"0375 6B87 9898 9904 969A 96D2 FE81 FF02" /* .uk‡˜˜™.–š–Òþÿ. */
- $"EF9E 979D 9902 97A1 F382 FF02 D68A 9A99" /* ïž—™.—¡ó‚ÿ.ÖŠš™ */
- $"9902 917C 7382 7401 0000 8174 0375 6A85" /* ™.‘|s‚t...t.uj… */
- $"9797 9806 9798 F1D3 8F9F E480 FF01 BB92" /* ——˜.—˜ñÓŸä€ÿ.»’ */
- $"9F98 0192 CF83 FF02 B68A 9998 9802 8F7B" /* Ÿ˜.’σÿ.¶Š™˜˜.{ */
- $"7382 7401 0000 8174 0375 6A82 9597 960B" /* s‚t...t.uj‚•—–. */
- $"939F FBFF F9BB 89B0 F5E4 9595 9F96 0192" /* “Ÿûÿù»‰°õä••Ÿ–.’ */
- $"AD83 FF03 FA9B 9097 9796 028D 7973 8274" /* ­ƒÿ.ú›——–.ys‚t */
- $"0100 0081 7403 756A 8195 9796 0191 AC81" /* ...t.uj•—–.‘¬ */
- $"FF04 EEA8 97A2 94A0 9602 9597 EC83 FF01" /* ÿ.¢” –.•—ìƒÿ. */
- $"E28A 9796 0395 8C78 7382 7401 0000 8174" /* ⊗–.•Œxs‚t...t */
- $"0375 6C7F 9497 9501 8EBB 82FF 02FE B28E" /* .ul.”—•.Ž»‚ÿ.þ²Ž */
- $"A295 018F CE84 FF02 BD89 9695 9503 948B" /* ¢•.΄ÿ.½‰–••.”‹ */
- $"7873 8274 0100 0081 7403 756D 7D92 9794" /* xs‚t...t.um}’—” */
- $"018C CB81 FF02 F8B8 93A3 9401 90AE 84FF" /* .ŒËÿ.ø¸“£”.®„ÿ */
- $"02F7 9691 9594 0393 8A77 7382 7401 0000" /* .÷–‘•”.“Šws‚t... */
- $"8174 0375 6C7B 9197 9301 8CDD 80FF 02ED" /* t.ul{‘—“.ŒÝ€ÿ.í */
- $"A78D A493 0292 96EE 84FF 02C8 8894 9493" /* §¤“.’–î„ÿ.Ȉ””“ */
- $"0392 8875 7382 7401 0000 8174 0375 6C79" /* .’ˆus‚t...t.uly */
- $"9096 9207 9190 EBFF FFDE 9A8D A692 018C" /* –’.‘ëÿÿÞš¦’.Œ */
- $"CC84 FF02 EF91 9194 9201 9186 8474 0100" /* Ì„ÿ.ï‘‘”’.‘†„t.. */
- $"0081 7403 756B 7790 9692 0690 97F8 FFCC" /* .t.ukw–’.—øÿÌ */
- $"918E A792 028E A6FD 83FF 02FC 9F8F 9492" /* ‘ާ’.ަýƒÿ.üŸ”’ */
- $"0191 8584 7401 0000 8174 0375 6B75 8E96" /* .‘…„t...t.ukuŽ– */
- $"9005 8BA7 FCBA 8B8E A990 018D DB83 FF02" /* .‹§üº‹Ž©.Ûƒÿ. */
- $"F79B 8D94 9002 8F83 7383 7401 0000 8174" /* ÷›”.ƒsƒt...t */
- $"0375 6C74 8E96 9004 8CAA AD89 8FAA 9002" /* .ultŽ–.Œª­‰ª. */
- $"8CA3 F982 FF01 CB8C 9590 028F 8373 8374" /* Œ£ù‚ÿ.ËŒ•.ƒsƒt */
- $"0100 0081 7403 756B 728D 988F 008B AD8F" /* ...t.ukr˜.‹­ */
- $"088A B4F9 FFFF F6C3 8E8E 958F 028E 8172" /* .Š´ùÿÿöÃŽŽ•.Žr */
- $"8374 0100 0081 7403 756C 718C CA8E 068A" /* ƒt...t.ulqŒÊŽ.Š */
- $"9DBA B398 898D 968E 028D 8072 8374 0100" /* º³˜‰–Ž.€rƒt.. */
- $"0081 7403 756C 718B CB8E 038B 8888 8B98" /* .t.ulq‹ËŽ.‹ˆˆ‹˜ */
- $"8E02 8C80 7283 7401 0000 8174 0375 6D71" /* Ž.Œ€rƒt...t.umq */
- $"8BEA 8E02 8C80 7283 7401 0000 8174 0375" /* ‹êŽ.Œ€rƒt...t.u */
- $"6D70 8AEA 8D02 8B7F 7283 7401 0000 8174" /* mpŠê.‹.rƒt...t */
- $"0375 6E70 8AEA 8D02 8B7E 7283 7401 0000" /* .unpŠê.‹~rƒt... */
- $"8174 0375 6E70 8AEA 8D02 8B7E 7283 7400" /* t.unpŠê.‹~rƒt. */
- $"0082 7403 756F 6E88 EA8C 0289 7B71 8374" /* .‚t.uonˆêŒ.‰{qƒt */
- $"0000 8374 0372 697B 81E9 8202 7E73 7283" /* ..ƒt.ri{é‚.~srƒ */
- $"7401 0000 8274 0475 706E 7172 E671 0372" /* t...‚t.upnqræq.r */
- $"7270 7284 7401 0000 FB74 0100 00FB 7401" /* rpr„t...ût...ût. */
- $"0000 FB74 0100 00FB 7401 0000 FA74 8100" /* ..ût...ût...út. */
- $"F974 8200 F774 8300 F674 8600 F374 FF00" /* ùt‚.÷tƒ.öt†.ótÿ. */
- $"FF00 0000 7438 6D6B 0000 4008 0000 0000" /* ÿ...t8mk..@..... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0101 0101 0202 0202 0202 0202 0202 0202" /* ................ */
- $"0202 0202 0202 0202 0202 0202 0202 0101" /* ................ */
- $"0101 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0102 0202" /* ................ */
- $"0304 0505 0606 0606 0606 0606 0606 0606" /* ................ */
- $"0606 0606 0606 0606 0606 0606 0606 0505" /* ................ */
- $"0503 0302 0100 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0001 0100 0000" /* ................ */
- $"0204 0506 0707 0707 0707 0707 0707 0707" /* ................ */
- $"0707 0707 0707 0707 0707 0707 0707 0606" /* ................ */
- $"090A 0805 0302 0100 0000 0000 0000 0000" /* ÆÂ.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0101 001C 2F31" /* ............../1 */
- $"3436 383A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A" /* 468::::::::::::: */
- $"3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A3A 3A34" /* :::::::::::::::4 */
- $"120B 0F0B 0704 0201 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0004 8FF3 FAF9" /* ............óúù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9" /* ùùùùùùùùùùùùùùùù */
- $"F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 F9F9 FAFA" /* ùùùùùùùùùùùùùùúú */
- $"C433 1112 0C07 0402 0100 0000 0000 0000" /* Ä3.............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 0067 FFFF FFFF" /* ...........gÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFC3 201A 130C 0703 0100 0000 0000 0000" /* ÿÃ ............. */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0001 00A9 FFFF FFFF" /* ...........©ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFF8 4A20 1B11 0A05 0200 0000 0000 0000" /* ÿøJ ..Â......... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0002 00B6 FFFF FFFF" /* ...........¶ÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFB 5928 2216 0D07 0200 0000 0000 0000" /* ÿûY("........... */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0103 07CC FFFF FFFF" /* ...........Ìÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFD 6231 291B 1109 0401 0000 0000 0000" /* ÿýb1)..Æ........ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0201 21F0 FFFF FFFF" /* ..........!ðÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 7337 2F21 160D 0704 0303 0303 0303" /* ÿÿs7/!.......... */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0302 0201 0100" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0001 0500 69FF FFFF FFFF" /* ..........iÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF 9A38 3628 1C14 0E0A 0909 0909 0909" /* ÿÿš86(...ÂÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0909 0909 0909" /* ÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆÆ */
- $"0909 0909 0909 0909 0909 0807 0604 0302" /* ÆÆÆÆÆÆÆÆÆÆ...... */
- $"0100 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0203 0021 DFFF FFFF FFFF" /* .........!ßÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF E653 312D 231B 1512 1011 1010 1010" /* ÿÿæS1-#......... */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 1010 1010 1010" /* ................ */
- $"1010 1010 1010 1010 1010 0E0C 0A08 0504" /* ............Â... */
- $"0301 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0002 0200 34D3 FFFF FFFF FFFF" /* ........4Óÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFD6 6E40 312A 2522 2121 2121 2121" /* ÿÿÿÖn@1*%"!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2121 2121 2121 2121" /* !!!!!!!!!!!!!!!! */
- $"2121 2121 2121 2121 2120 1E1B 1814 0D00" /* !!!!!!!!! ...... */
- $"0203 0100 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0102 006C F4FF FFFF FFFF FFFF" /* .......lôÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FEE8 DAD9 D9D8 D8D8 D8D8 D8D8" /* ÿÿÿÿþèÚÙÙØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8 D8D8" /* ØØØØØØØØØØØØØØØØ */
- $"D8D8 D8D8 D8D8 D8D8 D8D8 D7D7 D6D5 D5A9" /* ØØØØØØØØØØ××ÖÕÕ© */
- $"1E00 0200 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0001 0300 71FF FFFF FFFF FFFF FFFF" /* ......qÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"8500 0402 0100 0000 0000 0000 0000 0000" /* …............... */
- $"0001 0203 0317 E1FF FFFF FFFF FFFF FFFF" /* ......áÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"9E03 0905 0302 0100 0000 0000 0000 0000" /* ž.Æ............. */
- $"0201 0000 002C E4E8 E8E9 EAEB ECEC EDED" /* .....,äèèéêëììíí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED EDED EDED EDED EDED EDED EDED" /* íííííííííííííííí */
- $"EDED EDED ECEC ECEC ECEC ECEC ECEC ECEC" /* ííííìììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEC ECEC ECEC" /* ìììììììììììììììì */
- $"ECEC ECEC ECEC ECEC ECEC ECEB EAE9 E8F4" /* ìììììììììììëêéèô */
- $"8E02 0400 0000 0202 0000 0000 0000 0002" /* Ž............... */
- $"0012 6297 A3A9 BBBD C0C4 C7CA CCCD CECE" /* ..b—£©»½ÀÄÇÊÌÍÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CECE CECE CECE CECE CECE CECE" /* ÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎÎ */
- $"CECE CECE CDCD CCCC CCCC CBCB CBCB CBCB" /* ÎÎÎÎÍÍÌÌÌÌËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBCB CBCB CBCB" /* ËËËËËËËËËËËËËËËË */
- $"CBCB CBCB CBCB CBCB CBCB CBC9 C8C5 C2C0" /* ËËËËËËËËËËËÉÈÅÂÀ */
- $"B5A6 A5A1 8236 0002 0100 0000 0000 0100" /* µ¦¥¡‚6.......... */
- $"35DC FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 5Üÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFE 8901 0101 0000 0000 001B" /* ÿÿÿÿÿþ‰......... */
- $"DFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF73 0002 0000 0001 0082" /* ÿÿÿÿÿÿÿs.......‚ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE4 1800 0100 0001 00C0" /* ÿÿÿÿÿÿÿä.......À */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4500 0200 0002 02C6" /* ÿÿÿÿÿÿÿÿE......Æ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF 4C00 0200 0103 00B3" /* ÿÿÿÿÿÿÿÿL......³ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFE 3D00 0300 0104 009C" /* ÿÿÿÿÿÿÿþ=......œ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFF4 2C04 0400 0105 0087" /* ÿÿÿÿÿÿÿô,......‡ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFE8 2007 0400 0105 0073" /* ÿÿÿÿÿÿÿè ......s */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFD9 1808 0400 0105 015C" /* ÿÿÿÿÿÿÿÙ.......\ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFC7 0E0A 0401 0105 034A" /* ÿÿÿÿÿÿÿÇ.Â.....J */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFB5 0A0A 0402 0105 043C" /* ÿÿÿÿÿÿÿµÂÂ.....< */
- $"FBFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFA1 080A 0402 0105 062B" /* ÿÿÿÿÿÿÿ¡.Â.....+ */
- $"F2FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF8E 050A 0402 0104 0720" /* ÿÿÿÿÿÿÿŽ.Â..... */
- $"E7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF7C 0609 0300 0104 0817" /* ÿÿÿÿÿÿÿ|.Æ...... */
- $"D8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF68 0709 0300 0104 0A0E" /* ÿÿÿÿÿÿÿh.Æ....Â. */
- $"C8FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF55 0809 0300 0104 0A0A" /* ÿÿÿÿÿÿÿU.Æ....ÂÂ */
- $"B7FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FF47 0909 0300 0104 0A07" /* ÿÿÿÿÿÿÿGÆÆ....Â. */
- $"A4FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF F638 0B08 0300 0004 0A05" /* ÿÿÿÿÿÿö8......Â. */
- $"91FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF EE2B 0C08 0300 0004 0905" /* ÿÿÿÿÿÿî+......Æ. */
- $"81FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF E224 0D08 0300 0003 0906" /* ÿÿÿÿÿÿâ$......Æ. */
- $"71FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF D51C 0E08 0300 0003 0907" /* ÿÿÿÿÿÿÕ.......Æ. */
- $"5EFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF C714 0F07 0200 0003 0908" /* ÿÿÿÿÿÿÇ.......Æ. */
- $"4FFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF B811 0E07 0200 0003 090A" /* ÿÿÿÿÿÿ¸.......ÆÂ */
- $"43FD FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* Cýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF A70E 0F07 0200 0003 080B" /* ÿÿÿÿÿÿ§......... */
- $"34F5 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* 4õÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 960C 0E06 0200 0002 080D" /* ÿÿÿÿÿÿ–......... */
- $"29EB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* )ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 850C 0E07 0200 0003 080E" /* ÿÿÿÿÿÿ…......... */
- $"22E0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* "àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 760D 0E06 0200 0003 080F" /* ÿÿÿÿÿÿv......... */
- $"1BD3 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Óÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 650E 0E06 0200 0002 080F" /* ÿÿÿÿÿÿe......... */
- $"14C7 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 580E 0D06 0200 0002 070F" /* ÿÿÿÿÿÿX......... */
- $"11B9 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF 4E10 0D06 0100 0002 070F" /* ÿÿÿÿÿÿN......... */
- $"10AB FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF8 4211 0D06 0200 0002 070F" /* ÿÿÿÿÿøB......... */
- $"0D9B FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFF1 3513 0D06 0200 0002 080F" /* ÿÿÿÿÿñ5......... */
- $"0C8D FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFE9 2E13 0D05 0100 0002 070F" /* ÿÿÿÿÿé.......... */
- $"0D81 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFDF 2914 0D06 0100 0002 070F" /* ÿÿÿÿÿß)......... */
- $"0E73 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFD4 2215 0C06 0100 0002 070F" /* ÿÿÿÿÿÔ"......... */
- $"0F64 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFC9 1C16 0C05 0100 0002 070F" /* ÿÿÿÿÿÉ.......... */
- $"1058 FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFBD 1A15 0C05 0100 0002 070F" /* ÿÿÿÿÿ½.......... */
- $"114F FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFB2 1815 0C05 0100 0002 070E" /* ÿÿÿÿÿ².......... */
- $"1246 FAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .Fúÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFA5 1615 0C05 0100 0002 070E" /* ÿÿÿÿÿ¥.......... */
- $"133B F4FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .;ôÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF98 1515 0C05 0100 0002 060E" /* ÿÿÿÿÿ˜.......... */
- $"1533 EEFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .3îÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF8D 1515 0B05 0100 0002 070E" /* ÿÿÿÿÿ.......... */
- $"152F E6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ./æÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF82 1615 0B05 0100 0002 070E" /* ÿÿÿÿÿ‚.......... */
- $"1629 DDFF FFFF FFFF FFFF FFFF FFFF FFFF" /* .)Ýÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF77 1615 0B05 0100 0002 060E" /* ÿÿÿÿÿw.......... */
- $"1624 D5FF FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Õÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF6B 1715 0B05 0100 0002 060E" /* ÿÿÿÿÿk.......... */
- $"1720 CCFF FFFF FFFF FFFF FFFF FFFF FFFF" /* . Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF61 1815 0B05 0100 0002 060E" /* ÿÿÿÿÿa.......... */
- $"181D C3FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FF5B 1914 0B05 0100 0002 060E" /* ÿÿÿÿÿ[.......... */
- $"181C BAFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ºÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FE54 1A14 0B05 0100 0002 070E" /* ÿÿÿÿþT.......... */
- $"181B B0FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..°ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F94C 1B15 0B04 0100 0002 060E" /* ÿÿÿÿùL.......... */
- $"181A A6FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..¦ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F544 1C15 0B05 0100 0002 070E" /* ÿÿÿÿõD.......... */
- $"1819 9DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF F13D 1D14 0B04 0100 0002 060E" /* ÿÿÿÿñ=.......... */
- $"1819 95FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..•ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF EB3A 1D14 0B05 0100 0002 070E" /* ÿÿÿÿë:.......... */
- $"1819 8EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..Žÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF E537 1E14 0B05 0100 0002 070E" /* ÿÿÿÿå7.......... */
- $"181A 86FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..†ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF DF34 1E14 0B05 0100 0002 070E" /* ÿÿÿÿß4.......... */
- $"181B 7EFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..~ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D930 1F15 0B05 0100 0002 070E" /* ÿÿÿÿÙ0.......... */
- $"181B 78FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..xÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF D32D 1F15 0B05 0100 0002 070F" /* ÿÿÿÿÓ-.......... */
- $"191C 71FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..qÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF CE29 2015 0B05 0100 0002 070F" /* ÿÿÿÿÎ) ......... */
- $"191D 6AFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..jÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C828 2015 0B05 0100 0002 070F" /* ÿÿÿÿÈ( ......... */
- $"191D 65FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..eÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF C328 2015 0B05 0100 0002 070F" /* ÿÿÿÿÃ( ......... */
- $"191E 61FF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..aÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF BE28 2115 0B05 0100 0002 070F" /* ÿÿÿÿ¾(!......... */
- $"191F 5DFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ..]ÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B827 2115 0C05 0100 0002 070F" /* ÿÿÿÿ¸'!......... */
- $"1920 5AFE FFFF FFFF FFFF FFFF FFFF FFFF" /* . Zþÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B427 2115 0C05 0100 0003 0710" /* ÿÿÿÿ´'!......... */
- $"1A21 58FD FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Xýÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF B026 2115 0C05 0100 0003 0810" /* ÿÿÿÿ°&!......... */
- $"1A21 55FB FFFF FFFF FFFF FFFF FFFF FFFF" /* .!Uûÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF AC26 2116 0C05 0200 0003 0810" /* ÿÿÿÿ¬&!......... */
- $"1A22 52F9 FFFF FFFF FFFF FFFF FFFF FFFF" /* ."Rùÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A826 2215 0C05 0100 0003 0810" /* ÿÿÿÿ¨&"......... */
- $"1A23 4FF7 FFFF FFFF FFFF FFFF FFFF FFFF" /* .#O÷ÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A426 2316 0D06 0200 0003 0811" /* ÿÿÿÿ¤&#......... */
- $"1B24 4DF6 FFFF FFFF FFFF FFFF FFFF FFFF" /* .$Möÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF A126 2316 0D06 0200 0003 0911" /* ÿÿÿÿ¡&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9F26 2317 0D06 0200 0003 0912" /* ÿÿÿÿŸ&#.......Æ. */
- $"1C25 4CF5 FFFF FFFF FFFF FFFF FFFF FFFF" /* .%Lõÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9E26 2317 0D06 0200 0003 0912" /* ÿÿÿÿž&#.......Æ. */
- $"1C26 4BF4 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Kôÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9D27 2317 0D06 0200 0004 0912" /* ÿÿÿÿ'#.......Æ. */
- $"1C26 4AF3 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Jóÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9C27 2417 0D06 0200 0104 0912" /* ÿÿÿÿœ'$.......Æ. */
- $"1C26 47F2 FFFF FFFF FFFF FFFF FFFF FFFF" /* .&Gòÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 9A27 2417 0D06 0200 0103 0911" /* ÿÿÿÿš'$.......Æ. */
- $"1B27 37D1 FFFF FFFF FFFF FFFF FFFF FFFF" /* .'7Ñÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ */
- $"FFFF FFFF 7329 2316 0D06 0200 0003 0810" /* ÿÿÿÿs)#......... */
- $"1A27 2F59 B7C6 C6C7 C7C7 C7C7 C7C7 C7C7" /* .'/Y·ÆÆÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7 C7C7" /* ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ */
- $"C7C5 C689 372D 2015 0C06 0200 0003 070E" /* ÇÅÆ‰7- ......... */
- $"1723 3037 3C46 4C4F 5050 5050 5050 5050" /* .#07<FLOPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"5050 5050 5050 5050 5050 5050 5050 5050" /* PPPPPPPPPPPPPPPP */
- $"4D49 4138 352A 1D13 0A05 0100 0003 060C" /* MIA85*..Â....... */
- $"141E 2934 3D44 494C 4D4E 4E4E 4E4E 4E4E" /* ..)4=DILMNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E" /* NNNNNNNNNNNNNNNN */
- $"4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4E 4E4D" /* NNNNNNNNNNNNNNNM */
- $"4B46 4039 2F24 1910 0904 0100 0002 050A" /* KF@9/$..Æ...... */
- $"1018 212B 3339 3D40 4142 4242 4242 4242" /* ..!+39=@ABBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4242" /* BBBBBBBBBBBBBBBB */
- $"4242 4242 4242 4242 4242 4242 4242 4140" /* BBBBBBBBBBBBBBA@ */
- $"3F3B 352F 261D 140D 0703 0100 0002 0407" /* ?;5/&........... */
- $"0C12 1920 272C 2F32 3233 3333 3333 3333" /* ... ',/223333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3333" /* 3333333333333333 */
- $"3333 3333 3333 3333 3333 3333 3333 3332" /* 3333333333333332 */
- $"302D 2924 1D16 0F09 0502 0100 0001 0305" /* 0-)$...Æ........ */
- $"080D 1217 1C1F 2223 2425 2525 2525 2525" /* ......"#$%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2525" /* %%%%%%%%%%%%%%%% */
- $"2525 2525 2525 2525 2525 2525 2525 2524" /* %%%%%%%%%%%%%%%$ */
- $"2221 1E19 1510 0B07 0402 0000 0000 0103" /* "!.............. */
- $"0609 0C10 1315 1718 1919 1919 1919 1919" /* .Æ.............. */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1919" /* ................ */
- $"1919 1919 1919 1919 1919 1919 1919 1918" /* ................ */
- $"1716 1411 0E0A 0704 0201 0000 0000 0002" /* .....Â.......... */
- $"0305 0709 0B0D 0E0F 0F0F 0F0F 0F0F 0F0F" /* ...Æ............ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F 0F0F" /* ................ */
- $"0F0D 0C0A 0806 0402 0100 0000 0000 0001" /* ...Â............ */
- $"0103 0304 0607 0708 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0808 0808 0808 0808 0808 0808 0808 0808" /* ................ */
- $"0707 0605 0403 0201 0000 0000 0000 0000" /* ................ */
- $"0001 0102 0202 0203 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0303 0303 0303 0303 0303 0303 0303 0303" /* ................ */
- $"0202 0202 0201 0100 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */
- $"0000 0000 0000 0000 0000 0000 6963 3038" /* ............ic08 */
- $"0000 5CBD 0000 000C 6A50 2020 0D0A 870A" /* ..\½....jP .‡ */
- $"0000 0014 6674 7970 6A70 3220 0000 0000" /* ....ftypjp2 .... */
- $"6A70 3220 0000 004F 6A70 3268 0000 0016" /* jp2 ...Ojp2h.... */
- $"6968 6472 0000 0100 0000 0100 0004 0707" /* ihdr............ */
- $"0100 0000 000F 636F 6C72 0100 0000 0000" /* ......colr...... */
- $"1000 0000 2263 6465 6600 0400 0000 0000" /* ...."cdef....... */
- $"0100 0300 0100 0000 0100 0000 0200 0200" /* ................ */
- $"0000 0300 0000 006A 7032 63FF 4FFF 5100" /* .......jp2cÿOÿQ. */
- $"3200 0000 0001 0000 0001 0000 0000 0000" /* 2............... */
- $"0000 0000 0001 0000 0001 0000 0000 0000" /* ................ */
- $"0000 0000 0407 0101 0701 0107 0101 0701" /* ................ */
- $"01FF 5200 0C00 0000 0101 0504 0400 01FF" /* .ÿR............ÿ */
- $"5C00 1320 5058 5860 5858 6058 5860 5858" /* \.. PXX`XX`XX`XX */
- $"5850 5058 FF64 0011 0001 4B61 6B61 6475" /* XPPXÿd....Kakadu */
- $"2D76 352E 322E 31FF 9000 0A00 0000 005B" /* -v5.2.1ÿ.Â....[ */
- $"D000 01FF 93CF C100 1507 F18D 1991 E793" /* Ð..ÿ“ÏÁ...ñ.‘ç“ */
- $"D8B4 6B7C 459C 4F68 E4BF E0FF 0D3D C2DF" /* Ø´k|EœOhä¿àÿ.=Âß */
- $"FC16 8F7F 6C3A 7FEA ACD5 8632 D1AD 37A6" /* ü..l:.ê¬Õ†2Ñ­7¦ */
- $"22E3 4753 734F 3BFA 0372 1596 A8F1 7183" /* "ãGSsO;ú.r.–¨ñqƒ */
- $"2F17 0A65 C5C2 6A8E C0F9 1000 39CE 9180" /* /.ÂeÅÂjŽÀù..9Α€ */
- $"AE4A F551 B521 2839 FEE4 4D31 9F98 9F17" /* ®JõQµ!(9þäM1Ÿ˜Ÿ. */
- $"29F2 C91D 3B35 397E 15A1 8246 C3EA 3107" /* )òÉ.;59~.¡‚FÃê1. */
- $"5630 A744 5105 404A C843 0AE4 304B 4FE9" /* V0§DQ.@JÈCÂä0KOé */
- $"81E4 4C91 DF64 6885 8D23 6517 B254 DE23" /* äL‘ßdh…#e.²TÞ# */
- $"6101 3C94 9245 923D 4F4C 0F02 784C F319" /* a.<”’E’=OL..xLó. */
- $"CFC0 FC11 7EC2 D9C4 3907 5FDC 553A F1E1" /* ÏÀü.~ÂÙÄ9._ÜU:ñá */
- $"F2BC 6420 59D8 7D25 F42A 5BA5 8E8E 7166" /* ò¼d YØ}%ô*[¥ŽŽqf */
- $"AD5D 5C91 CC75 1452 ACDA 64CA 3249 CCE3" /* ­]\‘Ìu.R¬ÚdÊ2IÌã */
- $"6874 83E2 633E 64E7 8159 4AA2 FD3C 638D" /* htƒâc>dçYJ¢ý<c */
- $"F978 C3ED 328F C0F2 1F81 A80C BB81 9421" /* ùxÃí2Àò.¨.»”! */
- $"980D F457 0EA7 7782 676F 2AB3 EE8F 99C2" /* ˜.ôW.§w‚go*³î™Â */
- $"2221 9D95 8C80 C3A8 91F3 4C08 6A03 DE45" /* "!•Œ€Ã¨‘óL.j.ÞE */
- $"A985 9B7B 9ED3 A9A4 D929 A97F A125 FE22" /* ©…›{žÓ©¤Ù)©.¡%þ" */
- $"A893 77F3 EF0F C15C 3969 A153 3A7C 3110" /* ¨“wóï.Á\9i¡S:|1. */
- $"7A9C 9227 D2F6 BCA8 1A04 0219 8F36 21B7" /* zœ’'Òö¼¨....6!· */
- $"B37C 2AB6 678A 1675 BA9E 03B4 53BA 33B9" /* ³|*¶gŠ.uºž.´Sº3¹ */
- $"06AD 96D8 BDBC BFC8 5134 C040 7EBA B756" /* .­–ؽ¼¿ÈQ4À@~º·V */
- $"E619 DC67 BC83 BB39 AA42 65E1 5BBC 45B4" /* æ.Üg¼ƒ»9ªBeá[¼E´ */
- $"ECB6 E6ED D098 3C9F E17B 876D A039 553E" /* ì¶æíИ<Ÿá{‡m 9U> */
- $"5CF9 2D3F 6F47 4854 7085 62C1 C65D C07C" /* \ù-?oGHTp…bÁÆ]À| */
- $"86A0 3E43 500F 90D0 4787 8CE8 726C 5109" /* † >CP.ÐG‡ŒèrlQÆ */
- $"FD68 8099 E8FE 2A66 2F02 78F5 C78B 6A34" /* ýh€™èþ*f/.xõÇ‹j4 */
- $"0A9E 25FE 0DE3 E3C8 BD7B 3530 98D5 CF03" /* ž%þ.ããȽ{50˜ÕÏ. */
- $"CE64 A57D 620C 87C5 65B4 7BE1 34BC 3058" /* Îd¥}b.‡Åe´{á4¼0X */
- $"572A 9EBF 5E0C 5A01 80A3 B334 DF5A E1B8" /* W*ž¿^.Z.€£³4ßZḠ*/
- $"08C3 5C30 2CC4 C1F5 1341 F516 40FA 8A00" /* .Ã\0,ÄÁõ.Aõ.@úŠ. */
- $"477D B516 AD2F 4DD3 BE8C 58F0 7C77 A236" /* G}µ.­/MÓ¾ŒXð|w¢6 */
- $"DD43 6611 D582 F050 DC31 59D0 194D A6FD" /* ÝCf.Õ‚ðPÜ1YÐ.M¦ý */
- $"652E FA16 4BA7 25FE 0DE3 E3D9 B950 06E2" /* e.ú.K§%þ.ããÙ¹P.â */
- $"3A8A DA86 827A 4C68 5798 55FC FD46 A583" /* :ŠÚ†‚zLhW˜UüýF¥ƒ */
- $"064D 8FB0 29D9 8DAD 53CC 5229 B675 ACAB" /* .M°)Ù­SÌR)¶u¬« */
- $"8EED 34BC 2F12 142E 446C 0DF7 0BC3 D6E7" /* Ží4¼/...Dl.÷.ÃÖç */
- $"A086 8D72 6AE7 9270 B97C D981 C7F1 C38A" /*  †rjç’p¹|ÙÇñÊ */
- $"47EE E585 FC19 FCE3 668C C7E0 471F 813C" /* Gîå…ü.üãfŒÇàG.< */
- $"3F02 0005 B422 0345 FC66 9A91 446D DDCA" /* ?...´".Eüfš‘DmÝÊ */
- $"449B CCDB 8E8F A0B8 3942 A8FC 6409 F7F3" /* D›ÌÛŽ ¸9B¨üdÆ÷ó */
- $"ED01 353A 2B01 1B0C 2939 619B 9890 94E7" /* í.5:+...)9a›˜”ç */
- $"5FDA 75F2 7323 BF3A 7AED 757E 42D6 C336" /* _Úuòs#¿:zíu~BÖÃ6 */
- $"E74E 6B5F 2D43 4780 CA1C C462 6507 4801" /* çNk_-CG€Ê.Äbe.H. */
- $"EDEF 5B2A 7297 8FC6 1E13 E7FA 56B5 4279" /* íï[*r—Æ..çúVµBy */
- $"5BB4 B307 F4DE E273 4FC3 E9B1 72C3 EDA2" /* [´³.ôÞâsOÃé±rÃí¢ */
- $"A3F0 A9E0 FB5D C018 B35C 8B45 CD63 99FE" /* £ð©àû]À.³\‹EÍc™þ */
- $"11FB 8993 21D1 BA8B 69EB 5CB9 F258 468F" /* .û‰“!Ѻ‹ië\¹òXF */
- $"73D4 6804 C6E6 045E AE54 954C D0E5 D836" /* sÔh.Ææ.^®T•LÐåØ6 */
- $"EA0D DB9A 2806 36FA B3E9 5973 789D 6591" /* ê.Ûš(.6ú³éYsxe‘ */
- $"1EC2 F271 E9E2 5681 C542 A2FC F4EF 8111" /* .ÂòqéâVÅB¢üôï. */
- $"59D5 FC91 9749 52A3 EA37 B239 4939 8625" /* YÕü‘—IR£ê7²9I9†% */
- $"F248 18D2 075A 80A1 8005 9ED2 437F C705" /* òH.Ò.Z€¡€.žÒC.Ç. */
- $"2BFD 308C F1F0 E1BC 8FDA F5D5 50D9 9770" /* +ý0Œñðá¼ÚõÕPÙ—p */
- $"7EF5 213F 91F6 5B8B 189D EE67 70EF F40A" /* ~õ!?‘ö[‹.îgpïôÂ */
- $"2E24 C54B F37D 4941 FCD2 7779 5C8B 59CC" /* .$ÅKó}IAüÒwy\‹YÌ */
- $"F284 3377 A496 0399 6F17 47AC B5EA 3A84" /* ò„3w¤–.™o.G¬µê:„ */
- $"844E DC13 D058 BE9F 1BBE 8CE0 E615 D2E1" /* „NÜ.ÐX¾Ÿ.¾Œàæ.Òá */
- $"88A5 9DA6 9FB4 4EDE B804 ED14 A7EA 54E0" /* ˆ¥¦Ÿ´NÞ¸.í.§êTà */
- $"5A87 311B 5E69 70F5 EDA3 2E78 8862 7603" /* Z‡1.^ipõí£.xˆbv. */
- $"7761 094D 4A69 5AB0 A9BB 3F4F 92BE 205B" /* waÆMJiZ°©»?O’¾ [ */
- $"A226 24D5 C8B2 CCF7 E064 31C7 E727 6E2C" /* ¢&$ÕȲÌ÷àd1Çç'n, */
- $"D6A1 347F 41CD 5F70 E1C0 1AFC 4FBC 81A9" /* Ö¡4.AÍ_páÀ.üO¼© */
- $"A884 F03A CD84 B581 1F03 A523 838B 8038" /* ¨„ð:Í„µ..¥#ƒ‹€8 */
- $"02F4 6DE8 98FC EDD6 B331 21F7 4AC5 A31E" /* .ômè˜üíÖ³1!÷JÅ£. */
- $"9EB4 E770 D465 386E 18A6 D1BE EF6D B008" /* ž´çpÔe8n.¦Ñ¾ïm°. */
- $"63E6 1066 1374 4D10 3270 8C7F F297 F91D" /* cæ.f.tM.2pŒ.ò—ù. */
- $"DA61 677B 29FD A878 B122 E33C 17E3 8ED1" /* Úag{)ý¨x±"ã<.ãŽÑ */
- $"FB8E 4407 8B82 32AD 1B50 09DF BDA8 C80E" /* ûŽD.‹‚2­.PÆß½¨È. */
- $"7E28 ED9D A005 4297 B9C1 8D66 CA77 C41D" /* ~(í .B—¹ÁfÊwÄ. */
- $"41C5 E3B3 F94D 96E5 1308 7C59 1EB8 0871" /* AÅã³ùM–å..|Y.¸.q */
- $"C7A4 FED7 47F2 F800 6889 A21D 1FF4 9E93" /* Ǥþ×Gòø.h‰¢..ôž“ */
- $"1321 7377 D96E 86F5 A0CB EB17 C77A 81C0" /* .!swÙn†õ Ëë.ÇzÀ */
- $"7C8D A01F 0E91 00F9 1D00 94FD 4D32 E5DB" /* | ..‘.ù..”ýM2åÛ */
- $"0482 DEB8 CF1C 792A EA3B DECA 4470 4898" /* .‚Þ¸Ï.y*ê;ÞÊDpH˜ */
- $"81C0 5457 FE66 63DD CAF3 0B98 08E1 DC3F" /* ÀTWþfcÝÊó.˜.áÜ? */
- $"CF68 7F31 9BEE 73EF A3A5 8D57 8969 EEC3" /* Ïh.1›îsW‰iîà */
- $"0F13 3ED9 390D FC4C B37F C4F7 01E4 B115" /* ..>Ù9.üL³.Ä÷.ä±. */
- $"E9F9 9526 00FA 10D0 0D64 4CC5 8481 D231" /* éù•&.ú.Ð.dLÅ„Ò1 */
- $"DE6D 483E 8046 7F58 5BD3 1FFC CF82 297A" /* ÞmH>€F.X[Ó.üÏ‚)z */
- $"88A1 7E78 0668 3222 9E8B A287 30A3 DB10" /* ˆ¡~x.h2"ž‹¢‡0£Û. */
- $"A77F A842 87FC 164E 92B8 96DF 4920 EEC2" /* §.¨B‡ü.N’¸–ßI î */
- $"47B6 83F1 F68F 9309 63CE FAAC 3C8F 9FCF" /* G¶ƒñö“ÆcÎú¬<ŸÏ */
- $"A166 9621 ADC0 0ABB 7F1A 7E3C A4AD 3755" /* ¡f–!­À»..~<¤­7U */
- $"E2D8 E26D CAD1 6F24 F808 BC0D E94B EEBC" /* âØâmÊÑo$ø.¼.éKî¼ */
- $"D601 C1F5 30C1 F53B C0FA 97C0 90E6 901B" /* Ö.Áõ0Áõ;Àú—Àæ. */
- $"71C2 1EAB 8A4C 52A4 4431 058C DFB9 4148" /* qÂ.«ŠLR¤D1.Œß¹AH */
- $"185C 1E93 01C6 82D3 C81B 6398 8173 189D" /* .\.“.Æ‚ÓÈ.c˜s. */
- $"F73C 4887 5155 0C95 0088 4C69 0A27 3F39" /* ÷<H‡QU.•.ˆLiÂ'?9 */
- $"8CCA 32D8 1FD7 A3F4 CDD8 6275 5E7E 3619" /* ŒÊ2Ø.×£ôÍØbu^~6. */
- $"8D18 68C9 D2C7 0FCB 18EA FB01 5A68 4A52" /* .hÉÒÇ.Ë.êû.ZhJR */
- $"3C08 5313 5ED2 9B7D 31B5 953C 2F92 22F7" /* <.S.^Ò›}1µ•</’"÷ */
- $"3764 04E8 A9A6 C747 8DFD 9730 01DD 82E1" /* 7d.試ÇGý—0.Ý‚á */
- $"B08A FD72 7C33 A9BF AFEA 7188 AC4B 2B45" /* °Šýr|3©¿¯êqˆ¬K+E */
- $"BBB2 7826 6704 5864 9BAF 91FC 6BD3 E9D7" /* »²x&g.Xd›¯‘ükÓé× */
- $"0E30 E428 0FB2 4836 F94F 7CB9 3723 72A2" /* .0ä(.²H6ùO|¹7#r¢ */
- $"AB4C C0EB ED8F 823B B8D6 C4A6 E4B5 B41C" /* «LÀëí‚;¸ÖĦ䵴. */
- $"B0FC 0171 880F E77C 1EF8 9645 A8B4 969A" /* °ü.qˆ.ç|.ø–E¨´–š */
- $"5420 86B9 71CE 0DE5 7A40 B41A DD85 6B30" /* T †¹qÎ.åz@´.Ý…k0 */
- $"F02A 3B61 92B4 7A95 269E BF9F DDB3 9FB7" /* ð*;a’´z•&ž¿ŸÝ³Ÿ· */
- $"746B 1514 C89D 391B F835 73B8 0F1C 2567" /* tk..È9.ø5s¸..%g */
- $"A0C2 6B37 DFCE 5F4C 1DCD FD79 5CDA A8FF" /*  Âk7ßÎ_L.Íýy\Ú¨ÿ */
- $"0603 9014 308F AEB3 EDB7 D721 1709 3897" /* ...0®³í·×!.Æ8— */
- $"D3AB 181E 53BE 4025 3492 41C2 5EC7 BFC0" /* Ó«..S¾@%4’AÂ^Ç¿À */
- $"EA12 19D0 6158 530B A57B 8A2B 8DFF 18AF" /* ê..ÐaXS.¥{Š+ÿ.¯ */
- $"7651 65CF CD26 3F05 987E 0760 9C3C E3A6" /* vQeÏÍ&?.˜~.`œ<㦠*/
- $"86C0 DAB4 C6ED 7F19 8034 85FE DA7E 7963" /* †ÀÚ´Æí..€4…þÚ~yc */
- $"AFF2 9CBE 6AAA B6BB B2D3 6F41 BB45 B1EB" /* ¯òœ¾jª¶»²ÓoA»E±ë */
- $"9CC2 8803 907A 5CE1 F2D9 AF69 FF22 7DE8" /* œÂˆ.z\áòÙ¯iÿ"}è */
- $"D328 C2A1 0F97 2EE2 9575 E0E6 A665 B85A" /* Ó(¡.—.â•uàæ¦e¸Z */
- $"C5D7 6FA0 FE24 BC68 9D74 6CEB C4F9 615C" /* Å×o þ$¼htlëÄùa\ */
- $"4F34 48B3 7A64 2540 B64F EFBE 8D0F E427" /* O4H³zd%@¶Oï¾.ä' */
- $"4CCA 6DB3 83AC C5F6 EE52 7A43 8172 41E4" /* LÊm³ƒ¬ÅöîRzCrAä */
- $"2CE3 DF2F 1496 97DE 6AD1 2FFF 7E52 D993" /* ,ãß/.–—ÞjÑ/ÿ~RÙ“ */
- $"8AF9 AAA3 B192 0991 BFAE 4829 001E 963B" /* Šùª£±’Æ‘¿®H)..–; */
- $"019C 8A5D 78E8 6A56 F78C B81A F4D0 6312" /* .œŠ]xèjV÷Œ¸.ôÐc. */
- $"C0C4 A9BF 7CA5 75D9 9C23 F3EA 4F39 B325" /* ÀÄ©¿|¥uÙœ#óêO9³% */
- $"F6DE 6EF4 7D48 A279 8EA9 5395 0FBC C63F" /* öÞnô}H¢yŽ©S•.¼Æ? */
- $"679F CE93 2206 ECA9 079C 2BB7 D094 6A7B" /* gŸÎ“".ì©.œ+·Ð”j{ */
- $"1077 277F 88A6 21AE 84C3 EDD4 38FC 36B2" /* .w'.ˆ¦!®„ÃíÔ8ü6² */
- $"1F86 8F00 8F56 8825 7713 9061 800A A4CD" /* .†.Vˆ%w.a€Â¤Í */
- $"E3D3 0F3C B0AC 0C87 E368 8544 F251 5C39" /* ãÓ.<°¬.‡ãh…DòQ\9 */
- $"7D90 1BEF 7805 D624 7380 0A19 E093 3058" /* }.ïx.Ö$s€Â.à“0X */
- $"1C90 467F 5C70 4932 3947 4A95 A450 36C8" /* .F.\pI29GJ•¤P6È */
- $"D4D5 CA85 9922 FA12 D0D8 96CA 9A2F 40A2" /* ÔÕÊ…™"ú.ÐØ–Êš/@¢ */
- $"F105 054F 8C56 C164 85B5 C4E6 3EAB D76A" /* ñ..OŒVÁd…µÄæ>«×j */
- $"A227 4F09 072C 4682 9B0F 995C 7551 94E7" /* ¢'OÆ.,F‚›.™\uQ”ç */
- $"419A 0098 0283 19E8 0489 687B 4F66 B74C" /* Aš.˜.ƒ.è.‰h{Of·L */
- $"7F59 C07A A552 B04D 628F E401 E55C A4ED" /* .YÀz¥R°Mbä.å\¤í */
- $"390F C34D 81BB 9F88 0C50 F50F 9FBD A377" /* 9.ÃM»Ÿˆ.Põ.Ÿ½£w */
- $"F538 3F9C E243 FF47 D346 87F2 444B C479" /* õ8?œâCÿGÓF‡òDKÄy */
- $"F6B3 1C76 5125 F487 0FAF 294A DA20 EC56" /* ö³.vQ%ô‡.¯)JÚ ìV */
- $"07AB DE07 14C2 1721 F3E0 D687 1F67 039D" /* .«Þ..Â.!óàÖ‡.g. */
- $"461F 0D82 9CAA B2D4 DFC6 6AA5 D31E 4D01" /* F..‚œª²Ô߯j¥Ó.M. */
- $"5AC2 B2BD FD97 7D6E 00D1 7ADF 377C 15A7" /* Z²½ý—}n.Ñzß7|.§ */
- $"9681 C7B2 8168 D706 425B 35EF 7298 C053" /* –Dzh×.B[5ïr˜ÀS */
- $"E198 B5E2 B835 712B 1AD8 BA77 CF86 83A3" /* ᘵâ¸5q+.غwφƒ£ */
- $"B0B9 C5E6 F37A A3DE D93B 8EC8 132F A52A" /* °¹Åæóz£ÞÙ;ŽÈ./¥* */
- $"AB20 E166 F719 7130 6482 5BE2 605B D78E" /* « áf÷.q0d‚[â`[׎ */
- $"672D 7AE6 3906 DA75 0E3D 1962 8A60 9294" /* g-zæ9.Úu.=.bŠ`’” */
- $"1FC8 C0F3 216D 815D 4DDE 5DDE D8AB 3F9C" /* .ÈÀó!m]MÞ]ÞØ«?œ */
- $"7F9F 24B3 7BBF CCB9 2F80 19B6 70AE 1B3D" /* .Ÿ$³{¿Ì¹/€.¶p®.= */
- $"C71A 1F7C 81D2 639F 0D03 24EA D4B1 D351" /* Ç..|ÒcŸ..$êÔ±ÓQ */
- $"DD10 FBD5 EA3F 4957 A7ED 04C6 384D C10F" /* Ý.ûÕê?IW§í.Æ8MÁ. */
- $"8A55 0C03 694F 0D18 70D8 0AC3 33C0 17D1" /* ŠU..iO..pØÂÃ3À.Ñ */
- $"73BB E85F 5204 090F FDFE 8AC5 9AD6 22D5" /* s»è_R.Æ.ýþŠÅšÖ"Õ */
- $"CA31 A6DE EF44 D910 B34A 0E59 7866 536F" /* Ê1¦ÞïDÙ.³J.YxfSo */
- $"9B0B A341 3AB8 C06C C64F 3F86 8160 DFB9" /* ›.£A:¸ÀlÆO?†`ß¹ */
- $"A709 59D8 88C3 3316 9FFA F83F 5120 E40E" /* §ÆY؈Ã3.Ÿúø?Q ä. */
- $"4DEA C88F C418 37F6 4C0B 7606 9632 EEC5" /* MêÈÄ.7öL.v.–2îÅ */
- $"6380 FB25 A69F AAE2 0888 B722 008F 35CB" /* c€û%¦Ÿªâ.ˆ·".5Ë */
- $"F6A7 90BF D0DB 6367 A14B 5A86 EE98 FD18" /* ö§¿ÐÛcg¡KZ†î˜ý. */
- $"A629 1BAB 3BE2 920D E99D BEC2 88B4 F909" /* ¦).«;â’.é¾Âˆ´ùÆ */
- $"66B1 535D 3940 AF78 8200 0C46 142A EA2A" /* f±S]9@¯x‚..F.*ê* */
- $"A991 95E8 FD2B D30B 0E4A 76E2 A97B FAA7" /* ©‘•èý+Ó..Jvâ©{ú§ */
- $"97E2 9B30 54FA 5E97 962A 7E83 5711 A707" /* —â›0Tú^—–*~ƒW.§. */
- $"2A21 3729 2046 9C41 8282 A161 E5F6 AB24" /* *!7) FœA‚‚¡aåö«$ */
- $"3324 74CF 1AF6 C935 D884 0008 DC18 663C" /* 3$tÏ.öÉ5Ø„..Ü.f< */
- $"3A00 25E4 92D7 8F23 4C07 3C63 DB6E 4924" /* :.%ä’×#L.<cÛnI$ */
- $"7362 34C9 2F1D 105B 97E2 03BF 648F C21C" /* sb4É/..[—â.¿dÂ. */
- $"C6AC 3657 2C72 ADAA 2889 0623 6A5D ACEC" /* Ƭ6W,r­ª(‰.#j]¬ì */
- $"3210 738F 51F5 CC65 9EA9 7AD3 95CB B265" /* 2.sQõÌež©zӕ˲e */
- $"D54E 6E1D E2A7 2673 E6C2 C247 2FFD C10E" /* ÕNn.â§&sæÂÂG/ýÁ. */
- $"5FC5 C1E1 2511 5C8F 6063 92AB E4B9 8212" /* _ÅÁá%.\`c’«ä¹‚. */
- $"3643 6D53 2492 3E58 3E71 15E3 A3B7 AB2A" /* 6CmS$’>X>q.㣷«* */
- $"A998 FE5A 74DB 537A CE3D CD46 49B6 DB6D" /* ©˜þZtÛSzÎ=ÍFI¶Ûm */
- $"B6DB 6DB2 8EE9 1D6F 6480 8613 D8D2 7D8F" /* ¶Ûm²Žé.od€†.ØÒ} */
- $"5615 3EAB B25B 722D ECB8 ED12 70F2 BA06" /* V.>«²[r-ì¸í.pòº. */
- $"E5A2 45C1 547C F861 A7D5 8E1C 08BC 346B" /* å¢EÁT|øa§ÕŽ..¼4k */
- $"2730 C670 2FD8 F159 6ABE 2092 ED98 AC34" /* '0Æp/ØñYj¾ ’혬4 */
- $"B4CA 8565 90CF 0034 6E68 F777 9672 F29D" /* ´Ê…eÏ.4nh÷w–rò */
- $"4621 6E73 9C90 5C3D A8DB F5B0 CACF A63E" /* F!nsœ\=¨Ûõ°ÊϦ> */
- $"861E 8B9E F490 8E15 69BC A01D EF59 E898" /* †.‹žôŽ.i¼ .ïYè˜ */
- $"7040 B817 5AA9 BFB1 09A0 FE74 D2F7 BEA8" /* p@¸.Z©¿±Æ þtÒ÷¾¨ */
- $"A4F3 FEAC 38A4 409E B504 9CC9 EAA3 533B" /* ¤óþ¬8¤@žµ.œÉê£S; */
- $"153D F710 FC9E 2055 A395 C374 2AF9 E7C5" /* .=÷.üž U£•Ãt*ùçÅ */
- $"E1E8 7F74 3CDB D568 B606 A9D5 B7AE E207" /* áè.t<ÛÕh¶.©Õ·®â. */
- $"947E 2E65 1C27 336D 927A 4F86 5422 0E04" /* ”~.e.'3m’zO†T".. */
- $"42C7 668A 9403 EAB7 21A3 C9F1 18BC 5380" /* BÇfŠ”.ê·!£Éñ.¼S€ */
- $"BED7 07B5 F9B1 B798 8727 D54A 7A6E E493" /* ¾×.µù±·˜‡'ÕJznä“ */
- $"5271 F27D 7C35 DCEE D0BC CB31 C1FB 879F" /* Rqò}|5ÜîмË1Áû‡Ÿ */
- $"E074 9EB9 D7BE C9ED D2C8 BD00 C7FC D05B" /* àtž¹×¾ÉíÒȽ.ÇüÐ[ */
- $"2B2C 9647 A924 9F22 A06D 62B4 A946 77B7" /* +,–G©$Ÿ" mb´©Fw· */
- $"AD6D 60EE C841 997D A7E8 7AD2 AFA8 EEC4" /* ­m`îÈA™}§èzÒ¯¨îÄ */
- $"D61F FC06 FD7A E761 AA33 0F74 A08F 8E5B" /* Ö.ü.ýzçaª3.t Ž[ */
- $"B7C0 7C9A 1201 F0F5 6403 E4D0 60D8 92D9" /* ·À|š..ðõd.äÐ`Ø’Ù */
- $"84ED 064F 1B29 D7A7 1D77 F4B3 61D6 2651" /* „í.O.)×§.wô³aÖ&Q */
- $"329E 2CA5 53B4 956D 1061 3A3A A73B FC8E" /* 2ž,¥S´•m.a::§;üŽ */
- $"DD3C 60C9 F855 32FB 3C04 6287 50F7 6BB3" /* Ý<`ÉøU2û<.b‡P÷k³ */
- $"B84A 05A6 3145 A832 3BBC CA56 115B 9D7F" /* ¸J.¦1E¨2;¼ÊV.[. */
- $"8ADB 5660 429D 1FF6 4E6D 4899 EFDA 592F" /* ŠÛV`B.öNmH™ïÚY/ */
- $"19DC 9790 802A 1C17 2250 ADEC 0312 2C23" /* .Ü—€*.."P­ì..,# */
- $"223B 1EC8 482C 6E26 DD67 528F 7CDC 1841" /* ";.ÈH,n&ÝgR|Ü.A */
- $"DBCB CF9E 6D26 B564 4FD4 0AB5 DA0B ADE2" /* ÛËÏžm&µdOÔµÚ.­â */
- $"C129 D895 00FF 105B 0D0B F4DB 286A B347" /* Á)Ø•.ÿ.[..ôÛ(j³G */
- $"A261 30A9 0A9B 7A0D 585B 3991 3217 6FF7" /* ¢a0©Â›z.X[9‘2.o÷ */
- $"A368 D6A8 E862 161A 3584 613E 04D9 DBCB" /* £hÖ¨èb..5„a>.ÙÛË */
- $"4D96 66A3 B736 F802 D67A 309F 04E6 AFD8" /* M–f£·6ø.Öz0Ÿ.æ¯Ø */
- $"888E A8A5 4461 F1F0 1B6B 2DC4 0DFE C676" /* ˆŽ¨¥Dañð.k-Ä.þÆv */
- $"8D4E 3750 C3E6 C233 EFC5 368B 6113 5B53" /* N7PÃæÂ3ïÅ6‹a.[S */
- $"08E0 C259 1B88 AA0C 74B0 862E 1024 BB3F" /* .àÂY.ˆª.t°†..$»? */
- $"2816 B320 715C 5DFA 9FF0 CBC3 6A85 777A" /* (.³ q\]úŸðËÃj…wz */
- $"23CB F89B D813 6706 313E 2CF5 A163 0848" /* #Ëø›Ø.g.1>,õ¡c.H */
- $"94C9 3288 B556 53DD 2A45 2302 F28E 7ED1" /* ”É2ˆµVSÝ*E#.òŽ~Ñ */
- $"B5A0 67C8 53BB 4CE4 45D9 317F 92AB B13B" /* µ gÈS»LäEÙ1.’«±; */
- $"7246 F6DE 5348 49C9 42A1 CA62 64B0 209E" /* rFöÞSHIÉB¡Êbd° ž */
- $"43F2 DF7C 9BBC 097F C94A EA52 8D01 ADEF" /* Còß|›¼Æ.ÉJêR.­ï */
- $"5241 7C9B 2876 75F4 D748 AF9D 6FBB 3306" /* RA|›(vuô×H¯o»3. */
- $"0AD1 3953 6C99 5BB7 F1F5 1C1F BCE7 CA83" /* ÂÑ9Sl™[·ñõ..¼çʃ */
- $"08C1 6811 FBC5 AE18 343C C6F5 E515 F9CF" /* .Áh.ûÅ®.4<Æõå.ùÏ */
- $"FE48 C6E9 956E 6712 DDCA D62C 7F37 6DFE" /* þHÆé•ng.ÝÊÖ,.7mþ */
- $"2465 A8EE 1BAF E106 CA62 101F 0144 31DC" /* $e¨î.¯á.Êb...D1Ü */
- $"029E ED0F 9E47 F22E 0C17 0D31 E60B 1662" /* .ží.žGò....1æ..b */
- $"C1F5 5C90 7D5A 6D03 EAB6 C0C8 1653 E821" /* Áõ\}Zm.ê¶ÀÈ.Sè! */
- $"5860 ED0B C711 39E5 E5C8 268D 2246 E3FB" /* X`í.Ç.9ååÈ&"Fãû */
- $"68A4 3B12 A487 350D FE94 3722 65AC 949B" /* h¤;.¤‡5.þ”7"e¬”› */
- $"2526 7CD5 0E28 E093 CFE8 314C BE18 5B60" /* %&|Õ.(à“Ïè1L¾.[` */
- $"827E 154B 9609 2536 F890 A361 BA29 8211" /* ‚~.K–Æ%6ø£aº)‚. */
- $"AF42 BEC6 1BCB CE6D 2910 8083 C890 D7FF" /* ¯B¾Æ.ËÎm).€ƒÈ×ÿ */
- $"6F04 CEF4 F47C 0D92 00BD D90F 4095 0A48" /* o.Îôô|.’.½Ù.@•ÂH */
- $"4DC6 210C 351D 34A5 5FDA E576 1E1B 1684" /* MÆ!.5.4¥_Úåv...„ */
- $"F2A0 B30A 589C 1DBC 4831 E906 0D67 0CDD" /* ò ³ÂXœ.¼H1é..g.Ý */
- $"876B 994F 6D66 47DD AF40 7158 4385 738E" /* ‡k™OmfGݯ@qXC…sŽ */
- $"82F8 E637 9B5C 7389 0AA5 2A04 D105 5E88" /* ‚øæ7›\s‰Â¥*.Ñ.^ˆ */
- $"C2A2 2943 E125 6C2F 0AD1 1E5C AF1F CFF6" /* ¢)Cá%l/ÂÑ.\¯.Ïö */
- $"B39B C799 0F39 6151 6625 BB66 C3C3 418B" /* ³›Ç™.9aQf%»fÃÃA‹ */
- $"90A4 F6F7 BD30 7A04 88E6 0F8A 3F0B FF2C" /* ¤ö÷½0z.ˆæ.Š?.ÿ, */
- $"D18B 1D88 1442 EB54 A6FC D226 251A 015D" /* Ñ‹.ˆ.BëT¦üÒ&%..] */
- $"4DA8 32CA 371B 86EB 4E89 1415 9A41 6AD2" /* M¨2Ê7.†ëN‰..šAjÒ */
- $"1F0F 7656 41E5 B874 72E7 5F88 ABDA 28D7" /* ..vVAå¸trç_ˆ«Ú(× */
- $"37D5 EE40 567F F751 2591 01A3 03B9 EFCD" /* 7Õî@V.÷Q%‘.£.¹ïÍ */
- $"E0A8 8CC8 8C8E 0945 3036 453A 1787 59C4" /* à¨ŒÈŒŽÆE06E:.‡YÄ */
- $"B99C 02D2 D5F6 1B5E E34C 551E 8C43 9A20" /* ¹œ.ÒÕö.^ãLU.ŒCš */
- $"981D 0B44 C6D1 E6AA 2B92 5F33 8016 C4F1" /* ˜..DÆÑæª+’_3€.Äñ */
- $"7AA6 E605 4676 A533 1D38 6ADA 9BC6 2C13" /* z¦æ.Fv¥3.8jÚ›Æ,. */
- $"385A 3DCE 7E2E B9A1 81BB 27C6 AFF8 FF5D" /* 8Z=Î~.¹¡»'Ưøÿ] */
- $"A511 4C25 DC70 082C B597 3EC4 004C D4B8" /* ¥.L%Üp.,µ—>Ä.LÔ¸ */
- $"BE6A B79D EF70 2610 B57B FEFE 6ACC 9EEE" /* ¾j·ïp&.µ{þþjÌžî */
- $"B94A 73A8 4B30 C207 7391 789E C0FE 6992" /* ¹Js¨K0Â.s‘xžÀþi’ */
- $"AB13 E2AA FF53 4B22 A338 0EA3 B476 D732" /* «.âªÿSK"£8.£´v×2 */
- $"EDA3 2009 3422 B4AA 64DE 26C3 5894 D6DD" /* í£ Æ4"´ªdÞ&ÃX”ÖÝ */
- $"F7A9 5A3B 6F31 5D2C EC22 1FAC 928B 647F" /* ÷©Z;o1],ì".¬’‹d. */
- $"1600 A961 11C3 FD11 E594 81F9 E0AC 20D4" /* ..©a.Ãý.å”ùà¬ Ô */
- $"0DCA 9CE0 FF14 3BE3 3010 00E1 9DFE F0C8" /* .Êœàÿ.;ã0..áþðÈ */
- $"70E7 D3A5 A7F9 884E 6941 CBCB FEBE 0C27" /* pçÓ¥§ùˆNiAËËþ¾.' */
- $"B3F5 BAA4 3068 BFC1 DB20 1E5F 9E83 BF7D" /* ³õº¤0h¿ÁÛ ._žƒ¿} */
- $"8EA3 8FB0 F355 FF02 DED2 5CC8 2B4D 4DA5" /* Ž£°óUÿ.ÞÒ\È+MM¥ */
- $"8122 C96A CDAB B130 2D35 B73E 2EE9 0AA9" /* "ÉjÍ«±0-5·>.é© */
- $"7DB8 B81D 7B0A 776B DFF3 2B02 1F6A EF5B" /* }¸¸.{Âwkßó+..jï[ */
- $"E6A6 177F D8C0 1C3B A88C 2154 18F3 BFB3" /* æ¦..ØÀ.;¨Œ!T.ó¿³ */
- $"F7EF 1249 860B F87F 60D6 AE06 B5B2 7824" /* ÷ï.I†.ø.`Ö®.µ²x$ */
- $"E601 91D7 1436 80CF 054C 9691 1321 B299" /* æ.‘×.6€Ï.L–‘.!²™ */
- $"11F3 2BA3 51F6 447E 1BC0 28CB 666B 9BA0" /* .ó+£QöD~.À(Ëfk›  */
- $"425A E39B 066C 1B7C 340B 950A BDCC E05D" /* BZã›.l.|4.•½Ìà] */
- $"C8DC 568C BDC6 54E9 0AA2 2D89 6E22 37E4" /* ÈÜVŒ½ÆTé¢-‰n"7ä */
- $"3508 39CC EE8F 8EE6 F926 626B E33F 4A06" /* 5.9ÌîŽæù&bkã?J. */
- $"4CD1 AE16 9063 3119 5554 58CA BB53 4A73" /* LѮ.c1.UTXʻSJs */
- $"AA2B 2A71 B86B 3E95 BED6 D9D2 9D59 3E60" /* ª+*q¸k>•¾ÖÙÒY>` */
- $"C5D1 FA4C E6A7 880F 30D8 A679 6467 697E" /* ÅÑúL槈.0ئydgi~ */
- $"F327 EAA4 E0D1 01F9 9B74 AAA1 6CDD 7DA7" /* ó'ê¤àÑ.ù›tª¡lÝ}§ */
- $"D2AB C9CB 63D6 D3DF C778 C6ED 71A5 0571" /* Ò«ÉËcÖÓßÇxÆíq¥.q */
- $"C7E1 4EC7 E16C 43F0 75B1 3C9E 91EA AAAC" /* ÇáNÇálCðu±<ž‘ꪬ */
- $"9A2E A47E 8DF0 873E 2275 3F71 F986 DF3D" /* š.¤~ð‡>"u?qù†ß= */
- $"DBE5 1F4C 0D83 C3F5 F2D4 5A7C 0BFB E4FC" /* Ûå.L.ƒÃõòÔZ|.ûäü */
- $"C83E D8A4 FAF4 F589 09F2 4909 40AA 2AA8" /* È>ؤúôõ‰ÆòIÆ@ª*¨ */
- $"C190 BE4D D484 1408 6EAD 722F 6BA6 7502" /* Á¾MÔ„..n­r/k¦u. */
- $"A53F 1B9A BE86 841A FC60 53F3 8AE9 2E4C" /* ¥?.𾆄.ü`SóŠé.L */
- $"4B8E 1D09 F47C 3BAA CFB7 80DE 6A41 F007" /* KŽ.Æô|;ªÏ·€ÞjAð. */
- $"80A3 413A C568 5C02 6166 E8AF 9B6C EF86" /* €£A:Åh\.af诛lï† */
- $"F178 273B A803 89E9 520A ACFC 0E98 6198" /* ñx';¨.‰éR¬ü.˜a˜ */
- $"6ECE D094 76D1 8AF8 1035 D0C8 B9E5 ECC9" /* nÎДvÑŠø.5ÐȹåìÉ */
- $"08E6 748A F28B B0E0 F9AB 71B4 7971 9626" /* .ætŠò‹°àù«q´yq–& */
- $"5397 5D5A 31CB 5F9E 7C98 8300 72B1 2C67" /* S—]Z1Ë_ž|˜ƒ.r±,g */
- $"A38D 0C02 C603 C0C2 2000 E528 0CAA 9472" /* £..Æ.À .å(.ª”r */
- $"3115 8C05 0EE6 3F33 3F6D B6DB 64C7 AAB2" /* 1.Œ..æ?3?m¶ÛdǪ² */
- $"94EA DD85 D3DF F14E FF3F D3A2 778B 3749" /* ”êÝ…ÓßñNÿ?Ó¢w‹7I */
- $"B31B 6DB6 C5B6 5311 C782 3FCF 2880 6695" /* ³.m¶Å¶S.Ç‚?Ï(€f• */
- $"085A 35C2 3938 420E 8705 50BD 51C3 BD21" /* .Z5Â98B.‡.P½Qý! */
- $"41B9 C3ED 3A76 367F 40F5 DA53 3618 DF7A" /* A¹Ãí:v6.@õÚS6.ßz */
- $"EE11 B2D6 D9AD 4351 7D8F BC5A 7217 9352" /* î.²ÖÙ­CQ}¼Zr.“R */
- $"D43F 54B9 F618 3E0E 5FF8 1599 CD00 5489" /* Ô?T¹ö.>._ø.™Í.T‰ */
- $"459D 1B65 0538 7A92 D8EC 6AD5 E756 776E" /* E.e.8z’ØìjÕçVwn */
- $"5B66 A07C 36D6 A4B0 2E00 21E0 ABFC 2AB8" /* [f |6Ö¤°..!à«ü*¸ */
- $"F387 5784 0DB9 1978 67FE DEFF 0CCC CCCC" /* ó‡W„.¹.xgþÞÿ.ÌÌÌ */
- $"CCCC CCCC CCCC CCD3 5F84 850A F245 C370" /* ÌÌÌÌÌÌÌÓ_„…ÂòEÃp */
- $"786E 76C5 56A5 8C9B FC7F 6869 3085 EB26" /* xnvÅV¥Œ›ü.hi0…ë& */
- $"6162 A234 8BF4 868D 0BA5 77FA 56D2 31FD" /* ab¢4‹ô†.¥wúVÒ1ý */
- $"7436 0147 944C 2AAE C8C1 DE46 2A3A 2449" /* t6.G”L*®ÈÁÞF*:$I */
- $"EAD0 8E9E FF0B 129F 7F9C 1436 A6BC 10E6" /* êÐŽžÿ..Ÿ.œ.6¦¼.æ */
- $"3116 7A98 5FF6 97E9 FC84 7136 FEA5 C122" /* 1.z˜_ö—éü„q6þ¥Á" */
- $"E58F 44D6 D7A4 0AD3 E9B4 7C91 B833 1F91" /* åDÖפÂÓé´|‘¸3.‘ */
- $"5F0F D8F7 8A80 6560 B332 081A C68D 0FF9" /* _.Ø÷Š€e`³2..Æ.ù */
- $"899F 2CC7 E1D6 FC7E 1DEB C3ED EA04 F55D" /* ‰Ÿ,ÇáÖü~.ëÃíê.õ] */
- $"017D B775 48A1 A844 EAB2 8E3A 5FF2 20AF" /* .}·uH¡¨D겎:_ò ¯ */
- $"6231 D1B0 D4D9 D308 999B 09F2 95B1 7071" /* b1ѰÔÙÓ.™›Æò•±pq */
- $"F57C 1F1E 7960 4639 6A62 5BC6 9E5A D45D" /* õ|..y`F9jb[ÆžZÔ] */
- $"F339 9597 BF1B 62EB D128 B3D8 9BD3 52BF" /* ó9•—¿.bëÑ(³Ø›ÓR¿ */
- $"0703 43F9 E1C7 940E EA41 F4B1 75E4 891F" /* ..CùáÇ”.êAô±uä‰. */
- $"09A4 D439 7DFF 6AB7 EB4F 1253 A9C0 8BBE" /* ƤÔ9}ÿj·ëO.S©À‹¾ */
- $"40A0 3CE6 965D F886 A9EF 7E69 712D 41C2" /* @ <æ–]ø†©ï~iq-A */
- $"0062 6917 5D06 6548 9FD6 1470 4A0C 8545" /* .bi.].eHŸÖ.pJ.…E */
- $"8417 6C73 0C2D DF44 0E4A D5F9 7443 D629" /* „.ls.-ßD.JÕùtCÖ) */
- $"E62D DE53 CCFA EAEA E08A F0E1 9D37 9616" /* æ-ÞSÌúêêàŠðá7–. */
- $"C0DA 1FD4 6A42 6CE6 1D10 AB6A 911A 19D2" /* ÀÚ.ÔjBlæ..«j‘..Ò */
- $"47A0 4AC5 6A3C 12FF 0FE8 3AFB 7DFD 3D27" /* G JÅj<.ÿ.è:û}ý=' */
- $"42C6 E2BA 6DDE D1ED 21CE 1EA0 F444 055B" /* BÆâºmÞÑí!Î. ôD.[ */
- $"122A 41EE D8C1 144C B39C 0EEA 014E 7448" /* .*AîØÁ.L³œ.ê.NtH */
- $"0B72 7C2C 92B6 0CAC 3CB5 ADA7 8BF8 0C56" /* .r|,’¶.¬<µ­§‹ø.V */
- $"1DD5 B763 907F 6B60 8A85 ED4A F87D FBDC" /* .Õ·c.k`Š…íJø}ûÜ */
- $"391D 822B CBF5 7266 0E6B B2D4 32DE 606C" /* 9.‚+Ëõrf.k²Ô2Þ`l */
- $"014E 64BF F969 E3A5 C8E4 09EC B205 6391" /* .Nd¿ùiã¥ÈäÆì².c‘ */
- $"3081 96F5 9A80 0599 50D2 38FF 635B 9C35" /* 0–õš€.™PÒ8ÿc[œ5 */
- $"97CF A325 D94F B8E1 A794 EABC DA8A 7CC3" /* —Ï£%ÙO¸á§”ê¼ÚŠ|à */
- $"8713 2EBB 1EA6 69B0 9A72 A93D 874A 1F30" /* ‡..».¦i°šr©=‡J.0 */
- $"4C7B B341 B8CF F61E 7CEE 60CC E9B0 6D85" /* L{³A¸Ïö.|î`Ìé°m… */
- $"4F96 977D F85D F85A 08AF 46EF F259 FD70" /* O–—}ø]øZ.¯FïòYýp */
- $"E364 C54D 1F3D C951 B1DD 2CB4 8B94 9350" /* ãdÅM.=ÉQ±Ý,´‹”“P */
- $"8FFC CD4E D39E 2FF5 DC65 9DB7 2133 6E97" /* üÍNÓž/õÜe·!3n— */
- $"9705 2AA6 2625 534E B2A2 D775 FCFA 60E0" /* —.*¦&%SN²¢×uüú`à */
- $"4929 3681 2E72 5087 F3CD FB3A 6386 36A2" /* I)6.rP‡óÍû:c†6¢ */
- $"5E62 8705 57E4 8441 1986 1487 E88F C834" /* ^b‡.Wä„A.†.‡èÈ4 */
- $"C59D D57C CCA2 D56F 3889 44AC 0E4D 0E88" /* ÅÕ|Ì¢Õo8‰D¬.M.ˆ */
- $"2592 A50A F98D DF1D 17F2 78BD D4AB FDB4" /* %’¥Âùß..òx½Ô«ý´ */
- $"4249 FBDE 3E56 BE58 B587 88B4 8D75 299F" /* BIûÞ>V¾Xµ‡ˆ´u)Ÿ */
- $"4C92 6D9A 6B17 6153 9A65 4770 E0EC BBEF" /* L’mšk.aSšeGpàì»ï */
- $"2F91 8C35 8FFA 04AF 880C D9B6 204A D65E" /* /‘Œ5ú.¯ˆ.Ù¶ JÖ^ */
- $"68DD DBE7 63BC E1C5 CCDD E994 3796 10EF" /* hÝÛçc¼áÅÌÝé”7–.ï */
- $"354D C0E7 7A72 E57E EFAC 7C75 E4CE F47F" /* 5MÀçzrå~ï¬|uäÎô. */
- $"2E82 A8D0 6401 3CC4 1ACC 4513 1211 DCC9" /* .‚¨Ðd.<Ä.ÌE...ÜÉ */
- $"BD7A 47CA F093 83C7 38EB 866D 1ED5 AC6C" /* ½zGÊð“ƒÇ8ë†m.Õ¬l */
- $"FF01 C348 CFA1 2532 DAD5 2BDD 8CCC 71C1" /* ÿ.ÃHÏ¡%2ÚÕ+ÝŒÌqÁ */
- $"1208 75AA 308B 4796 A89E 0EAF AB67 422A" /* ..uª0‹G–¨ž.¯«gB* */
- $"AA43 8162 68BC 9878 8578 419C AB2E 9518" /* ªCbh¼˜x…xAœ«.•. */
- $"A9E0 4298 DB46 36D7 ADD0 DE21 DC41 AEA7" /* ©àB˜ÛF6×­ÐÞ!ÜA®§ */
- $"A05D 795D AB14 E247 6750 3EA8 0A31 5A06" /*  ]y]«.âGgP>¨Â1Z. */
- $"FAEC AD07 ECF7 C636 A068 22AA E179 7613" /* úì­.ì÷Æ6 h"ªáyv. */
- $"30F9 831C 0AFA 38C0 E20B 96A9 464E B57A" /* 0ùƒ.Âú8Àâ.–©FNµz */
- $"5AF3 D612 DC70 2A8D 1D09 C7C9 967F 7F7B" /* ZóÖ.Üp*.ÆÇÉ–..{ */
- $"F47F 4017 A722 9853 37C2 DE55 34CF 104E" /* ô.@.§"˜S7ÂÞU4Ï.N */
- $"9DD3 35DF DEE2 589C FAF1 07DE 1803 86B1" /* Ó5ßÞâXœúñ.Þ..†± */
- $"2DE6 6B46 FC45 F24E 8718 3B6E D557 8008" /* -ækFüEòN‡.;nÕW€. */
- $"FF3B 8EC2 28BD 6146 3EF6 A0FB 0BCA 37C1" /* ÿ;ŽÂ(½aF>ö û.Ê7Á */
- $"749B 49F2 F419 9EC5 DC0A A6DE 0CFC 1BD2" /* t›Iòô.žÅܦÞ.ü.Ò */
- $"AAF5 4920 1AB3 842A 1813 606E 97CD 0EC2" /* ªõI .³„*..`n—Í. */
- $"50D4 84CD F427 569F 776D 940A A6F7 68D7" /* PÔ„Íô'VŸwm”¦÷h× */
- $"2A18 4C6D 2056 D254 1226 7F3C 1ED0 7AB8" /* *.Lm VÒT.&.<.Ðz¸ */
- $"BEFE 2050 50E6 C5FB 173C 1857 FF7F 86D9" /* ¾þ PPæÅû.<.Wÿ.†Ù */
- $"6CE3 E235 1AFA CBB4 D2BE 4E64 9713 B880" /* lãâ5.úË´Ò¾Nd—.¸€ */
- $"0C41 2E14 401B D14F 5BA4 AD20 7060 C05E" /* .A..@.ÑO[¤­ p`À^ */
- $"2011 000E C557 2951 009C A584 6178 50E8" /* ...ÅW)Q.œ¥„axPè */
- $"6E0D 922F BFF7 EC41 A907 0D2B EF09 3CE0" /* n.’/¿÷ìA©..+ïÆ<à */
- $"6344 B3D6 742A 0448 042D 44C3 390B 089B" /* cD³Öt*.H.-DÃ9..› */
- $"B0FF 2877 1C62 BE1E AC48 09B0 4667 19BC" /* °ÿ(w.b¾.¬HưFg.¼ */
- $"319D 1FEA ABB5 1EE9 02D8 C845 A20C 2E3F" /* 1.ꫵ.é.ØÈE¢..? */
- $"7010 FA38 E2A0 1F01 2933 0557 19BD 9DCD" /* p.ú8â ..)3.W.½Í */
- $"5486 F044 5838 C953 CC32 2DF8 6A04 30ED" /* T†ðDX8ÉSÌ2-øj.0í */
- $"2C42 0A7D 1B38 7F94 4936 5908 39F1 424F" /* ,BÂ}.8.”I6Y.9ñBO */
- $"2BFF 7F46 F53E 11D3 DA1E 41B4 67AB 296E" /* +ÿ.Fõ>.ÓÚ.A´g«)n */
- $"0B59 6213 9E16 1568 8787 ED75 8822 A102" /* .Yb.ž..h‡‡íuˆ"¡. */
- $"DAAC D7D6 FA63 ED91 52D2 E98C 6EEB ABBB" /* Ú¬×Öúcí‘RÒéŒnë«» */
- $"5465 7C7C 0CEB 3016 0CC6 5793 D7FF 7FFB" /* Te||.ë0..ÆW“×ÿ.û */
- $"34E7 7BDE 794E 6D8C 392D 051A 478B 4AD7" /* 4ç{ÞyNmŒ9-..G‹J× */
- $"028C 3119 EDCA 833C 2F1B A23A 5C69 908F" /* .Œ1.íʃ</.¢:\i */
- $"6F17 C143 83FF 31A8 709D 7BFA B0E4 A884" /* o.ÁCƒÿ1¨p{ú°ä¨„ */
- $"E3DC 88CC DF54 C132 6671 A0D0 B4C3 7721" /* ã܈ÌßTÁ2fq Ð´Ãw! */
- $"B5F0 84FF 0FDA 1588 5865 1B6B 94E3 9B46" /* µð„ÿ.Ú.ˆXe.k”ã›F */
- $"5CA1 7767 09F4 3448 2242 114C 2705 2C38" /* \¡wgÆô4H"B.L'.,8 */
- $"4565 F286 ABC2 AFF5 809D 0C5B BB5E 009C" /* Eeò†«Â¯õ€.[»^.œ */
- $"FCBA BC4C 84FF 45EF F42B 3F8E DEE0 A531" /* üº¼L„ÿEïô+?ŽÞà¥1 */
- $"DBBB 2113 7C30 8BB7 76FF 7E55 E6BC 012B" /* Û»!.|0‹·vÿ~Uæ¼.+ */
- $"EBDE EF62 0981 DCE1 AC6E 5AD7 D8AD 0560" /* ëÞïbÆÜá¬nZר­.` */
- $"5B36 3A62 5B57 3E03 75AC 25FB B396 1086" /* [6:b[W>.u¬%û³–.† */
- $"5EF0 4C11 ACE0 90D2 6568 EB55 75AB FF24" /* ^ðL.¬àÒehëUu«ÿ$ */
- $"54B8 0E77 3110 5C67 3138 8369 5BEA 3458" /* T¸.w1.\g18ƒi[ê4X */
- $"7FFE 6000 9940 0044 18C6 1A34 14B6 9CD2" /* .þ`.™@.D.Æ.4.¶œÒ */
- $"C039 2A00 00CC 8F27 9EFE FF80 1CAA 8000" /* À9*..Ì'žþÿ€.ª€. */
- $"0000 0000 D9B1 C1D0 BFE1 D01D 2DD4 E3DF" /* ....Ù±ÁпáÐ.-Ôãß */
- $"949B 6DB6 DB6D B83D 6B98 82BC 446D 0CB3" /* ”›m¶Ûm¸=k˜‚¼Dm.³ */
- $"55A5 C140 D9E5 5E98 37AF 0E38 4474 B8DC" /* U¥Á@Ùå^˜7¯.8Dt¸Ü */
- $"FCFA B14E BD14 730B DAA0 4B18 1B4D 81E7" /* üú±N½.s.Ú K..Mç */
- $"B8A8 26E7 EFB0 8272 4619 2A00 0000 0000" /* ¸¨&çï°‚rF.*..... */
- $"0000 0000 0000 060D CD91 05BE 3A07 80DE" /* ........Í‘.¾:.€Þ */
- $"29D6 2680 7867 5359 9411 F430 48D9 A22D" /* )Ö&€xgSY”.ô0HÙ¢- */
- $"DF74 0855 C0C4 C5AA D3F4 FC40 5815 C5FC" /* ßt.UÀÄŪÓôü@X.Åü */
- $"B741 3001 FF7F FDC6 00B8 F1BA FEC9 B662" /* ·A0.ÿ.ýÆ.¸ñºþɶb */
- $"4973 2EE9 5029 E237 296D D4A4 04DE 4DB9" /* Is.éP)â7)mÔ¤.ÞM¹ */
- $"5305 FD42 9A82 6842 EF09 9DA2 201D C6EF" /* S.ýBš‚hBïÆ¢ .Æï */
- $"4078 4FC3 038C B201 A1C0 0791 7B09 CF18" /* @xOÃ.Œ².¡À.‘{ÆÏ. */
- $"D61B DABD 0409 372B F69D 3CF8 E2E1 31A1" /* Ö.Ú½.Æ7+ö<øâá1¡ */
- $"023B B0FD 60B3 3933 16F2 C716 9259 82F8" /* .;°ý`³93.òÇ.’Y‚ø */
- $"77BB 3A47 46D2 D998 7AA1 01E1 DF78 8000" /* w»:GFÒÙ˜z¡.áßx€. */
- $"0000 0001 D8FD 4FB2 C620 0000 005A CD78" /* ....ØýO²Æ ...ZÍx */
- $"B755 53CD E910 3B50 96A8 4000 0000 0003" /* ·USÍé.;P–¨@..... */
- $"FD6F 5DD1 31D8 A087 6BC5 09F3 E81E B49F" /* ýo]Ñ1Ø ‡kÅÆóè.´Ÿ */
- $"5A88 0DB9 2492 4924 9234 EE49 0E46 EE5B" /* Zˆ.¹$’I$’4îI.Fî[ */
- $"8D2A E866 7AD0 1F3C 936D 50EF 6EF5 FDE7" /* *èfzÐ.<“mPïnõýç */
- $"BFFE 6EFF 82AD 0EDF 556D B01D C573 CA68" /* ¿þnÿ‚­.ßUm°.ÅsÊh */
- $"985A F307 82C5 D933 4C26 B9EE EEF7 D4C6" /* ˜Zó.‚ÅÙ3L&¹îî÷ÔÆ */
- $"BFB5 4130 F610 4AFE 602E 3723 0C95 0000" /* ¿µA0ö.Jþ`.7#.•.. */
- $"0000 0000 0000 0000 0002 7F7E DE44 DDEB" /* ...........~ÞDÝë */
- $"B8B1 0AB8 BA80 7F79 D59C 851A 0244 B8D1" /* ¸±Â¸º€.yÕœ…..D¸Ñ */
- $"6B92 AB1A 4997 5556 C0C7 5935 05AD B380" /* k’«.I—UVÀÇY5.­³€ */
- $"318D A387 1E5F 1523 0170 B5DB D9FA 0E80" /* 1£‡._.#.pµÛÙú.€ */
- $"7342 6634 1E36 FB10 615A 1862 FF53 1545" /* sBf4.6û.aZ.bÿS.E */
- $"C795 B42C 8282 534C 3AFD D370 7621 820E" /* Ç•´,‚‚SL:ýÓpv!‚. */
- $"9EDA AF3A 476B 3537 E327 52DE 4A99 73D1" /* žÚ¯:Gk57ã'RÞJ™sÑ */
- $"0718 7C16 82D5 99A5 32DD 0E83 9C4F 60F8" /* ..|.‚Õ™¥2Ý.ƒœO`ø */
- $"0743 325D 2056 84FF 06BC C6BB 338C 64CF" /* .C2] V„ÿ.¼Æ»3ŒdÏ */
- $"B7B9 C4C7 9800 E4DA EE0A 6636 DEE8 B8F8" /* ·¹Äǘ.äÚîÂf6Þè¸ø */
- $"739E 1EBD 408C C620 9790 A337 E987 2E54" /* sž.½@ŒÆ —£7é‡.T */
- $"DD4A E501 C0BF 44E6 E8EF ACCF 028F 253C" /* ÝJå.À¿Dæèï¬Ï.%< */
- $"F466 FA92 BEE6 A066 F4B6 5B41 CA80 3567" /* ôfú’¾æ fô¶[AÊ€5g */
- $"A079 E31D CEE9 CD64 0AED 265D E591 B98C" /*  yã.ÎéÍdÂí&]呹Œ */
- $"DF22 C203 3C43 E1D8 5D64 CA99 E6C7 EF30" /* ß"Â.<CáØ]dÊ™æÇï0 */
- $"68AF F4C9 97D5 F961 48CF 954C 2832 33A3" /* h¯ôÉ—ÕùaHÏ•L(23£ */
- $"0088 1417 0D84 DDE1 23FA C81D 487D C9AB" /* .ˆ...„Ýá#úÈ.H}É« */
- $"F239 ABB4 24E0 6694 291C 885C 23CE F212" /* ò9«´$àf”).ˆ\#Îò. */
- $"29F4 5656 7DD1 182A 2C11 AAEF 7534 24EE" /* )ôVV}Ñ.*,.ªïu4$î */
- $"9886 347F 28AD 6952 0A82 E9A4 6AA9 9390" /* ˜†4.(­iR‚é¤j©“ */
- $"06A8 EF47 527A EDF2 894B 5234 A900 82B1" /* .¨ïGRzíò‰KR4©.‚± */
- $"724D 791B 676C BC97 B3A5 94F7 137E FE8D" /* rMy.gl¼—³¥”÷.~þ */
- $"50F5 C1EE 0C5B 1F3D CEF4 DD64 709C 095B" /* PõÁî.[.=ÎôÝdpœÆ[ */
- $"A51A B239 3EC3 C9BA 39EC DBE2 FB9A 3C6F" /* ¥.²9>Ãɺ9ìÛâûš<o */
- $"BBC4 DE3E C5AF 0043 DC2D AE64 C0A7 2039" /* »ÄÞ>ů.CÜ-®dÀ§ 9 */
- $"A6C9 6079 72D6 0BC7 C501 A3A4 5EF4 A060" /* ¦É`yrÖ.ÇÅ.£¤^ô ` */
- $"C46E FCB9 1958 AD83 1176 0776 81C2 13C2" /* Änü¹.X­ƒ.v.vÂ. */
- $"DF08 4A76 137F DC5C 4867 0493 EE96 8373" /* ß.Jv..Ü\Hg.“î–ƒs */
- $"4644 13A4 F789 39FF 813B D226 575A 5A18" /* FD.¤÷‰9ÿ;Ò&WZZ. */
- $"3AF5 4B88 2747 3D47 681F 9670 0069 DD02" /* :õKˆ'G=Gh.–p.iÝ. */
- $"4252 ADB0 D6FB F1F1 1432 C24B D920 7290" /* BR­°Öûññ.2ÂKÙ r */
- $"3709 3D60 15D9 0C49 23EC 77F8 F791 F132" /* 7Æ=`.Ù.I#ìwø÷‘ñ2 */
- $"046E 0D05 9AFA 210A 9992 29D9 7AA6 F18E" /* .n..šú!™’)Ùz¦ñŽ */
- $"E245 75E0 018F BCEB 8D1B C2D0 083E 985F" /* âEuà.¼ë.ÂÐ.>˜_ */
- $"B791 554D F5F5 AD71 E064 75E6 1F3A D463" /* ·‘UMõõ­qàduæ.:Ôc */
- $"9A59 0A43 3457 BD7C 44A7 5C5E 9D19 C5D8" /* šYÂC4W½|D§\^.ÅØ */
- $"5880 C2CC 5DF0 2964 C0FD ABA1 004B 008D" /* X€ÂÌ]ð)dÀý«¡.K. */
- $"5205 7F2E 0843 E484 2D37 9C34 2425 7AFF" /* R....Cä„-7œ4$%zÿ */
- $"7021 D907 B6E1 F5E5 02C3 F3DD 44C8 2252" /* p!Ù.¶áõå.ÃóÝDÈ"R */
- $"0649 3C1A 1A80 449A 64D1 1720 76D6 4987" /* .I<..€DšdÑ. vÖI‡ */
- $"B4B1 E749 E899 BF69 5B35 F925 2EE6 6CE6" /* ´±çI虿i[5ù%.ælæ */
- $"B4FD CEB3 54C0 7C9D 4380 F93B 5701 F274" /* ´ýγTÀ|C€ù;W.òt */
- $"C4F3 CC20 F972 1FD1 56B3 911D 2995 5FC9" /* ÄóÌ ùr.ÑV³‘.)•_É */
- $"1F35 BAE0 9AC7 3082 1372 C1D5 4B23 D79E" /* .5ºàšÇ0‚.rÁÕK#מ */
- $"EF63 A93F 8E74 26FB AC68 CDBE BD3E 9720" /* ïc©?Žt&û¬h;½>— */
- $"DF71 956D 5D26 559E 2795 2F1B F798 7821" /* ßq•m]&Už'•/.÷˜x! */
- $"F3CB 1E6F 2351 11BD 0EFF 19B2 40A2 1C7F" /* óË.o#Q.½.ÿ.²@¢.. */
- $"267D D302 F6AE 5410 1E96 40DC 386E CB7B" /* &}Ó.ö®T..–@Ü8nË{ */
- $"7EA3 5CF7 46BA 8758 D0EE 12B3 34DF 46FE" /* ~£\÷Fº‡XÐî.³4ßFþ */
- $"517B E0F8 7E28 83A5 E93A C06D 7C3F 254B" /* Q{àø~(ƒ¥é:Àm|?%K */
- $"53DF 91ED F6AB FD0A 53A0 5257 F9B8 E8B7" /* Sß‘íö«ýÂS RWù¸è· */
- $"5A14 6036 C6DA E3FE C29D 799F 8B43 46D6" /* Z.`6ÆÚãþÂyŸ‹CFÖ */
- $"94DF 1954 073C 7C30 40F4 A00D 93D4 AADF" /* ”ß.T.<|0@ô .“ﻧ */
- $"4839 EF36 F92A 3758 97CE 955A 3521 3CB5" /* H9ï6ù*7X—ΕZ5!<µ */
- $"8269 30A7 2A93 6A40 07BE DCC3 50B6 C86B" /* ‚i0§*“j@.¾ÜÃP¶Èk */
- $"CE9A AF28 3B80 4FE6 873C DB8E A29C 15DC" /* Κ¯(;€Oæ‡<ÛŽ¢œ.Ü */
- $"81A8 F841 4F77 6237 7267 55C4 1289 2DA1" /* ¨øAOwb7rgUÄ.‰-¡ */
- $"8392 424A 398F 9FA7 8DBE 2CC6 44E9 A005" /* ƒ’BJ9Ÿ§¾,ÆDé . */
- $"0E57 6638 ADDD 9F15 D32E 13A9 F752 67BA" /* .Wf8­ÝŸ.Ó..©÷Rgº */
- $"9F1D 753C 0023 2BC1 2C48 19AF FF28 66E6" /* Ÿ.u<.#+Á,H.¯ÿ(fæ */
- $"0A05 1D62 536F C372 7DEC 5069 B44D AFD4" /* Â..bSoÃr}ìPi´M¯Ô */
- $"BE3C 9C16 161E 95B4 89E7 B034 4524 E373" /* ¾<œ...•´‰ç°4E$ãs */
- $"D4A2 2F82 F1BB 8F20 7861 0F95 7CDF C184" /* Ô¢/‚ñ» xa.•|ßÁ„ */
- $"5B65 6015 001B F6BD 5D52 D4BC 3A42 FD56" /* [e`...ö½]RÔ¼:BýV */
- $"D48F 3358 7432 09BD FF19 625D 3A11 13DA" /* Ô3Xt2ƽÿ.b]:..Ú */
- $"F222 12E8 5A1B 12BF 9B3B A234 A367 8FB6" /* ò".èZ..¿›;¢4£g¶ */
- $"4BF2 EE99 DB11 5D13 7021 71B4 2280 A1BC" /* Kòî™Û.].p!q´"€¡¼ */
- $"2AEF ECB5 D7EC 047C 0860 9676 78B1 CA76" /* *ïìµ×ì.|.`–vx±Êv */
- $"9AFB C995 D4EB 900A AD98 6423 E572 B68C" /* šûÉ•Ôë­˜d#år¶Œ */
- $"A271 A30B D157 8E95 8250 29BB 0323 E26C" /* ¢q£.ÑWŽ•‚P)».#âl */
- $"9223 91C7 0CD4 F0B0 442E 1BD3 1473 C699" /* ’#‘Ç.Ôð°D..Ó.sÆ™ */
- $"2D1C 8791 C699 920E 72C0 0D3E F6E9 9E2B" /* -.‡‘Æ™’.rÀ.>öéž+ */
- $"60B6 A87F 6CBE 146C 1224 90FC BF7B C6A9" /* `¶¨.l¾.l.$ü¿{Æ© */
- $"090E 3EAD C89D 5065 414B 3A1C F271 9327" /* Æ.>­ÈPeAK:.òq“' */
- $"D490 CD2B FBB3 BEFF 768D 4601 635B A746" /* ÔÍ+û³¾ÿvF.c[§F */
- $"8A4B 0981 8B8F EA85 D255 2113 8792 CC76" /* ŠKÆ‹ê…ÒU!.‡’Ìv */
- $"DE84 B950 C5F4 A4C1 D4EF 7D52 CC74 CCEE" /* Þ„¹PÅô¤ÁÔï}RÌtÌî */
- $"B40E B94F 9467 15CA 1DE0 3557 BF09 D787" /* ´.¹O”g.Ê.à5W¿Æ×‡ */
- $"ED66 345A E153 B4DC EF7C 2952 3161 5A99" /* íf4ZáS´Üï|)R1aZ™ */
- $"A193 D5EB 40F5 1300 65FA 8DFD 621A AE94" /* ¡“Õë@õ..eúýb.®” */
- $"30CD 6D25 A0FC 942E 37AC 52C8 CEAD 2D1F" /* 0Ím% ü”.7¬RÈέ-. */
- $"87D5 D078 F173 F5AD 7A56 DD1B 10C3 F9BF" /* ‡ÕÐxñsõ­zVÝ..Ãù¿ */
- $"69C1 9E6B E021 A0C7 84BF D87A 8AA8 327C" /* iÁžkà! Ç„¿ØzЍ2| */
- $"7D48 0D97 E584 FF7F AE07 2001 BF6C 2691" /* }H.—å„ÿ.®. .¿l&‘ */
- $"3032 E118 8741 42AD 7709 3086 8488 F9D3" /* 02á.‡AB­wÆ0†„ˆùÓ */
- $"0353 D79E 2E21 8F21 46CC 005C DA8A 0229" /* .Sמ.!!FÌ.\ÚŠ.) */
- $"A56B A72A C69E FCF7 7558 5D72 0050 2BDE" /* ¥k§*Æžü÷uX]r.P+Þ */
- $"0F36 E4F0 C744 89FC 37F0 7ECA F488 FE8C" /* .6äðÇD‰ü7ð~ÊôˆþŒ */
- $"1B6B 0158 B34D 1EA6 9B1F 154E FF79 01D4" /* .k.X³M.¦›..Nÿy.Ô */
- $"725F D9CF D9BF CCFF 439D 8F5C A92D D20D" /* r_ÙÏÙ¿ÌÿC\©-Ò. */
- $"0613 88F8 5C1C B6BD 07B9 9078 151D 8353" /* ..ˆø\.¶½.¹x..ƒS */
- $"0E68 8495 D521 92D8 E92D CF9B 10E6 ABDC" /* .h„•Õ!’Øé-Ï›.æ«Ü */
- $"53D9 DFB2 F2AF F964 14E3 74D6 3D64 01E2" /* SÙß²ò¯ùd.ãtÖ=d.â */
- $"FAFB 2D0B D303 DCF7 7718 E6CF 30DB 3FAE" /* úû-.Ó.Ü÷w.æÏ0Û?® */
- $"2873 3339 54A3 1E48 04D2 FDF2 E863 6201" /* (s39T£.H.Òýòècb. */
- $"01D1 182C 4C2A D85D AE26 DE15 9796 494C" /* .Ñ.,L*Ø]®&Þ.—–IL */
- $"82EA B4C0 2D3C 3D3E 1732 2ACA AC27 B7DB" /* ‚ê´À-<=>.2*ʬ'·Û */
- $"5CED 6F9D 3EDB FF04 5E83 BE60 1636 AE2C" /* \ío>Ûÿ.^ƒ¾`.6®, */
- $"754D 2928 7128 ACFD 15E8 C1A0 30A5 1063" /* uM)(q(¬ý.èÁ 0¥.c */
- $"1E6F 10F7 A946 B9B4 D921 5DB3 113F 332E" /* .o.÷©F¹´Ù!]³.?3. */
- $"61B8 AB3D 2F87 E081 C9D9 32B7 1060 785A" /* a¸«=/‡àÉÙ2·.`xZ */
- $"EFDD F472 0283 E235 4D42 E903 A06B 51CB" /* ïÝôr.ƒâ5MBé. kQË */
- $"39DC A412 A492 918E 235E F57C E4CE 4E0F" /* 9ܤ.¤’‘Ž#^õ|äÎN. */
- $"6BE6 7036 FA8A 7B2C 21FE 60B1 6FCA 7654" /* kæp6úŠ{,!þ`±oÊvT */
- $"C9FD DCDF E497 B2A6 D6D5 87ED 9D3B 5B86" /* ÉýÜßä—²¦ÖÕ‡í;[† */
- $"DA51 6B5B AE3E 520B 1DB3 5A6B 2B4D A777" /* ÚQk[®>R..³Zk+M§w */
- $"4F13 A04C 7D4F 819B 1FEB 086D 5F34 6643" /* O. L}O›.ë.m_4fC */
- $"0208 693A D70C 55B2 7A07 BC27 3A41 B739" /* ..i:×.U²z.¼':A·9 */
- $"C1F5 7425 07D5 D74C 1F56 F680 F1C4 B0CB" /* Áõt%.Õ×L.Vö€ñÄ°Ë */
- $"F3E0 DE80 53FC 256D EFD0 6B64 028C EC70" /* óàÞ€Sü%mïÐkd.Œìp */
- $"4973 06D4 242C DAAA 8373 DFAC B0C9 14A1" /* Is.Ô$,Úªƒs߬°É.¡ */
- $"BFBC 0BB4 E250 919E 3D2B B388 3A89 FB02" /* ¿¼.´âP‘ž=+³ˆ:‰û. */
- $"9796 86E6 20F8 C26C 8120 349C 757A 6875" /* —–†æ øÂl 4œuzhu */
- $"F63E AE68 84C3 03A3 6F64 F9EE F892 2CF8" /* ö>®h„Ã.£odùîø’,ø */
- $"61C1 B13A E941 0D67 DA36 4C05 9565 DC85" /* aÁ±:éA.gÚ6L.•eÜ… */
- $"D7F8 6EB9 D903 D428 F59A 3EBF C73E 5E95" /* ×øn¹Ù.Ô(õš>¿Ç>^• */
- $"764D 15FB 98F2 BECE 0FC8 EA3C 4E51 E1DD" /* vM.û˜ò¾Î.Èê<NQáÝ */
- $"5253 CE7A 2D16 8527 AF8E 9A17 757A A42F" /* RSÎz-.…'¯Žš.uz¤/ */
- $"6CA9 6BB3 7787 D84F 8E20 EA1F FB2D 15E3" /* l©k³w‡ØOŽ ê.û-.ã */
- $"0D2C 45A8 8C80 7DA1 89DB 5F46 F3FB 2871" /* .,E¨Œ€}¡‰Û_Fóû(q */
- $"539E 8CCA 5C03 EF20 B6B5 4956 EB82 172C" /* SžŒÊ\.ï ¶µIVë‚., */
- $"AB28 0D6D 4DF9 1F61 6F8D 61FE E962 778D" /* «(.mMù.aoaþébw */
- $"0C8E EC55 3BDC EC81 C9D1 E7D5 A811 C69A" /* .ŽìU;ÜìÉÑçÕ¨.Æš */
- $"6186 BC2C 75B4 DD3D C207 1151 4C3B 4175" /* a†¼,u´Ý=Â..QL;Au */
- $"942E 2ACF D3C7 7122 9D89 31B3 0918 EDC0" /* ”.*ÏÓÇq"‰1³Æ.íÀ */
- $"9D45 75D8 DE61 5036 6D9F 3373 4827 7ADE" /* EuØÞaP6mŸ3sH'zÞ */
- $"1BD1 16E8 8905 37D4 D811 1077 B359 0FF6" /* .Ñ.è‰.7ÔØ..w³Y.ö */
- $"0460 F360 20A5 B532 3418 142A B432 C2E9" /* .`ó` ¥µ24..*´2Âé */
- $"A0D6 DB04 317D 28F3 C893 AAE3 19B1 5742" /*  ÖÛ.1}(óÈ“ªã.±WB */
- $"7BF6 615C 0EAC F35E 0CD4 B142 A289 5458" /* {öa\.¬ó^.Ô±B¢‰TX */
- $"D699 1584 46FF 7174 758F B1F8 F540 F427" /* Ö™.„Fÿqtu±øõ@ô' */
- $"A496 8795 E66B 3DDC FB80 D0B8 9411 7240" /* ¤–‡•æk=Üû€Ð¸”.r@ */
- $"0374 54DC B2CA C982 BD5E FD06 4B02 5E8D" /* .tTܲÊÉ‚½^ý.K.^ */
- $"A958 79AA 5BE6 B5A2 76C3 7C23 0D45 6768" /* ©Xyª[æµ¢vÃ|#.Egh */
- $"D726 8259 FD2E E5CE 9B70 0600 22E7 82A3" /* ×&‚Yý.åΛp.."ç‚£ */
- $"8E14 9626 C4EC EED9 E7D8 13C9 623F 3DEB" /* Ž.–&ÄìîÙçØ.Éb?=ë */
- $"357B E617 A43A C9D4 328A C30A FF45 71BA" /* 5{æ.¤:ÉÔ2ŠÃÂÿEqº */
- $"1F8B 3945 8E06 0CF0 4749 0840 6F5A EDDB" /* .‹9EŽ..ðGI.@oZíÛ */
- $"29AC E877 27BD 6C8C A131 8A1C 9228 0FC5" /* )¬èw'½lŒ¡1Š.’(.Å */
- $"A029 D1A1 324D EFCE EB3F 2B92 150D FB8C" /*  )Ñ¡2MïÎë?+’..ûŒ */
- $"5399 1ABD D375 08BF 8F3F E788 684D 3064" /* S™.½Óu.¿?çˆhM0d */
- $"70B4 A733 4AB6 239A DC03 724F C8B8 F1BB" /* p´§3J¶#šÜ.rOȸñ» */
- $"8F1F A795 FF18 8256 0050 FF74 EDF1 3D05" /* .§•ÿ.‚V.Pÿtíñ=. */
- $"6CB0 E566 9272 E493 C085 3D06 3116 4ECE" /* l°åf’rä“À…=.1.NÎ */
- $"402D 329F 4BBB 2598 A7CF BEE1 333D 9019" /* @-2ŸK»%˜§Ï¾á3=. */
- $"61BB 1A29 2616 E907 2CD6 F64C 456F 9881" /* a».)&.é.,ÖöLEo˜ */
- $"725B 5C38 A40D 60D3 6B4F FDF1 87D7 4786" /* r[\8¤.`ÓkOýñ‡×G† */
- $"29BF CAEB 223A 044D 0F61 FDE6 0A3E 7727" /* )¿Êë":.M.aýæÂ>w' */
- $"DDEE 0A95 231F 04AC B6EF D134 C09D 1540" /* Ýî•#..¬¶ïÑ4À.@ */
- $"0E94 57E2 8418 C208 1F26 7396 96A0 D08F" /* .”Wâ„.Â..&s–– Ð */
- $"0CC0 40C8 C596 39BA 0CAE A6ED F8E8 7D6B" /* .À@ÈÅ–9º.®¦íøè}k */
- $"A76C 391B 6113 555F 62E0 6E14 5D27 E7BC" /* §l9.a.U_bàn.]'ç¼ */
- $"EDB7 D038 DED2 7BEE FC9D 6211 241E 0795" /* í·Ð8ÞÒ{îüb.$..• */
- $"9CDE 1607 B4C7 828E 24D2 4E9F FCA0 36EA" /* œÞ..´Ç‚Ž$ÒNŸü 6ê */
- $"004C C960 1680 01CE 7FF6 A201 EDAB 1ADF" /* .LÉ`.€.Î.ö¢.í«.ß */
- $"80D8 4524 390C 23DD EA8E 062C 5DDB 3C57" /* €ØE$9.#ÝêŽ.,]Û<W */
- $"BAEC 18E5 1ECE 91D7 A40E 08ED 23EA 55B6" /* ºì.å.Αפ..í#êU¶ */
- $"AA2C F48A 7B0E 8CAE 90DD 5840 41FF 7F4C" /* ª,ôŠ{.Œ®ÝX@Aÿ.L */
- $"47AD E774 87C4 9AB1 9CAD E633 DECD 3E36" /* G­çt‡Äš±œ­æ3ÞÍ>6 */
- $"00C2 0E05 134F 4802 3846 3575 1902 676D" /* .Â...OH.8F5u..gm */
- $"1006 D8AE 0D5F 1934 78F6 0721 F3C4 1000" /* ..Ø®._.4xö.!óÄ.. */
- $"8991 FA85 45B5 37A9 5A0C 54EE 014B 297B" /* ‰‘ú…Eµ7©Z.Tî.K){ */
- $"52F2 5ADD 7422 C97B EAA9 D291 45A7 A44A" /* RòZÝt"É{ê©Ò‘E§¤J */
- $"40FE AE73 5086 C7D3 85FD D734 67F2 8909" /* @þ®sP†ÇÓ…ý×4gò‰Æ */
- $"506D 36D8 2361 990C 802F A59E B603 9C94" /* Pm6Ø#a™.€/¥ž¶.œ” */
- $"F7BD AED9 8518 8651 DFFE 3D0E E920 E874" /* ÷½®Ù….†Qßþ=.é èt */
- $"FEB0 EE3C 3242 C249 4704 EEA8 9EFA DC61" /* þ°î<2BÂIG.úÜa */
- $"49C6 929E 2A9D 51CD FE0A FF02 3DDB 01EC" /* IÆ’ž*QÍþÂÿ.=Û.ì */
- $"80E8 630A B0C8 C9FC 7693 C60B 07E8 5D2F" /* €èc°ÈÉüv“Æ..è]/ */
- $"B97A 9F04 444E C836 DD68 FF12 EC9C 7E4F" /* ¹zŸ.DNÈ6Ýhÿ.ìœ~O */
- $"3CE9 83A8 191A 1E61 05F8 90FF 67E8 011A" /* <部...a.øÿgè.. */
- $"71EA 3EE8 AFBD 6328 ED84 9807 788D F3BC" /* qê>诽c(턘.xó¼ */
- $"2FA0 A210 7FFF 1D02 2519 4EC7 2A80 7FD0" /* / ¢..ÿ..%.NÇ*€.Ð */
- $"2064 A8F4 CC78 5EC8 88AF F1AB 868B 9F8D" /* d¨ôÌx^Ȉ¯ñ«†‹Ÿ */
- $"883E 3FDA D188 FBB7 3AFC 0C72 E01A CEF3" /* ˆ>?Úшû·:ü.rà.Îó */
- $"21E1 1718 4FDB 9A43 3767 424A 639B DFFE" /* !á..OÛšC7gBJc›ßþ */
- $"CA5F 7BA9 8F82 3EA6 6D4E 6986 6945 80DE" /* Ê_{©‚>¦mNi†iE€Þ */
- $"8274 4927 166A 6062 DF1D 0A72 F23B FA5A" /* ‚tI'.j`bß.Ârò;úZ */
- $"4DE4 5D19 54FC 488B 5237 FF5F 7B81 62C5" /* Mä].TüH‹R7ÿ_{bÅ */
- $"F6B7 B580 3016 11B6 22CF 63B8 428A D39A" /* ö·µ€0..¶"Ïc¸BŠÓš */
- $"5AC3 80FF 7310 8386 FF54 F361 304F 3BB5" /* ZÀÿs.ƒ†ÿTóa0O;µ */
- $"A7EB 0419 7DFB 6E56 20A8 3670 9018 9CB3" /* §ë..}ûnV ¨6p.œ³ */
- $"4B35 7082 32A7 E917 9CF8 FF7F FF80 0A6C" /* K5p‚2§é.œøÿ.ÿ€Âl */
- $"A48C 447E 3ECF 411D 89E4 F923 373B DCBE" /* ¤ŒD~>ÏA.‰äù#7;ܾ */
- $"2CE8 6580 0F87 1A23 1D93 62AE 48EF DEB8" /* ,èe€.‡.#.“b®HïÞ¸ */
- $"5DE8 DB68 1CA3 8D4B D3FE A476 7B3D ACAA" /* ]èÛh.£KÓþ¤v{=¬ª */
- $"284F 83EB 428F A201 D122 CB1A CCB2 C1FE" /* (OƒëB¢.Ñ"Ë.̲Áþ */
- $"367F 60D3 155D 8C00 22D8 ED33 D56B 1DE2" /* 6.`Ó.]Œ."Øí3Õk.â */
- $"98B0 A4A9 E041 2BF1 AA58 E78D 47E5 929F" /* ˜°¤©àA+ñªXçGå’Ÿ */
- $"85DA 699E C45A 0064 B931 CF2B 4169 44F0" /* …ÚižÄZ.d¹1Ï+AiDð */
- $"4B4F 083B 3D7C B2B2 D87B 785E 91A8 C614" /* KO.;=|²²Ø{x^‘¨Æ. */
- $"6EE6 A63C C8A7 B9E3 839D E245 4128 3BF9" /* næ¦<ȧ¹ãƒâEA(;ù */
- $"98CD 0C23 72EB E3A9 D21F 1BC2 4E13 274B" /* ˜Í.#rëã©Ò..ÂN.'K */
- $"19C8 CB39 5E7A D218 FBDB 0C42 51A1 1203" /* .ÈË9^zÒ.ûÛ.BQ¡.. */
- $"C0EB CDC2 9249 E461 1DE4 3DB6 FDFE 1334" /* ÀëÍÂ’Iäa.ä=¶ýþ.4 */
- $"1952 8231 CD71 A170 C55B 1FD0 6706 57F0" /* .R‚1Íq¡pÅ[.Ðg.Wð */
- $"282D 09A2 0893 A5BA 0314 43DD 32AF 3478" /* (-Æ¢.“¥º..CÝ2¯4x */
- $"EF6C 15F0 55C9 6A47 ECFE 3F3F 4DB4 5ED8" /* ïl.ðUÉjGìþ??M´^Ø */
- $"EFF8 8CA5 71F9 6669 078C 550C 943A 7046" /* ïøŒ¥qùfi.ŒU.”:pF */
- $"C031 6CE2 4681 4177 2913 CFE7 D857 C62A" /* À1lâFAw).ÏçØWÆ* */
- $"4652 88E2 8830 DF42 9C3D 2D76 E710 A8F1" /* FRˆâˆ0ßBœ=-vç.¨ñ */
- $"3626 45F2 55CC 008C EAB8 B891 A5F3 1AD2" /* 6&EòUÌ.Œê¸¸‘¥ó.Ò */
- $"AB11 6C48 3F18 40C0 51F0 DB88 0BD1 168C" /* «.lH?.@ÀQðÛˆ.Ñ.Œ */
- $"2E54 2DA6 CC60 BB05 4700 2C4E 179B 271B" /* .T-¦Ì`».G.,N.›'. */
- $"688C 1EE9 4D9A C781 8108 296B FE4F 028A" /* hŒ.éMšÇ.)kþO.Š */
- $"63D6 6EDF 6FEB FC17 BDFE 7A70 B48E D94E" /* cÖnßoëü.½þzp´ŽÙN */
- $"D985 3384 1BD2 B4C9 5213 B0D1 041B 876C" /* Ù…3„.Ò´ÉR.°Ñ..‡l */
- $"131C 4A9C 947B A79C A466 9779 E7C9 D2E1" /* ..Jœ”{§œ¤f—yçÉÒá */
- $"4E9F 0509 30E0 1115 E5C7 CAED 197B 818A" /* NŸ.Æ0à..åÇÊí.{Š */
- $"324D 8F8E ED44 BF44 5340 D647 1776 B983" /* 2MŽíD¿DS@ÖG.v¹ƒ */
- $"6D8C 88B1 6976 F7EB AFDB 6638 CAD3 F275" /* mŒˆ±iv÷ë¯Ûf8ÊÓòu */
- $"D93A 6CD3 9D6E C617 3969 D8E5 3059 947B" /* Ù:lÓnÆ.9iØå0Y”{ */
- $"6AFA 0E9B A19C 24C9 E1DC 089D 3545 89E4" /* jú.›¡œ$ÉáÜ.5E‰ä */
- $"E860 FB54 068C B464 EE9B 66B7 F267 34CF" /* è`ûT.Œ´dî›f·òg4Ï */
- $"1276 C6B2 47E6 8284 300B D1A9 1409 0C93" /* .vƲGæ‚„0.Ñ©.Æ.“ */
- $"E36A 8095 409A 7352 FF7A 0F50 A5E2 E678" /* ãj€•@šsRÿz.P¥âæx */
- $"C195 0898 E51E EB15 8D7A E918 29A6 D5CE" /* Á•.˜å.ë.zé.)¦ÕÎ */
- $"4DBC 978B 2CAA 9BA7 8727 EA1C 1C7A 6CC2" /* M¼—‹,ª›§‡'ê..zl */
- $"D172 DDF5 4BD4 9C69 607B 609F AEC8 FD84" /* ÑrÝõKÔœi`{`Ÿ®Èý„ */
- $"1DDA A076 C7E1 A7B1 F86C BC7E 1720 EB83" /* .Ú vÇá§±øl¼~. ëƒ */
- $"095B F1C8 7239 10FD 6A26 D10E 534B E257" /* Æ[ñÈr9.ýj&Ñ.SKâW */
- $"B691 5D92 6949 E7D8 7470 AA8C 421F F945" /* ¶‘]’iIçØtpªŒB.ùE */
- $"99F6 9492 B806 E264 47B0 4EF5 6206 734E" /* ™ö”’¸.âdG°Nõb.sN */
- $"944B 102F A688 23A4 EAB0 CCEA 0017 0156" /* ”K./¦ˆ#¤ê°Ìê...V */
- $"A8C9 2A3F FF49 4137 E23A 09D0 97BB 0E5F" /* ¨É*?ÿIA7â:ÆÐ—»._ */
- $"E2A2 2247 4980 6A20 B443 3E0B 0465 B9EF" /* â¢"GI€j ´C>..e¹ï */
- $"C490 B954 3AEA ABB7 3D53 111D 8897 551C" /* ĹT:ê«·=S..ˆ—U. */
- $"B865 1EA2 33F2 AD50 D488 1D6D 9733 27F3" /* ¸e.¢3ò­PÔˆ.m—3'ó */
- $"78AC C946 FB3C 4D2F 6580 1B3A 3368 3D54" /* x¬ÉFû<M/e€.:3h=T */
- $"55DF 6B52 1A54 9010 C4D2 12C8 D497 9CDB" /* UßkR.T.ÄÒ.ÈÔ—œÛ */
- $"173A 0609 66F1 C6C0 FD02 47A0 B2E2 D2E6" /* .:.ÆfñÆÀý.G ²âÒæ */
- $"096E F870 0776 4898 2F2B 84CF BA83 D656" /* Ænøp.vH˜/+„ϺƒÖV */
- $"7F77 79FF 0F1D 2A6E 03C6 4D0F E3EF D23B" /* .wyÿ..*n.ÆM.ãïÒ; */
- $"6F82 5F72 6701 98DF 5A63 DA7B 0ABC 75E2" /* o‚_rg.˜ßZcÚ{¼uâ */
- $"382D 0D93 3C8C 5308 19EA EF8D 7922 CD36" /* 8-.“<ŒS..êïy"Í6 */
- $"ED21 EB4D 3D77 5A8A 1380 E238 22E5 84AA" /* í!ëM=wZŠ.€â8"優 */
- $"4488 7DCE 91A0 CB4B 67FA 74AF EA3D 1C8E" /* Dˆ}Α ËKgút¯ê=.Ž */
- $"9279 611D FD02 D08F D952 B05D 2C11 B545" /* ’ya.ý.ÐÙR°],.µE */
- $"5F17 FF5C 1E9C 6A77 DA2F A474 B20C F5A2" /* _.ÿ\.œjwÚ/¤t².õ¢ */
- $"B2D4 176F 97E4 CE9E B576 C3E0 0F3D ECB9" /* ²Ô.o—äΞµvÃà.=ì¹ */
- $"7B35 DEBB 5ABA 9738 36F8 524D 74D8 08FF" /* {5Þ»Zº—86øRMtØ.ÿ */
- $"29A7 9B08 5B43 7C17 FB53 234E 4806 B0C3" /* )§›.[C|.ûS#NH.°Ã */
- $"AF3A FF38 CCAF FEAA C60F D103 32AC 7D7F" /* ¯:ÿ8̯þªÆ.Ñ.2¬}. */
- $"D2B8 51C1 7B7D 56FD 7CFB D2B5 C55B 7C7D" /* Ò¸QÁ{}Vý|ûÒµÅ[|} */
- $"7D30 10C2 4181 3358 5DD6 4625 4FFC EA30" /* }0.ÂA3X]ÖF%Oüê0 */
- $"3402 194F 6D0B 53D8 3C64 54AE E8DA 7874" /* 4..Om.SØ<dT®èÚxt */
- $"7FF1 DE25 3147 0AF0 D5B6 7BF7 88DD 5199" /* .ñÞ%1GÂðÕ¶{÷ˆÝQ™ */
- $"611E 526D B6DB 6DB6 DB69 9C6E 7A40 821D" /* a.Rm¶Ûm¶Ûiœnz@‚. */
- $"4416 6952 04BB 9C0A F19B 2C62 E698 A4F5" /* D.iR.»œÂñ›,b昤õ */
- $"9B83 3C59 8217 0000 0034 8080 DB92 4924" /* ›ƒ<Y‚....4€€Û’I$ */
- $"9249 247D 32D0 9B20 73FF 7E44 A49A 44BB" /* ’I$}2Л sÿ~D¤šD» */
- $"EB45 3E31 A4A0 C0CC BBC0 B29E 7771 4FDE" /* ëE>1¤ ÀÌ»À²žwqOÞ */
- $"1679 23F1 DE12 5574 68E3 60A1 9C00 CBEC" /* .y#ñÞ.Uthã`¡œ.Ëì */
- $"9C44 9009 0000 08DE 28C3 2776 AAA2 829A" /* œDÆ...Þ(Ã'vª¢‚š */
- $"05E0 47E9 0001 48A9 672C 0775 EE58 F075" /* .àGé..H©g,.uîXðu */
- $"7458 B48A 5455 DB33 3524 BE73 1D7C E223" /* tX´ŠTUÛ35$¾s.|â# */
- $"4EC4 732C EC4B 128D 341C 790C 00A2 1309" /* NÄs,ìK.4.y..¢.Æ */
- $"2D0B 5EA7 B07B C82C 976B 68C2 642A F095" /* -.^§°{È,—khÂd*ð• */
- $"A1C4 010E C94E D8A9 34BB FD3E 2B2F 92EC" /* ¡Ä..ÉNØ©4»ý>+/’ì */
- $"30E1 A7B3 040B C920 3FFF 7FA1 317B 90F7" /* 0á§³..É ?ÿ.¡1{÷ */
- $"C744 40B8 8325 4036 82FB 0C6C D800 19C4" /* ÇD@¸ƒ%@6‚û.lØ..Ä */
- $"2631 C4B8 3160 8649 2492 4924 9248 A747" /* &1ĸ1`†I$’I$’H§G */
- $"3D41 A17D 23A6 9AC7 9000 0000 0000 0000" /* =A¡}#¦šÇ....... */
- $"0000 0019 1A70 8823 BB21 7C62 4556 F257" /* .....pˆ#»!|bEVòW */
- $"62C0 CF0B 72EE F37E 64EC 43C2 AE04 9F58" /* bÀÏ.rîó~dìC®.ŸX */
- $"94DC E128 91EC BAA2 DADD 57A7 D5F7 1972" /* ”Üá(‘캢ÚÝW§Õ÷.r */
- $"7543 9A9A 0DB3 C3FD 42E0 19A3 8F45 7FDF" /* uCšš.³ÃýBà.£E.ß */
- $"CEB1 A7E5 8A09 5B4A F9E6 294B C5DC 80C9" /* α§åŠÆ[Jùæ)KÅÜ€É */
- $"9AEE 0729 374F 04FD 79D6 7170 D940 14F0" /* šî.)7O.ýyÖqpÙ@.ð */
- $"830F 0B71 50E7 3C76 97AF 0F71 A32D DC5A" /* ƒ..qPç<v—¯.q£-ÜZ */
- $"28A9 FE90 6CC0 9484 30D1 FCCD 4991 0758" /* (©þlÀ”„0ÑüÍI‘.X */
- $"BE36 B1DE 3A2E B6F8 2756 C568 2A7F D038" /* ¾6±Þ:.¶ø'VÅh*.Ð8 */
- $"2397 6E8F 32E0 C1AC 3736 32A3 C18E 13C4" /* #—n2àÁ¬762£ÁŽ.Ä */
- $"D298 8703 F9AF E24B A630 0627 6E63 ED70" /* Ò˜‡.ù¯âK¦0.'ncíp */
- $"0662 A833 6515 7225 C79D 8C1F 7410 45BF" /* .b¨3e.r%ÇŒ.t.E¿ */
- $"5019 F088 7C6C 43FC AE88 B794 5847 505F" /* P.ðˆ|lCü®ˆ·”XGP_ */
- $"2B73 6E58 E20E 18A2 01B4 DF7F F5BD D4BC" /* +snXâ..¢.´ß.õ½Ô¼ */
- $"B259 706B 754E 9740 BBF2 54FC FCB8 B293" /* ²YpkuN—@»òTüü¸²“ */
- $"4CEA 3670 D04B 8C42 B7C2 314D 1F53 956B" /* Lê6pÐKŒB·Â1M.S•k */
- $"CB14 9D05 8288 E7F0 D4FF 70AE EFB7 A10B" /* Ë..‚ˆçðÔÿp®ï·¡. */
- $"EDDE 3CFE 1B9D 7DBA 7B7D BD13 DF6F 45B8" /* íÞ<þ.}º{}½.ßoE¸ */
- $"FE1A 077D B444 FAB6 46FB 75FC E8AB DECC" /* þ..}´Dú¶Fûuüè«ÞÌ */
- $"AF0D 6C8A C695 8734 8A7A 5A21 F65D 05F6" /* ¯.lŠÆ•‡4ŠzZ!ö].ö */
- $"A417 27AC 998E 3646 07A8 0055 19DC B524" /* ¤.'¬™Ž6F.¨.U.ܵ$ */
- $"D2F2 842C DF9F BECA C26B C9C9 D0FD CA3B" /* Òò„,ߟ¾ÊÂkÉÉÐýÊ; */
- $"DB1B 3F81 F6A7 4465 001E 5552 4D0D 3BF3" /* Û.?ö§De..URM.;ó */
- $"0140 A2E9 7D63 8456 F9C7 665D F7FC 2DBF" /* .@¢é}c„VùÇf]÷ü-¿ */
- $"1B41 0667 7939 1B16 4997 5584 3CFE 81B9" /* .A.gy9..I—U„<þ¹ */
- $"C4A8 B346 EC6D E726 2560 5CB8 8B84 7699" /* Ĩ³Fìmç&%`\¸‹„v™ */
- $"3999 2CA0 91D9 A05A C96C 660C 267B 74A0" /* 9™, ‘Ù ZÉlf.&{t  */
- $"B935 73EB D464 D860 2694 7584 A4D4 DC52" /* ¹5sëÔdØ`&”u„¤ÔÜR */
- $"D136 D49A 1BEA 53F5 AE2F C19E 44E9 BA0A" /* Ñ6Ôš.êSõ®/ÁžDéºÂ */
- $"5D83 6587 7792 3DCB 449A B33E 4632 A395" /* ]ƒe‡w’=ËDš³>F2£• */
- $"57A3 0EC0 B3A3 969D 9DF0 6ACC 859F FF7F" /* W£.À³£–ðjÌ…Ÿÿ. */
- $"FF27 DAA0 AF8E 216C E5D8 874A 530F 555E" /* ÿ'Ú ¯Ž!l娇JS.U^ */
- $"AF3F E231 5BAF F7B6 8E73 5742 2717 4031" /* ¯?â1[¯÷¶ŽsWB'.@1 */
- $"175D 5FDA F402 B756 AEAE 7E7E BFEE CE68" /* .]_Úô.·V®®~~¿îÎh */
- $"7878 870D 01C2 C2A4 61D5 64E3 E195 B914" /* xx‡..¤aÕdãᕹ. */
- $"A45F FF52 DC14 F5E9 E037 65E3 5477 62A5" /* ¤_ÿRÜ.õéà7eãTwb¥ */
- $"3EEC CA32 6558 5965 8B6E 3F13 9DB2 1361" /* >ìÊ2eXYe‹n?.².a */
- $"8426 9FD7 B329 4E75 FF1D 9B78 9735 4B1B" /* „&Ÿ×³)Nuÿ.›x—5K. */
- $"D80E 1781 192F 6777 8F94 F6A2 5016 726D" /* Ø.../gw”ö¢P.rm */
- $"1E0D D2CB 6F87 B3C6 09A2 1FE3 915E 8943" /* ..ÒËo‡³ÆÆ¢.ã‘^‰C */
- $"FE6C 6743 4733 D5BC A9DD 5338 C9E1 AF50" /* þlgCG3Õ¼©ÝS8Éá¯P */
- $"3634 C26C 0C1F 94E7 50B2 4310 DD62 4F09" /* 64Âl..”çP²C.ÝbOÆ */
- $"ABCD 7821 8B7B 7B87 2EEA 25A1 9D3C 55CC" /* «Íx!‹{{‡.ê%¡<UÌ */
- $"0644 1B14 3456 2E32 C013 815C 66C7 0526" /* .D..4V.2À.\fÇ.& */
- $"E24D CE15 B8FB 5D8B 0506 E30A 1D6A E2ED" /* âMÎ.¸û]‹..ãÂ.jâí */
- $"6145 D124 0EC9 1FAB 4E50 06C2 9DA5 8F6C" /* aEÑ$.É.«NP.Â¥l */
- $"C072 D11E BFEE DFE6 F6C7 12F4 E89C 35B7" /* ÀrÑ.¿îßæöÇ.ôèœ5· */
- $"097E 2E25 393F CEA3 03C6 D3C7 DED5 3882" /* Æ~.%9?Σ.ÆÓÇÞÕ8‚ */
- $"ED26 A3FD 9130 95B5 F3FA D31A 691F 8E09" /* í&£ý‘0•µóúÓ.i.ŽÆ */
- $"BFA8 7D7B 85BD B179 5C20 2855 1268 F9AF" /* ¿¨}{…½±y\ (U.hù¯ */
- $"553D 939E 6FC6 C67E 4611 F88C BBD4 773C" /* U=“žoÆÆ~F.øŒ»Ôw< */
- $"5F16 D598 D5C5 E649 B66E FD8D A2D7 9807" /* _.Õ˜ÕÅæI¶ný¢×˜. */
- $"EDA2 4621 2CF5 DDE3 C078 6455 1C29 3A07" /* í¢F!,õÝãÀxdU.):. */
- $"E992 C5DE 8D33 041B 83C6 56F6 7C95 168E" /* é’ÅÞ3..ƒÆVö|•.Ž */
- $"6127 40D2 DE11 CFF2 3379 DC22 20E3 5E1B" /* a'@ÒÞ.Ïò3yÜ" ã^. */
- $"DE83 DBB5 5B8A 8572 3DF2 2890 DC56 BE6E" /* ÞƒÛµ[Š…r=ò(ÜV¾n */
- $"D15F 9396 ECD4 725F 2E18 7616 394A 64C3" /* Ñ_“–ìÔr_..v.9Jdà */
- $"FDAA E6F2 3D6D 46BC B270 5B8F ACB4 9CAE" /* ýªæò=mF¼²p[¬´œ® */
- $"0D0D 3F29 6A02 1E92 347A E406 A52D 111A" /* ..?)j..’4zä.¥-.. */
- $"2E79 0340 1D82 C861 0C40 1963 3397 A4FD" /* .y.@.‚Èa.@.c3—¤ý */
- $"A998 0B63 E30A 7AA3 A5BC 8A8E 9CD0 4795" /* ©˜.cãÂz£¥¼ŠŽœÐG• */
- $"7538 7FB2 EC9A 952C CE29 C80F 369C 4E8D" /* u8.²ìš•,Î)È.6œN */
- $"8000 1C55 D5F3 E2AD 812E 4FAA AC2C D9BB" /* €..UÕóâ­.Oª¬,Ù» */
- $"F4CD 5568 5643 826F 3A38 91BD 6F70 92D3" /* ôÍUhVC‚o:8‘½op’Ó */
- $"23EC DB91 0FC4 C3BB 7542 023B 85F0 36C3" /* #ìÛ‘.ÄûuB.;…ð6à */
- $"8BF6 F6F8 4E77 EEE5 851F 219A CF99 7D9E" /* ‹ööøNwîå….!šÏ™}ž */
- $"856D A687 BC63 8E39 0407 B007 D184 10BD" /* …m¦‡¼cŽ9..°.Ñ„.½ */
- $"D9EF ACB1 B75A 46FA F95E 42DF 377B E2F7" /* Ùבּ·ZFúù^Bß7{â÷ */
- $"BEF2 357A 861C F486 B3F7 57E1 D39B 095B" /* ¾ò5z†.ô†³÷WáÓ›Æ[ */
- $"40C0 925C 0CA1 7885 CFEA 48B7 33E9 E8DE" /* @À’\.¡x…ÏêH·3éèÞ */
- $"D178 1E15 91D1 F6C5 BC87 CB7E CCC6 DEDE" /* Ñx..‘Ñöż‡Ë~ÌÆÞÞ */
- $"B017 A4C1 0B0F DD17 660E CB97 C098 C773" /* °.¤Á..Ý.f.Ë—À˜Çs */
- $"8A0A F4DB 59BD A218 055E 5348 05D8 B304" /* ŠÂôÛY½¢..^SH.س. */
- $"9F23 E1B1 0754 6DA2 FF33 34CB 2B12 7114" /* Ÿ#á±.Tm¢ÿ34Ë+.q. */
- $"62D2 4CA8 8091 CD34 8467 2752 B77A AA5B" /* bÒL¨€‘Í4„g'R·zª[ */
- $"15FC 2E56 7A29 9351 B6A4 AEE5 B56D 354D" /* .ü.Vz)“Q¶¤®åµm5M */
- $"3ED2 FA71 25E9 F887 B187 BADB B11B 2E01" /* >Òúq%éø‡±‡ºÛ±... */
- $"93B3 4206 45ED 7238 3F80 1441 50CA CCBA" /* “³B.Eír8?€.APÊ̺ */
- $"EF59 3BC5 4236 2ABF 9150 7335 49C5 0216" /* ïY;ÅB6*¿‘Ps5IÅ.. */
- $"F97B D5A5 1EF5 A69D 8B34 C25B 73E1 DA52" /* ù{Õ¥.õ¦‹4Â[sáÚR */
- $"79E5 9EB1 9CB1 0952 B3F5 E221 D426 4759" /* yåž±œ±ÆR³õâ!Ô&GY */
- $"D5CF 2D18 CC2A 270A 859D F10C 8108 52FF" /* ÕÏ-.Ì*'Â…ñ..Rÿ */
- $"2A7D D39E EFFD 568C 2DB3 7BD5 62D0 2403" /* *}ÓžïýVŒ-³{ÕbÐ$. */
- $"69D1 A4B6 2D24 E485 973D F6A5 E6DC 1DB5" /* iѤ¶-$ä…—=ö¥æÜ.µ */
- $"BF0B E185 5592 E3A0 6046 E050 5151 9546" /* ¿.á…U’ã `FàPQQ•F */
- $"17F7 0CF6 222F 17E0 40E5 3EF5 74EE BAB6" /* .÷.ö"/.à@å>õt */
- $"55BD 76C1 DD80 39C8 BAE0 37B8 398A B370" /* U½vÁÝ€9Ⱥà7¸9гp */
- $"D400 0C29 5DC9 94FF 069B 36E2 CD79 195F" /* Ô..)]É”ÿ.›6âÍy._ */
- $"5B9B 1237 1F18 C560 C901 F9A4 184B 7570" /* [›.7..Å`É.ù¤.Kup */
- $"433E 75BE 0297 C641 7D9B 7092 8D64 96F5" /* C>u¾.—ÆA}›p’d–õ */
- $"D70C 9B66 71D3 09B1 F635 0FC3 0B49 7D6E" /* ×.›fqÓÆ±ö5.Ã.I}n */
- $"660C 8E1D 0257 672B 97EE C2A5 7B84 729E" /* f.Ž..Wg+—îÂ¥{„rž */
- $"6516 585E 354F 2E22 88A7 A515 B945 3745" /* e.X^5O."ˆ§¥.¹E7E */
- $"F6A5 5CB2 E212 10AD AB6F 07F5 FDA3 09EB" /* ö¥\²â..­«o.õý£Æë */
- $"A053 313B 9A8E 757D E132 D483 DC78 0882" /*  S1;šŽu}á2ÔƒÜx.‚ */
- $"A63C 95E0 036C 4626 F66B 5F6C 39A1 9401" /* ¦<•à.lF&ök_l9¡”. */
- $"7276 4DCE 4487 7D8C 12A3 B713 9139 AC0A" /* rvMÎD‡}Œ.£·.‘9¬Â */
- $"18AD 4DFD 2A3D 69E7 E76E 593C 8DAB FD56" /* .­Mý*=iççnY<«ýV */
- $"F959 BA6B FBA3 2853 D610 4DB0 7A30 3A09" /* ùYºkû£(SÖ.M°z0:Æ */
- $"916B DFF7 B3B4 F8D3 9619 0FD9 8FBC FC6B" /* ‘kß÷³´øÓ–..Ù¼ük */
- $"D73D ABD2 4C41 6AD0 6584 AF19 3074 AF6E" /* ×=«ÒLAjÐe„¯.0t¯n */
- $"369C BEB1 76D5 D311 6172 F157 D522 DDED" /* 6œ¾±vÕÓ.arñWÕ"Ýí */
- $"D4ED 0230 0BB5 E881 0E6B 9C4F 111F 4F6E" /* Ôí.0.µè.kœO..On */
- $"7CAD 4745 7BBF DA70 A9C4 051E FDEA 206C" /* |­GE{¿Úp©Ä..ýê l */
- $"9983 0E2D 4A4A A4DE 82E9 DAAF 5748 37AE" /* ™ƒ.-JJ¤Þ‚éÚ¯WH7® */
- $"4046 DCCB 0D1A 80DA 1804 20E2 F7CF AD69" /* @FÜË..€Ú.. â÷Ï­i */
- $"F9D8 5106 D02D 16E9 4437 9560 B618 1126" /* ùØQ.Ð-.éD7•`¶..& */
- $"95A2 4B23 89C4 78EE 898E D80C 8E49 5201" /* •¢K#‰ÄxØ.ŽIR. */
- $"2095 ABAF 9CA5 0F8E CB22 00D4 4289 59B3" /* •«¯œ¥.ŽË".ÔB‰Y³ */
- $"1835 1395 8AE5 3A88 7185 E7DD 57F3 4CE4" /* .5.•Šå:ˆq…çÝWóLä */
- $"1465 C878 6B72 7146 2AF1 F053 5B31 7697" /* .eÈxkrqF*ñðS[1v— */
- $"7300 A777 3919 099E BD1C 79C3 24C4 A355" /* s.§w9.Æž½.yÃ$Ä£U */
- $"0C88 C727 1831 D498 E513 47A5 F25F DDBE" /* .ˆÇ'.1Ô˜å.G¥ò_ݾ */
- $"46E7 40B5 EBCC 080F 6915 3FDF EDB9 A9B1" /* Fç@µëÌ..i.?ßí¹©± */
- $"39ED D794 60E1 A5A2 0EEC 7A09 46BF 201E" /* 9í×”`ᥢ.ìzÆF¿ . */
- $"311F EEEE 88EF C6C1 C10D E238 50C9 7F01" /* 1.îîˆïÆÁÁ.â8PÉ.. */
- $"DFF1 17BA D8F4 0017 47E7 75F2 4D82 679E" /* ßñ.ºØô..GçuòM‚gž */
- $"6867 60A4 6222 77B9 319B 186D FCB3 168A" /* hg`¤b"w¹1›.mü³.Š */
- $"EAF3 C227 1082 D7ED 2C70 E619 8676 0186" /* êóÂ'.‚×í,pæ.†v.† */
- $"8C23 5DE5 D4A0 61CB CDE4 AED5 E008 6F3C" /* Œ#]åÔ aËÍä®Õà.o< */
- $"D894 AC14 6FEC 5D4C C2FF 3A6C 512F E475" /* Ø”¬.oì]LÂÿ:lQ/äu */
- $"FCB8 DFA4 EB46 2DF4 E133 5858 364B 54E1" /* ü¸ß¤ëF-ôá3XX6KTá */
- $"A6E1 5D0C 157E D987 DF95 B1FB 3723 4F2F" /* ¦á]..~هߕ±û7#O/ */
- $"C9BF C6D4 D979 412E D0EB B285 8DFF 7CAC" /* É¿ÆÔÙyA.Ðë²…ÿ|¬ */
- $"F1BF 1825 8B89 9992 3848 C666 4184 4906" /* ñ¿.%‹‰™’8HÆfA„I. */
- $"0D61 6B58 9355 A5D9 C940 B6F2 6918 82E1" /* .akX“U¥ÙÉ@¶òi.‚á */
- $"FF7D 4F5F FE94 5208 650B B780 0D2B DD4F" /* ÿ}O_þ”R.e.·€.+ÝO */
- $"5874 3627 2353 6328 06B9 908C 6C95 D898" /* Xt6'#Sc(.¹Œl•ؘ */
- $"8C24 1D0F 641B 7763 CFBE E88A BB05 8639" /* Œ$..d.wcϾ芻.†9 */
- $"D91C 4A38 3A3F 75C6 61BD BFED CA10 2A73" /* Ù.J8:?uÆa½¿íÊ.*s */
- $"E3C5 E85C BF5B 0346 2105 4286 300D D812" /* ãÅè\¿[.F!.B†0.Ø. */
- $"8BE4 DAE4 292B A765 338E 7E42 50F1 8046" /* ‹äÚä)+§e3Ž~BPñ€F */
- $"3FDC 1A85 4616 61E5 7321 18D9 5AB9 8903" /* ?Ü.…F.aås!.ÙZ¹‰. */
- $"90BD 6F89 E7D0 35D1 0AA3 BBAE 3CF8 A7B7" /* ½o‰çÐ5Ñ£»®<ø§· */
- $"73C8 8B94 B409 16EC 60A6 E819 BCA7 BA66" /* sÈ‹”´Æ.ì`¦è.¼§ºf */
- $"2245 524C 718C 635D E4F7 ACA0 02C3 E0A7" /* "ERLqŒc]ä÷¬ .Ãà§ */
- $"B542 0FF5 7029 FF4D 1D88 E3B3 D657 802B" /* µB.õp)ÿM.ˆã³ÖW€+ */
- $"8068 9BD4 B17F 9A6B CC1C 4B53 246F 81E5" /* €h›Ô±.škÌ.KS$oå */
- $"9168 48EC 4B44 3FFF 7B8B 5777 5677 134E" /* ‘hHìKD?ÿ{‹WwVw.N */
- $"1B8E 8C91 429F CE85 86EF 62B4 71AF EAE7" /* .ŽŒ‘BŸÎ…†ïb´q¯êç */
- $"E333 7BD3 2825 7230 C950 0000 1B8D 8BA6" /* ã3{Ó(%r0ÉP...‹¦ */
- $"04C1 56DC 30F0 619E DD6C D196 C91E 1ED4" /* .ÁVÜ0ðažÝlÑ–É..Ô */
- $"1285 94A8 F775 05A9 3440 78FF 7E52 8833" /* .…”¨÷u.©4@xÿ~Rˆ3 */
- $"E8A1 A4E4 4580 38DD ADE1 3BD5 AD19 74E6" /* 衤äE€8Ý­á;Õ­.tæ */
- $"EEA1 B4B1 0B0B 9BE9 08EC DB78 E6AA 37E5" /* î¡´±..›é.ìÛxæª7å */
- $"AD06 72A6 51FC 0004 4737 BF1A 89FF 7E11" /* ­.r¦Qü..G7¿.‰ÿ~. */
- $"0A68 EAD7 BDA5 4D5B 2C8D 0C7A 952E 2190" /* Âhê×½¥M[,.z•.! */
- $"8451 1B38 CEFD 2835 5ADD BDA2 01C2 A3D6" /* „Q.8Îý(5Zݽ¢.壅 */
- $"6046 4BD8 41DF D8B6 D9B1 1F96 5FF8 CC56" /* `FKØAߨ¶Ù±.–_øÌV */
- $"A63B 6E14 5035 26D6 946D 1F59 4D17 5507" /* ¦;n.P5&Ö”m.YM.U. */
- $"85F7 2DAF A737 4E30 9097 2E2E DAF8 37D1" /* …÷-¯§7N0—..Úø7Ñ */
- $"D987 4E59 ABFD CDF3 AAC3 30D1 8616 FAB3" /* Ù‡NY«ýÍóªÃ0ц.ú³ */
- $"2914 92AA 6913 C36F 66DA 4B0B 18FE DD55" /* ).’ªi.ÃofÚK..þÝU */
- $"1D2A 3F00 D80C 2423 D923 95C6 E11D 0069" /* .*?.Ø.$#Ù#•Æá..i */
- $"B5C9 0803 0907 B950 13DF 48EC F794 3D36" /* µÉ..Æ.¹P.ßHì÷”=6 */
- $"5249 2492 4924 9249 2489 9EF6 DC36 9A6B" /* RI$’I$’I$‰žöÜ6šk */
- $"1751 415E A37F 47EC A4EA 67AC A222 733C" /* .QA^£.Gì¤êg¬¢"s< */
- $"467D 1FFE C727 E6AA 6E99 C584 A87E DFFF" /* F}.þÇ'æªn™Å„¨~ßÿ */
- $"7FC3 7592 8204 71A2 6088 C38B 6E65 868E" /* .Ãu’‚.q¢`ˆÃ‹ne†Ž */
- $"5A3F FF7F F919 4069 CF10 A302 5125 525C" /* Z?ÿ.ù.@iÏ.£.Q%R\ */
- $"A443 88AF 4104 7807 1410 84BA E955 76E8" /* ¤Cˆ¯A.x...„ºéUvè */
- $"5F35 B612 A668 5694 9249 2492 4924 9249" /* _5¶.¦hV”’I$’I$’I */
- $"2492 4924 4C25 1941 A4EB 1996 7A28 19C1" /* $’I$L%.A¤ë.–z(.Á */
- $"A1B0 01D7 ACB2 3F83 42DC D154 27C9 F11F" /* ¡°.׬²?ƒBÜÑT'Éñ. */
- $"FC46 90B1 89C4 F78A 4C6F 5C2A 833D 8425" /* üF±‰Ä÷ŠLo\*ƒ=„% */
- $"D837 CA14 E4C7 7F8A 9833 99B7 E589 1376" /* Ø7Ê.äÇ.Š˜3™·å‰.v */
- $"C867 FF1D 200A 4C9B 624E 68E3 11AE C8AF" /* Ègÿ. ÂL›bNhã.®È¯ */
- $"1723 C741 CEAC 16CE C548 72FF 15CD 3E67" /* .#ÇAά.ÎÅHrÿ.Í>g */
- $"AF2C 323F 0FD0 6752 4973 55BD CC10 05B4" /* ¯,2?.ÐgRIsU½Ì..´ */
- $"AB3F 9302 00C3 EE70 1BA4 B650 FAB2 5821" /* «?“..Ãîp.¤¶Pú²X! */
- $"3856 3872 1B02 7D70 F1F9 0B28 A9DC CAE7" /* 8V8r..}pñù.(©ÜÊç */
- $"D9E7 6252 A768 A7DE 0FB1 FCB1 F54B 98C4" /* ÙçbR§h§Þ.±ü±õK˜Ä */
- $"7B6E 5E24 BC53 F945 741F 66A0 A51E EE5A" /* {n^$¼SùEt.f ¥.îZ */
- $"2A0D B951 4EEE A88B 4F2F C326 F326 1D12" /* *.¹QNO/Ã&ó&.. */
- $"524A 9E48 CC53 44EF C54F 1737 8505 46CF" /* RJžHÌSDïÅO.7….FÏ */
- $"351E 4354 05C7 C832 2A7D 8899 D009 E617" /* 5.CT.ÇÈ2*}ˆ™ÐÆæ. */
- $"0334 305D 9497 D845 E6D3 2CD2 178F 1316" /* .40]”—ØEæÓ,Ò... */
- $"65AD 239E 2ED5 ECCB 402A E728 09B5 E847" /* e­#ž.ÕìË@*ç(ƵèG */
- $"65BD 3F31 CAC5 F9D8 6606 B8AF 4F84 89FE" /* e½?1ÊÅùØf.¸¯O„‰þ */
- $"9004 4730 30BC E58F 5FB3 38CF 36B9 38FC" /* .G00¼å_³8Ï6¹8ü */
- $"FB9D 07EA D13F 9DB9 7185 0E88 0E3B 06E5" /* û.êÑ?¹q….ˆ.;.å */
- $"D476 CFCA 1587 3067 9257 B5DF 1E83 E7FF" /* ÔvÏÊ.‡0g’Wµß.ƒçÿ */
- $"7FFF 7FFF 0E68 E181 AC15 B980 2AFB 1D80" /* .ÿ.ÿ.há¬.¹€*û.€ */
- $"C5BB A88D E36A 4DC5 94CF 6DB2 0694 F977" /* Å»¨ãjMÅ”Ïm².”ùw */
- $"D708 02D1 F380 6773 016A CA84 3B1C 6A33" /* ×..Ñó€gs.jÊ„;.j3 */
- $"5AAC BA2D FEC5 7542 51FC 68D0 CDDD EA44" /* Z¬º-þÅuBQühÐÍÝêD */
- $"788E 2F96 D80C F159 FF45 3316 1494 A7F5" /* xŽ/–Ø.ñYÿE3..”§õ */
- $"98B4 FC39 0062 D59B 52A6 32CB F97C ABD6" /* ˜´ü9.bÕ›R¦2Ëù|«Ö */
- $"42AE AE46 6AA7 D986 0A4E DCDD 717E 8B7C" /* B®®Fj§Ù†ÂNÜÝq~‹| */
- $"8FB8 B396 65A6 83FF 6A4A A5C1 597F 70AF" /* ¸³–e¦ƒÿjJ¥ÁY.p¯ */
- $"DC96 E2EC 0C1D 7A00 3428 2C60 DE32 8DB8" /* Ü–âì..z.4(,`Þ2¸ */
- $"1604 C249 5E82 1F5B 6C23 E562 B2D4 754E" /* ..ÂI^‚.[l#åb²ÔuN */
- $"7F73 442A 25D3 C42A 6A6D 5D09 0E8C 2E67" /* .sD*%ÓÄ*jm]Æ.Œ.g */
- $"95EC 08FE B505 8B5A A4A8 0000 0000 0000" /* •ì.þµ.‹Z¤¨...... */
- $"0000 0000 6121 26B3 27C3 AEC0 FF52 2FEE" /* ....a!&³'îÀÿR/î */
- $"D4F3 92BB 06E2 ABE4 35DC A278 9084 B2F0" /* Ôó’».â«ä5Ü¢x„²ð */
- $"EE1A ADB2 F770 3D4E 120A FD01 B042 CD00" /* î.­²÷p=N.Âý.°BÍ. */
- $"B9C2 B661 40B0 E5FC DC59 59F0 61C5 53A7" /* ¹Â¶a@°åüÜYYðaÅS§ */
- $"7AC1 7EDC 77B7 1C84 0F9A E321 389C E693" /* zÁ~Üw·.„.šã!8œæ“ */
- $"AC98 5160 DDD0 C9A9 BE17 ED52 A10A 300C" /* ¬˜Q`ÝÐÉ©¾.íR¡Â0. */
- $"88ED BB5A 80DA C23B 1196 0C7C 6BA8 D4EA" /* ˆí»Z€ÚÂ;.–.|k¨Ôê */
- $"4FAB 08A9 EBE3 1CC9 6782 F6A9 85A4 1829" /* O«.©ëã.Ég‚ö©…¤.) */
- $"48BB D188 41E8 65BA 28BB 8AC1 8368 DC2F" /* H»ÑˆAèeº(»ŠÁƒhÜ/ */
- $"B2DE 61FE 95C0 BD88 C027 9CD9 3819 8A81" /* ²Þaþ•À½ˆÀ'œÙ8.Š */
- $"20FF 616C DEAE C6EA 15A3 D12F 764A B4E2" /* ÿalÞ®Æê.£Ñ/vJ´â */
- $"ECA3 AF32 36FF 29B0 E3CD 5046 527E 39B7" /* 죯26ÿ)°ãÍPFR~9· */
- $"921A ABF8 F0CB 7040 5FCD A182 4C57 986D" /* ’.«øðËp@_Í¡‚LW˜m */
- $"1115 DD94 687C 3663 7CFB 6C40 642D C8CA" /* ..Ý”h|6c|ûl@d-ÈÊ */
- $"1117 B5A9 8025 123D 9406 58F9 96B5 321E" /* ..µ©€%.=”.Xù–µ2. */
- $"7646 4BFD 48DE 0B9B DBEF B79F B6C7 031E" /* vFKýHÞ.›Ûï·Ÿ¶Ç.. */
- $"1D3B 1D18 B35D 2813 5601 3924 6AE1 FC21" /* .;..³](.V.9$jáü! */
- $"60B9 0B9F 6B4B AFB9 15D8 C57A 5345 7461" /* `¹.ŸkK¯¹.ØÅzSEta */
- $"0EF9 4B6B 88D1 7833 02DF 4FB8 DBEC 836A" /* .ùKkˆÑx3.ßO¸Ûìƒj */
- $"BEA7 3972 93C0 F973 37B5 C84F 1655 031C" /* ¾§9r“Àùs7µÈO.U.. */
- $"674D 741E 308E E3BA 6684 5BB0 4506 AB40" /* gMt.0Žãºf„[°E.«@ */
- $"14DE BFF2 9B38 4026 C5C2 3A44 FDFF 25CB" /* .Þ¿ò›8@&ÅÂ:Dýÿ%Ë */
- $"072E 1D99 62E3 22B8 DE8D 9CF1 79FA 1D38" /* ...™bã"¸Þœñyú.8 */
- $"8900 17CB A72B 8124 7EAF CF2F FC8D 34D6" /* ‰..˧+$~¯Ï/ü4Ö */
- $"E0AC 58ED 8BC1 0DAA 7964 FB91 BF08 EFA6" /* à¬Xí‹Á.ªydû‘¿.ï¦ */
- $"42FF 7FFF 7FE3 AF13 7C4B 1CF4 D643 3CD3" /* Bÿ.ÿ.ã¯.|K.ôÖC<Ó */
- $"5F1A 08BB 7C56 5CFB 6D27 04DE C66A 9AF1" /* _..»|V\ûm'.ÞÆjšñ */
- $"2053 D4B2 EE60 44FF 2A89 1FFC DFCC 57C1" /* SÔ²î`Dÿ*‰.üßÌWÁ */
- $"3800 1290 7854 7902 FF7A 9A36 D71E F8D1" /* 8..xTy.ÿzš6×.øÑ */
- $"D439 471B D02F 4A39 E5BC D25F FDF0 8B54" /* Ô9G.Ð/J9å¼Ò_ýð‹T */
- $"AE0A 3677 2625 B286 7DEC 8FF7 2457 2B25" /* ®Â6w&%²†}ì÷$W+% */
- $"C066 2A4E A605 EE16 7244 CCFD D3D3 FDA1" /* Àf*N¦.î.rDÌýÓÓý¡ */
- $"F3B8 76C3 1C5F 491C 0165 8735 D71D 19AD" /* ó¸vÃ._I..e‡5×..­ */
- $"9BB1 A40D E5BA 9D1C E34B B71C 9CF0 EC7A" /* ›±¤.åº.ãK·.œðìz */
- $"5E87 C4F0 A326 0913 9E2C 6517 50A3 E72B" /* ^‡Äð£&Æ.ž,e.P£ç+ */
- $"87FE D348 2E5D 0A00 0000 0000 0000 0000" /* ‡þÓH.]Â......... */
- $"0002 2C86 A73D 4030 2FE4 D32C 2B56 C74C" /* ..,†§=@0/äÓ,+VÇL */
- $"0869 A5C9 151A 69B9 9390 DA50 4411 8FFF" /* .i¥É..i¹“ÚPD.ÿ */
- $"4938 4E36 F9DD 09FB E4A0 C339 2431 ED8B" /* I8N6ùÝÆûä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FF4F E2A2 F01A C90F 02E3 51CD B477" /* #fÿOâ¢ð.É..ãQÍ´w */
- $"2230 690A B47C E28B 463C 2E88 7579 7943" /* "0i´|â‹F<.ˆuyyC */
- $"5055 6D0A EEC5 F3BF 2404 37D8 EFE1 71AC" /* PUmÂîÅó¿$.7Øïáq¬ */
- $"6AFE A3E4 A7EB 28BF BFFE 4373 E5FF 7E4A" /* jþ£ä§ë(¿¿þCsåÿ~J */
- $"2D5D 1ED3 6D78 1657 9914 A061 7958 972C" /* -].Ómx.W™. ayX—, */
- $"56FB D5B0 1FFD A18B 7A29 0C81 295B DF7C" /* VûÕ°.ý¡‹z).)[ß| */
- $"83E3 CD36 0E66 7E2B D8FA 3096 AA44 7F9B" /* ƒãÍ6.f~+Øú0–ªD.› */
- $"F0B9 EA48 8CC7 0FFF 7E1C F394 CC5B 6A25" /* ð¹êHŒÇ.ÿ~.ó”Ì[j% */
- $"FD4C CECC 630B 38B7 D621 F081 73EE 9D40" /* ýLÎÌc.8·Ö!ðsî@ */
- $"7FAD FADD 8111 6492 599E DD2C 3600 FF6C" /* .­úÝ.d’YžÝ,6.ÿl */
- $"5A8D B0B8 2AE7 668D C5A0 826B FA0D C5B1" /* Z°¸*çfÅ ‚kú.ű */
- $"6873 D749 B533 9627 C2F6 4922 63F7 8944" /* hs×Iµ3–'ÂöI"c÷‰D */
- $"15C5 A1F9 8539 A21A 1CEB 1C2D 7D1B 0516" /* .Å¡ù…9¢..ë.-}... */
- $"FD6C 5D4F 92A3 14D9 126F C5FC 4116 B499" /* ýl]O’£.Ù.oÅüA.´™ */
- $"D878 D889 9123 D3C8 4637 36E3 8644 6F0B" /* Øx؉‘#ÓÈF76ã†Do. */
- $"D2C6 A599 B793 1367 B548 23BD 8836 11E5" /* ÒÆ¥™·“.gµH#½ˆ6.å */
- $"C323 7AD5 0534 3D05 A4E6 70B3 0376 2B0C" /* Ã#zÕ.4=.¤æp³.v+. */
- $"A964 173B F0BC 2A52 7FE4 2A53 85C2 22B2" /* ©d.;ð¼*R.ä*S…Â"² */
- $"B83F 7185 FB4C 3769 5B3E 4A24 E7E1 D0FD" /* ¸?q…ûL7i[>J$çáÐý */
- $"9B17 8737 FE8B E4C7 9FC1 0E30 D904 D0C5" /* ›.‡7þ‹äÇŸÁ.0Ù.ÐÅ */
- $"D2F5 05E4 3CD6 5FA7 B9AF FB98 755E 0BAF" /* Òõ.ä<Ö_§¹¯û˜u^.¯ */
- $"E4EE 408D A8BE 5E58 07A6 059D 1B33 37F3" /* äî@¨¾^X.¦..37ó */
- $"8D14 871A 7FC6 43ED 6A6F 8F41 9681 095E" /* .‡..ÆCíjoA–Æ^ */
- $"EE46 5BA4 1E15 F5F2 3063 E524 A62A 7C7F" /* îF[¤..õò0cå$¦*|. */
- $"0E38 5D00 A378 8F6D 3861 2088 EDD7 AC24" /* .8].£xm8a ˆí׬$ */
- $"D3B6 B052 DE10 357D B65A 1414 4596 8E3D" /* Ó¶°RÞ.5}¶Z..E–Ž= */
- $"97E3 D838 9ACC 3C84 AF82 EA8D 8BD3 0180" /* —ãØ8šÌ<„¯‚ê‹Ó.€ */
- $"1582 0654 BB61 1047 ACA1 29D3 7CFA 00C8" /* .‚.T»a.G¬¡)Ó|ú.È */
- $"BABC 146B 250C 8D19 8A4E A8B3 50D6 B986" /* º¼.k%..ŠN¨³PÖ¹† */
- $"2AD6 CEFA 02D6 AE11 FF7C B0A2 E6E0 30E9" /* *ÖÎú.Ö®.ÿ|°¢æà0é */
- $"D904 4C03 3BC1 8B68 5892 30B8 7D69 C2D6" /* Ù.L.;Á‹hX’0¸}iÂÖ */
- $"A9F8 56A2 7417 1E31 186F 09A1 4C11 6DCA" /* ©øV¢t..1.oÆ¡L.mÊ */
- $"A62E 5FCC F59A CCE8 6A29 B0DF E2BC E8BF" /* ¦._ÌõšÌèj)°ßâ¼è¿ */
- $"92DF 70C1 8B09 21DF 1440 1684 4413 2A60" /* ’ßpÁ‹Æ!ß.@.„D.*` */
- $"E033 6D92 8573 E63C 2746 6F40 D8F0 D0C9" /* à3m’…sæ<'Fo@ØðÐÉ */
- $"10AF 85A2 CFBF 373B B250 85E4 C1D3 85D2" /* .¯…¢Ï¿7;²P…äÁÓ…Ò */
- $"E167 1222 DF4A 67D9 B3D6 55B4 B047 8675" /* ág."ßJgÙ³ÖU´°G†u */
- $"C803 6AE5 E5AE AF92 C4B7 591A A040 98AC" /* È.jå宯’Ä·Y. @˜¬ */
- $"4412 45F8 BBC8 6482 F7BD 81B2 98FE 9D0B" /* D.Eø»Èd‚÷½²˜þ. */
- $"DAB1 2959 952C 9115 3504 9A24 BBA4 A04C" /* Ú±)Y•,‘.5.š$»¤ L */
- $"4125 5810 54F5 C268 63C2 1DB9 11CF 85BB" /* A%X.TõÂhcÂ.¹.Ï…» */
- $"D941 F5A1 0239 DED3 856D BBE5 7CF3 49C3" /* ÙAõ¡.9ÞÓ…m»å|óIà */
- $"C9CF 1BD1 A953 F58A F9AF E704 E70E 43B7" /* ÉÏ.Ñ©SõŠù¯ç.ç.C· */
- $"2B51 BE14 4FF3 262C 914B 90AF F2A9 E060" /* +Q¾.Oó&,‘K¯ò©à` */
- $"6A24 6553 B776 C48D 19AD ECD3 2DD3 8ECF" /* j$eS·vÄ.­ìÓ-ÓŽÏ */
- $"9EC7 8A0D 97F4 3C69 6E56 0881 1136 C147" /* žÇŠ.—ô<inV..6ÁG */
- $"E7D3 6FE5 A0C6 D7DC BCB0 76AC C4F8 DD65" /* çÓoå Æ×ܼ°v¬ÄøÝe */
- $"A5F9 02BF 2BFD 9A2C 354D 24C2 E088 6B63" /* ¥ù.¿+ýš,5M$Âàˆkc */
- $"E514 C014 E8F4 F5C2 B529 74FB EC02 032B" /* å.À.èôõµ)tûì..+ */
- $"A54B 696E B602 7D58 4542 824D BD8C 40FA" /* ¥Kin¶.}XEB‚M½Œ@ú */
- $"F675 5CD4 71C9 058E 7062 0E1B 10CC 72A9" /* öu\ÔqÉ.Žpb...Ìr© */
- $"95B8 C5FD 7EAF 995C 62ED DDE4 6579 3181" /* •¸Åý~¯™\bíÝäey1 */
- $"8BA1 A02B 1559 F5BC E9C9 914D 8CEB D7D8" /* ‹¡ +.Yõ¼éÉ‘MŒëר */
- $"7D81 20C0 A609 18D2 B679 7C08 FB00 E4C6" /* } À¦Æ.Ò¶y|.û.äÆ */
- $"2797 518E 32CE 67CE 3C8E 6796 A832 F712" /* '—QŽ2ÎgÎ<Žg–¨2÷. */
- $"0037 059C 96CD 85A0 98E6 5D20 05F2 EC61" /* .7.œ–Í… ˜æ] .òìa */
- $"335D AFFF 14BC 3EF9 0779 7A53 BAA4 F47A" /* 3]¯ÿ.¼>ù.yzSº¤ôz */
- $"6926 DAD2 72F9 5D4B 1014 8BD5 A4FA 68EA" /* i&ÚÒrù]K..‹Õ¤úhê */
- $"D9F9 F684 BFD5 F2ED FB9E 4C18 91C3 FF17" /* Ùùö„¿ÕòíûžL.‘Ãÿ. */
- $"2D17 D99A DE29 FE6E 63A4 C901 8642 9357" /* -.ÙšÞ)þnc¤É.†B“W */
- $"3120 4386 1938 E7D2 572D 0C59 E3C9 7FED" /* 1 C†.8çÒW-.YãÉ.í */
- $"30FA E54A CEF8 A94C F92D AF19 76EA 3372" /* 0úåJÎø©Lù-¯.vê3r */
- $"B4E1 E7C5 8239 A4AC A247 4838 55E8 EB9B" /* ´áçÅ‚9¤¬¢GH8Uèë› */
- $"DE7D 94E9 DBD7 07FB D488 1672 E61D 9E4C" /* Þ}”éÛ×.ûÔˆ.ræ.žL */
- $"6DF2 97D5 4936 F89A 5CBC D37A 8C2C F7ED" /* mò—ÕI6øš\¼ÓzŒ,÷í */
- $"9755 19F2 0350 AB2E D851 F0B7 78B5 9770" /* —U.ò.P«.ØQð·xµ—p */
- $"4DF3 4212 9C9C CA3B 403A BA7B D497 9410" /* MóB.œœÊ;@:º{Ô—”. */
- $"04C6 288B 5058 5DC9 EB79 AB85 622C 9A55" /* .Æ(‹PX]Éëy«…b,šU */
- $"2DA7 C113 9315 7CAE D84E 6B50 4062 AE94" /* -§Á.“.|®ØNkP@b®” */
- $"8F5E 7969 4BA5 56B2 E881 8C02 ED3B 5259" /* ^yiK¥V²èŒ.í;RY */
- $"24CE C98A 4348 12B1 314F E3E3 B6A3 4E61" /* $ÎÉŠCH.±1Oãã¶£Na */
- $"A426 6350 E380 B0B5 DEFF 64CF 72D6 D4B9" /* ¤&cP〰µÞÿdÏrÖÔ¹ */
- $"907C 9BE0 7E4D 39F9 2BB7 C3DE D7C3 DCD8" /* |›à~M9ù+·ÃÞ×ÃÜØ */
- $"1F93 775F 0F44 DF0F A717 C3E9 D603 F269" /* .“w_.Dß.§.ÃéÖ.òi */
- $"FBE1 D36F 87B3 6F87 B280 E8AB DECC AF0D" /* ûáÓo‡³o‡²€è«Þ̯. */
- $"6C8A C695 8734 87EB A75F 5130 05EC 9BA8" /* lŠÆ•‡4‡ë§_Q0.웨 */
- $"78DB 85A2 680C 75A0 EDD1 4AA2 7E1B BAFF" /* xÛ…¢h.u íÑJ¢~.ºÿ */
- $"5AFC FD6C 3E36 A6D9 923A 2DCE 24BC 35EF" /* Züýl>6¦Ù’:-Î$¼5ï */
- $"27F4 8813 7CC4 0141 3CD9 9568 BFE6 BBB3" /* 'ôˆ.|Ä.A<Ù•h¿æ»³ */
- $"219B 0442 5227 3796 635D 0DE7 499A A701" /* !›.BR'7–c].çIš§. */
- $"7F74 FB13 F9DF E737 08AB 0A91 3D9E B77D" /* .tû.ùßç7.«Â‘=ž·} */
- $"E616 57BB 8BAF 7A0D 1B28 42E6 D653 6BD3" /* æ.W»‹¯z..(BæÖSkÓ */
- $"D7A8 9A2B 0905 6198 8809 E5D0 D0A4 F589" /* רš+Æ.a˜ˆÆåÐФõ‰ */
- $"3D04 8161 C4CB 7BC9 96E2 9DA4 1C59 C982" /* =.aÄË{É–â¤.YÉ‚ */
- $"4705 B1BE 1E05 E391 5E89 43FE 6C67 4342" /* G.±¾..ã‘^‰CþlgCB */
- $"636F 80C5 6A98 16E6 6B80 27C8 D0D9 B28C" /* co€Åj˜.æk€'ÈÐÙ²Œ */
- $"6FD4 E109 61AB 8FCB D4CB 19ED 2BE7 B510" /* oÔáÆa«ËÔË.í+çµ. */
- $"C0E8 5883 0642 92A1 6094 7E45 5D3F 819A" /* ÀèXƒ.B’¡`”~E]?š */
- $"4B6F AE8E ED0B 4B30 ABB1 2789 5C58 EEFD" /* Ko®Ží.K0«±'‰\Xîý */
- $"06C9 EF2B 2A12 1731 7581 4428 C72D 2501" /* .Éï+*..1uD(Ç-%. */
- $"2C14 0DA4 2C98 035F FEA8 51A2 0E61 4C50" /* ,..¤,˜._þ¨Q¢.aLP */
- $"4A65 60DE FA1C F36C 62D9 A3FA 93A6 4CAC" /* Je`Þú.ólbÙ£ú“¦L¬ */
- $"C1D0 079D 912F A133 724B 13CC AFF4 1382" /* ÁÐ.‘/¡3rK.̯ô.‚ */
- $"D61F 8AF2 A48B CCA6 5D66 4F61 E6BE 657B" /* Ö.Šò¤‹Ì¦]fOaæ¾e{ */
- $"7F5B 6F20 397A BBC2 3F23 86DF 2355 4A18" /* .[o 9z»Â?#†ß#UJ. */
- $"15DB CB3E 201F FF7C 4AC9 C764 B098 CA46" /* .ÛË> .ÿ|JÉÇd°˜ÊF */
- $"C2CF 44C6 42E7 D30A FD05 380F 6BD3 24C1" /* ÂÏDÆBçÓÂý.8.kÓ$Á */
- $"3998 C5C1 E7D5 0E2C 8D50 7FBB 7A11 6CB7" /* 9˜ÅÁçÕ.,P.»z.l· */
- $"B80F 5A84 44BE E746 C43C 6B5D F055 7A3B" /* ¸.Z„D¾çFÄ<k]ðUz; */
- $"77CB BFA9 2B73 06AF 9C8B AF37 F600 E568" /* wË¿©+s.¯œ‹¯7ö.åh */
- $"EE70 09D2 B0A7 C201 94D9 AC58 E9A2 9D53" /* îpÆÒ°§Â.”Ù¬Xé¢S */
- $"94C0 D1C9 E379 E453 E4C7 27C5 C3F8 1161" /* ”ÀÑÉãyäSäÇ'ÅÃø.a */
- $"D631 3F3C 0CFE 13A3 F6EB 3048 F049 CF11" /* Ö1?<.þ.£öë0HðIÏ. */
- $"5962 65AE 5D8E F911 A2E2 7787 6C78 F63C" /* Ybe®]Žù.¢âw‡lxö< */
- $"E24C ED5B F634 B2B9 9DDF 51B0 94B9 1ABF" /* âLí[ö4²¹ßQ°”¹.¿ */
- $"BE93 4236 35A6 613E 3D1B C8FD 0587 27C7" /* ¾“B65¦a>=.Èý.‡'Ç */
- $"F936 55E0 D0CE BF1A 50D8 51CE 6253 0293" /* ù6UàÐο.PØQÎbS.“ */
- $"1958 3FA2 BF6C 54A5 B158 4236 7F88 7DE4" /* .X?¢¿lT¥±XB6.ˆ}ä */
- $"C231 6D0B 62F1 2C6C 1A1D F8AA 0317 C52D" /* Â1m.bñ,l..øª..Å- */
- $"D9D5 0B61 312B A074 B2B8 1905 FCF9 A102" /* ÙÕ.a1+ t²¸..üù¡. */
- $"6188 616D 74E6 8232 245D 9C8A 4FD8 E2FD" /* aˆamtæ‚2$]œŠOØâý */
- $"0C6C 8F2E 5C82 5724 C542 3AE5 BA0A EE0B" /* .l.\‚W$ÅB:åºÂî. */
- $"2A14 BCDE 8005 4446 25B1 CF8A 6744 9F5C" /* *.¼Þ€.DF%±ÏŠgDŸ\ */
- $"9B09 6571 3003 9F52 A42A 7669 CCAA 7A75" /* ›Æeq0.ŸR¤*vi̪zu */
- $"F807 2530 7BA9 1474 F318 5A7B E64A 5DD7" /* ø.%0{©.tó.Z{æJ]× */
- $"A6F2 13B0 AFA5 7BF8 46DC CABF 4D80 CC26" /* ¦ò.°¯¥{øFÜÊ¿M€Ì& */
- $"5838 4016 3C05 4550 C62F 1504 5B79 0816" /* X8@.<.EPÆ/..[y.. */
- $"556C 8524 5DDA E914 92F1 3124 5C5B 3213" /* Ul…$]Úé.’ñ1$\[2. */
- $"7851 D9B8 EE79 46CF 3F06 1EAB 662A FD9E" /* xQÙ¸îyFÏ?..«f*ýž */
- $"E7D8 2E8C 938F 43FA B1B1 34B0 9207 34EC" /* çØ.Œ“Cú±±4°’.4ì */
- $"7A09 46BF 201E 311F EEEE 88EF C6C1 C10D" /* zÆF¿ .1.îîˆïÆÁÁ. */
- $"E238 50C9 7F01 DFF0 2170 EDD1 7471 8C14" /* â8PÉ..ßð!píÑtqŒ. */
- $"FB17 6678 A8B9 6611 9713 D8BB 8840 427C" /* û.fx¨¹f.—.Ø»ˆ@B| */
- $"8E5E 1608 D5E6 79B6 0BD7 3592 5D97 3864" /* Ž^..Õæy¶.×5’]—8d */
- $"71DF 6137 C0E6 2EB0 F71D 466C CFFF 50EF" /* qßa7Àæ.°÷.FlÏÿPï */
- $"FE99 2E4D 0DBB 537F 32F1 DECB D5D4 39DF" /* þ™.M.»S.2ñÞËÕÔ9ß */
- $"4FCC 2FC2 C399 8EB9 FC8B 2806 3FB7 F227" /* OÌ/ÂÃ™Ž¹ü‹(.?·ò' */
- $"BA12 A288 9858 9159 B6ED 0DBF 3DCC 8FA1" /* º.¢ˆ˜X‘Y¶í.¿=Ì¡ */
- $"9CF5 836D 499F B9E7 DB4E 497F D3A4 57BF" /* œõƒmIŸ¹çÛNI.Ó¤W¿ */
- $"9F0A EECE 8E29 127A 82FF 4222 75AC 32D4" /* ŸÂîÎŽ).z‚ÿB"u¬2Ô */
- $"6540 8040 4137 9EB4 EFFF 7FEC 9D37 60B4" /* e@€@A7ž´ïÿ.ì7`´ */
- $"184A 9567 71E4 F5FE 1C55 BB95 9FD8 BE6D" /* .J•gqäõþ.U»•ŸØ¾m */
- $"037F 052C 035B 91D7 903B 6EEC 1642 3D18" /* ...,.[‘×;nì.B=. */
- $"0B05 FEC5 4C0C 9ED3 BFA5 94AF CBB1 E725" /* ..þÅL.žÓ¿¥”¯Ë±ç% */
- $"DFC3 AF74 2485 D5A2 7F79 1275 C7DD ADE1" /* ßït$…Õ¢.y.uÇÝ­á */
- $"3BD5 AD19 74E6 EE9F 6846 7900 C09D 090B" /* ;Õ­.tæîŸhFy.ÀÆ. */
- $"C17C FB0F 2C9F 4DEB B9FE 7152 A47E B1CB" /* Á|û.,ŸMë¹þqR¤~±Ë */
- $"FB0E 7108 21C7 EFAB 8FA3 8AF0 2FDC 17A9" /* û.q.!Çï«£Šð/Ü.© */
- $"2565 5082 BEBF 4DDD 0699 3265 82AE D421" /* %eP‚¾¿MÝ.™2e‚®Ô! */
- $"3776 341F C56C ECDA B302 0306 AE5F 37FF" /* 7v4.ÅlìÚ³...®_7ÿ */
- $"7FB7 1192 8D68 5475 EE0B 4D80 6149 DEBB" /* .·.’hTuî.M€aIÞ» */
- $"F9A7 D7E7 A35D 9515 8000 4F04 C4D6 670C" /* ù§×ç£]•.€.O.ÄÖg. */
- $"54B7 93BB D264 43E0 E8D4 2D4D D3E2 AEB0" /* T·“»ÒdCàèÔ-MÓâ®° */
- $"FBAE F5BD A155 A8F2 07B4 AAA6 CE0A 84CC" /* û®õ½¡U¨ò.´ª¦ÎÂ„Ì */
- $"907F D5C4 9900 8FE2 0E0D F385 55A0 CDFF" /* .ÕÄ™.â..ó…U Íÿ */
- $"7FFE D776 193F A5C4 0334 DD15 7A6A 0890" /* .þ×v.?¥Ä.4Ý.zj. */
- $"DE98 5707 7799 9A5B D638 31B9 982B 5623" /* Þ˜W.w™š[Ö81¹˜+V# */
- $"3AFA A84A 20E7 417C F56E 7776 0C54 0765" /* :ú¨J çA|õnwv.T.e */
- $"91DE A19E 3DD2 4D8B F9F9 0D61 6343 0746" /* ‘Þ¡ž=ÒM‹ùù.acC.F */
- $"7D72 600B 4E15 FC8F 60FA A273 4348 A86E" /* }r`.N.ü`ú¢sCH¨n */
- $"E11A CD6B 3FFF 7ED1 E486 AAAA A380 045A" /* á.Ík?ÿ~Ñ䆪ª£€.Z */
- $"70E5 3753 4FFF 7FC6 ADBE 8E71 66FF 8165" /* på7SOÿ.Æ­¾Žqfÿe */
- $"D782 24E8 7399 0C15 03BF 29B5 5685 FDA1" /* ׂ$ès™...¿)µV…ý¡ */
- $"5BAD 5751 6D53 799A A7C6 572E 6A37 B46A" /* [­WQmSyš§ÆW.j7´j */
- $"B9BF 05BF 3131 F7DB E3B8 8F11 EE2F 13D6" /* ¹¿.¿11÷Ûã¸.î/.Ö */
- $"7DE9 D552 0B25 FEAF AEFE F0A7 FBE9 487F" /* }éÕR.%þ¯®þð§ûéH. */
- $"9085 0FFA 23FE A9DB 0494 B0E1 FEFD 1D50" /* ….ú#þ©Û.”°áþý.P */
- $"15B4 6548 AAA0 0182 C5FF 7D24 05C8 B15E" /* .´eHª .‚Åÿ}$.ȱ^ */
- $"E45F A508 3C68 CA73 3A57 A35E 462D 9213" /* ä_¥.<hÊs:W£^F-’. */
- $"9D19 A4FE F266 C323 64FF 7B71 19F7 0BC3" /* .¤þòfÃ#dÿ{q.÷.Ã */
- $"062C 20C4 9745 F075 6FFF 31F0 A3AD 4C84" /* ., Ä—Eðuoÿ1ð£­L„ */
- $"00F3 104C 0064 3899 0DB9 8128 CB5F FF46" /* .ó.L.d8™.¹(Ë_ÿF */
- $"7184 41CB 7E58 4C0B ADD5 CBB2 1A61 E3D6" /* q„AË~XL.­Õ˲.aãÖ */
- $"B45F 489E 7FE9 D915 2B77 0776 98BD B3A6" /* ´_Hž.éÙ.+w.v˜½³¦ */
- $"230E B817 1D5A D937 3251 2449 6B0A 5A13" /* #.¸..ZÙ72Q$IkÂZ. */
- $"C4E0 BB45 CB72 9758 9E56 158D B1E6 9590" /* Äà»EËr—XžV.±æ• */
- $"4FC4 0611 EDBC 426F 6D2B D932 D595 A74E" /* OÄ..í¼Bom+Ù2Õ•§N */
- $"8728 58CD BD02 9746 DBA2 7EAB 0F07 363C" /* ‡(Xͽ.—FÛ¢~«..6< */
- $"BAB3 1228 E02A BDB4 373F F3FB FF7D 8D0D" /* º³.(à*½´7?óûÿ}. */
- $"2193 09F4 7603 A017 98B1 421E 7A47 D126" /* !“Æôv. .˜±B.zGÑ& */
- $"82FD 5449 B97F F864 5CD5 19F6 A8A4 F216" /* ‚ýTI¹.ød\Õ.ö¨¤ò. */
- $"A4B3 FF7F E820 4C58 DE4B 944B 6FD4 F4DA" /* ¤³ÿ.è LXÞK”KoÔôÚ */
- $"596E A688 456C 3F0D 7844 1596 2BED 0D5D" /* Yn¦ˆEl?.xD.–+í.] */
- $"FAFB 8D2E D7D0 ABCB B2BE 8D80 E74D 9EDC" /* úû.×Ы˲¾€çMžÜ */
- $"7FFF 7FC9 2FB9 3BDA F47A B9C2 E1B8 5CC8" /* .ÿ.É/¹;Úôz¹Âá¸\È */
- $"14AB D534 7208 32FE 73D2 EF23 862E 10F8" /* .«Õ4r.2þsÒï#†..ø */
- $"C16F 1FFF 6FBB FA97 5167 CDAD 4886 8FC2" /* Áo.ÿo»ú—QgÍ­H†Â */
- $"BFFF 7FFE 2B73 126E 1EC8 C82A 3F6D 6CC3" /* ¿ÿ.þ+s.n.ÈÈ*?mlà */
- $"D98A D501 1DC2 82FD FF57 9731 B866 2A7D" /* ÙŠÕ..‚ýÿW—1¸f*} */
- $"C983 5F41 893F 2D09 F81C E373 42C2 5963" /* Ƀ_A‰?-Æø.ãsBÂYc */
- $"7E9F C269 2B8B C21A 8247 D433 0DF7 491E" /* ~ŸÂi+‹Â.‚GÔ3.÷I. */
- $"D1BF 3D9E F4BD 1B50 8034 4EE9 4A69 B155" /* Ñ¿=žô½.P€4NéJi±U */
- $"849A B0F7 8CEA 3FD0 E4A0 C339 2431 ED8B" /* „š°÷Œê?Ðä Ã9$1í‹ */
- $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */
- $"2366 FD9F 7F36 9703 7BCA 1455 6A98 F02E" /* #fýŸ.6—.{Ê.Uj˜ð. */
- $"1EDC 4707 C9A6 B325 A6E4 637D 612B B3DD" /* .ÜG.ɦ³%¦äc}a+³Ý */
- $"1E5A 3660 EEB0 BEFA 2C50 307B 5887 6D39" /* .Z6`î°¾ú,P0{X‡m9 */
- $"0EC7 2D81 C32E 6B72 8546 30E4 133F 3D3B" /* .Ç-Ã.kr…F0ä.?=; */
- $"0A76 21AA 4387 8F29 03C8 1C32 755C F553" /* Âv!ªC‡).È.2u\õS */
- $"5CA1 C16A 02EC 4654 97C8 6F10 BA2A 16E0" /* \¡Áj.ìFT—Èo.º*.à */
- $"DB18 605E 8A18 8A6E 4F35 1EF7 8C57 F8B2" /* Û.`^Š.ŠnO5.÷ŒWø² */
- $"0020 4D0A 1739 2287 ADE2 B0C2 D816 17D2" /* . MÂ.9"‡­â°ÂØ..Ò */
- $"21F8 3104 FEA8 38E3 8644 6F0B D2C6 A599" /* !ø1.þ¨8ã†Do.ÒÆ¥™ */
- $"B793 1367 B548 23BD 8836 1143 D5DB 2720" /* ·“.gµH#½ˆ6.CÕÛ' */
- $"73BB 1485 DEAF C96F 24E8 AA26 56B9 89D3" /* s».…Þ¯Éo$èª&V¹‰Ó */
- $"8F8D 2F3E 5EA5 466C BE3C 6879 6C0A 5891" /* />^¥Fl¾<hylÂX‘ */
- $"974E 6F22 0E47 66D4 BD1F 6A7D 1885 42CC" /* —No".GfÔ½.j}.…BÌ */
- $"7E13 126E AC98 74B7 B093 BDFF 37DB E527" /* ~..n¬˜t·°“½ÿ7Ûå' */
- $"E6D0 CF2A D7E6 E7EB 1095 05AF 6407 BB9B" /* æÐÏ*׿çë.•.¯d.»› */
- $"0227 D5EB 260A C844 340F B249 E84F 58A7" /* .'Õë&ÂÈD4.²IèOX§ */
- $"FA14 9D34 7614 73A6 BE73 ED76 B2CD 4515" /* ú.4v.s¦¾sív²ÍE. */
- $"F26C 3AD7 7C32 5480 5A3A C4DF 123A EA95" /* òl:×|2T€Z:Äß.:ê• */
- $"D2B4 A3D8 F88D E685 6505 A999 DD9E C8D1" /* Ò´£Øøæ…e.©™ÝžÈÑ */
- $"A073 3702 5A8F 3598 F7DC A36F 0058 065E" /*  s7.Z5˜÷Ü£o.X.^ */
- $"65E6 B5AC 2A85 0F1C 43BF 8A10 43A0 BB10" /* e浬*…..C¿Š.C ». */
- $"4C3A 8F4F 95AD 253D EEE9 FBE8 4023 4647" /* L:O•­%=îéûè@#FG */
- $"7A75 8F1C 9245 3C51 3FF5 BD2B DFD3 57EF" /* zu.’E<Q?õ½+ßÓWï */
- $"1FB4 900F 4546 6EFA A7AE 45EB EAE9 7B9D" /* .´.EFnú§®Eëêé{ */
- $"6408 1DCB F7AC BE44 7D08 1482 2257 A9CF" /* d..Ë÷¬¾D}..‚"W©Ï */
- $"8B78 3610 9816 9518 A64C 215A 4569 6C5F" /* ‹x6.˜.•.¦L!ZEil_ */
- $"57E0 4F89 F77C 88D6 ADFC 8E42 9299 A2C9" /* WàO‰÷|ˆÖ­üŽB’™¢É */
- $"0F7C EA0A 7E98 B7AF 70ED 09A8 0759 B1A7" /* .|êÂ~˜·¯píÆ¨.Y±§ */
- $"C18E 2CC9 883F A788 A2F1 57B9 7A0E F384" /* ÁŽ,Ɉ?§ˆ¢ñW¹z.ó„ */
- $"F0CE 46F0 E10A ED6F CE17 2BE1 25D5 3A36" /* ðÎFðáÂíoÎ.+á%Õ:6 */
- $"5C6A F3AA F2D1 7225 6C5C 514F 8F1F 64A5" /* \jóªòÑr%l\QO.d¥ */
- $"B08E D05D 3E2E B3E4 DE48 12A9 7DC6 6E03" /* °ŽÐ]>.³äÞH.©}Æn. */
- $"05B3 2AD0 EF87 EFB1 6D03 06E4 85AB 36C6" /* .³*Ðï‡ï±m..ä…«6Æ */
- $"9BF6 8382 74F2 F321 62DF 269C 8D95 8FBD" /* ›öƒ‚tòó!bß&œ•½ */
- $"C4CA 7278 FDBA C51B A4FC C224 BD43 5F76" /* ÄÊrxýºÅ.¤üÂ$½C_v */
- $"F9D9 0970 5EAA 5F05 FDCB 50DE 35E7 A82E" /* ùÙÆp^ª_.ýËPÞ5ç¨. */
- $"1E7E 584D 33D8 EF90 B221 622F 778E 460D" /* .~XM3Øï²!b/wŽF. */
- $"6DC9 383F CF41 7B89 7414 97EF EFE2 CC75" /* mÉ8?ÏA{‰t.—ïïâÌu */
- $"8895 6AFD C6E8 610E 5E29 7AE1 FAAF 9FD5" /* ˆ•jýÆèa.^)záú¯ŸÕ */
- $"435F 3F61 6F9F AC78 7EAD 62BE 7DF7 7CFD" /* C_?aoŸ¬x~­b¾}÷|ý */
- $"D3FD 5BAF 83F5 5B37 CF6D BE7E 9DDF 3F4D" /* Óý[¯ƒõ[7Ïm¾~ß?M */
- $"80E8 ABDE CCAF 0D6C 8AC6 9587 348A 7A5A" /* €è«Þ̯.lŠÆ•‡4ŠzZ */
- $"21F6 5D05 F6A4 1727 AC99 8E36 4607 A805" /* !ö].ö¤.'¬™Ž6F.¨. */
- $"1CA8 FB12 6979 4216 6FCF DF65 6135 AFF9" /* .¨û.iyB.oÏßea5¯ù */
- $"5A1E 01C1 15A0 4F38 E547 6F65 858D 0788" /* Z..Á. O8åGoe….ˆ */
- $"49E3 07A2 D476 B767 EC21 FF65 559D 3B3F" /* Iã.¢Ôv·gì!ÿeU;? */
- $"B8A5 C1A8 6496 5183 24E6 93A6 DF2F 52F1" /* ¸¥Á¨d–Qƒ$擦ß/Rñ */
- $"19CA BFD7 1479 8040 2F9C 0DB9 00F0 49C5" /* .Ê¿×.y€@/œ.¹.ðIÅ */
- $"3D32 5B0C 9453 8D1F 452F D9E7 75FD CD61" /* =2[.”S.E/ÙçuýÍa */
- $"44A9 62C3 F0C8 BAF0 6A66 A4D4 AA8B 73B0" /* D©bÃðȺðjf¤Ôª‹s° */
- $"C942 686A 4A1E E3A7 2343 A0ED D595 9AFC" /* ÉBhjJ.ã§#C íÕ•šü */
- $"5546 0ACB FD23 6F2E DCEE ABBD 70E7 FA93" /* UFÂËý#o.Üpçú“ */
- $"3FFF 7FC5 7D31 FA1C D910 1C70 6CDC 3362" /* ?ÿ.Å}1ú.Ù..plÜ3b */
- $"B0A1 C6F3 16D1 BE51 73D2 4697 37CA 8197" /* °¡Æó.ѾQsÒF—7Ê— */
- $"A8C6 89C1 FF78 99EB 31B8 5F88 7B08 C557" /* ¨Æ‰Áÿx™ë1¸_ˆ{.ÅW */
- $"5483 A35C 0713 94D5 D2DF B84C 36CA D9EC" /* Tƒ£\..”ÕÒ߸L6ÊÙì */
- $"8FC7 A305 814F 8B04 07D2 E391 5E89 43FE" /* Ç£.O‹..Òã‘^‰Cþ */
- $"6C67 4343 91DB DD56 C1D2 FEA6 9F1F 346F" /* lgCC‘ÛÝVÁÒþ¦Ÿ.4o */
- $"714B 79E1 7AC7 53A1 9934 69F4 E886 5A9C" /* qKyázÇS¡™4iôè†Zœ */
- $"6F9A D26F DD48 5F60 A72A 7E20 77F8 1BE8" /* ošÒoÝH_`§*~ wø.è */
- $"91B9 9018 8124 7694 3664 4202 7B94 1007" /* ‘¹.$v”6dB.{”.. */
- $"4234 15FC 04A2 6DE0 DC6B 5EDE 4332 F592" /* B4.ü.¢màÜk^ÞC2õ’ */
- $"779A A3BD 8E84 5464 DE08 6BAE AE2F 6EEF" /* wš£½Ž„TdÞ.k®®/nï */
- $"CB75 5862 59D8 1362 5D60 79D2 137C 7606" /* ËuXbYØ.b]`yÒ.|v. */
- $"F2B1 06DE 8A2F B76A A7D9 84DB 8F52 1107" /* ò±.ÞŠ/·j§Ù„ÛR.. */
- $"A42C 9803 2476 0448 42C9 A9E5 D0F5 9110" /* ¤,˜.$v.HBÉ©åÐõ‘. */
- $"2FAB AAF4 0752 81C9 6064 B8F7 6CEB 438E" /* /«ªô.RÉ`d¸÷lëCŽ */
- $"DC4B 916C 21F0 1C8F 2A6A 1919 9E26 2B36" /* ÜK‘l!ð.*j..ž&+6 */
- $"3E51 F543 F7C5 2549 66D0 2F14 D18F 42F1" /* >QõC÷Å%IfÐ/.ÑBñ */
- $"397B BA52 99ED 853C E07D 629B 92A1 2589" /* 9{ºR™í…<à}b›’¡%‰ */
- $"B3A9 B812 DC8D A368 3204 F8AA 7549 AF2B" /* ³©¸.Ü£h2.øªuI¯+ */
- $"2DE7 529C 1ECB 9747 A4B8 F6EC 8DDC 0AC4" /* -çRœ.Ë—G¤¸öìÜÂÄ */
- $"2C31 F042 C407 3F18 FD32 9280 60E4 60D8" /* ,1ðBÄ.?.ý2’€`ä`Ø */
- $"77B5 C019 A5FF 6E0D 8E35 A78E C7AA E95B" /* wµÀ.¥ÿn.Ž5§ŽÇªé[ */
- $"D37C D883 5DD2 756B 385A 08BB 7708 AA5E" /* Ó|؃]Òuk8Z.»w.ª^ */
- $"5B89 0628 F831 7775 3555 A523 BF2F 721A" /* [‰.(ø1wu5U¥#¿/r. */
- $"099B E6B4 5128 9EA6 41E1 9B8B 18C1 928C" /* Æ›æ´Q(ž¦Aᛋ.Á’Œ */
- $"72A0 BD1E 84D6 836A C947 0982 284A 9238" /* r ½.„ÖƒjÉGÆ‚(J’8 */
- $"A06F E390 1BD5 BBFD 323F BA86 2091 BAD5" /*  oã.Õ»ý2?º† ‘ºÕ */
- $"351D 16C5 1D44 E8C7 66C7 D469 047D 5548" /* 5..Å.DèÇfÇÔi.}UH */
- $"7049 7B42 B682 DF4C 68DE B5D2 2EDC C105" /* pI{B¶‚ßLhÞµÒ.ÜÁ. */
- $"4047 9A7E 0403 F48B 6215 C3ED 8DBA 12E9" /* @Gš~..ô‹b.Ãíº.é */
- $"EEFB B61B 906E F6F6 DDFD D030 CD1C 47FD" /* îû¶.nööÝýÐ0Í.Gý */
- $"7C37 E7C7 DC08 213E 3C33 08E6 74A0 F400" /* |7çÇÜ.!><3.æt ô. */
- $"7CFC 3B85 1A2E 5ACA 573F F24C 7D2C 0E3B" /* |ü;…..ZÊW?òL},.; */
- $"2A6D CEDC 6C9C 6E97 A572 915F A892 3833" /* *mÎÜlœn—¥r‘_¨’83 */
- $"A08F 0070 A602 FB49 0EA6 62FC 4237 C568" /*  .p¦.ûI.¦büB7Åh */
- $"E937 1DC1 1FC2 C3F1 AA30 AC4D DDB8 E747" /* é7.Á.ÂÃñª0¬MݸçG */
- $"5EE4 FD73 8124 56EB ADBE 6DB3 F27B 80C0" /* ^äýs$Vë­¾m³ò{€À */
- $"E536 971B 511B C76B AB20 8BA4 4DCD BFCB" /* å6—.Q.Çk« ‹¤MÍ¿Ë */
- $"4A0C 34DC 3DDC 9BEF 5122 89D0 99D1 9BE7" /* J.4Ü=Ü›ïQ"‰Ð™Ñ›ç */
- $"8840 002A A77A 25E2 9C2C F9BC 78F9 FB0E" /* ˆ@.*§z%âœ,ù¼xùû. */
- $"0DB7 4F14 B07A 12F6 65D3 ABE1 660D A84A" /* .·O.°z.öeÓ«áf.¨J */
- $"EFF9 A799 1852 8ED0 9582 B79A D812 1BE6" /* ïù§™.RŽÐ•‚·šØ..æ */
- $"F3D0 D5FA 9C76 5EBD DBFD 42A9 F7B3 885E" /* óÐÕúœv^½ÛýB©÷³ˆ^ */
- $"4A68 DBE7 9663 FB7F 1AC4 5004 197F 97F0" /* JhÛç–cû..ÄP...—ð */
- $"F57B 135D 19ED E0E0 1C84 139C BA3B 2493" /* õ{.].íàà.„.œº;$“ */
- $"D997 333D B6A7 9E83 619C FCE9 9875 134D" /* Ù—3=¶§žƒaœüé˜u.M */
- $"4B31 FCB3 5808 B917 C8BB 0B67 4564 488E" /* K1ü³X.¹.È».gEdHŽ */
- $"3554 8125 C3A4 DB4A 0BB2 E501 244C 1F49" /* 5T%äÛJ.²å.$L.I */
- $"C6A7 51E4 6C51 A134 3DF4 CE21 2993 FF3B" /* ƧQälQ¡4=ôÎ!)“ÿ; */
- $"80F6 AE0B B9F8 D1D5 8853 4531 6806 4F3E" /* €ö®.¹øÑÕˆSE1h.O> */
- $"D2B6 5F62 796A 683C D3C9 A22B 6D56 C497" /* Ò¶_byjh<ÓÉ¢+mVÄ— */
- $"D854 2E14 C281 0F94 0220 BEE7 3754 D077" /* ØT..Â.”. ¾ç7TÐw */
- $"EDB0 0F0E 95C1 A40B 55C9 B5AE 4DA8 A8A6" /* í°..•Á¤.Uɵ®M¨¨¦ */
- $"ADD6 4A11 DE81 B148 70D3 FA4F 795C 9171" /* ­ÖJ.Þ±HpÓúOy\‘q */
- $"C72E 7EF2 454C 0336 BE4A EE68 960E 25BA" /* Ç.~òEL.6¾Jîh–.%º */
- $"E686 01F4 6FF5 3C7C 8B33 60D8 24D3 70A1" /* æ†.ôoõ<|‹3`Ø$Óp¡ */
- $"06C6 E616 29D4 63D6 3334 379F 743E 745D" /* .Ææ.)ÔcÖ347Ÿt>t] */
- $"4EF5 ECB5 072E 9F62 0750 F7BA 6FDE B6B0" /* Nõìµ..Ÿb.P÷ºoÞ¶° */
- $"0BD0 4FCC 8F59 9B13 0C77 0A30 9BAE DF36" /* .ÐOÌY›..wÂ0›®ß6 */
- $"B13D D861 E92A 12C7 EC7A 0946 BF20 1E31" /* ±=Øaé*.ÇìzÆF¿ .1 */
- $"1FEE EE88 EFC6 C1C1 0DE2 3850 C97F 01DF" /* .îîˆïÆÁÁ.â8PÉ..ß */
- $"F021 605A D52A 570D 7089 0C1B B3FE 8B4D" /* ð!`ZÕ*W.p‰..³þ‹M */
- $"E441 70AC 5F71 3FCE 527F EBF4 048A A307" /* äAp¬_q?ÎR.ëô.Š£. */
- $"CEFD 4EB0 87ED BFE2 A36C 51B9 EAD3 37C6" /* ÎýN°‡í¿â£lQ¹êÓ7Æ */
- $"E8F0 9A3D 8F78 8747 81D4 33F0 9EEB 5EA0" /* èðš=x‡GÔ3ðžë^  */
- $"6FE0 A580 6B6B C126 1CE3 F1B2 DC9C CFCE" /* oीkkÁ&.ãñ²ÜœÏÎ */
- $"42EE 7E91 EF2F 0DDF CFDE 75EB 554D 6941" /* Bî~‘ï/.ßÏÞuëUMiA */
- $"07A5 21BE AD52 7CC1 49B5 FE74 AE40 F70F" /* .¥!¾­R|ÁIµþt®@÷. */
- $"AB3B 0C16 98F5 7742 3DCE 842D 0B2B 2FEB" /* «;..˜õwB=΄-.+/ë */
- $"5E90 DEBC 8BA9 81AC 40CC 0030 2853 FE9C" /* ^Þ¼‹©¬@Ì.0(Sþœ */
- $"6FC2 569B 2CD1 6200 2881 802D 7697 8442" /* oÂV›,Ñb.(€-v—„B */
- $"92C8 666B BC90 3252 F4D3 9BD2 AD14 0027" /* ’Èfk¼2RôÓ›Ò­..' */
- $"CE11 F5A4 437B 3F80 B250 AA4C 23B6 AD83" /* Î.õ¤C{?€²PªL#¶­ƒ */
- $"277E 5EF0 8132 6331 9325 D1A3 CFB6 6F73" /* '~^ð2c1“%ѣ϶os */
- $"D37D 780F 91CC CD40 6234 2FE2 F097 1681" /* Ó}x.‘ÌÍ@b4/âð—. */
- $"6097 88BD BFFF 18F5 2CBB FF67 FDBC 2F07" /* `—ˆ½¿ÿ.õ,»ÿgý¼/. */
- $"67FF 7FFF 1946 84C7 A551 03FF 7F52 A7C2" /* gÿ.ÿ.F„Ç¥Q.ÿ.R§Â */
- $"8AC8 1080 56FF 0C48 1804 A884 A5A2 08FF" /* ŠÈ.€Vÿ.H..¨„¥¢.ÿ */
- $"7FF5 3220 8043 9005 C25D DE15 02FB 7F2B" /* .õ2 €C.Â]Þ..û.+ */
- $"8205 5CA8 40BE EFB1 78F0 2656 2AD4 14FF" /* ‚.\¨@¾ï±xð&V*Ô.ÿ */
- $"7505 20CD 8BE2 8B15 47BB 9E26 105E 15DD" /* u. Í‹â‹.G»ž&.^.Ý */
- $"21A7 82AE E19D FE27 5D8B DDAD E13B D5AD" /* !§‚®áþ']‹Ý­á;Õ­ */
- $"1974 E6EE 9F68 4679 00C0 9D09 0BC1 7CFB" /* .tæîŸhFy.ÀÆ.Á|û */
- $"0F2C 9F4E 082C 2CB4 569B A7B0 0009 E098" /* .,ŸN.,,´V›§°.Æà˜ */
- $"9AB0 9892 B1FF 6957 1D78 2613 4289 24C6" /* š°˜’±ÿiW.x&.B‰$Æ */
- $"12BC E2EF C9AE E6D9 784F C157 77AB 3470" /* .¼âïÉ®æÙxOÁWw«4p */
- $"D8C7 C746 1978 322D D4E9 FA24 B8B2 5054" /* ØÇÇF.x2-Ôéú$¸²PT */
- $"D643 8270 9090 D6D8 0C24 16E5 1146 421C" /* ÖC‚pÖØ.$.å.FB. */
- $"D6A2 40D9 1864 A800 0000 0000 0001 4554" /* Ö¢@Ù.d¨.......ET */
- $"031E 793B 33D3 FD4A CE0A 3D8A 9D46 37B0" /* ..y;3ÓýJÎÂ=ŠF7° */
- $"4D2C 6F04 2BFF 071C 023F E153 6688 1815" /* M,o.+ÿ...?áSfˆ.. */
- $"BA20 BF61 DDDF 2979 84E3 3348 50F6 E9B8" /* º ¿aÝß)y„ã3HPöé¸ */
- $"634A 8937 FF7F F1AE E84B C95A 771F 4C9C" /* cJ‰7ÿ.ñ®èKÉZw.Lœ */
- $"3FFE 0734 7D7F 6E35 4A2E 21E0 E52F FF7E" /* ?þ.4}.n5J.!àå/ÿ~ */
- $"8532 8513 7869 A6E6 495D 3E58 F349 1EF5" /* …2….xi¦æI]>XóI.õ */
- $"886C 6441 9091 82E8 0C24 1507 0E02 A105" /* ˆldA‘‚è.$....¡. */
- $"95C5 1409 096C 9A37 F758 F13A 5ABF 149E" /* •Å.ÆÆlš7÷Xñ:Z¿.ž */
- $"DA31 52E9 0DA9 0BFF 45EB 20C7 1A1C E54C" /* Ú1Ré.©.ÿEë Ç..åL */
- $"29D1 6C8E D1EC 9D59 F945 4303 373F FF7F" /* )ÑlŽÑìYùEC.7?ÿ. */
- $"CE95 B027 88F7 AB06 28B9 92E7 D540 BC2B" /* Ε°'ˆ÷«.(¹’çÕ@¼+ */
- $"7167 8C6C C87E 32B0 C904 7D7D 278E E519" /* qgŒlÈ~2°É.}}'Žå. */
- $"707D 2C42 1714 C425 F9D0 DC01 D910 23DB" /* p},B..Ä%ùÐÜ.Ù.#Û */
- $"E7F3 391C A4E6 FAE1 C850 5A1F 456A 6690" /* çó9.¤æúáÈPZ.Ejf */
- $"3F37 F970 3841 73D3 1095 39CF 10A3 40F8" /* ?7ùp8AsÓ.•9Ï.£@ø */
- $"4CCC 4985 E3D5 127F 7CF4 92BC DCE9 2335" /* LÌI…ãÕ..|ô’¼Üé#5 */
- $"43FB 7460 8D5C C121 CFF2 1165 1CCE BBB2" /* Cût`\Á!Ïò.e.λ² */
- $"5EA8 0279 2C97 E45B A43D 328C 7A6C 5EBC" /* ^¨.y,—ä[¤=2Œzl^¼ */
- $"61DD BB2C E34E 25E4 1725 3C6B EC12 BFEF" /* aÝ»,ãN%ä.%<kì.¿ï */
- $"3E5E 0ACF 766D 9D4E 8978 2AC5 F138 755A" /* >^ÂÏvmN‰x*Åñ8uZ */
- $"CBDD 8421 F74E 9A07 A070 16ED 100C 769A" /* ËÝ„!÷Nš. p.í..vš */
- $"6571 1FA0 4D62 8ADC A3F1 0AAA 2253 1A39" /* eq. MbŠÜ£ñª"S.9 */
- $"0006 DF51 B09A 2267 BA13 3AD9 0120 8520" /* ..ßQ°š"gº.:Ù. … */
- $"7375 BB11 0715 9FFF 7FFF 276F 9A44 4D02" /* su»...Ÿÿ.ÿ'ošDM. */
- $"9DF2 BE32 729A 8C71 FBC9 4C73 FA4B 1D24" /* ò¾2ršŒqûÉLsúK.$ */
- $"4115 B69E 4FFF 7FFF 45B5 7091 9925 CEBD" /* A.¶žOÿ.ÿEµp‘™%ν */
- $"6A4E 1AA3 BFFF 7FFD AA3B 4043 EE5A 76B0" /* jN.£¿ÿ.ýª;@CîZv° */
- $"A073 CF17 7A58 3A06 649C B972 3CB8 897B" /*  sÏ.zX:.dœ¹r<¸‰{ */
- $"31E2 637A 05AC 83FA B94C 0F75 7113 FF7B" /* 1âcz.¬ƒú¹L.uq.ÿ{ */
- $"E690 225A FB16 A961 626A B7FE 22EF 864B" /* æ"Zû.©abj·þ"ï†K */
- $"F464 1D62 4127 02B3 DB08 1C01 3ECE 1326" /* ôd.bA'.³Û...>Î.& */
- $"CF03 BF05 5771 4992 75FE 29FC 5FFF 60D5" /* Ï.¿.WqI’uþ)ü_ÿ`Õ */
- $"DCC3 1B1F 40FF 6990 DC69 3E47 D09A 6E6A" /* ÜÃ..@ÿiÜi>GКnj */
- $"2866 9BA8 D74C BAAA 204E 05F9 DBFE E679" /* (f›¨×Lºª N.ùÛþæy */
- $"E76C 383D 9F92 BB32 1E14 2CA1 CBD5 E93C" /* çl8=Ÿ’»2..,¡ËÕé< */
- $"6C00 DFA2 B04F D650 3F14 60FF 7F73 29C3" /* l.ߢ°OÖP?.`ÿ.s)à */
- $"E20E 5672 C31B 6D72 FDCF 8097 B8B0 1482" /* â.VrÃ.mrýÏ€—¸°.‚ */
- $"C37E 4C4A 28FA 6E67 F061 E00C 371B 8655" /* Ã~LJ(úngðaà.7.†U */
- $"BDCB 2942 6AB1 0E31 38D3 6948 0D3F 6FEF" /* ½Ë)Bj±.18ÓiH.?oï */
- $"C2AB 669A E502 2490 C158 FC07 05F0 348A" /* «fšå.$ÁXü..ð4Š */
- $"0505 F0B2 E7E3 F934 19DA 2DB9 9686 603E" /* ..ð²çãù4.Ú-¹–†`> */
- $"C2C3 4B2F EB95 FB4E 62D2 F085 4364 9DCA" /* ÂÃK/ë•ûNbÒð…CdÊ */
- $"A6E8 94F8 CC41 2603 5BFC 4E90 C05F 068D" /* ¦è”øÌA&.[üNÀ_. */
- $"414C 618C 8860 58B1 7059 0B4C 39E8 FB58" /* ALaŒˆ`X±pY.L9èûX */
- $"C413 43C6 BF39 CC12 6E5B F65C F671 DD29" /* Ä.CÆ¿9Ì.n[ö\öqÝ) */
- $"8A03 BC15 FF06 2028 49E4 BF04 E6FC D4FD" /* Š.¼.ÿ. (Iä¿.æüÔý */
- $"401A CB9C 5F7F EFE7 8F41 E707 7803 9F1A" /* @.Ëœ_.ïçAç.x.Ÿ. */
- $"715F 951E E63A 9B4C 1404 32AA B5B7 98B0" /* q_•.æ:›L..2ªµ·˜° */
- $"D5F4 CD69 DD15 9E81 D2FD 09F7 462D AF3E" /* ÕôÍiÝ.žÒýÆ÷F-¯> */
- $"31DA 85C4 5053 8460 C06C 7018 908C 4821" /* 1Ú…ÄPS„`Àlp.ŒH! */
- $"D8AB AC44 7666 44D1 EA04 8979 3A4A A0FE" /* Ø«¬DvfDÑê.‰y:J þ */
- $"27D7 B0C3 DBAA 5233 F376 3CA8 4968 DF8A" /* '×°ÃÛªR3óv<¨Ihߊ */
- $"874C 2117 6A15 4664 03FF 7FFF 7F7C 2D12" /* ‡L!.j.Fd.ÿ.ÿ.|-. */
- $"B28B 8A4C 6D72 1106 16E0 BF7F 9822 2424" /* ²‹ŠLmr...à¿.˜"$$ */
- $"3C1B CBC8 2F76 1AC7 FF7F FF7F EB42 22AA" /* <.ËÈ/v.Çÿ.ÿ.ëB"ª */
- $"F30A 0C9D 6086 E561 E1BC C1D9 4E7F FADF" /* óÂ.`†åaá¼ÁÙN.úß */
- $"A85C B34C E2D4 FCF6 1A29 34F3 3B42 1DFC" /* ¨\³LâÔüö.)4ó;B.ü */
- $"C6BD 370B D203 B0C4 1C7D C348 1EE7 EAD9" /* ƽ7.Ò.°Ä.}ÃH.çêÙ */
- $"3145 E7FB 36CC 8E64 AB70 81DC 65E1 2C1D" /* 1Eçû6ÌŽd«pÜeá,. */
- $"9CB5 18A0 1C95 7DE2 96DF C185 7A40 50C7" /* œµ. .•}â–ßÁ…z@PÇ */
- $"E32C FCC1 FF6B 14F5 05FE 0E1C 8757 8D82" /* ã,üÁÿk.õ.þ..‡W‚ */
- $"3A41 284E 2906 8316 564F F479 4DCF FF7E" /* :A(N).ƒ.VOôyMÏÿ~ */
- $"5F11 3745 AC7F ED8D BC93 4205 7E12 E036" /* _.7E¬.í¼“B.~.à6 */
- $"0BE4 4B4F F99C F369 6B38 263E 63EC 6311" /* .äKOùœóik8&>cìc. */
- $"D577 8B5D 7957 D24D 7D64 A2B5 1107 4625" /* Õw‹]yWÒM}d¢µ..F% */
- $"E1EB 2460 41A2 E878 5967 CEAE AE16 D8D5" /* áë$`A¢èxYgή®.ØÕ */
- $"F960 B484 0B49 7253 26F2 714E 6A13 03E4" /* ù`´„.IrS&òqNj..ä */
- $"A0C3 3924 31ED 8B79 3D63 5412 C097 F9C3" /*  Ã9$1í‹y=cT.À—ùà */
- $"79AD A97D EEE5 EF23 66FF 15BD C854 5DFB" /* y­©}îåï#fÿ.½ÈT]û */
- $"5921 E05C 6A39 B68E 6444 6D55 3B7D 6DDA" /* Y!à\j9¶ŽdDmU;}mÚ */
- $"9003 8F53 5C49 D978 31CD 41C5 DD62 7DE4" /* .S\IÙx1ÍAÅÝb}ä */
- $"2F24 5932 A14F 9C9C 97B6 2652 5988 7970" /* /$Y2¡Oœœ—¶&RYˆyp */
- $"F890 8A5C 9614 EBF4 DAC8 15D1 6F3C 07E4" /* øŠ\–.ëôÚÈ.Ño<.ä */
- $"7B8B F763 6803 394F 2291 8D88 EB1B 3136" /* {‹÷ch.9O"‘ˆë.16 */
- $"10C9 5077 060A 7DB0 A890 CB7B 947F AD8B" /* .ÉPw.Â}°¨Ë{”.­‹ */
- $"0AAF 67FF 5D78 615A E459 013B 6923 5E0E" /* ¯gÿ]xaZäY.;i#^. */
- $"900D BA9C DFF2 37D0 0508 B5F3 EA48 FADE" /* .ºœßò7Ð..µóêHúÞ */
- $"D348 3F2F 8E71 E6CD B6BE 8941 8773 0E17" /* ÓH?/ŽqæÍ¶¾‰A‡s.. */
- $"E97A B699 5A4F 21C1 0766 538B B29A B8CA" /* éz¶™ZO!Á.fS‹²š¸Ê */
- $"FBAE 21FA 76A0 B197 C613 E523 B127 1FE4" /* û®!úv ±—Æ.å#±'.ä */
- $"0AA8 798D 688E 8F27 E386 446F 0BD2 C6A5" /* ¨yhŽ'ã†Do.ÒÆ¥ */
- $"99B7 9313 67B5 4823 BD88 3611 E5A8 8054" /* ™·“.gµH#½ˆ6.娀T */
- $"3C15 C120 1B02 5B2A 2195 DD25 F90A 48A6" /* <.Á ..[*!•Ý%ùÂH¦ */
- $"BF92 56B9 4639 F2BD AC5F 3350 9699 14A7" /* ¿’V¹F9ò½¬_3P–™.§ */
- $"30A2 4B91 C33D 3175 F806 15AA 4B01 558F" /* 0¢K‘Ã=1uø..ªK.U */
- $"400B 8148 DAF5 29FD 0561 1CA8 7239 51F4" /* @.HÚõ)ý.a.¨r9Qô */
- $"A169 A92B EE2F 4F3D 2F96 029B 186B 7219" /* ¡i©+î/O=/–.›.kr. */
- $"C673 0E85 6FAC 9889 C64A 90AE DBAF E8E3" /* Æs.…o¬˜‰ÆJ®Û¯èã */
- $"6607 DF2A C332 C690 840A 817A ABFF 3302" /* f.ß*Ã2Æ„Âz«ÿ3. */
- $"1464 A65F E1B3 04B0 90C6 51E5 6A2E 7EA2" /* .d¦_á³.°ÆQåj.~¢ */
- $"9222 EABA 0632 2F13 B1A3 2337 85B4 E390" /* ’"êº.2/.±£#7…´ã */
- $"766A 98DB BDDD 9813 F7BD 8AEA 1AB2 BEEC" /* vj˜Û½Ý˜.÷½Šê.²¾ì */
- $"BEE3 F4B7 EE35 6BB8 ADE1 E772 AEB0 7E66" /* ¾ãô·î5k¸­áçr®°~f */
- $"3F99 05C1 3339 69B2 C1D5 4CC7 DB0B 3C67" /* ?™.Á39i²ÁÕLÇÛ.<g */
- $"7F80 43C8 7B29 FA49 8C64 3FEB 6406 35FE" /* .€CÈ{)úIŒd?ëd.5þ */
- $"FAEB 4922 9410 5352 D4C0 00CB 72EA 56CE" /* úëI"”.SRÔÀ.ËrêVÎ */
- $"22F8 673A D3E8 AAFA E992 5B7F 827C A83D" /* "øg:Óèªúé’[.‚|¨= */
- $"586F 54B4 69F8 C6B7 FF14 CFD4 4069 C50F" /* XoT´iøÆ·ÿ.ÏÔ@iÅ. */
- $"9E23 797E DE78 5B86 FCAE BDE5 B920 9551" /* ž#y~Þx[†ü®½å¹ •Q */
- $"22EC 4155 0582 10F4 BF8C 144A 3251 97F3" /* "ìAU.‚.ô¿Œ.J2Q—ó */
- $"2E7D 1E04 969B 4C15 8BDB FAC1 9743 2B6C" /* .}..–›L.‹ÛúÁ—C+l */
- $"6EF5 C95E 47CB A380 A635 C17D AD97 42EA" /* nõÉ^GË£€¦5Á}­—Bê */
- $"88A1 A63E FC76 A19C AE08 C868 115F 098D" /* ˆ¡¦>üv¡œ®.Èh._Æ */
- $"A1BE 16D4 3BF4 91C9 6CF1 DBE0 E0CA 0DAA" /* ¡¾.Ô;ô‘ÉlñÛààÊ.ª */
- $"EFCB 2A06 908B 7BAC CCF3 4CF8 179A 615E" /* ïË*.‹{¬ÌóLø.ša^ */
- $"590D AB18 CB49 E032 B8ED 2A8E 584A ACDC" /* Y.«.ËIà2¸í*ŽXJ¬Ü */
- $"4797 F732 B8C9 24A4 0E5C 85A0 FED8 E30A" /* G—÷2¸É$¤.\… þØã */
- $"ECBF 08FB CDC1 E09D 9556 837A E086 95AC" /* ì¿.ûÍÁà•Vƒzà†•¬ */
- $"BA2C E411 756E F132 9CE6 EDC4 6C90 B09E" /* º,ä.unñ2œæíÄl°ž */
- $"3C59 DE78 44D0 E445 BCA0 3AE0 05D9 7440" /* <YÞxDÐäE¼ :à.Ùt@ */
- $"F09F 10EA E0BA 4596 84F5 81A2 550E 57A7" /* ðŸ.êàºE–„õ¢U.W§ */
- $"F2A8 B2DD D612 A18F D74A 671D B70C 994A" /* ò¨²ÝÖ.¡×Jg.·.™J */
- $"9441 8E10 12B8 80F0 6249 2075 CD39 3667" /* ”AŽ..¸€ðbI uÍ96g */
- $"6632 AFDD 5E48 6B22 15CC 179A C6FA 47AE" /* f2¯Ý^Hk".Ì.šÆúG® */
- $"66AF 7AFB 033D 03F1 B829 B852 F1BF 55DB" /* f¯zû.=.ñ¸)¸Rñ¿UÛ */
- $"17F6 E1EF A955 F266 ACFE 75F4 34FC 38B0" /* .öáï©Uòf¬þuô4ü8° */
- $"0068 7DD6 016E 98D4 57DB 6220 D269 4BE9" /* .h}Ö.n˜ÔWÛb ÒiKé */
- $"8007 22E8 9D82 8FCE EB41 317B D0FA 323B" /* €."è‚ÎëA1{Ðú2; */
- $"B2C0 06D3 99E3 ED9A 2423 78CD AE34 CF5B" /* ²À.Ó™ãíš$#xÍ®4Ï[ */
- $"58DA 8F69 9604 4804 8682 B58C C1DA 1E21" /* XÚi–.H.†‚µŒÁÚ.! */
- $"0E4E F709 83E1 B335 F208 6565 C882 70A0" /* .N÷ƃá³5ò.eeÈ‚p  */
- $"2F58 5379 3999 7F2E E63D 81E4 C2EB 58E3" /* /XSy9™..æ=äÂëXã */
- $"4605 35E7 76D7 C7D0 AEDA 26C5 8BB6 0F99" /* F.5çv×ÇЮÚ&Å‹¶.™ */
- $"77C0 D3D6 9870 8279 4C2E 29C6 518F 13E6" /* wÀÓÖ˜p‚yL.)ÆQ.æ */
- $"1373 FCB8 FD55 3D8F 8322 F8F4 CD80 3C09" /* .sü¸ýU=ƒ"øôÍ€<Æ */
- $"1496 931A E1BF 0AE6 2842 6FF7 6986 6AEE" /* .–“.á¿Âæ(Bo÷i†jî */
- $"1AE9 FF0A 947D E3F6 D93F B59B F6D5 5FB6" /* .éÿ”}ãöÙ?µ›öÕ_¶ */
- $"AAC7 EDD1 1FDB 5A5F 5549 7D55 2E1F B6A4" /* ªÇíÑ.ÛZ_UI}U..¶¤ */
- $"FDAA F7D4 DF7D 4E80 F173 72EC 2AD6 46CC" /* ýª÷Ôß}N€ñsrì*ÖFÌ */
- $"6653 9F8A F548 8CD9 F7CC 0758 DFBD 1976" /* fSŸŠõHŒÙ÷Ì.Xß½.v */
- $"0832 03BE 1A6C 242F 4978 025D 37A6 D46A" /* .2.¾.l$/Ix.]7¦Ôj */
- $"B859 037D 5250 D0D6 8FC0 4C05 AAAB 7F38" /* ¸Y.}RPÐÖÀL.ª«.8 */
- $"799B 43F9 E370 D367 B412 8CC2 F941 E270" /* y›CùãpÓg´.ŒÂùAâp */
- $"A967 1978 577B 7A22 541A 7DDD A593 75E5" /* ©g.xW{z"T.}Ý¥“uå */
- $"6B05 D950 D953 DA5E 7EBF D5D3 4314 5006" /* k.ÙPÙSÚ^~¿ÕÓC.P. */
- $"8EC3 8474 6B41 83B3 7B16 9C95 721B 5405" /* ŽÃ„tkAƒ³{.œ•r.T. */
- $"F4AE A41F 92D8 56DA F2C9 4BF8 5B0A EBC6" /* ô®¤.’ØVÚòÉKø[ÂëÆ */
- $"29D5 F4F3 36B9 A6D7 3BC4 75D7 972C 7465" /* )Õôó6¹¦×;Äu×—,te */
- $"CCBE 21FA 6EAF 6B26 465B 4676 356D E640" /* ̾!ún¯k&F[Fv5mæ@ */
- $"04C3 0E39 C431 FBA5 2B53 E001 8F9D 37F5" /* .Ã.9Ä1û¥+Sà.7õ */
- $"F289 EC84 85B8 5FC3 F74A 734B E0B1 ED8C" /* ò‰ì„…¸_Ã÷JsKà±íŒ */
- $"5DF4 6678 22E4 887C A45B 1478 DFC3 A9E9" /* ]ôfx"äˆ|¤[.xßéé */
- $"F234 5723 01B3 2685 2754 8133 8699 21C8" /* ò4W#.³&…'T3†™!È */
- $"180A 27F8 174C FED5 8F71 4082 C4E8 DB83" /* .Â'ø.LþÕq@‚ÄèÛƒ */
- $"BDA4 4506 3FA4 5286 5D63 00F7 905D A740" /* ½¤E.?¤R†]c.÷]§@ */
- $"5251 07FA 22F8 1334 FBA6 5640 7199 FA41" /* RQ.ú"ø.4û¦V@q™úA */
- $"A3C7 3CC1 ECF5 7F43 A9AE FBD5 C1F0 18B3" /* £Ç<Áìõ.C©®ûÕÁð.³ */
- $"7072 4809 0A4C 8127 6E10 5F7C 335C CC28" /* prHÆÂL'n._|3\Ì( */
- $"B723 3D12 724D 3DE5 37B3 1C2A 136D 2258" /* ·#=.rM=å7³.*.m"X */
- $"DCE6 BFA4 0DAD FB6E 72C1 70F7 6D71 785D" /* Üæ¿¤.­ûnrÁp÷mqx] */
- $"BC75 69CE CE3B CF7A 170E 8343 CBA9 DE66" /* ¼uiÎÎ;Ïz..ƒCË©Þf */
- $"06ED 779C AA9F F28D 943D 5E3E DEDE 4769" /* .íwœªŸò”=^>ÞÞGi */
- $"289C 5523 9792 EFAC 19A6 A945 B504 9446" /* (œU#—’ï¬.¦©Eµ.”F */
- $"A4DF BAA6 B5EB BAEF 7B92 3E08 6D17 870F" /* ¤ßº¦µëºï{’>.m.‡. */
- $"9E0A 487E 8A60 90B5 E555 CD4F D2F1 FE67" /* žÂH~Š`µåUÍOÒñþg */
- $"88DE BB6A E653 A2B6 F9C7 B226 2544 A167" /* ˆÞ»jæS¢¶ùDz&%D¡g */
- $"5DF7 5F35 F38B DB99 30F8 C210 AF41 C7A4" /* ]÷_5ó‹Û™0øÂ.¯AǤ */
- $"167B 30B4 8B8D 0821 4ADB EFC6 5728 A86D" /* .{0´‹.!JÛïÆW(¨m */
- $"99A8 2A1D 51E2 4CE5 AEA5 7ECC 23CB 628B" /* ™¨*.QâL宥~Ì#Ëb‹ */
- $"E438 F41A A280 CF2E 8E51 5004 A9BA 64AB" /* ä8ô.¢€Ï.ŽQP.©ºd« */
- $"B0AA 608C 8C19 38F7 567B 0C45 B7C5 0E2D" /* °ª`ŒŒ.8÷V{.E·Å.- */
- $"0F3D A192 B0F5 A567 4EE1 9FF5 F085 979A" /* .=¡’°õ¥gNáŸõð…—š */
- $"13DA 6FC3 89D0 0370 C986 5F44 AADD CAB9" /* .ÚoÉÐ.pɆ_DªÝʹ */
- $"FBD0 8CDE 18D9 8FED 715E 264F 0D69 2CEF" /* ûÐŒÞ.Ùíq^&O.i,ï */
- $"63F0 7A64 D65B 094A 6976 E6D4 E3DC 1583" /* cðzdÖ[ÆJivæÔãÜ.ƒ */
- $"FE8C BD22 992E 3FDB AF18 03A7 0A74 8333" /* þŒ½"™.?Û¯..§Âtƒ3 */
- $"76E3 5195 C7FA A180 5123 7E0C 544B 9C8C" /* vãQ•Çú¡€Q#~.TKœŒ */
- $"928D 3DF6 F330 4D6E 8049 11AF 064E 4E3B" /* ’=öó0Mn€I.¯.NN; */
- $"B937 EE03 A4D2 F530 4513 47F0 5E98 E060" /* ¹7î.¤Òõ0E.Gð^˜à` */
- $"72C6 46EC B761 FAB4 B0FA 9A80 FF78 5408" /* rÆFì·aú´°úš€ÿxT. */
- $"9152 452E 0111 2383 5E5F 6C4F FC53 0EDE" /* ‘RE...#ƒ^_lOüS.Þ */
- $"1092 66D3 5F38 1AC8 1412 561A 4017 9110" /* .’fÓ_8.È..V.@.‘. */
- $"CA19 3E6F 8803 0908 5F57 A2E2 4744 E3C4" /* Ê.>oˆ.Æ._W¢âGDãÄ */
- $"F1BF 49F6 836F E294 610B 4098 2761 1502" /* ñ¿Iöƒoâ”a.@˜'a.. */
- $"CCB2 0C11 81DD 05B4 ACD8 8F28 C5DD 1DD8" /* ̲..Ý.´¬Ø(ÅÝ.Ø */
- $"58E0 C1E1 70A8 42BF 456F FE20 1261 1F81" /* XàÁáp¨B¿Eoþ .a. */
- $"08AC FEB1 F89C 3576 EF94 A20C 255F 3B3F" /* .¬þ±øœ5v.%_;? */
- $"5E6B B0C0 4B3F EADC 8536 55E9 8144 C946" /* ^k°ÀK?êÜ…6UéDÉF */
- $"7613 8662 DCB1 C761 2BDA 412D C7D6 2D5C" /* v.†bܱÇa+ÚA-ÇÖ-\ */
- $"BCC0 F84E 54E4 9B0B BDF7 4F45 FCA6 D6AE" /* ¼ÀøNTä›.½÷OEü¦Ö® */
- $"1754 31D1 E6CB 94F4 D163 2B1D 017D 4171" /* .T1ÑæË”ôÑc+..}Aq */
- $"ABE0 0285 395D 3D23 42D7 E641 348A 0C2E" /* «à.…9]=#B׿A4Š.. */
- $"9C16 42C9 8E99 B654 8046 C365 EA71 CE64" /* œ.BÉŽ™¶T€FÃeêqÎd */
- $"B762 0E4D 7C48 617B CDB9 6264 2C81 4A9F" /* ·b.M|Ha{͹bd,JŸ */
- $"8600 50B2 B985 EB73 DB96 82EA FF7D 1E50" /* †.P²¹…ësÛ–‚êÿ}.P */
- $"6A49 AEA3 78E3 2DFD 0D59 3013 F257 AAA9" /* jI®£xã-ý.Y0.òWª© */
- $"0E5D 81DA E983 8D48 41BE DF0B FB34 AEA5" /* .]ÚéƒHA¾ß.û4®¥ */
- $"07B6 B0AA 1E53 1D9F B9C7 4CE5 8D46 6151" /* .¶°ª.S.Ÿ¹ÇLåFaQ */
- $"8000 0C24 1D66 1946 1073 4456 2361 E486" /* €..$.f.F.sDV#aä† */
- $"120F 29F0 6121 2D6A AF51 0C82 F68C B571" /* ..)ða!-j¯Q.‚öŒµq */
- $"77AD BE59 9145 D105 DE8C 9500 0000 0000" /* w­¾Y‘EÑ.ÞŒ•..... */
- $"0000 0032 BC9A BD52 00B4 6C6F 3753 1A96" /* ...2¼š½R.´lo7S.– */
- $"9B00 FCD3 F055 A11A AFB1 FB95 1610 88D0" /* ›.üÓðU¡.¯±û•..ˆÐ */
- $"8D32 9653 FC10 55FD B965 C1A9 B6BD 2245" /* 2–Sü.Uý¹eÁ©¶½"E */
- $"D48B 8230 2EF5 56F1 6618 9F91 FEC4 4106" /* Ô‹‚0.õVñf.Ÿ‘þÄA. */
- $"F23B 7C8A 0320 79EA D7A0 D75F 09BD B985" /* ò;|Š. yê× ×_ƽ¹… */
- $"C22B E2F0 0508 64BA AA2F 2414 19D7 311D" /* Â+âð..dºª/$..×1. */
- $"F709 E05C 809B 9E62 83F8 FF13 2DE3 01D6" /* ÷Æà\€›žbƒøÿ.-ã.Ö */
- $"8ADC F118 5A80 77C8 DABC 2FB5 CEF6 FCFB" /* ŠÜñ.Z€wÈÚ¼/µÎöüû */
- $"7A94 2773 6CEC FAE2 7865 753C E612 E4AF" /* z”'slìúâxeu<æ.ä¯ */
- $"657C 5C67 8FB3 1E56 A319 1ED1 FE48 0D8D" /* e|\g³.V£..ÑþH. */
- $"2431 B10B 8E15 0A4B FF7F 7EB8 D068 5015" /* $1±.Ž.ÂKÿ.~¸ÐhP. */
- $"151E C37C 0390 F6CC 64A8 0000 0000 0000" /* ..Ã|.öÌd¨...... */
- $"0000 0002 5991 79E8 2B17 082C ABCB DA90" /* ....Y‘yè+..,«ËÚ */
- $"CE92 8CB0 E992 0710 2B8F CAAB D217 C4E9" /* Î’Œ°é’..+Ê«Ò.Äé */
- $"E55E 11D2 6200 B530 5EF4 6932 1CBF EA6C" /* å^.Òb.µ0^ôi2.¿êl */
- $"E58D 2AA9 68C2 89FF 7903 A6ED D674 F1FC" /* å*©h‰ÿy.¦íÖtñü */
- $"A256 3564 F7E0 4DDF CDA1 2729 F7FF 6EB2" /* ¢V5d÷àMßÍ¡')÷ÿn² */
- $"9D35 70A9 5447 924B B8E1 71D3 4A8A DECB" /* 5p©TG’K¸áqÓJŠÞË */
- $"93E1 8FA0 140E C9B7 6124 8020 D660 3D22" /* “á ..É·a$€ Ö`=" */
- $"C708 222E 7289 B890 0002 00E1 2BC6 84B9" /* Ç.".r‰¸...á+Æ„¹ */
- $"25DF 442F 97FF 7FEF 68EC 7325 B92C A150" /* %ßD/—ÿ.ïhìs%¹,¡P */
- $"EE19 48C3 2540 0000 0000 0000 0000 0749" /* î.HÃ%@.........I */
- $"DD4A 9891 375B B0E0 C176 A698 672E F295" /* ÝJ˜‘7[°àÁv¦˜g.ò• */
- $"0311 7B3E 2B87 B4B8 7FB3 5DF7 9C67 CBEA" /* ..{>+‡´¸.³]÷œgËê */
- $"6A19 4107 C9F4 2B19 6829 179A 3FFF 7E8C" /* j.A.Éô+.h).š?ÿ~Œ */
- $"44A2 15E8 8E37 B422 F825 1862 58FF 7FFE" /* D¢.èŽ7´"ø%.bXÿ.þ */
- $"8EA1 D38C 727A 3071 1FF0 541F 6AB4 EA83" /* Ž¡ÓŒrz0q.ðT.j´êƒ */
- $"44A0 086A BAD7 6966 FC5D 0E72 A66C C301" /* D .jº×ifü].r¦lÃ. */
- $"3E1F B82C 9192 20D5 0322 858F 224C 87F5" /* >.¸,‘’ Õ."…"L‡õ */
- $"E940 85ED 7B36 EC96 D05C 21FF 7B10 59E1" /* é@…í{6ì–Ð\!ÿ{.Yá */
- $"E125 6C79 7852 2031 F3BA 34FB 6E57 BC3B" /* á%lyxR 1óº4ûnW¼; */
- $"69F0 C303 3A2A A573 D1E0 9836 C703 D02C" /* iðÃ.:*¥sÑà˜6Ç.Ð, */
- $"58CC 3DA7 FF0D 4301 F607 07C1 31FA 7F66" /* XÌ=§ÿ.C.ö..Á1ú.f */
- $"89BD A759 90CD 107A E5BD 6398 D7BE F7BB" /* ‰½§YÍ.zå½c˜×¾÷» */
- $"E273 D09A F8EE D21B 1015 A513 18F5 5C7D" /* âsКøîÒ...¥..õ\} */
- $"FD20 E7C9 C6BE 3105 7A4B 831D 251B 4C36" /* ý çÉÆ¾1.zKƒ.%.L6 */
- $"2A49 3EAC 1A86 9F87 09CC 0B00 2CF4 643C" /* *I>¬.†Ÿ‡ÆÌ..,ôd< */
- $"7012 8574 D28F 952D E959 1093 FE7E F021" /* p.…tÒ•-éY.“þ~ð! */
- $"028C 74ED 0E90 8DCD 5F06 B4BE EA1A 4C53" /* .Œtí.Í_.´¾ê.LS */
- $"A47F 3706 93CB 8FAB 7864 D123 4A39 B6BA" /* ¤.7.“Ë«xdÑ#J9¶º */
- $"CDCB 8AA9 2128 54FA CFB5 C4E1 F470 AD6E" /* ÍËŠ©!(TúϵÄáôp­n */
- $"6A05 07C9 72AA 562E F22F C922 BCF9 7DDF" /* j..ÉrªV.ò/É"¼ù}ß */
- $"3565 1AD4 F707 7DC0 1038 129E 4EA0 297E" /* 5e.Ô÷.}À.8.žN )~ */
- $"1037 3516 64BB FF75 539A 5C03 F7A3 C14D" /* .75.d»ÿuSš\.÷£ÁM */
- $"C617 50C8 14F1 7C95 0372 1443 C3F0 7ED4" /* Æ.PÈ.ñ|•.r.CÃð~Ô */
- $"EFDA FA88 BDD2 E947 7A43 A4A3 2339 CD58" /* ïÚúˆ½ÒéGzC¤£#9ÍX */
- $"526C 8407 8211 1949 6431 DB89 390B EB27" /* Rl„.‚..Id1Û‰9.ë' */
- $"9975 F04F D507 AC80 5D51 95B0 992A 1AC6" /* ™uðOÕ.¬€]Q•°™*.Æ */
- $"8699 86CC E64E 441C 2EFD 4F8C 70C1 DB2A" /* †™†ÌæND..ýOŒpÁÛ* */
- $"5395 8DF7 E279 AA65 BA32 2FD1 48C9 F400" /* S•÷âyªeº2/ÑHÉô. */
- $"D0EA 663D 92FF 053E 130C A1A9 491B E583" /* Ðêf=’ÿ.>..¡©I.åƒ */
- $"6133 2EE1 AFBE 86B8 D218 B698 906D A5B9" /* a3.᯾†¸Ò.¶˜m¥¹ */
- $"ACD3 9DC7 8720 C668 E134 1A1C 9C71 EA49" /* ¬ÓLJ Æhá4..œqêI */
- $"7AE9 9276 56E9 78BB 5679 18E2 6044 2763" /* zé’vVéx»Vy.â`D'c */
- $"2342 64F4 3952 2712 F704 B2E8 C1D2 35CC" /* #Bdô9R'.÷.²èÁÒ5Ì */
- $"F0AB 5ABD 61A0 1CD5 5316 0E78 22E6 B807" /* ð«Z½a .ÕS..x"æ¸. */
- $"8774 CA36 91EF 0BFF D969 6330 3900 00D1" /* ‡tÊ6‘ï.ÿÙic09..Ñ */
- $"2300 0000 0C6A 5020 200D 0A87 0A00 0000" /* #....jP .‡Â... */
- $"1466 7479 706A 7032 2000 0000 006A 7032" /* .ftypjp2 ....jp2 */
- $"2000 0000 4F6A 7032 6800 0000 1669 6864" /* ...Ojp2h....ihd */
- $"7200 0002 0000 0002 0000 0407 0701 0000" /* r............... */
- $"0000 0F63 6F6C 7201 0000 0000 0010 0000" /* ...colr......... */
- $"0022 6364 6566 0004 0000 0000 0001 0003" /* ."cdef.......... */
- $"0001 0000 0001 0000 0002 0002 0000 0003" /* ................ */
- $"0000 0000 6A70 3263 FF4F FF51 0032 0000" /* ....jp2cÿOÿQ.2.. */
- $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */
- $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */
- $"0004 0701 0107 0101 0701 0107 0101 FF52" /* ..............ÿR */
- $"000C 0000 0001 0105 0404 0001 FF5C 0013" /* ............ÿ\.. */
- $"2050 5858 6058 5860 5858 6058 5858 5050" /* PXX`XX`XX`XXXPP */
- $"58FF 6400 1100 014B 616B 6164 752D 7635" /* Xÿd....Kakadu-v5 */
- $"2E32 2E31 FF90 000A 0000 0000 D036 0001" /* .2.1ÿ.Â....Ð6.. */
- $"FF93 CFC2 DC03 54F9 36EC A8DC 2A8C 3701" /* ÿ“ÏÂÜ.Tù6ì¨Ü*Œ7. */
- $"118B 95C3 F2B2 5A7A 0428 C30A 2C64 B704" /* .‹•Ãò²Zz.(ÃÂ,d·. */
- $"5C3C 6DED 8696 4890 6404 5638 430C 59C5" /* \<m톖Hd.V8C.YŠ*/
- $"D913 B06B 0B08 E00E 1802 6D82 7225 E695" /* Ù.°k..à...m‚r%æ• */
- $"9F1E E7B0 D1DF 323C 61DC 1F25 E3FF 83E2" /* Ÿ.ç°Ñß2<aÜ.%ãÿƒâ */
- $"A49A DED4 4495 A948 5B70 9E5A 01F1 2431" /* ¤šÞÔD•©H[pžZ.ñ$1 */
- $"8EE5 2B54 2863 9041 FAE9 9E9F 1B85 E206" /* Žå+T(cAú鞟.…â. */
- $"4104 106C 5027 632A 8716 C3A5 F047 B3D5" /* A..lP'c*‡.Ã¥ðG³Õ */
- $"EE2B 19CD 2B75 17D8 DFB6 E2BF 491E A41F" /* î+.Í+u.Øß¶â¿I.¤. */
- $"BC48 3493 DEFB 453D 64DE DEA0 68DB EF5B" /* ¼H4“ÞûE=dÞÞ hÛï[ */
- $"1E69 8F3F C55C 1FF6 1823 1543 F483 DF20" /* .i?Å\.ö.#.Côƒß */
- $"F5B4 08F4 5D20 4DF0 7D7D 2007 2ACA 5B5E" /* õ´.ô] Mð}} .*Ê[^ */
- $"159F EF4A 505D 811D A8A3 5476 5539 B45B" /* .ŸïJP].¨£TvU9´[ */
- $"3113 1AC7 00F3 F1A7 E9E3 9E88 5D91 6CD5" /* 1..Ç.óñ§é㞈]‘lÕ */
- $"2CC0 F92B 2063 FF29 4B0E 775A 06EE 75CC" /* ,Àù+ cÿ)K.wZ.îuÌ */
- $"DA54 AC2F B72D 1C25 1E46 A4F8 C3E1 7D8D" /* ÚT¬/·-.%.F¤øÃá} */
- $"85AE BBE6 3DBE EC4A 35F7 3B36 1FBF BC38" /* …®»æ=¾ìJ5÷;6.¿¼8 */
- $"2DC1 785C D644 2BED AB51 1950 2643 8730" /* -Áx\ÖD+í«Q.P&C‡0 */
- $"2AE9 E4EB 1B8E 8F90 BA0C FF2F 6F65 5F28" /* *éäë.Žº.ÿ/oe_( */
- $"1A3F 9398 FF20 01A2 69A0 02C9 8D1B C3EA" /* .?“˜ÿ .¢i .É.Ãê */
- $"A600 6417 3CA3 9E84 93EF 063D 59DC 702C" /* ¦.d.<£ž„“ï.=YÜp, */
- $"959D C3A6 B1ED DEF1 F321 5BA6 FCCD 7762" /* •æ±íÞñó![¦üÍwb */
- $"6C23 7398 AA59 4BBA 0052 B8A7 0608 1AAC" /* l#s˜ªYKº.R¸§...¬ */
- $"5B2E AF60 17F4 278E 6433 6F75 7839 CED2" /* [.¯`.ô'Žd3oux9ÎÒ */
- $"F32E 5D7D 9D40 B145 4CFB A25C D8D7 4BCB" /* ó.]}@±ELû¢\Ø×KË */
- $"956D 88DD 4B92 64BF 4CD4 AFD5 6E56 9859" /* •mˆÝK’d¿LÔ¯ÕnV˜Y */
- $"ABEF BB40 AD0E 6E1F 9B3B 16A3 D9D3 58DF" /* «ï»@­.n.›;.£ÙÓXß */
- $"584E C303 1DAD D18B 6082 9C29 88EB 5163" /* XNÃ..­Ñ‹`‚œ)ˆëQc */
- $"A42D 061A 1570 64A9 0F1C E00D 56D9 E0CB" /* ¤-...pd©..à.VÙàË */
- $"7C66 799C 8EB4 BFCA CF5C CFC2 B611 4F0C" /* |fyœŽ´¿ÊÏ\϶.O. */
- $"AFDE 008C 3580 A270 0C1A 3737 50A1 9A89" /* ¯Þ.Œ5€¢p..77P¡š‰ */
- $"2546 BB2C 62A0 57BE 59CB C00A 1EE9 0F1D" /* %F»,b W¾YËÀÂ.é.. */
- $"C528 40D4 EA69 D281 AED4 B078 F27A 0B42" /* Å(@ÔêiÒ®Ô°xòz.B */
- $"7AD2 DADD 146B 7FFF 223D 6A74 2041 4FCF" /* zÒÚÝ.k.ÿ"=jt AOÏ */
- $"46E1 60C8 9ABE 841E E18D 1712 DB6D 902B" /* Fá`Èš¾„.á..Ûm+ */
- $"7BE6 56DA 7E4B 1704 A373 2802 B120 0184" /* {æVÚ~K..£s(.± .„ */
- $"0681 4499 2739 CE73 9CE8 99D8 C352 337C" /* .D™'9Îsœè™ØÃR3| */
- $"06AB BB71 6257 16EF B535 4972 8C2F 2EE0" /* .«»qbW.ïµ5IrŒ/.à */
- $"85CC 8431 D867 47EE CC43 6E87 A485 2316" /* …Ì„1ØgGîÌCn‡¤…#. */
- $"4927 AE22 C12D 49CE 739C E61C 97D0 99CC" /* I'®"Á-IÎsœæ.—Ð™Ì */
- $"3DC5 F26B 1A31 E742 3E56 464B 2944 108E" /* =Åòk.1çB>VFK)D.Ž */
- $"CB0C F4C7 E144 47E1 47C1 F6BD 8089 21DB" /* Ë.ôÇáDGáGÁö½€‰!Û */
- $"8279 4533 01BF B9CC C444 AD53 5F75 D706" /* ‚yE3.¿¹ÌÄD­S_u×. */
- $"3FDD CA27 5D6C 9F54 1CCF F838 38E4 B2E4" /* ?ÝÊ']lŸT.Ïø88ä²ä */
- $"F9FF 429F 59FE D27B 4A5E A69F 2C21 38F6" /* ùÿBŸYþÒ{J^¦Ÿ,!8ö */
- $"5A74 D405 2FEE 50B8 E5F1 C489 2693 5B33" /* ZtÔ./îP¸åñĉ&“[3 */
- $"D2C2 9DEC 68ED F55C 1FAC 1401 8D66 795A" /* ÒÂìhíõ\.¬..fyZ */
- $"F5F3 27A3 5874 6681 9AC6 F41D A4E6 40DA" /* õó'£XtfšÆô.¤æ@Ú */
- $"3EE5 CCEE 340C AF72 87FD 6B2A EB94 88EC" /* >åÌî4.¯r‡ýk*딈ì */
- $"A61D A536 7AC2 C6B8 85D9 CEBD 146C 83B5" /* ¦.¥6zÂÆ¸…Ùν.lƒµ */
- $"F5E0 A3C7 B524 BC64 B6B5 91A6 BF91 C547" /* õà£Çµ$¼d¶µ‘¦¿‘ÅG */
- $"BD87 811F D58E 8E51 BB89 FA6C 5257 33D9" /* ½‡.ÕŽŽQ»‰úlRW3Ù */
- $"A964 A4AB 3BB9 9608 BECC 0D9C D6B9 3D3A" /* ©d¤«;¹–.¾Ì.œÖ¹=: */
- $"CB64 28BE 3B07 6318 DF9D C134 9F16 567A" /* Ëd(¾;.c.ßÁ4Ÿ.Vz */
- $"8127 5FFD F396 BA0C B86F AA17 2301 022A" /* '_ýó–º.¸oª.#..* */
- $"3742 CE95 B1AF F858 C503 8156 35E0 8F2C" /* 7BΕ±¯øXÅ.V5à, */
- $"67D7 2D41 1F0B 5284 1535 AF16 6540 FB65" /* g×-A..R„.5¯.e@ûe */
- $"65BC 5F6B 136D 73A5 1C5D 3D92 FF5F 8494" /* e¼_k.ms¥.]=’ÿ_„” */
- $"FDBF E0C5 821F 072A 0EEB B855 6B42 CEE8" /* ý¿àÅ‚..*.ë¸UkBÎè */
- $"ABEE 381E 894E DF1E 29DD 4B78 3F0A F5EB" /* «î8.‰Nß.)ÝKx?Âõë */
- $"B9F8 61B8 8266 3BD8 A2AC 5BC1 38F4 5098" /* ¹øa¸‚f;Ø¢¬[Á8ôP˜ */
- $"3951 2437 1798 7BF9 EA00 12BF CF3E 9166" /* 9Q$7.˜{ùê..¿Ï>‘f */
- $"8253 6FF0 B942 70D7 C729 0866 33F7 3484" /* ‚Soð¹Bp×Ç).f3÷4„ */
- $"ADF8 C3D2 4EF6 1DF4 0E6F 8E64 B470 1D5E" /* ­øÃÒNö.ô.oŽd´p.^ */
- $"F311 9BD1 EDE1 BA5D 7601 2053 D70A FDCD" /* ó.›Ñíáº]v. S×ÂýÍ */
- $"82C0 1BDA A35C FAD2 67AD E569 7851 10A7" /* ‚À.Ú£\úÒg­åixQ.§ */
- $"EF9A 3533 EC03 E813 08B6 D984 1A1D 3DC0" /* ïš53ì.è..¶Ù„..=À */
- $"7C8E E03E 4A44 03E4 7894 FF1F 080E 2BFD" /* |Žà>JD.äx”ÿ...+ý */
- $"EEB4 E64A C757 389B 5780 3AF8 248C 580D" /* î´æJÇW8›W€:ø$ŒX. */
- $"461B D417 66BA CEB2 2042 3C84 DAF9 C127" /* F.Ô.fºÎ² B<„ÚùÁ' */
- $"63E9 168C A9E3 D418 61E8 C46C CF01 F59B" /* cé.Œ©ãÔ.aèÄlÏ.õ› */
- $"4518 8833 3E62 5B14 BFD1 41A8 45D6 D311" /* E.ˆ3>b[.¿ÑA¨EÖÓ. */
- $"8431 80DB 1FD5 5839 DE81 BCD9 EAFB EE26" /* „1€Û.ÕX9Þ¼Ùêûî& */
- $"33DD 9E73 0B6F F957 26EE E7BA E0DA FF22" /* 3Ýžs.oùW&îçºàÚÿ" */
- $"EA50 24BF A182 089D 749A 6AAF BFF2 224D" /* êP$¿¡‚.tšj¯¿ò"M */
- $"30D4 11D0 E07A A012 587A 0633 92B4 CBFC" /* 0Ô.Ðàz .Xz.3’´Ëü */
- $"8E1B E5AC 9025 A74D 2819 3F9D 8132 B795" /* Ž.å¬%§M(.?2·• */
- $"458E 4651 1589 158D D24C A5B0 CBFA 359E" /* EŽFQ.‰.ÒL¥°Ëú5ž */
- $"BDB0 E4FB BFE3 5854 3E88 A646 71B1 9CB2" /* ½°äû¿ãXT>ˆ¦Fq±œ² */
- $"BB4E BA8E E170 8CBF C1F5 3141 F537 C0FA" /* »NºŽápŒ¿Áõ1Aõ7Àú */
- $"9780 6448 BA3B 94D6 3E8B 7AF0 0B5A C7A2" /* —€dHº;”Ö>‹zð.ZÇ¢ */
- $"4D05 C6BB 7F47 7102 F66E E4E8 3681 1C97" /* M.Æ».Gq.önäè6.— */
- $"0996 4491 F713 2A24 3756 2715 4B55 762F" /* Æ–D‘÷.*$7V'.KUv/ */
- $"78CB 2608 0563 73F7 5626 9F35 0C54 6822" /* xË&..cs÷V&Ÿ5.Th" */
- $"F061 792A 4AFC 163A 9F83 8F82 638B 524D" /* ðay*Jü.:Ÿƒ‚c‹RM */
- $"C21C 3735 DB76 6F4B 01F2 3E7E 5755 5945" /* Â.75ÛvoK.ò>~WUYE */
- $"6149 AAEE 1A88 7748 DC47 79E4 0660 318C" /* aIªî.ˆwHÜGyä.`1Œ */
- $"AA94 E92D 9879 C9C1 AC17 C828 7BBB 997A" /* ª”é-˜yÉÁ¬.È({»™z */
- $"315E 858F F31D 3522 A6D2 B3BD E548 DBA2" /* 1^…ó.5"¦Ò³½åHÛ¢ */
- $"3274 749B 11C1 9570 D715 0350 4CC4 6820" /* 2tt›.Á•p×..PLÄh */
- $"560A 8542 A38D 913B 3863 FF5C 97F2 9BA5" /* VÂ…B£‘;8cÿ\—ò›¥ */
- $"893F 6C9B 15A2 EE40 BCD6 2676 80A9 AC89" /* ‰?l›.¢î@¼Ö&v€©¬‰ */
- $"9054 849D 859C 8DCD 181B 64F4 6D7B 71B4" /* T„…œÍ..dôm{q´ */
- $"FBD3 0C84 21D4 CC6C CF84 F40A A3CD C958" /* ûÓ.„!ÔÌlÏ„ô£ÍÉX */
- $"928E 97E5 346C 6497 2888 7903 5B0B 3277" /* ’Ž—å4ld—(ˆy.[.2w */
- $"B4D6 9AA4 86C3 C691 CA1A 3C92 FCFB 02DE" /* ´Öš¤†ÃÆ‘Ê.<’üû.Þ */
- $"A25E 5C5C C6A8 1CE2 F5B5 88AB 3673 F912" /* ¢^\\ƨ.âõµˆ«6sù. */
- $"96AF E6BC 67FF 40CC 068D C6E3 8435 48AF" /* –¯æ¼gÿ@Ì.Æã„5H¯ */
- $"B929 F509 0F59 3410 A9A6 1087 8352 11EC" /* ¹)õÆ.Y4.©¦.‡ƒR.ì */
- $"23CF CD2E 3F05 487E 0740 9BE7 236F 56FB" /* #ÏÍ.?.H~.@›ç#oVû */
- $"D0F4 677F 9514 C6E9 50BB A61A 6135 73FB" /* Ðôg.•.ÆéP»¦.a5sû */
- $"37AA FA5C 0967 671C 8485 5326 6EB5 4955" /* 7ªú\Ægg.„…S&nµIU */
- $"1AAE 5FCE C271 D992 9E8C B0DF 7795 E0F2" /* .®_ÎÂqÙ’žŒ°ßw•àò */
- $"A17A B50F E53A FE12 756F D1A1 5CE1 7C9B" /* ¡zµ.å:þ.uoÑ¡\á|› */
- $"D185 2C1A 9224 BC62 5C98 FA35 1649 6EA7" /* Ñ…,.’$¼b\˜ú5.In§ */
- $"4C7C C191 DF92 9D7A 6FE9 71D9 9A11 5A19" /* L|Á‘ß’zoéqÙš.Z. */
- $"214D F951 38FA C459 E39A 6DAE 1253 31DF" /* !MùQ8úÄYãšm®.S1ß */
- $"B335 3337 39D2 7591 BFC1 31E6 887A 8BAB" /* ³5379Òu‘¿Á1æˆz‹« */
- $"ECCD 7A58 8E4A AD65 A7E1 5FC6 8EB0 DA82" /* ìÍzXŽJ­e§á_ÆŽ°Ú‚ */
- $"0F81 6849 5CE5 AB32 B763 1227 3F4C 5691" /* .hI\å«2·c.'?LV‘ */
- $"43C7 DD24 E8D9 C4F3 7BB0 4666 7A24 1C5B" /* CÇÝ$èÙÄó{°Ffz$.[ */
- $"F57D 719F 2BDB 3794 66BA BBB6 9D8D A662" /* õ}qŸ+Û7”fº»¶¦b */
- $"CF99 4DDC E533 96D6 EEE0 3FC7 BFB8 B1B7" /* Ï™MÜå3–Öîà?Ç¿¸±· */
- $"9AE3 57C7 E1A8 B1F8 6C5C 3F0D 19C1 812D" /* šãWÇᨱøl\?..Á- */
- $"8D31 C88B C396 B5E7 3CE0 4E2C AE73 7876" /* 1ȋÖµç<àN,®sxv */
- $"0436 A295 BEC6 BDF1 C604 C41C 94E6 E7C1" /* .6¢•¾Æ½ñÆ.Ä.”æçÁ */
- $"AC78 356A B92A DB37 3360 3372 6638 0C5C" /* ¬x5j¹*Û73`3rf8.\ */
- $"F388 7CDE 4045 060F E713 C4C3 321E E08B" /* óˆ|Þ@E..ç.ÄÃ2.à‹ */
- $"0810 71EE A6AB C032 2B85 C34C 2671 8143" /* ..qÀ2+…ÃL&qC */
- $"AFDE 07D1 A40C D86A ADBE B961 EAA3 54BD" /* ¯Þ.Ѥ.Øj­¾¹aê£T½ */
- $"804D 6FA9 AA3F 7FBE BCD9 E785 A230 EA4E" /* €Mo©ª?.¾¼Ùç…¢0êN */
- $"1C08 1DF6 8373 7754 5039 7854 1192 1512" /* ...öƒswTP9xT.’.. */
- $"B956 E9A7 575E E3DB F5F9 4B02 F739 F2BB" /* ¹Vé§W^ãÛõùK.÷9ò» */
- $"91B2 73E1 3D19 EBB6 AD2F 291C 5BAC 5EEA" /* ‘²sá=.ë¶­/).[¬^ê */
- $"EEDF 8DA7 5FCA 8E8C 952D 8FD0 441C 5BA4" /* îß§_ÊŽŒ•-ÐD.[¤ */
- $"8AF6 21BE 1FAF DAE3 DADD EA91 EF73 58A0" /* Šö!¾.¯ÚãÚÝê‘ïsX  */
- $"29E6 89B2 E279 B02A D092 DD08 6187 9095" /* )扲ây°*Ð’Ý.a‡• */
- $"5C85 C903 0DD2 9ED3 538B D9BB E936 8ABB" /* \…É..ÒžÓS‹Ù»é6Š» */
- $"E203 DD03 2944 5317 7BC3 0297 2125 F198" /* â.Ý.)DS.{Ã.—!%ñ˜ */
- $"D117 8DDB E382 71F8 D0A7 14B1 6D7A A0EB" /* Ñ.Ûã‚qøÐ§.±mz ë */
- $"7C6F 7651 D2EC ECA7 F670 D09F 6CF6 30DB" /* |ovQÒìì§öpПlö0Û */
- $"0830 39B5 BC45 3915 4054 4490 A7BA 5CEC" /* .09µ¼E9.@TD§º\ì */
- $"D37B FBC2 7890 B18F DEEA 4966 D46D 5FD2" /* Ó{ûÂx±ÞêIfÔm_Ò */
- $"7811 AAD0 8EBF FB40 0F30 D8A4 2B71 5A03" /* x.ªÐŽ¿û@.0ؤ+qZ. */
- $"636A C360 C889 891D D420 A828 E337 41CC" /* cjÃ`ȉ‰.Ô ¨(ã7AÌ */
- $"3314 5473 B91F 7B78 2B3B AC7A 1127 F2DE" /* 3.Ts¹.{x+;¬z.'òÞ */
- $"E997 2101 6008 26AE 43D5 7CE7 8532 B9CE" /* é—!.`.&®CÕ|ç…2¹Î */
- $"A81A 710E 5D87 49D7 3EF6 65A3 D533 977E" /* ¨.q.]‡I×>öe£Õ3—~ */
- $"7BE9 0CA7 8B28 9ADA AF4F 45A5 99BD E21D" /* {é.§‹(šÚ¯OE¥™½â. */
- $"D4B1 BB33 2508 C8D1 31E5 E9FB F917 A8E1" /* Ô±»3%.ÈÑ1åéûù.¨á */
- $"2955 9008 F531 9010 575A 3AFB 59F4 CD63" /* )U.õ1.WZ:ûYôÍc */
- $"3EEE 2409 BCD4 E5F1 1418 6155 B6D7 A94B" /* >î$ƼÔåñ..aU¶×©K */
- $"1D48 79A8 2F32 0770 476B CE28 023A DC86" /* .Hy¨/2.pGkÎ(.:܆ */
- $"E008 813B E64A 39F5 58CE 3E75 DAA6 BD7A" /* à.;æJ9õXÎ>uÚ¦½z */
- $"1528 FF50 0738 C132 5569 3C99 C4BC A20F" /* .(ÿP.8Á2Ui<™Ä¼¢. */
- $"6DED 9310 6FE1 8BE4 BF4D D0B1 993E 0FD3" /* mí“.oá‹ä¿Mб™>.Ó */
- $"4938 1302 E4A8 FDA2 A7D2 4615 CD89 1E52" /* I8..ä¨ý¢§ÒF.͉.R */
- $"4160 51F8 BABB FEED 4281 0E0C 31CD 91D7" /* A`Qøº»þíB..1Í‘× */
- $"C7CF E302 E155 4188 0F06 097F 6906 2EC9" /* ÇÏã.áUAˆ..Æ.i..É */
- $"BE00 A1FB 0D99 8FB1 3B3D E3D3 70B8 4296" /* ¾.¡û.™±;=ãÓp¸B– */
- $"F199 E066 15B5 920C 38A2 695F F2E8 81E1" /* ñ™àf.µ’.8¢i_òèá */
- $"E0EC 34E5 97B3 9580 459F A2D9 E267 B847" /* àì4å—³•€EŸ¢Ùâg¸G */
- $"E302 3AA0 8631 8C61 5F8E 88DE 2FBB 394B" /* ã.: †1Œa_ŽˆÞ/»9K */
- $"B9EC 234B 6515 BDF3 BA80 AA30 3D50 2F90" /* ¹ì#Ke.½óº€ª0=P/ */
- $"C26A D743 2198 707A 2DC1 9C64 1647 1FA3" /* Âj×C!˜pz-Áœd.G.£ */
- $"43A2 B1C7 C95D 1E19 9650 E616 F24B C118" /* C¢±ÇÉ]..–Pæ.òKÁ. */
- $"FB68 CE23 485E BF50 ACF8 F669 B5A3 92AA" /* ûhÎ#H^¿P¬øöiµ£’ª */
- $"5625 BF48 8584 A6E7 DAC0 E203 2AF0 89A0" /* V%¿H…„¦çÚÀâ.*ð‰  */
- $"DB92 4924 9249 1BF5 D855 0470 51D0 AAE2" /* Û’I$’I.õØU.pQЪâ */
- $"A1E5 FBC9 CB80 1798 2EB3 EB1E 9FD4 46E7" /* ¡åûÉË€.˜.³ë.ŸÔFç */
- $"63DB F02E 204B D35F 54DE 0FD3 2F81 FB63" /* cÛð. KÓ_TÞ.Ó/ûc */
- $"9CEC 37F1 C9FF 5B63 B13D BFBD 1169 0415" /* œì7ñÉÿ[c±=¿½.i.. */
- $"0E97 DA89 25E3 92C7 01F5 50E6 2181 A536" /* .—Ú‰%ã’Ç.õPæ!¥6 */
- $"4020 C49B 1977 1BF5 5226 FD7D 668A D76F" /* @ Ä›.w.õR&ý}fŠ×o */
- $"2954 58F1 F44F 2935 F136 18BD C844 05FD" /* )TXñôO)5ñ6.½ÈD.ý */
- $"E325 9012 9E92 6EC3 E822 D06F A958 C54C" /* ã%.ž’nÃè"Ðo©XÅL */
- $"6A4D 0A98 093C 481D 1424 7964 E810 7A60" /* jM˜Æ<H..$ydè.z` */
- $"F2C0 8287 A7F4 B307 FBDF 2550 567E 01EA" /* òÀ‚‡§ô³.ûß%PV~.ê */
- $"2C45 4614 9A0A 04E8 397B 3DEC 6CDA CA95" /* ,EF.šÂ.è9{=ìlÚÊ• */
- $"B754 699A FF29 B46B D6E3 BB8C 153C AEC0" /* ·Tišÿ)´kÖ㻌.<®À */
- $"BEFF 46AD 744B B945 4C07 F7F7 178D 059E" /* ¾ÿF­tK¹EL.÷÷..ž */
- $"2E80 10C4 6DD6 F19E B649 73D6 8C57 7A6C" /* .€.ÄmÖñž¶IsÖŒWzl */
- $"45DE 3D43 22DE C54A DFCD 64EA 9D77 1AC6" /* EÞ=C"ÞÅJßÍdêw.Æ */
- $"E15E A9A7 0D83 D53C 100B EC25 2B93 1D27" /* á^©§.ƒÕ<..ì%+“.' */
- $"367A 864E D9C4 F0B9 DF5C 538D B2C0 24EE" /* 6z†NÙÄð¹ß\S²À$î */
- $"46E7 424C 2127 6BED B492 3354 86C9 D855" /* FçBL!'kí´’3T†ÉØU */
- $"317B 6BE2 8205 C07C 9A42 03E4 D6B0 0F93" /* 1{kâ‚.À|šB.äÖ°.“ */
- $"4400 AFF0 AE8C D6D6 6729 AEBE 9CDE 5C69" /* D.¯ð®ŒÖÖg)®¾œÞ\i */
- $"D95C 01A0 28AF 1E57 B12C CA6D F010 ED89" /* Ù\. (¯.W±,Êmð.í‰ */
- $"4C46 38AA BAFC D67E 9E98 C6CA 85E4 433E" /* LF8ªºüÖ~ž˜ÆÊ…äC> */
- $"C450 03B7 E8DE 17B3 9CE7 02E1 BE72 100B" /* ÄP.·èÞ.³œç.á¾r.. */
- $"2EF5 787D 0D12 FC3B 855A 3F97 1850 05EF" /* .õx}..ü;…Z?—.P.ï */
- $"A05D 7CC2 405B BA6D 9175 7C99 BE1C 2370" /*  ]|Â@[ºm‘u|™¾.#p */
- $"1F57 2085 13F8 B672 728D 1152 8232 1EE4" /* .W ….ø¶rr.R‚2.ä */
- $"A666 BFD0 06A8 6CFF 3D73 D895 5968 A54A" /* ¦f¿Ð.¨lÿ=sØ•Yh¥J */
- $"3219 63AB D4CD 8E7D 52F3 D260 CE4D E329" /* 2.c«ÔÍŽ}RóÒ`ÎMã) */
- $"F554 C837 34CC 2866 FA1E 1F34 B209 B8C3" /* õTÈ74Ì(fú..4²Æ¸Ã */
- $"097B 8DBC 8788 F621 2A57 5468 5FD8 852B" /* Æ{¼‡ˆö!*WTh_Ø…+ */
- $"08A9 45F3 71A8 A26B F63C 2DB1 750F A833" /* .©Eóq¨¢kö<-±u.¨3 */
- $"4767 6D8A B551 FF10 9E54 AD5D EE2E 2207" /* GgmеQÿ.žT­]î.". */
- $"44EA 0D21 75D4 779D E96D 49FF 47CE D775" /* Dê.!uÔwémIÿGÎ×u */
- $"D7B0 2380 5F1C 4185 EF0B BECB 1A55 9696" /* ×°#€_.A…ï.¾Ë.U–– */
- $"81B8 94F2 4F5B 07D8 D5EC 9E2A 049D 5E87" /* ¸”òO[.ØÕìž*.^‡ */
- $"2601 FB44 4AD5 C57B A7B0 8088 B723 134E" /* &.ûDJÕÅ{§°€ˆ·#.N */
- $"0B8A 375E B972 F34F F25A 2B68 3F15 4496" /* .Š7^¹róOòZ+h?.D– */
- $"5734 FE10 D742 67F9 9FFF 639C FAFD 23DB" /* W4þ.×BgùŸÿcœúý#Û */
- $"B90C F402 17F0 81C6 2656 EFD0 E011 C866" /* ¹.ô..ðÆ&VïÐà.Èf */
- $"15C8 4927 3415 BEC1 7876 E693 74CB DBEA" /* .ÈI'4.¾Áxvæ“tËÛê */
- $"7206 2246 23EC DCCA 51CD 72C1 8C41 1B85" /* r."F#ìÜÊQÍrÁŒA.… */
- $"AE9B 6FA5 4286 03FB 7000 D94F 5A8B 8A85" /* ®›o¥B†.ûp.ÙOZ‹Š… */
- $"2F34 7575 E7AB 08FF 3CBD 328D D95D BDF5" /* /4uuç«.ÿ<½2Ù]½õ */
- $"8070 0FAD B573 A91E 5F83 D32D 3337 A5B7" /* €p.­µs©._ƒÓ-37¥· */
- $"C6A7 3048 8D7C 3F01 F6BF 1BAB D684 0585" /* Ƨ0H|?.ö¿.«Ö„.… */
- $"798A A28D 68A6 4993 22BC F35C E3A7 BABE" /* yŠ¢h¦I“"¼ó\㧺¾ */
- $"0D5B 7E43 2B91 5DA6 6821 0495 4B22 33C0" /* .[~C+‘]¦h!.•K"3À */
- $"1217 1302 A7EB 1093 C8BD 3622 F0FD 14C3" /* ....§ë.“Ƚ6"ðý.à */
- $"EDBA 60FA B4C2 07D5 6D80 C177 9C23 24FE" /* íº`ú´Â.Õm€Áwœ#$þ */
- $"C9E7 77A7 1945 4C1A 8945 129A 2581 498D" /* Éçw§.EL.‰E.š%I */
- $"F2BD 5AD6 EF89 4D80 3EC2 DA29 E093 A726" /* ò½ZÖï‰M€>ÂÚ)à“§& */
- $"88F1 0796 E9F0 8F36 D342 7AD3 DEC2 2CCA" /* ˆñ.–éð6ÓBzÓÞÂ,Ê */
- $"45B9 35A0 DE31 D18B 2954 C38C 4B3A EEA2" /* E¹5 Þ1Ñ‹)TÃŒK:î¢ */
- $"5CD5 333D 6C59 23C7 17B3 C98C 65EE 8117" /* \Õ3=lY#Ç.³ÉŒeî. */
- $"22A2 574D D223 581B D09B 6473 3F85 6E2A" /* "¢WMÒ#X.Лds?…n* */
- $"81B5 F600 CAB6 1A02 3B24 D726 4344 536F" /* µö.ʶ..;$×&CDSo */
- $"99AB 09C8 96EA B41B 01C9 7AC8 9478 B8AB" /* ™«ÆÈ–ê´..ÉzÈ”x¸« */
- $"69E3 1BF1 1100 AFF3 C59C 01FB 8EF9 047D" /* iã.ñ..¯óÅœ.ûŽù.} */
- $"21EF 11DE D2CA BEE2 8372 5DDB C39C DE6E" /* !ï.ÞÒʾâƒr]ÛÜÞn */
- $"B652 35FE FDFB F1E8 2E91 778A 86C3 3117" /* ¶R5þýûñè.‘wІÃ1. */
- $"87D8 A7D5 7862 68B7 30C1 3B32 D209 0256" /* ‡Ø§Õxbh·0Á;2ÒÆ.V */
- $"2BF7 DFEF 17C3 FC30 EF1D 9327 7041 FC3C" /* +÷ßï.Ãü0ï.“'pAü< */
- $"674F 3069 DAB2 0EA5 BB48 DC2C DC66 F660" /* gO0iÚ².¥»HÜ,Üfö` */
- $"9C9B C7C8 3734 C68B 7D5A 60A1 DF3D D3A8" /* œ›ÇÈ74Æ‹}Z`¡ß=Ó¨ */
- $"E60C D15A 11C7 FB3B F75A 358E A7F7 16CB" /* æ.ÑZ.Çû;÷Z5ާ÷.Ë */
- $"67B5 097E E2A2 DE6C E40A FD52 8F75 43EF" /* gµÆ~â¢ÞläÂýRuCï */
- $"F5DF 5A51 BBF5 A074 791F F54F 9724 23C3" /* õßZQ»õ ty.õO—$#Ã */
- $"F5E6 C4A3 E22C 1E06 3B71 A9A2 1C17 0109" /* õæÄ£â,..;q©¢...Æ */
- $"1B59 2742 AB03 0497 3E5A AD73 7FD3 DA51" /* .Y'B«..—>Z­s.ÓÚQ */
- $"9F17 A10E B9CF 7503 3395 8788 9D9D 4A58" /* Ÿ.¡.¹Ïu.3•‡ˆJX */
- $"F9B8 4A61 3DDA 7489 8086 9EAC 4D7D 62DD" /* ù¸Ja=Út‰€†ž¬M}bÝ */
- $"BF8B 9462 1CC0 6912 69BE 3BFE FED7 3174" /* ¿‹”b.Ài.i¾;þþ×1t */
- $"CAA6 A806 FF59 B963 ABEE 508B F428 D15C" /* ʦ¨.ÿY¹c«îP‹ô(Ñ\ */
- $"82FC BA30 6907 C572 F2BD C0DB E9A2 44AF" /* ‚üº0i.Årò½ÀÛé¢D¯ */
- $"EED6 81F7 C602 F802 0374 CD1D 0F41 5E2E" /* îÖ÷Æ.ø..tÍ..A^. */
- $"F54F E7AB C492 54F8 C570 48A6 1603 35D3" /* õOç«Ä’TøÅpH¦..5Ó */
- $"EA1A 6A6D FD79 27E3 F928 4E16 3A2D 43FE" /* ê.jmýy'ãù(N.:-Cþ */
- $"6C3D AFC6 FA1C 578C 7BA9 7343 5B2C 7BB9" /* l=¯Æú.WŒ{©sC[,{¹ */
- $"0614 915A 24C4 CAC1 A2D3 0EAF EAE8 7257" /* ..‘Z$ÄÊÁ¢Ó.¯êèrW */
- $"EA2D 1ED2 3FFE 26A7 3E28 28D0 1AE1 D790" /* ê-.Ò?þ&§>((Ð.á× */
- $"A25D 1C6C BA20 E196 1EEC 9720 92EE 6E62" /* ¢].lº á–.ì— ’înb */
- $"E218 5609 944E 9A2E 9228 117A 6065 93FF" /* â.VÆ”Nš.’(.z`e“ÿ */
- $"2B32 B2C1 7876 E657 E39E 8641 F202 62B4" /* +2²ÁxvæW㞆Aò.b´ */
- $"20C5 99D9 F9E5 7D83 D807 EDB7 9A34 475B" /* Å™Ùùå}ƒØ.í·š4G[ */
- $"4F45 9AE8 ACD6 3098 A0C2 8D14 CBDB 9A2B" /* OEšè¬Ö0˜ Â.ËÛš+ */
- $"0EF7 CB30 8B49 169F 1ECD 6F33 F063 65DA" /* .÷Ë0‹I.Ÿ.Ío3ðceÚ */
- $"2A2F F0B0 EE29 91F7 CA11 748C 5E4E A447" /* *.ð°î)‘÷Ê.tŒ^N¤G */
- $"0F7F 4B32 DB7A 366C 27C4 F178 33B7 5E9B" /* ..K2Ûz6l'Äñx3·^› */
- $"BAAF 29CD A3EF 39BB 5FAD AD2B 5DCA 09E8" /* º¯)Í£ï9»_­­+]ÊÆè */
- $"DB9A DD07 84DD 870E 2A4C 850B BD04 7F9A" /* ÛšÝ.„݇.*L….½..š */
- $"1354 1DAA 0819 F583 1F47 5905 6597 5F07" /* .T.ª..õƒ.GY.e—_. */
- $"7ED6 DFFA BA65 FA6C D01D F65F F833 D479" /* ~ÖßúºeúlÐ.ö_ø3Ôy */
- $"BFD3 F3D8 57BB 3718 EBC8 5A2D 732E 464E" /* ¿ÓóØW»7.ëÈZ-s.FN */
- $"6B46 9512 778B 8066 D5DA D21A 819D 5384" /* kF•.w‹€fÕÚÒ.S„ */
- $"A84C AE56 92E2 2E9A 4D27 8A21 E02D 67FC" /* ¨L®V’â.šM'Š!à-gü */
- $"EAA4 B3D5 9306 1D06 CC9A 84C8 D6C4 C7E1" /* ꤳՓ...Ìš„ÈÖÄÇá */
- $"4F47 E168 43F0 6EB1 9276 ED11 2C29 F1CB" /* OGáhCðn±’ví.,)ñË */
- $"90AB 1975 3405 422B 78EC 7776 FA5C 0A2C" /* «.u4.B+xìwvú\Â, */
- $"F4B1 4F40 32CE D338 8911 EAB4 4CFC 7765" /* ô±O@2ÎÓ8‰.ê´Lüwe */
- $"D9ED C10E 114B 0909 1122 6832 A41E 3365" /* ÙíÁ..KÆÆ."h2¤.3e */
- $"96EF FC81 A398 2FE8 0464 5D18 0C9F C1AF" /* –ïü£˜/è.d]..ŸÁ¯ */
- $"8E6F 42CA BDC9 1DC4 770E 1C2E 01BD 62DB" /* ŽoBʽÉ.Äw....½bÛ */
- $"7798 4167 FC4F B27D D7E6 32CE 7F95 954F" /* w˜AgüO²}׿2Î.••O */
- $"653C 833E B4F1 C6C2 307E 0796 686E 6F5C" /* e<ƒ>´ñÆÂ0~.–hno\ */
- $"6EE2 6260 4C0B 5329 36D8 839E 5F08 319C" /* nâb`L.S)6؃ž_.1œ */
- $"4CAE 85DE 6B64 F427 1358 C9FF 57B9 AF78" /* L®…Þkdô'.XÉÿW¹¯x */
- $"332B 82A6 0EBF 0F83 7A3C 8004 1402 6A12" /* 3+‚¦.¿.ƒz<€...j. */
- $"FEE8 1612 2D8A 47FE 5BDE 2714 B393 E32F" /* þè..-ŠGþ[Þ'.³“ã/ */
- $"013E BD7E 14FA 285D BF61 7CDA 3A92 734A" /* .>½~.ú(]¿a|Ú:’sJ */
- $"520E 978D 8736 6AA9 847B 05C9 F28B 3D9A" /* R.—‡6j©„{.Éò‹=š */
- $"9B2E 721C 9082 3EC1 362C D516 D306 1EB9" /* ›.r.‚>Á6,Õ.Ó..¹ */
- $"A95C EC63 3111 4ED2 054A EFF8 F26A 0E36" /* ©\ìc1.NÒ.Jïøòj.6 */
- $"7445 26A0 464F CEDC 924D B183 FAEF 28F7" /* tE& FOÎÜ’M±ƒúï(÷ */
- $"AF76 2DBA F15C 4F45 4BFD E003 CDC1 A878" /* ¯v-ºñ\OEKýà.ÍÁ¨x */
- $"6FB4 207C 2A45 1ED9 CE49 2495 F6A9 77E8" /* o´ |*E.ÙÎI$•ö©wè */
- $"E7FF 7FFF 7FFF 7FFF 70EC F373 E872 28BA" /* çÿ.ÿ.ÿ.ÿpìósèr(º */
- $"A0BB 38E4 AC79 94DA 6562 832A 9A7B EEA8" /*  »8ä¬y”Úebƒ*š{î¨ */
- $"6B09 FEA7 9249 2005 E7D1 D721 4761 B6DB" /* kÆþ§’I .çÑ×!Ga¶Û */
- $"6DB6 DB6D 98C5 C208 FD98 41AA F430 3EAE" /* m¶Ûm˜ÅÂ.ý˜Aªô0>® */
- $"7118 7229 50B1 07D8 C5CA 010D 4AB4 DE82" /* q.r)P±.ØÅÊ..J´Þ‚ */
- $"53D3 E184 6561 DE5F 7236 BBF5 550D 4A83" /* SÓá„eaÞ_r6»õU.Jƒ */
- $"555B 5C0F 9C0E F052 0080 F4AC 3912 DD30" /* U[\.œ.ðR.€ô¬9.Ý0 */
- $"47C9 B77E C632 15D7 8EB6 CD51 0454 A805" /* GÉ·~Æ2.׎¶ÍQ.T¨. */
- $"2DAD F687 6CB7 B37F 2289 759F F7D5 8839" /* -­ö‡l·³."‰uŸ÷Õˆ9 */
- $"B3E6 BCA5 AA89 9D9D 599A 5BDD 54B9 7F7D" /* ³æ¼¥ª‰Yš[ÝT¹.} */
- $"2770 11ED 2217 C539 0204 16FF 728A C52A" /* 'p.í".Å9...ÿrŠÅ* */
- $"2D24 5FC7 E1D7 C47E 1DE8 C3F0 EA38 E730" /* -$_Çá×Ä~.èÃðê8ç0 */
- $"2D9D 0AC5 991A F5DD 38EC 007B A963 8B4D" /* -ÂÅ™.õÝ8ì.{©c‹M */
- $"51BA A9FC AE25 908A 1B70 9145 EBA2 38C4" /* Qº©ü®%Š.p‘Eë¢8Ä */
- $"168F 70BB 10A5 CAA5 A249 1974 03F3 AB57" /* .p».¥Ê¥¢I.t.ó«W */
- $"3611 30C5 1F14 529F 040A A8EC EBDF F2FF" /* 6.0Å..RŸ.¨ìëßòÿ */
- $"232B 83FE C2D0 59D9 93C2 2A8A F86A 997F" /* #+ƒþÂÐYÙ“Â*Šøj™. */
- $"3207 03A7 C406 E96C C96F 23F1 1490 95DF" /* 2..§Ä.élÉo#ñ.•ß */
- $"4024 67DC 3DE6 E1B1 EB60 1026 8786 531C" /* @$gÜ=æá±ë`.&‡†S. */
- $"9A51 378D EE86 881F 496C 8854 9459 7799" /* šQ7.IlˆT”Yw™ */
- $"11EC 4196 0C22 0F05 3762 D8F4 C348 7299" /* .ìA–."..7bØôÃHr™ */
- $"793E 0718 14D3 D09C C192 80E1 9F7C 5CFA" /* y>...ÓМÁ’€áŸ|\ú */
- $"429C 7960 2F8B 9063 C7E1 1447 7F52 D850" /* Bœy`/‹cÇá.G.RØP */
- $"B80A F1D8 BE98 DC3C 9C44 3AB7 3DA7 E08C" /* ¸Âñؾ˜Ü<œD:·=§àŒ */
- $"E7B6 07CE 2B69 C0E9 0C21 6133 1EC5 DAB5" /* ç¶.Î+iÀé.!a3.ÅÚµ */
- $"B079 413B FBA4 0259 78B8 DA3A E6D1 4AAC" /* °yA;û¤.Yx¸Ú:æÑJ¬ */
- $"2459 93C8 AD9A D69C AC40 5CF7 7385 1B18" /* $Y“È­šÖœ¬@\÷s….. */
- $"D67D 82BD 5E44 3DF8 5D2F E6D3 CE47 0191" /* Ö}‚½^D=ø]/æÓÎG.‘ */
- $"6E57 0F2F E8E8 9FF0 14BC 21F1 7720 6F34" /* nW./èèŸð.¼!ñw o4 */
- $"1EEE 5EF6 F8FD 5481 44E3 AB6B B06E 2556" /* .î^öøýTDã«k°n%V */
- $"6F07 AD65 FC95 7C32 7487 10A0 3C20 9CA7" /* o.­eü•|2t‡. < œ§ */
- $"B0EB F703 2D09 F0A6 D3FD 55F6 354B EDB0" /* °ë÷.-Æð¦ÓýUö5Kí° */
- $"179B B267 B9EB 8DA1 ED8E 7D0F 1AFF 4D50" /* .›²g¹ë¡íŽ}..ÿMP */
- $"C1C7 A686 586C 6A26 3B0B 4292 60A0 A804" /* ÁǦ†Xlj&;.B’` ¨. */
- $"04F6 5FDB 0F76 E2BC D680 20B5 46AE 399D" /* .ö_Û.vâ¼Ö€ µF®9 */
- $"CC54 82A4 1DCA 08E7 E2B4 6710 ABD8 FC18" /* ÌT‚¤.Ê.çâ´g.«Øü. */
- $"949B 7076 11CD 598E 2A8B 99FC CC28 EC17" /* ”›pv.ÍYŽ*‹™üÌ(ì. */
- $"451C DE31 F7F4 C47E 3ABB AF03 FDC6 D875" /* E.Þ1÷ôÄ~:»¯.ýÆØu */
- $"BD0C AB3E B78F F942 A53E E5F8 CA09 414D" /* ½.«>·ùB¥>åøÊÆAM */
- $"7544 D5B4 8367 3256 6D8C CB66 6DE7 E99C" /* uDÕ´ƒg2VmŒËfmçéœ */
- $"88E9 FCDC EB55 F67B 20E7 F44D 7616 6B29" /* ˆéüÜëUö{ çôMv.k) */
- $"124A C9AB 95C7 E9A8 209D EDA5 499F 2D2F" /* .JÉ«•Çé¨ í¥IŸ-/ */
- $"20E5 DE8C 2EEE 92AF 4BD6 484B 7E18 2D81" /* åÞŒ.î’¯KÖHK~.- */
- $"0502 F439 C742 BA21 693B 43C5 60DF 8BA0" /* ..ô9ÇBº!i;CÅ`ß‹  */
- $"9EAC 0A98 DFE4 DB4B 0BE1 E526 9B74 5982" /* ž¬Â˜ßäÛK.áå&›tY‚ */
- $"1817 EA6B 067A D3E4 8786 883D 26DB D361" /* ..êk.zÓ䇆ˆ=&ÛÓa */
- $"C40F 89F4 B31F 2AF3 1369 FDA9 889A 5620" /* Ä.‰ô³.*ó.iý©ˆšV */
- $"9AE7 4384 7184 9D7F 6C37 F79B 9422 ADF3" /* šçC„q„.l7÷›”"­ó */
- $"2BEA A620 14CF 0267 110E AB20 594B F1DA" /* +ê¦ .Ï.g..« YKñÚ */
- $"9D7F DB53 3723 1A4E 0DEC DF68 3A10 078F" /* .ÛS7#.N.ìßh:.. */
- $"8CA5 471B 4400 0975 92AA A351 8C66 5DDA" /* Œ¥G.D.Æu’ª£QŒf]Ú */
- $"0E4E C7B1 286F 2F7C E0EB 24CC 0A8B CAF8" /* .NDZ(o/|àë$ÌÂ‹Êø */
- $"4F0F 75E5 CACF 26F5 0FFE 86A8 1E77 5F03" /* O.uåÊÏ&õ.þ†¨.w_. */
- $"A8B5 A544 F04B A521 B3FA 854A 64FA 70CD" /* ¨µ¥DðK¥!³ú…JdúpÍ */
- $"526F 97AE 807A 05FC 3F67 2471 61E5 2715" /* Ro—®€z.ü?g$qaå'. */
- $"5774 E452 7E4A CDDA 6E48 0DA2 04B3 3A29" /* WtäR~JÍÚnH.¢.³:) */
- $"DE10 8F75 3A3A 559D A881 B948 74F3 AB92" /* Þ.u::U¨¹Htó«’ */
- $"B154 0F88 A11B A00B 25ED 9A59 B894 618E" /* ±T.ˆ¡. .%íšY¸”aŽ */
- $"AD45 3D59 9C08 49EA 076C CD63 8F49 B714" /* ­E=Yœ.Iê.lÍcI·. */
- $"32B3 8743 2506 F55A C011 CBEF C94A 8606" /* 2³‡C%.õZÀ.ËïÉJ†. */
- $"EDE4 BE7D 2DC9 8830 6C23 91E0 0209 440C" /* íä¾}-Ɉ0l#‘à.ÆD. */
- $"9409 1457 6CA0 2201 8FF4 7573 54F8 CCEC" /* ”Æ.Wl ".ôusTøÌì */
- $"D201 4A3A 66A6 B191 4E14 4CB1 08B4 2100" /* Ò.J:f¦±‘N.L±.´!. */
- $"BCF2 3A0D 696F 4582 F8B0 3A60 2D09 E9A7" /* ¼ò:.ioE‚ø°:`-Æé§ */
- $"8E83 CF44 A16A 6516 31C1 B51E 2DFE BDAC" /* ŽƒÏD¡je.1Áµ.-þ½¬ */
- $"356B F402 856C BEA0 109C A125 A759 E580" /* 5kô.…l¾ .œ¡%§Yå€ */
- $"3501 F500 F252 9533 F180 6E7D 30A8 FD62" /* 5.õ.òR•3ñ€n}0¨ýb */
- $"7FD6 B4EB 9120 8504 493A DD87 D79A 0CB1" /* .Ö´ë‘ ….I:݇ך.± */
- $"B674 7010 830D 8A38 5B44 B11D 3632 3FA5" /* ¶tp.ƒ.Š8[D±.62?¥ */
- $"CE31 CE9A 1670 AF20 16F6 BDA6 4980 002E" /* Î1Κ.p¯ .ö½¦I€.. */
- $"3E9E 8AB0 8B1F 63C5 28C3 7914 2833 137F" /* >žŠ°‹.cÅ(Ãy.(3.. */
- $"0915 DD39 7D38 49A3 6054 B5DC 2509 EE11" /* Æ.Ý9}8I£`TµÜ%Æî. */
- $"D68A 5C2A C75B 5B9F 7A9A FF3A D06F 3331" /* ÖŠ\*Ç[[Ÿzšÿ:Ðo31 */
- $"29E6 A9F4 8AD5 E0D9 7FB9 84B1 F403 8910" /* )æ©ôŠÕàÙ.¹„±ô.‰. */
- $"1168 1270 19E2 E385 0353 0FFF 697F 96BE" /* .h.p.âã….S.ÿi.–¾ */
- $"EF55 21CA 25A1 CE5E 0CD7 03A9 094F 51FE" /* ïU!Ê%¡Î^.×.©ÆOQþ */
- $"5314 E59F 90EB 907A E37A DD9D 182A E41C" /* S.åŸëzãzÝ.*ä. */
- $"CFFB 7262 0D9E B904 8D95 2DE3 E02B F5CB" /* Ïûrb.ž¹.•-ãà+õË */
- $"BF61 6012 924E 50D3 2D8D 6C25 FC60 8D19" /* ¿a`.’NPÓ-l%ü`. */
- $"9855 8BF2 5400 0000 04E3 7684 B40E 9EE7" /* ˜U‹òT....ãv„´.žç */
- $"21F8 CB76 250B 7CE0 2605 7C84 7E9F F226" /* !øËv%.|à&.|„~Ÿò& */
- $"6B94 0DB5 02AA 61E7 A9FF 5D9F A9F2 B546" /* k”.µ.ªaç©ÿ]Ÿ©òµF */
- $"2417 2E4D B238 ADDF 9233 5911 1D61 D35A" /* $..M²8­ß’3Y..aÓZ */
- $"8788 DF34 284A 9664 B91E 7A11 4568 B395" /* ‡ˆß4(J–d¹.z.Eh³• */
- $"7C74 C891 2A46 C056 EE92 0459 D81C A41F" /* |tÈ‘*FÀVî’.YØ.¤. */
- $"CA5E 4752 3ADE 89AB 995B 2BF2 D070 41B1" /* Ê^GR:Þ‰«™[+òÐpA± */
- $"EBFE 65BF FF61 55F5 5460 A4E0 33CF 7F1E" /* ëþe¿ÿaUõT`¤à3Ï.. */
- $"691A 0DA4 9372 4DCD 4A7C FF30 7DA5 4AD0" /* i..¤“rMÍJ|ÿ0}¥JÐ */
- $"1236 3C90 00C2 4517 FF78 771E DA05 952D" /* .6<.ÂE.ÿxw.Ú.•- */
- $"1085 D433 FD50 1E6F D583 2585 CBD6 5CFC" /* .…Ô3ýP.oÕƒ%…ËÖ\ü */
- $"9EF2 539B BE7A CCA1 ABF6 5AED 484B FF78" /* žòS›¾zÌ¡«öZíHKÿx */
- $"D6BD 435E E56E 5510 3047 49DE C511 72CF" /* Ö½C^ånU.0GIÞÅ.rÏ */
- $"72A0 B2CE 5E4D E2DA 0AFA FEDE BDFD 3167" /* r ²Î^MâÚÂúþÞ½ý1g */
- $"02FE 3FBE A1B9 7A5F 205B 7D60 1BA3 C975" /* .þ?¾¡¹z_ [}`.£Éu */
- $"5949 A641 5A3E 5AF2 F237 53BE FCAC 71F1" /* YI¦AZ>Zòò7S¾ü¬qñ */
- $"E3E3 6AEB 35B9 41BD C4B6 3400 DBA0 4B7F" /* ããjë5¹A½Ä¶4.Û K. */
- $"FF79 17FD 23F9 918D E532 F6BD F949 B633" /* ÿy.ý#ù‘å2ö½ùI¶3 */
- $"6A36 7600 17D8 C912 DB72 6F48 869C 0D66" /* j6v..ØÉ.ÛroH†œ.f */
- $"1410 074A 8F5B 629C 5B8B F293 6DB6 DB6D" /* ...J[bœ[‹ò“m¶Ûm */
- $"B6DB 6740 B8F8 BF85 2938 ECDA 6390 6537" /* ¶Ûg@¸ø¿…)8ìÚce7 */
- $"5986 A2A6 B52C A20D F057 C41F 660A C203" /* Y†¢¦µ,¢.ðWÄ.fÂÂ. */
- $"E5C1 68B0 9D56 DAD8 F20C 665C 5D04 4BA2" /* åÁh°VÚØò.f\].K¢ */
- $"46FF 7DB5 4880 6121 2EA3 5D2A 82F4 B18A" /* Fÿ}µH€a!.£]*‚ô±Š */
- $"50FC 2D12 DEFE 1F4D 01BF 3315 10D3 5D94" /* Pü-.Þþ.M.¿3..Ó]” */
- $"11B1 0221 28B8 56D9 4CED 012D D9C9 4005" /* .±.!(¸VÙLí.-ÙÉ@. */
- $"316F E887 29A8 3E83 9E25 FF1F A4C1 5D25" /* 1oè‡)¨>ƒž%ÿ.¤Á]% */
- $"8893 36E0 73BE DE25 456A 4678 B7C5 AD7A" /* ˆ“6às¾Þ%EjFx·Å­z */
- $"90C9 3950 942F 1459 C737 31EF 991F 241B" /* É9P”/.YÇ71ï™.$. */
- $"C294 7CFB 9461 B43A 8D37 8A6D BBC8 D7F6" /* ”|û”a´:7Šm»È×ö */
- $"A128 281D DF2B EAC5 A154 E6D9 FF53 984D" /* ¡((.ß+êÅ¡TæÙÿS˜M */
- $"550E 9C70 3F64 0E0E 0940 0AFC 5CC9 CF43" /* U.œp?d..Æ@Âü\ÉÏC */
- $"7184 3D0F 9FDE 08DF EC31 B86E 0D38 AF71" /* q„=.ŸÞ.ßì1¸n.8¯q */
- $"29F1 A21D 7847 7150 6DCA 9211 C778 F1A4" /* )ñ¢.xGqPmÊ’.Çxñ¤ */
- $"26AA B90D 1A39 DB92 4924 9249 2493 36D2" /* &ª¹..9Û’I$’I$“6Ò */
- $"4924 9249 2492 49FE 069C E7B9 CB0D 4E87" /* I$’I$’Iþ.œç¹Ë.N‡ */
- $"7D9E 9D29 FC64 8A6F 6185 2BD9 806F 760B" /* }ž)üdŠoa…+Ù€ov. */
- $"464D 4732 BD90 0E7D CABF 2B6F 2A78 8608" /* FMG2½.}Ê¿+o*x†. */
- $"DEF5 406F D401 3FD4 AE82 058D D6C8 B980" /* Þõ@oÔ.?Ô®‚.Öȹ€ */
- $"FECA D9B9 E7B6 3982 9FD3 81EA 544B 30BD" /* þÊÙ¹ç¶9‚ŸÓêTK0½ */
- $"7E56 FD78 66FD 5A41 D0BD 7714 5FAF 2A1E" /* ~VýxfýZAнw._¯*. */
- $"8FDA B705 EAAE F6F2 D69C 9812 7194 A56E" /* Ú·.ê®öòÖœ˜.q”¥n */
- $"DB55 BF75 C4E4 BDCD 9FC2 ACAD C428 829F" /* ÛU¿uÄä½ÍŸÂ¬­Ä(‚Ÿ */
- $"2409 3BB2 A894 8020 A8E7 FC16 F4FF 4E84" /* $Æ;²¨”€ ¨çü.ôÿN„ */
- $"C06E 889C 1C74 96AD 5420 F825 1A2B 015C" /* Ànˆœ.t–­T ø%.+.\ */
- $"6BC2 31EE 64AB 7A44 15E5 3458 8040 AEEF" /* kÂ1îd«zD.å4X€@®ï */
- $"F6BD 7D58 6478 8344 018F D3C6 2E33 69A4" /* ö½}XdxƒD.ÓÆ.3i¤ */
- $"E5E8 721A 5B2F 777B C0D8 0A05 2CE7 EEC8" /* åèr.[/w{ÀØÂ.,çîÈ */
- $"69EF 417B A960 D320 842E 84DE D442 AB2F" /* iïA{©`Ó „.„ÞÔB«/ */
- $"3B31 84FE DCFC A608 2E09 AA42 60F6 DB2E" /* ;1„þÜü¦..ƪB`öÛ. */
- $"DA5B C95D D10A 77BE AD48 B5FF 0557 A5AC" /* Ú[É]ÑÂw¾­Hµÿ.W¥¬ */
- $"327B F763 FDA1 32BF 7308 3EFC 0C2B 2D22" /* 2{÷cý¡2¿s.>ü.+-" */
- $"584A F9CA BFB4 78FF 6E67 42CC B491 492B" /* XJùÊ¿´xÿngBÌ´‘I+ */
- $"17C3 C746 9966 5780 BA6C 2798 472E 1CFF" /* .ÃÇF™fW€ºl'˜G..ÿ */
- $"6A32 69A0 86E0 44C6 1679 08F9 9928 48D9" /* j2i †àDÆ.y.ù™(HÙ */
- $"3DA0 CBA0 1E5E 2618 7162 51C9 DEF0 56A0" /* = Ë .^&.qbQÉÞðV  */
- $"1924 F126 CAAD F248 A1A4 2816 13A7 FE76" /* .$ñ&Ê­òH¡¤(..§þv */
- $"594E 647C 36C4 C014 CDC7 5C89 DBAB 9854" /* YNd|6ÄÀ.ÍÇ\‰Û«˜T */
- $"9094 FC96 5FED 7476 AA3C DF0B B47B C123" /* ”ü–_ítvª<ß.´{Á# */
- $"BE6D CD5A BA07 CC19 94FC DC37 B85C 0FD2" /* ¾mÍZº.Ì.”üÜ7¸\.Ò */
- $"9FED 62E6 F910 2F49 529E CE10 9738 D296" /* Ÿíbæù./IRžÎ.—8Ò– */
- $"A81C 1A0D 0FBF 7CAE DB93 40C0 3BC9 5A0C" /* ¨....¿|®Û“@À;ÉZ. */
- $"B23D FBD4 3863 C520 03A0 D966 5327 A0A2" /* ²=ûÔ8cÅ . ÙfS' ¢ */
- $"DD06 B7A1 942B 0A75 CB23 8664 4159 8647" /* Ý.·¡”+ÂuË#†dAY†G */
- $"2725 DAF6 693A 58D7 7A7D B34A 393D FE7A" /* '%Úöi:X×z}³J9=þz */
- $"C105 C374 193C 123C 130E 062C 8AB2 32FD" /* Á.Ãt.<.<...,в2ý */
- $"80E0 72E3 6AEA 2078 5D7C D3E5 4E20 D927" /* €àrãjê x]|ÓåN Ù' */
- $"157E 9DC5 1A29 2F0F C326 AFE3 3ACF C361" /* .~Å.)/.Ã&¯ã:ÏÃa */
- $"8C45 D79C EB27 7441 E4C7 8BFD 5832 DB93" /* ŒEלë'tAäÇ‹ýX2Û“ */
- $"78F5 B9DB BA4E 329E A262 C467 88DC C540" /* xõ¹ÛºN2ž¢bÄgˆÜÅ@ */
- $"78E0 4E55 34F3 806E 2DEA B371 E9B5 D8DF" /* xàNU4ó€n-ê³qéµØß */
- $"5EDA B5B9 1C48 5A11 ECAB E4F8 67B7 C76E" /* ^Úµ¹.HZ.ì«äøg·Çn */
- $"460F 8E6A C7BA B5F8 75F2 9105 1480 FD1A" /* F.ŽjǺµøuò‘..€ý. */
- $"80EB DB48 6115 AA6E 9AEA A07C 57B0 1A7F" /* €ëÛHa.ªnšê |W°.. */
- $"0CBF D5DE 47A7 89BE 4CAE 19FE 7B79 5839" /* .¿ÕÞG§‰¾L®.þ{yX9 */
- $"232D 495E 476C E267 D9D2 5257 F0E6 3EB5" /* #-I^GlâgÙÒRWðæ>µ */
- $"F140 AAAF 1E36 BA04 086A EEC5 3232 7958" /* ñ@ª¯.6º..jîÅ22yX */
- $"72E3 FCC3 9488 B44C 0C15 EF6B 811B CF97" /* rãüÔˆ´L..ïk.Ï— */
- $"0532 2B88 663D 8675 6050 AB94 A435 C0FC" /* .2+ˆf=†u`P«”¤5Àü */
- $"9E08 9873 92AF 6859 F7F5 64B0 0BA5 FA68" /* ž.˜s’¯hY÷õd°.¥úh */
- $"3557 0898 9E0D 5795 BF67 2866 5FB6 63C6" /* 5W.˜ž.W•¿g(f_¶cÆ */
- $"4F82 42CE A682 DC8D CB18 D4FE 6252 95D1" /* O‚BΦ‚ÜË.ÔþbR•Ñ */
- $"C85C 6B2C 0FC0 7C9D 5A80 F93B 8900 F93A" /* È\k,.À|Z€ù;‰.ù: */
- $"8EE6 7513 4AFA 1609 3CEE D5EB B420 A1CE" /* Žæu.Jú.Æ<îÕë´ ¡Î */
- $"318D 6F67 720A 7F84 4127 C0F2 9193 35CE" /* 1ogrÂ.„A'Àò‘“5Î */
- $"6D97 9682 5E5D B9FC 5A97 3B71 AB1F 64AA" /* m—–‚^]¹üZ—;q«.dª */
- $"3383 1F0E C0E9 26BE E6EB 24CD 499F F2BA" /* 3ƒ..Àé&¾æë$ÍIŸòº */
- $"997D E886 6FF8 C6B5 0607 1259 7715 7539" /* ™}è†oøÆµ...Yw.u9 */
- $"4B57 F7A9 56A7 A04B 031F 0786 6C02 E7BC" /* KW÷©V§ K...†l.ç¼ */
- $"8256 7F27 A39A B66D 6B95 6C11 CDE4 C580" /* ‚V.'£š¶mk•l.ÍäÅ€ */
- $"54DE 7E26 129C EB67 ABC8 455E 6CC3 453E" /* TÞ~&.œëg«ÈE^lÃE> */
- $"F9A8 3ED5 9B43 4EB8 384E 0F7B 28E0 16FF" /* ù¨>Õ›CN¸8N.{(à.ÿ */
- $"1342 18B1 31B6 EAEF 4C40 36F7 0CFF 6AFF" /* .B.±1¶êïL@6÷.ÿjÿ */
- $"8059 5D1C 275B 4F7D B392 4DB0 5E5D 4304" /* €Y].'[O}³’M°^]C. */
- $"4848 2A3A C93F BAD6 638D 315A 8771 1150" /* HH*:É?ºÖc1Z‡q.P */
- $"1D41 B6A7 C9B8 782E 19D8 F8E7 07EB ED20" /* .A¶§É¸x..Øøç.ëí */
- $"7D4E AFFF 5FD2 4FA0 2B48 B549 6A50 AD81" /* }N¯ÿ_ÒO +HµIjP­ */
- $"F11D 357F 7CB2 4B8B F28B 6C97 2C23 58A3" /* ñ.5.|²K‹ò‹l—,#X£ */
- $"92E8 2BFB 77F2 1ECE 7A2A C437 47E3 A833" /* ’è+ûwò.Îz*Ä7Gã¨3 */
- $"D60C C3CA 168A 85B8 620C 109C 4134 35BF" /* Ö.ÃÊ.Š…¸b..œA45¿ */
- $"ECCB 3629 944F AD29 444A C4B6 F019 F19B" /* ìË6)”O­)DJĶð.ñ› */
- $"4189 B1D3 8F28 65B9 85D8 C715 2E1A 267D" /* A‰±Ó(e¹…ØÇ...&} */
- $"A7DB 4C90 9829 BC86 E14C 9F44 757D 5436" /* §ÛL˜)¼†áLŸDu}T6 */
- $"9C38 979D 3654 9A63 E572 7864 E513 A083" /* œ8—6Tšcårxdå. ƒ */
- $"C943 97C5 A88B 23A2 4ECC E4F1 AEED F3EC" /* ÉC—Ũ‹#¢NÌäñ®íóì */
- $"C57D F254 B087 7E1F 81B3 59E6 E2A0 E5CB" /* Å}òT°‡~.³Yæâ åË */
- $"B710 EF71 0598 01BF 1400 3814 0759 EDA8" /* ·.ïq.˜.¿..8..Yí¨ */
- $"386C 3DF0 F1C5 CA93 612F C58D 71BA 6ED6" /* 8l=ðñÅÊ“a/ÅqºnÖ */
- $"FE35 90B4 9C10 A938 33B6 6987 E407 AE7B" /* þ5´œ.©83¶i‡ä.®{ */
- $"5B1A 8E0E BE53 1C94 D747 9303 2ED9 13FA" /* [.Ž.¾S.”×G“..Ù.ú */
- $"226C F38A 7134 3CF6 1923 B85F A254 0048" /* "lóŠq4<ö.#¸_¢T.H */
- $"A765 B678 FC9C 1E2C E183 FC80 CA83 9572" /* §e¶xüœ.,áƒü€Êƒ•r */
- $"E573 B224 9894 7316 C931 4A49 C28F 6E33" /* ås²$˜”s.É1JIÂn3 */
- $"B579 EE14 84BC 61CC 351B 41FB 7095 5F8C" /* µyî.„¼aÌ5.Aûp•_Œ */
- $"1B15 6DAF FF7F F8EA 5A11 5453 6ECA 1C02" /* ..m¯ÿ.øêZ.TSnÊ.. */
- $"C8A4 F40F AD00 7BC9 EDFD AC3A 28E4 546F" /* Ȥô.­.{Éíý¬:(äTo */
- $"1E36 BE45 897E F5D5 BE25 E84B 57C6 9080" /* .6¾E‰~õÕ¾%èKWÆ€ */
- $"B6C4 79B8 153B 110F D90B 215D 401C 0453" /* ¶Äy¸.;..Ù.!]@..S */
- $"8243 BF4A CDAE 9270 0658 462F E0C7 82A8" /* ‚C¿JÍ®’p.XF/àÇ‚¨ */
- $"E155 C547 D144 EBAD 74EC EAFF 7799 6D50" /* áUÅGÑDë­tìêÿw™mP */
- $"D0F9 6BA4 D8B3 0FBB B75B BC48 D5BA 8EAB" /* Ðùk¤Ø³.»·[¼HÕºŽ« */
- $"FF7F 3A2A 820F D817 FB8B 7590 ED4A 3D7B" /* ÿ.:*‚.Ø.û‹uíJ={ */
- $"DAF8 C05F BDCF 1B7C 8862 53A8 95D6 C0DF" /* ÚøÀ_½Ï.|ˆbS¨•ÖÀß */
- $"4069 36DA 0739 783C C432 1E0C 7DA6 2D70" /* @i6Ú.9x<Ä2..}¦-p */
- $"B33A C5AD 810A FBBD E9BB B776 6463 9FDC" /* ³:Å­Âû½é»·vdcŸÜ */
- $"B401 211D 81BA A9FA 8761 ED36 A1EF 439D" /* ´.!.º©ú‡aí6¡ïC */
- $"9880 BE88 E045 3068 F59F 7AD7 EFFF 7FFC" /* ˜€¾ˆàE0hõŸz×ïÿ.ü */
- $"5562 1F00 0818 22D6 5002 F762 7A20 0DC0" /* Ub...."ÖP.÷bz .À */
- $"3ADD FF5D 1851 D391 F011 0000 0000 0000" /* :Ýÿ].QÓ‘ð....... */
- $"0000 0000 0138 5715 ED61 F2C5 2C28 30C0" /* .....8W.íaòÅ,(0À */
- $"F669 9389 6153 3A95 E010 CCA0 2FEF B36F" /* öi“‰aS:•à.Ì /ï³o */
- $"9576 F8C0 F17B 27F6 F6FA 412C 70C7 CF14" /* •vøÀñ{'ööúA,pÇÏ. */
- $"7625 6871 7FE2 16C9 B6E9 5BF1 1A16 E2F0" /* v%hq.â.ɶé[ñ..âð */
- $"945D E51E CCF9 0970 E586 517C 475F 8856" /* ”]å.ÌùÆpå†Q|G_ˆV */
- $"CA0C 1DD9 E001 D7BC 1876 745C 8077 672D" /* Ê..Ùà.×¼.vt\€wg- */
- $"CECA FF0B 01D1 76FA 32F5 C047 26FB 451F" /* ÎÊÿ..Ñvú2õÀG&ûE. */
- $"5261 79B6 5990 79C9 4DF7 5B69 D548 E894" /* Ray¶YyÉM÷[iÕHè” */
- $"F249 0C84 D3F0 9555 7B99 EA27 FA38 184E" /* òI.„Óð•U{™ê'ú8.N */
- $"F863 AFA1 CE80 AEBC CB89 DD99 B8E2 0BEC" /* øc¯¡Î€®¼Ë‰Ý™¸â.ì */
- $"2F74 E534 3FF4 B50A 4B04 02B1 C178 B189" /* /tå4?ôµÂK..±Áx±‰ */
- $"D30F 77DC 8A15 8C9E AF87 1DCD D545 AC6B" /* Ó.wÜŠ.Œž¯‡.ÍÕE¬k */
- $"CAFB 832B E240 6752 8EF2 9BDF 76E8 621D" /* Êûƒ+â@gRŽò›ßvèb. */
- $"892E 384C 7BF0 4DE8 F910 7689 C3F0 E7E9" /* ‰.8L{ðMèù.v‰Ãðçé */
- $"E401 C781 F341 A84F 6922 E97B FC22 E259" /* ä.ÇóA¨Oi"é{ü"âY */
- $"6B26 9B03 14A7 DFA1 B7BD CBED 9539 5DE3" /* k&›..§ß¡·½Ëí•9]ã */
- $"2041 2F5F A37A 2F23 00FC 6424 D7F8 902E" /* A/_£z/#.üd$×ø. */
- $"7261 227B B4EC F4D1 9C18 22C3 8CA5 EFF8" /* ra"{´ìôÑœ."ÃŒ¥ïø */
- $"5701 6734 9110 8B4E D9E0 EE8F 7FEA 202F" /* W.g4‘.‹NÙàî.ê / */
- $"CFF7 5CC7 6107 0B22 B0BE A87B 32EF 0FA8" /* Ï÷\Ça.."°¾¨{2ï.¨ */
- $"3D2D 794E 556E 6089 ACBA D46C 17EC A9DC" /* =-yNUn`‰¬ºÔl.ì©Ü */
- $"0F4E D57D B8C8 EED1 F9D4 F96A 7BEE 3794" /* .NÕ}¸ÈîÑùÔùj{î7” */
- $"49DE 3AA7 EE2E 0B25 A47C 966A D90D C792" /* IÞ:§î..%¤|–jÙ.Ç’ */
- $"6304 7C05 C6EB A26D 83B8 3E0C AAF5 AFFE" /* c.|.Æë¢mƒ¸>.ªõ¯þ */
- $"FDC3 F7C4 C0A3 C3ED E8D2 0FAB AC58 1F56" /* ýÃ÷ÄÀ£ÃíèÒ.«¬X.V */
- $"FF40 F44B 4289 C6D7 CC17 A019 AD4A C889" /* ÿ@ôKB‰Æ×Ì. .­Jȉ */
- $"67AD 0673 32A0 B6BA 087E 7279 19C2 025F" /* g­.s2 ¶º.~ry.Â._ */
- $"DB0E 0E97 02D9 2268 5BCA CDE6 B94E 8D9B" /* Û..—.Ù"h[ÊÍæ¹N› */
- $"03EB D786 1698 2D8A 2ECD 432E D615 931F" /* .ë׆.˜-Š.ÍC.Ö.“. */
- $"452B 5D40 0950 5BBE A70F BD95 9F0E 8B95" /* E+]@ÆP[¾§.½•Ÿ.‹• */
- $"86B7 47DE 0757 BFE4 9775 3082 9D22 863A" /* †·GÞ.W¿ä—u0‚"†: */
- $"E404 B84C 5E88 8424 31DD 689A D234 88E2" /* ä.¸L^ˆ„$1ÝhšÒ4ˆâ */
- $"971F 9E59 429C 6C7E 3670 8F7C 8F86 A80D" /* —.žYBœl~6p|†¨. */
- $"848E E78B 5331 058E E444 FEC2 269A 7E23" /* „Žç‹S1.ŽäDþÂ&š~# */
- $"608D 0502 E075 F7A4 DACF 515F AA08 31C1" /* `..àu÷¤ÚÏQ_ª.1Á */
- $"1275 02C0 F37E F465 ADE9 1918 F1F0 0E4F" /* .u.Àó~ôe­é..ñð.O */
- $"E5A4 41A5 F655 22D9 946A 7FEC 0720 3D3A" /* å¤A¥öU"Ù”j.ì. =: */
- $"4961 05B2 F02D 51D2 1212 084B B3EA 5DC9" /* Ia.²ð-QÒ...K³ê]É */
- $"F986 5763 A2AC E2AC 1144 5DC3 E6A5 D092" /* ù†Wc¢¬â¬.D]Ãæ¥Ð’ */
- $"3654 3737 A598 21C2 34FF 097C B8B8 5934" /* 6T77¥˜!Â4ÿÆ|¸¸Y4 */
- $"C947 05C9 B4BA F52B 99FF 3AFE 6B15 2CAE" /* ÉG.É´ºõ+™ÿ:þk.,® */
- $"06CF D962 CCDE D937 D4AE B3D9 7E92 E2AF" /* .ÏÙbÌÞÙ7Ô®³Ù~’⯠*/
- $"8F4E 31CE 06E7 0AD8 71DB 4456 7101 E221" /* N1Î.çÂØqÛDVq.â! */
- $"74AC 1159 9EDF 9841 CFA3 E04F DECF 6FD3" /* t¬.Yžß˜AÏ£àOÞÏoÓ */
- $"90CC C22F 63B0 45CC C98B 3125 33C0 CFBA" /* ÌÂ/c°EÌÉ‹1%3ÀϺ */
- $"4CE7 3FAD F2E4 85E7 0C74 35A5 97E9 8672" /* Lç?­òä…ç.t5¥—é†r */
- $"9180 E059 EF0F C416 E25F 0E83 095A 36AA" /* ‘€àYï.Ä.â_.ƒÆZ6ª */
- $"8E74 F1F7 11A8 49DD C47E 5098 D576 DC41" /* Žtñ÷.¨IÝÄ~P˜ÕvÜA */
- $"D6FC 7C37 E307 A2DB 997E A046 C114 CF04" /* Öü|7ã.¢Û™~ FÁ.Ï. */
- $"FD8E 32D1 2AC6 3A81 C8B6 C680 6E60 7826" /* ýŽ2Ñ*Æ:ȶƀn`x& */
- $"9A40 9C80 BA1B 4DE8 854B 09D9 33B3 95BE" /* š@œ€º.Mè…KÆÙ3³•¾ */
- $"7CE5 CCA3 C463 5D1C 1F2B A160 E208 AA0A" /* |åÌ£Äc]..+¡`â.ªÂ */
- $"D00F 1933 5FB5 2705 4E9C 3733 0FD0 2AA0" /* Ð..3_µ'.Nœ73.Ð*  */
- $"D116 F240 05EA 53BB 5A5A 0A4B 3D9E FCB7" /* Ñ.ò@.êS»ZZÂK=žü· */
- $"FE35 1D0B 1E56 C4AA 9B6C 8CE6 10CA DAA5" /* þ5...VĪ›lŒæ.ÊÚ¥ */
- $"6DF1 6F74 C332 BD93 556E 89F5 A94A 232D" /* mñotÃ2½“Un‰õ©J#- */
- $"E9EF C950 666C 7D3E D1BA C98F 4489 3C5D" /* éïÉPfl}>ѺÉD‰<] */
- $"F7FC 88D4 C90E EE9D 7691 C976 2CFE 6BA0" /* ÷üˆÔÉ.îv‘Év,þk  */
- $"B53E 5C59 749E FEBC 4AB4 490C A3B6 5187" /* µ>\Ytžþ¼J´I.£¶Q‡ */
- $"4A10 1076 6348 AEC1 054B 0A98 9196 29C3" /* J..vcH®Á.K˜‘–)à */
- $"F995 50E4 E003 F099 9495 7ECC 1C78 C536" /* ù•Päà.ð™”•~Ì.xÅ6 */
- $"AA8D 7305 BE7F FF72 99F7 25ED 4C38 0896" /* ªs.¾.ÿr™÷%íL8.– */
- $"A1BE F2D4 016E B744 CBB7 9CEE 1C88 5E3D" /* ¡¾òÔ.n·DË·œî.ˆ^= */
- $"1B9E E3CB 29D2 AAA7 C3F6 41F4 B6C0 5861" /* .žãË)Òª§ÃöAô¶ÀXa */
- $"93D3 4773 858E 3470 E670 4F94 E206 FBA3" /* “ÓGs…Ž4pæpO”â.û£ */
- $"7050 2A3D 6DC0 004E 32D7 6043 4E5E C44F" /* pP*=mÀ.N2×`CN^ÄO */
- $"284A 3214 97B7 19DE 41C4 6204 56CB 1695" /* (J2.—·.ÞAÄb.VË.• */
- $"BAD8 C308 0FFE BEB7 FE14 C6AC CEE8 5022" /* ºØÃ..þ¾·þ.ƬÎèP" */
- $"C27A 2CCA 4714 4C52 3975 615D A1C8 62BF" /* Âz,ÊG.LR9ua]¡Èb¿ */
- $"C477 FF7E 2637 3B89 8C43 6E09 285B 2D1A" /* Äwÿ~&7;‰ŒCnÆ([-. */
- $"8E9E 4110 CE7B E30A E21C A140 02C8 D0AD" /* ŽžA.Î{ãÂâ.¡@.ÈЭ */
- $"630B 5488 7CE7 B884 393A 6FDD 5A68 7FB9" /* c.Tˆ|縄9:oÝZh.¹ */
- $"60EC C73B 143E 3F61 3E31 1A3E 8438 7944" /* `ìÇ;.>?a>1.>„8yD */
- $"B652 14AE 63CA 803C 9B67 C6FE 2F5D 4CD0" /* ¶R.®cÊ€<›gÆþ/]LÐ */
- $"3A63 1328 8809 A4AB B4A1 8664 FE90 F03E" /* :c.(ˆÆ¤«´¡†dþð> */
- $"18E2 7982 7DDC A444 1306 4546 61B2 A710" /* .ây‚}ܤD..EFa²§. */
- $"CCED 529C 92CB D547 22F5 0DB0 B10F 8450" /* ÌíRœ’ËÕG"õ.°±.„P */
- $"E5AC 253A 6937 BFBD D0C6 8AED 14C7 787E" /* å¬%:i7¿½ÐÆŠí.Çx~ */
- $"21E7 860D 8567 633D A9E6 0466 93A5 6789" /* !ç†.…gc=©æ.f“¥g‰ */
- $"D643 2EEE 7542 7B02 086A 83C4 AD3C 785C" /* ÖC.îuB{..jƒÄ­<x\ */
- $"E3B4 BFC0 C27C 3762 1D98 0A0C B43D 8107" /* ã´¿ÀÂ|7b.˜Â.´=. */
- $"3003 FF74 C626 1BC1 44AA 08A0 7A68 0ADE" /* 0.ÿtÆ&.ÁDª. zhÂÞ */
- $"E9BD 94DB 3644 AA13 CFCA A9CB 0E8F 9061" /* é½”Û6Dª.ÏÊ©Ë.a */
- $"73BC 6A23 359D C129 F184 4EBA BE0F A772" /* s¼j#5Á)ñ„Nº¾.§r */
- $"9AB6 7DDC C179 81DB 9FDC EDA3 E6C5 21E2" /* š¶}ÜÁyÛŸÜí£æÅ!â */
- $"7049 87BC 00E3 34F5 8066 3FFE 7CA7 A588" /* pI‡¼.ã4õ€f?þ|§¥ˆ */
- $"6277 30DE 8FC1 950A A652 5B12 B0A4 B8BE" /* bw0ÞÁ•¦R[.°¤¸¾ */
- $"2297 4261 CB90 AEBB F3CB 2BEE 2FA8 149E" /* "—BaË®»óË+î/¨.ž */
- $"11E6 487B 3EFA 45B9 E4A8 17DF DF8E D5FF" /* .æH{>úE¹ä¨.ßߎÕÿ */
- $"750C 2E52 4F3F 5960 B3B7 3DEB CFE3 4EC3" /* u..RO?Y`³·=ëÏãNà */
- $"676F D76A F8C3 67EB 383B 042A C000 1CF5" /* go×jøÃgë8;.*À..õ */
- $"FB57 51DF 4E0F 9709 4A58 F371 8A53 79CD" /* ûWQßN.—ÆJXóqŠSyÍ */
- $"B935 29C8 5953 BBFB B216 24F0 FF5C F1BE" /* ¹5)ÈYS»û².$ðÿ\ñ¾ */
- $"1649 C9BE 754A CC45 62C3 44A2 3E12 A872" /* .IɾuJÌEbÃD¢>.¨r */
- $"736B 05DD F77C C7C6 F33D 8224 147E D163" /* sk.Ý÷|ÇÆó=‚$.~Ñc */
- $"02B4 0BC6 297A FA75 03A7 BFDD 709A A878" /* .´.Æ)zúu.§¿Ýpš¨x */
- $"734A 7236 791A BFF6 9F21 CC67 268D 160D" /* sJr6y.¿öŸ!Ìg&.. */
- $"A6D0 7988 72CF 6475 146C 81EB 8249 518A" /* ¦ÐyˆrÏdu.lë‚IQŠ */
- $"49B7 0389 FDB6 9CEB DCA2 41ED 085D 4E85" /* I·.‰ý¶œëÜ¢Aí.]N… */
- $"03E4 3F4E D8CF 25E1 658D 38F6 8F88 A499" /* .ä?NØÏ%áe8öˆ¤™ */
- $"B64A DD79 FDF2 39FB 5CEC F29B 714A 733B" /* ¶JÝyýò9û\ìò›qJs; */
- $"76E4 94E5 F567 3A71 28F0 13A6 7A74 CD91" /* vä”åõg:q(ð.¦ztÍ‘ */
- $"5804 065E D3C7 09B7 ED19 51E5 0913 4436" /* X..^ÓÇÆ·í.QåÆ.D6 */
- $"9791 BB58 10F3 7183 5DB6 4874 65D2 AAD2" /* —‘»X.óqƒ]¶HteÒªÒ */
- $"DBA2 C761 A70F 3EEE 9256 2EF0 945D E52D" /* Û¢Ça§.>î’V.ð”]å- */
- $"34CF 10DF B2AF 8E14 A5A4 E24F 0051 F63E" /* 4Ï.ß²¯Ž.¥¤âO.Qö> */
- $"F11C 5DAC 6D8D DEDD A585 96FC A2AB A5FF" /* ñ.]¬mÞÝ¥…–ü¢«¥ÿ */
- $"5298 6349 DB41 9276 C1C6 F1E2 9ABF 822B" /* R˜cIÛA’vÁÆñâš¿‚+ */
- $"346F 8679 726C 666A 9638 246A EABE 54A9" /* 4o†yrlfj–8$jê¾T© */
- $"49DD F22A BC62 5867 51F2 FDBD B33B 40E0" /* IÝò*¼bXgQòý½³;@à */
- $"220F 075D 031C EAAE 3CDE 67CF 2269 E26D" /* "..]..ê®<ÞgÏ"iâm */
- $"BEF3 1873 E610 D43E 8F03 A14F F04F 980B" /* ¾ó.sæ.Ô>.¡OðO˜. */
- $"69FF 1E4A 1925 DDE6 B473 84B5 6F53 75DD" /* iÿ.J.%Ýæ´s„µoSuÝ */
- $"CF71 C4C0 72DC 5403 7E7B 1A9B 6F16 BA87" /* ÏqÄÀrÜT.~{.›o.º‡ */
- $"A44D D4A2 8029 E15A 8C17 BE55 A30B 87B3" /* ¤MÔ¢€)áZŒ.¾U£.‡³ */
- $"DC5B CED9 2E4C A8F3 939B 6F82 8885 9BD5" /* Ü[ÎÙ.L¨ó“›o‚ˆ…›Õ */
- $"905B 6EE2 E3C9 D45E DE91 DD46 7EDD 23BB" /* [nâãÉÔ^Þ‘ÝF~Ý#» */
- $"6852 2BD3 3D31 2755 2D1B 7431 35EB 6CBD" /* hR+Ó=1'U-.t15ël½ */
- $"638C 9E5D F0EB 9AE0 49BC D327 7536 BCB3" /* cŒž]ðëšàI¼Ó'u6¼³ */
- $"65F1 992B E073 9D25 980D A244 7F9E 749F" /* eñ™+às%˜.¢D.žtŸ */
- $"53BD D08A C5EF 64A2 D672 7A55 9146 5CAD" /* S½ÐŠÅïd¢ÖrzU‘F\­ */
- $"7839 E1B6 7543 4556 146E C347 33E3 2798" /* x9á¶uCEV.nÃG3ã'˜ */
- $"4752 6F78 AAA5 AE5E 7B02 CD92 D5F1 FD30" /* GRoxª¥®^{.Í’Õñý0 */
- $"F78A 7BFB 03AB CF34 58BF 3810 B8A7 CDAB" /* ÷Š{û.«Ï4X¿8.¸§Í« */
- $"A573 658E 260A 7C50 000F 00AC D13F 618E" /* ¥seŽ&Â|P...¬Ñ?aŽ */
- $"A241 9458 3945 9D59 3F9B 13C5 04CC 600E" /* ¢A”X9EY?›.Å.Ì`. */
- $"FC51 8C8D FBA0 4150 5832 4539 730B 4631" /* üQŒû APX2E9s.F1 */
- $"0598 EE14 817C B560 97C5 B953 64D4 980D" /* .˜î.|µ`—ŹSdÔ˜. */
- $"C379 6FFF 3E63 6746 7BE8 D3AB 5215 B47F" /* Ãyoÿ>cgF{èÓ«R.´. */
- $"3CAE 42E4 D4BF B7BF 6580 3319 6A71 C2E9" /* <®BäÔ¿·¿e€3.jqÂé */
- $"48AA 2C5E 9D78 B9C3 F8DA B858 D5AB 99F4" /* Hª,^x¹ÃøÚ¸XÕ«™ô */
- $"B04F EAAC D0DE 2302 F874 7E64 A69B 89CE" /* °Oê¬ÐÞ#.øt~d¦›‰Î */
- $"AEAB A73F F815 0D06 B24E 39EC D8E9 EFB7" /* ®«§?ø...²N9ìØéï· */
- $"ED32 55A0 8E21 B52A E55C 17AE E07B 42F4" /* í2U Ž!µ*å\.®à{Bô */
- $"D451 CB7C E941 1578 3EE3 9565 087E 9A05" /* ÔQË|éA.x>ã•e.~š. */
- $"B5FC 403A AAA2 25CE 5AC1 B658 1EE9 9A53" /* µü@:ª¢%ÎZÁ¶X.éšS */
- $"4000 51DF 95E8 C605 97AC C7E1 A8B1 F86C" /* @.Qß•èÆ.—¬Çᨱøl */
- $"7C3F 0BCC E410 8FA7 78C0 7964 BDD0 E341" /* |?.Ìä.§xÀyd½ÐãA */
- $"5DC5 D977 EF99 460C FC48 A51A B5CD DE47" /* ]ÅÙwï™F.üH¥.µÍÞG */
- $"F9E2 194D 1F2D B2B6 556B 0F68 BD1B 5BEA" /* ùâ.M.-²¶Uk.h½.[ê */
- $"9FDD 1280 92A3 EF96 132C 22F6 CA8A 1C20" /* ŸÝ.€’£ï–.,"öÊŠ. */
- $"54DA F163 6119 BC02 7AE6 10CA A16B 993A" /* TÚñca.¼.zæ.Ê¡k™: */
- $"E22B CC58 D181 40E6 EA99 0897 5166 4C1F" /* â+ÌXÑ@æê™.—QfL. */
- $"6D58 D092 5119 1AF5 0C2B 1DC6 029D F0E8" /* mXÐ’Q..õ.+.Æ.ðè */
- $"1F6F 9F5C 17D8 68A0 F600 5C68 5C16 4269" /* .oŸ\.Øh ö.\h\.Bi */
- $"F5A9 4D97 32DE 3A9C 6609 86C2 1D0F BA56" /* õ©M—2Þ:œfƆÂ..ºV */
- $"3C8C 1046 E0DC 2ECB 9BDB D61E 6955 CE38" /* <Œ.FàÜ.Ë›ÛÖ.iUÎ8 */
- $"DB97 859B 9E73 78BF FDEB ED74 0C4E 4203" /* Û—…›žsx¿ýëít.NB. */
- $"431D 69C4 635D D1EA 1A9A 6462 BE48 DDB9" /* C.iÄc]Ñê.šdb¾Hݹ */
- $"6E63 C4D8 8886 51CB 19E6 A7C9 5941 8443" /* ncÄØˆ†QË.æ§ÉYA„C */
- $"57E5 8C3B B907 FF17 4B41 08DA 7AFC 1B8B" /* WåŒ;¹.ÿ.KA.Úzü.‹ */
- $"9B05 622E 1F81 91D8 2C60 9C6A 3B23 608B" /* ›.b..‘Ø,`œj;#`‹ */
- $"F2EC E527 70F9 D963 D302 D7AC 18E2 2692" /* òìå'pùÙcÓ.׬.â&’ */
- $"AE0C D915 7E30 5B09 305C 8F5D 1346 3FF2" /* ®.Ù.~0[Æ0\].F?ò */
- $"8635 ECEC 1CB7 962D 0846 3FA9 5920 C1B0" /* †5ìì.·–-.F?©Y Á° */
- $"5582 FF3A 24E0 FAAE 8FAE 3843 DFCF B74F" /* U‚ÿ:$àú®®8CßÏ·O */
- $"CAEC 5602 D1C5 1760 5ECD 92C8 1DD1 4ABE" /* ÊìV.ÑÅ.`^Í’È.ÑJ¾ */
- $"2336 8A90 E444 6753 D3E0 0F02 8E99 7393" /* #6ŠäDgSÓà..Ž™s“ */
- $"8B26 6C9F BFB4 64DE 7867 73F7 10F0 477A" /* ‹&lŸ¿´dÞxgs÷.ðGz */
- $"8383 ADA5 49C3 722B 1FD7 0BB5 4118 4714" /* ƒƒ­¥IÃr+.×.µA.G. */
- $"D5F9 6C20 CDD0 8151 EAB4 457F FF4E 314C" /* Õùl ÍÐQê´E.ÿN1L */
- $"6E7F 04DB DE0C 611B 62AC 2A4E 869C 06FB" /* n..ÛÞ.a.b¬*N†œ.û */
- $"DB81 F238 C4FC 149E 8176 3F0C 4B83 0DFF" /* Ûò8Äü.žv?.Kƒ.ÿ */
- $"7FB4 A5F5 80C7 E4F0 47AD 8D3F 5426 B12A" /* .´¥õ€ÇäðG­?T&±* */
- $"8678 11E1 A0EF 5439 31D8 E97E 3AE9 E4DD" /* †x.á ïT91Øé~:éäÝ */
- $"3DB7 4A94 7FFF 7135 0C02 ACE2 70F5 626B" /* =·J”.ÿq5..¬âpõbk */
- $"271A 4401 DF00 AE70 E43B D3F8 75AD 0DAB" /* '.D.ß.®pä;Óøu­.« */
- $"794A C0C7 928F 8621 BE61 DA60 A89F 8E95" /* yJÀÇ’†!¾aÚ`¨ŸŽ• */
- $"64E1 4B82 9CA5 D1CB 26FA 3B49 2FDF 8007" /* dáK‚œ¥ÑË&ú;I/߀. */
- $"60B1 1C23 B192 973E 87DD 9323 E697 CA76" /* `±.#±’—>‡Ý“#æ—Êv */
- $"03D6 B09A 33FA 5CEC 856D 1D12 5249 2492" /* .Ö°š3ú\ì…m..RI$’ */
- $"4924 9249 2492 4924 9231 8B0A C6C2 C882" /* I$’I$’I$’1‹ÂÆÂÈ‚ */
- $"FC66 E59C E646 38B0 B26F A097 FEA2 30FE" /* üfåœæF8°²o —þ¢0þ */
- $"F5B9 90DC 3FEF 3116 73C4 7B20 6C09 EA40" /* õ¹Ü?ï1.sÄ{ lÆê@ */
- $"AB90 6257 8BAD 951C 002E 138D 7274 121D" /* «bW‹­•....rt.. */
- $"B91E 66F5 6038 8257 FD9A 18C9 0155 522C" /* ¹.fõ`8‚Wýš.É.UR, */
- $"D6CC 0F6A 6A4A 09F3 0C4A B702 47FF 7FFC" /* ÖÌ.jjJÆó.J·.Gÿ.ü */
- $"B504 0034 6682 CE19 CA7C 50BE F8B0 9DCB" /* µ..4f‚Î.Ê|P¾ø°Ë */
- $"0092 4924 9248 F298 B4D2 A612 6CEE 878F" /* .’I$’Hò˜´Ò¦.lî‡ */
- $"FF7F FF5F 8F59 B3E0 FE9F A74E 506D C924" /* ÿ.ÿ_Y³àþŸ§NPmÉ$ */
- $"9249 2492 4924 9249 2492 4924 924D 57A2" /* ’I$’I$’I$’I$’MW¢ */
- $"2CC8 426C 393A 96E4 50FB 0ACE 8874 7A86" /* ,ÈBl9:–äPûÂΈtz† */
- $"2B20 84D4 0F34 1532 DFF0 D633 0231 0F65" /* + „Ô.4.2ßðÖ3.1.e */
- $"91D1 8E19 A917 CD2A 8D35 89BE F64E D1A8" /* ‘ÑŽ.©.Í*5‰¾öNѨ */
- $"926C AE06 3A49 80F9 C1FE 0E81 52D8 5A8C" /* ’l®.:I€ùÁþ.RØZŒ */
- $"7A00 5EF2 9F04 3659 74EC D695 94B6 5B90" /* z.^òŸ.6YtìÖ•”¶[ */
- $"89C0 E661 DFC4 5E69 965B 4D1D 4B76 7C0E" /* ‰ÀæaßÄ^i–[M.Kv|. */
- $"89D2 C1E8 B1EF CF9E 5E96 3977 AEA6 532B" /* ‰ÒÁè±ïÏž^–9w®¦S+ */
- $"68B1 BD73 2BE6 BB5B 766E FA91 5C36 628C" /* h±½s+æ»[vnú‘\6bŒ */
- $"F45F FEEA C7DF 49F0 278F F459 E9B6 BDAC" /* ô_þêÇßIð'ôYé¶½¬ */
- $"1A28 F485 45C5 2761 DC37 C72A 8A17 2D08" /* .(ô…EÅ'aÜ7Ç*Š.-. */
- $"5130 E9D5 E1BD 2D59 07B5 2290 00F9 F737" /* Q0éÕá½-Y.µ".ù÷7 */
- $"C1F4 5C78 1058 C4C6 13AB AE5C 45DE ACB4" /* Áô\x.XÄÆ.«®\EÞ¬´ */
- $"7DC9 03C4 0F82 7850 6F9E 5FD3 9223 36FE" /* }É.Ä.‚xPož_Ó’#6þ */
- $"8A1D 1D99 FBB3 646B 206B FC7E 668E 4730" /* Š..™û³dk kü~fŽG0 */
- $"7C8C 79D9 A37A 427B 1E91 E7A1 DED2 E57D" /* |ŒyÙ£zB{.‘ç¡ÞÒå} */
- $"E167 967A 8B9F A6C0 A36F 68E8 D03C 84C6" /* ág–z‹Ÿ¦À£ohèÐ<„Æ */
- $"E952 3CAF 039F 18CD 236C 4AE1 FB74 D7F6" /* éR<¯.Ÿ.Í#lJáût×ö */
- $"DFBF B7A4 AFDB D27E 2FB7 7BBF 86F0 DF6F" /* ß¿·¤¯ÛÒ~/·{¿†ðßo */
- $"4F9F C3A7 EC7F 0D0F BEDB 1EFB 77AA FB77" /* OŸÃ§ì...¾Û.ûwªûw */
- $"2CED 1CDE F39E A2F3 567D 91E9 4703 B8A2" /* ,í.Þóž¢óV}‘éG.¸¢ */
- $"5006 2494 6271 81F3 3B95 0B89 EDD5 7FE8" /* P.$”bqó;•.‰íÕ.è */
- $"B864 3D84 75CD 7478 A5D6 28C8 D483 39EF" /* ¸d=„uÍtx¥Ö(ÈÔƒ9ï */
- $"86CA 5763 87CA 97CF A9D4 AFA9 0450 6744" /* †ÊWc‡Ê—ϩԯ©.PgD */
- $"16E3 8C0B 0015 88DA 5244 1AB2 9790 35B0" /* .ãŒ...ˆÚRD.²—5° */
- $"0489 B911 D871 2BB4 6576 C185 22B7 1F86" /* .‰¹.Øq+´evÁ…"·.† */
- $"230A 3CD3 ECB5 20A6 23BA A068 A53E 8EAD" /* #Â<Óìµ ¦#º h¥>Ž­ */
- $"3793 46B5 BA07 96A8 DF28 6A66 CE05 73CE" /* 7“Fµº.–¨ß(jfÎ.sÎ */
- $"1938 F9A6 9CBC 0D7F F193 E0D5 09CC 3426" /* .8ù¦œ¼..ñ“àÕÆÌ4& */
- $"4BB1 52B9 F337 0537 FA01 B010 5471 B015" /* K±R¹ó7.7ú.°.Tq°. */
- $"754C A1A6 E071 800C 1A26 243D 172B 1497" /* uL¡¦àq€..&$=.+.— */
- $"E5DF 1EB1 6A6C 6761 3BA6 52C0 C0B4 69BD" /* åß.±jlga;¦RÀÀ´i½ */
- $"E6B4 275E EB6E 42BF D693 8928 15A4 9DB2" /* æ´'^ënB¿Ö“‰(.¤² */
- $"D8FA E273 6C04 CBB5 06A9 8096 5E97 5D11" /* Øúâsl.˵.©€–^—]. */
- $"0B1B 8E93 BDCC 1AE8 4CBA 9413 A729 F6A7" /* ..Ž“½Ì.èLº”.§)ö§ */
- $"F24D 467F 0316 BF60 F777 C2E3 7FAA DC07" /* òMF...¿`÷wÂã.ªÜ. */
- $"148F 5C26 91C3 20B8 F3A0 9088 F893 6D47" /* .\&‘Ã ¸ó ˆø“mG */
- $"7AC1 A0D9 5483 8281 5B98 28AE 9EAB 94F0" /* zÁ ÙTƒ‚[˜(®ž«”ð */
- $"9B68 08E3 E3DA 7E3A AA84 9EED F083 117F" /* ›h.ããÚ~:ª„žíðƒ.. */
- $"FE75 781E E394 EEEC F9AC 21D6 FF5E DD57" /* þux.ã”îìù¬!Öÿ^ÝW */
- $"96CF A7DF 3C0D 7E2F F9E7 F212 83EE E629" /* –ϧß<.~/ùçò.ƒîæ) */
- $"9543 AA61 C10A 4B12 1DD8 6835 405A D739" /* •CªaÁÂK..Øh5@Z×9 */
- $"DBD7 1628 2816 909D 1DEB 81F2 16AF 8953" /* Û×.((..ëò.¯‰S */
- $"9239 B79D A64A 3275 E506 BFD3 0198 776C" /* ’9·¦J2uå.¿Ó.˜wl */
- $"F4C2 39CD 4CF8 2482 D781 526A 7D82 0B83" /* ôÂ9ÍLø$‚×Rj}‚.ƒ */
- $"120C B2AB 1FC0 2DAA 4A72 ACD9 B4C7 926A" /* ..²«.À-ªJr¬Ù´Ç’j */
- $"CE69 46FA C67E 904D 12D4 D6EC 2F77 AC43" /* ÎiFúÆ~M.ÔÖì/w¬C */
- $"0A82 A09A 8FAC 59F0 D192 4F8F E6D1 A8B3" /* ‚ š¬YðÑ’OæÑ¨³ */
- $"26FD EAD1 7727 E253 F826 580D 8786 8EAD" /* &ýêÑw'âSø&X.‡†Ž­ */
- $"4561 33FC 6C93 72E4 3F53 3E92 5E78 9597" /* Ea3ül“rä?S>’^x•— */
- $"895F 61B9 D382 514D 839E D4E8 A40B 6F99" /* ‰_a¹Ó‚QMƒžÔè¤.o™ */
- $"0BEC 889F F976 6F24 AEAC 2A18 479B 9CD0" /* .숟ùvo$®¬*.G›œÐ */
- $"A58D E4A8 4940 D7A9 26A7 8649 C387 22EB" /* ¥ä¨I@ש&§†IÇ"ë */
- $"10F3 AB7F 805D 57F4 6918 508A 429D FC32" /* .ó«.€]Wôi.PŠBü2 */
- $"0E49 3480 E5A6 0267 54A6 D677 422D 1B62" /* .I4€å¦.gT¦ÖwB-.b */
- $"4DFB C3A4 2E01 8C0D 029D D238 87B0 230E" /* Mûä..Œ..Ò8‡°#. */
- $"AB6E AEFD 64F3 F7AE 7BD7 DA13 2BCC DCFB" /* «n®ýdó÷®{×Ú.+ÌÜû */
- $"13EC E7EE A36F 86C6 A2D8 DD70 6174 04FA" /* .ìçî£o†Æ¢ØÝpat.ú */
- $"B7F7 A3BF 9C4C F99C C177 9B27 9148 3998" /* ·÷£¿œLùœÁw›'‘H9˜ */
- $"013A 4B0C E3A5 6905 6ADC 739C 3586 7009" /* .:K.ã¥i.jÜsœ5†pÆ */
- $"38DA 0496 C25E DFB2 F2AB 34C0 F138 4F81" /* 8Ú.–Â^ß²ò«4Àñ8O */
- $"7240 2774 4588 B153 267B DBBE DFDE AEAD" /* r@'tEˆ±S&{Û¾ßÞ®­ */
- $"1D90 BA71 2B83 D108 1CDB 8B36 7837 8AAA" /* .ºq+ƒÑ..Û‹6x7Šª */
- $"299C 2916 D66C CC2E 2FCF B0E3 228A 88C1" /* )œ).ÖlÌ./ϰã"ŠˆÁ */
- $"568F 12D8 D599 AB3F 29DE 1FA6 9336 132F" /* V.ØÕ™«?)Þ.¦“6./ */
- $"521E 8EB9 9BD4 30E4 362E 349E 209A 6EB6" /* R.޹›Ô0ä6.4ž šn¶ */
- $"D5CC 985B E51E 8A74 B9A0 1718 2753 A1E0" /* Õ̘[å.Št¹ ..'S¡à */
- $"BDCC 77CC 5697 641D B916 AB08 C12F 102F" /* ½ÌwÌV—d.¹.«.Á/./ */
- $"59A0 4283 27A8 9F9E 1980 381A 4785 E896" /* Y Bƒ'¨Ÿž.€8.G…è– */
- $"B9C8 A383 0C1E EBDE A8DC D1A0 00FB 61C2" /* ¹È£ƒ..ëÞ¨ÜÑ .ûa */
- $"70F1 84C8 8368 337E DA6C 7A1A 014F 77C3" /* pñ„ȃh3~Úlz..Owà */
- $"EFFF 0CCC F88E E539 B4FF 3187 54EA 4B2E" /* ïÿ.ÌøŽå9´ÿ1‡TêK. */
- $"27BF 1121 0DCD 456F 5AB4 E115 9E30 8B1C" /* '¿.!.ÍEoZ´á.ž0‹. */
- $"FCFB 8634 E35F E3F0 2A65 8EC0 775F C0EE" /* üû†4ã_ãð*eŽÀw_Àî */
- $"37B2 6C5A AA44 2B7C 889A 5854 FBB4 DC29" /* 7²lZªD+|ˆšXTû´Ü) */
- $"E875 94AB D4F4 19C2 5989 594D 6B55 CB5E" /* èu”«Ôô.ÂY‰YMkUË^ */
- $"012C A350 BF1C 322E 6DC6 6CFB 052A B48D" /* .,£P¿.2.mÆlû.*´ */
- $"2FFE D908 D443 2FB2 706F 13A8 B2BF 2E97" /* /þÙ.ÔC/²po.¨²¿.— */
- $"D7EF 6FE2 7D0B 4D6C 89E6 24BB D547 A266" /* ×ïoâ}.Ml‰æ$»ÕG¢f */
- $"3B92 FF58 BE83 0D95 D587 B51D B83A B360" /* ;’ÿX¾ƒ.•Õ‡µ.¸:³` */
- $"DF16 A55F 5D17 5ED7 C7D7 88FD D24B 89C4" /* ß.¥_].^×Ç׈ýÒK‰Ä */
- $"17FF 1CE0 2FC5 E332 79FF 6532 D599 2C36" /* .ÿ.à/Åã2yÿe2Õ™,6 */
- $"7360 56F2 6017 1165 F8CD AC09 6435 530F" /* s`Vò`..eøÍ¬Æd5S. */
- $"8E48 0152 06AE 7F31 9D5A A12E EC4A 26BD" /* ŽH.R.®.1Z¡.ìJ&½ */
- $"1D28 2D81 EBF2 625A 03C8 8240 FAB0 343C" /* .(-ëòbZ.È‚@ú°4< */
- $"3460 4650 A369 CBAF D533 EC55 DB4D 46F7" /* 4`FP£i˯Õ3ìUÛMF÷ */
- $"45C4 1B75 581D CC26 9E29 8B0F C424 5512" /* EÄ.uX.Ì&ž)‹.Ä$U. */
- $"9417 F11C 77C1 F3FD 57B1 487F D8F8 A086" /* ”.ñ.wÁóýW±H.Øø † */
- $"E60E 2356 E9E1 F3EC 7F31 52E1 E3DB C75E" /* æ.#Véáóì.1RáãÛÇ^ */
- $"7A4B 2D19 8F06 AB86 5A88 F23D C312 C565" /* zK-..«†Zˆò=Ã.Åe */
- $"1AF0 4B35 F0D9 D100 6634 A377 90C1 A69A" /* .ðK5ðÙÑ.f4£wÁ¦š */
- $"1C64 495A BEF2 5A5C 1714 0504 2639 71A2" /* .dIZ¾òZ\....&9q¢ */
- $"5989 FF6E F887 5ADD 9843 A719 60CC 5185" /* Y‰ÿnø‡ZݘC§.`ÌQ… */
- $"B308 2551 F63A 7543 2A92 3949 FCC5 5023" /* ³.%Qö:uC*’9IüÅP# */
- $"5A92 FE32 A26E FF00 9CFC 0CFF 4A08 60C7" /* Z’þ2¢nÿ.œü.ÿJ.`Ç */
- $"F76C 480A E682 3C58 66B8 7045 CDBA 616C" /* ÷lHÂæ‚<Xf¸pEͺal */
- $"9995 BEC1 809B 0892 A7EC 43EC 7FE8 F49F" /* ™•¾Á€›.’§ìCì.èôŸ */
- $"9E4B AFD6 66BB 0B88 38ED B165 9C1D F096" /* žK¯Öf».ˆ8í±eœ.ð– */
- $"64EC FD43 9A7A BC84 8CEF 2E65 F99B 4B43" /* dìýCšz¼„Œï.eù›KC */
- $"7D47 3AE8 D0DB A066 308B 201D FF3F ABC1" /* }G:èÐÛ f0‹ .ÿ?«Á */
- $"CD0D B822 3734 A23E AF05 D1E1 F9F5 AF09" /* Í.¸"74¢>¯.Ñáùõ¯Æ */
- $"6428 F517 1201 C3F1 1B80 0DD2 DCD9 CA31" /* d(õ...Ãñ.€.ÒÜÙÊ1 */
- $"B022 DAFB D990 A8B1 6FF1 004E 4847 E5C8" /* °"ÚûÙ¨±oñ.NHGåÈ */
- $"0580 DA86 704F E2FF 7E83 5167 5C3F ADB2" /* .€Ú†pOâÿ~ƒQg\?­² */
- $"4C44 A9D9 DB84 C360 68ED 1BF0 068E 04BF" /* LD©ÙÛ„Ã`hí.ð.Ž.¿ */
- $"D16E B55F 0701 3739 42FA E15C 0EA2 BF81" /* Ñnµ_..79Búá\.¢¿ */
- $"31C1 F1A3 A766 CAB8 C82E C96B 4868 D491" /* 1Áñ£§fʸÈ.ÉkHhÔ‘ */
- $"5ACB 6EED 4027 0C73 AACA 730C ECA6 DE42" /* ZËní@'.sªÊs.ì¦ÞB */
- $"38DA E07E CE64 BC49 7FDD FCCB 07B3 45BF" /* 8Úà~Îd¼I.ÝüË.³E¿ */
- $"B9DC FF13 039F D40E 43BB ACE4 B8F8 31F5" /* ¹Üÿ..ŸÔ.C»¬ä¸ø1õ */
- $"6743 9390 0B87 C9B1 194A 0200 FB53 29CD" /* gC“.‡É±.J..ûS)Í */
- $"3141 15F5 3C38 9F70 2B7E 0E46 B5A7 5C94" /* 1A.õ<8Ÿp+~.Fµ§\” */
- $"AED4 E415 1639 7B49 20DA 1541 9742 A3A6" /* ®Ôä..9{I Ú.A—B£¦ */
- $"B873 4C7C 9112 1322 7D7F 5F6E 14AB 57FC" /* ¸sL|‘.."}._n.«Wü */
- $"A01D 94EC BC05 F45B C4C4 1FC3 D61B F5D3" /*  .”ì¼.ô[ÄÄ.ÃÖ.õÓ */
- $"0E62 9C2F CAE6 C609 B0D2 803B AF5F CC7F" /* .bœ/ÊæÆÆ°Ò€;¯_Ì. */
- $"4085 5B49 F81B 0AB3 DB0C 27C1 7A95 45D6" /* @…[Iø.³Û.'Áz•EÖ */
- $"CDDD 4F06 1A20 A7FE 22F6 EA13 EB6E C723" /* ÍÝO.. §þ"öê.ënÇ# */
- $"87B9 A058 CAF9 9F59 C9C9 6AAD 8358 5147" /* ‡¹ XÊùŸYÉÉj­ƒXQG */
- $"2B3E 2FD8 506F A48B 305C 97C7 5D25 5C75" /* +>/ØPo¤‹0\—Ç]%\u */
- $"C5B1 E7B4 CBC7 C76A 2FE5 1669 302C 2318" /* űç´ËÇÇj/å.i0,#. */
- $"CB1D BB38 5B47 3563 F041 0F00 C23A B1E9" /* Ë.»8[G5cðA..Â:±é */
- $"1972 D9C9 2F2F 4013 F8EF A6CA 7E8E 705C" /* .rÙÉ//@.øï¦Ê~Žp\ */
- $"0CB6 1301 5ED4 25E6 F7D9 999D AB8F 4CAC" /* .¶..^Ô%æ÷Ù™«L¬ */
- $"6FF2 04C8 8307 016C 6E46 645B 5488 79C0" /* oò.ȃ..lnFd[TˆyÀ */
- $"C0E5 8A2A 46EB DB4C 65A0 27FC 6230 781C" /* ÀåŠ*FëÛLe 'üb0x. */
- $"EDB8 4666 1604 1937 9603 A2AA D8C3 43A6" /* í¸Ff...7–.¢ªØÃC¦ */
- $"E254 D745 866F D24A DD91 397E C575 F187" /* âT×E†oÒJÝ‘9~Åuñ‡ */
- $"193B F5F5 819B 7D57 EC83 0871 ED1B 64F6" /* .;õõ›}Wìƒ.qí.dö */
- $"E47A E1B0 65F9 67DF 5680 3642 52AA BB4B" /* äzá°eùgßV€6BRª»K */
- $"BA52 D8BA 8AF7 0A96 412A 92B2 045F 9739" /* ºRغŠ÷–A*’²._—9 */
- $"3A52 D961 6BC6 1D2E D90D 29A7 E9DE 2651" /* :RÙakÆ..Ù.)§éÞ&Q */
- $"CE3F 9921 03BC 7A7A CBFD 63E2 4C7C 9025" /* Î?™!.¼zzËýcâL|% */
- $"BCC3 D509 745E 9AE4 1675 0242 26EE E4F6" /* ¼ÃÕÆt^šä.u.B&îäö */
- $"B04B CFB3 E37F EADB 2840 E47E 0209 C8C5" /* °Kϳã.êÛ(@ä~.ÆÈÅ */
- $"56FC 6228 BB57 F43A BE32 0753 73FB EAE2" /* Vüb(»Wô:¾2.Ssûêâ */
- $"55B4 D581 42C8 10B8 AEA9 67C4 F685 982C" /* U´ÕBÈ.¸®©gÄö…˜, */
- $"3104 095F DCBD 3701 8749 9CBA A7A5 B714" /* 1.Æ_ܽ7.‡Iœº§¥·. */
- $"FDED FAA3 F034 54D8 728F 8640 4A61 560C" /* ýíú£ð4TØr†@JaV. */
- $"50D4 B224 A5F1 6715 6C8B 7EC6 BF5C 120D" /* PÔ²$¥ñg.l‹~Æ¿\.. */
- $"8797 B25E B0E1 C57E 69AF 1FF2 99C3 44B5" /* ‡—²^°áÅ~i¯.ò™ÃDµ */
- $"0508 0061 1F44 795F 27C0 511E 0796 9740" /* ...a.Dy_'ÀQ..–—@ */
- $"14FF 4C51 5651 34F3 658D 4CA8 3FBF 43CC" /* .ÿLQVQ4óeL¨?¿CÌ */
- $"8813 D372 1723 7DB5 6D44 4524 4E91 B644" /* ˆ.Ór.#}µmDE$N‘¶D */
- $"4B7D CDEC E0E0 8468 622D 87FE 80E3 E097" /* K}Íìàà„hb-‡þ€ãà— */
- $"303D 8894 1FFF 7FA6 9AAB C6E0 0B83 3EDD" /* 0=ˆ”.ÿ.¦š«Æà.ƒ>Ý */
- $"86A5 43D3 C650 0008 D364 A800 0000 0000" /* †¥CÓÆP..Ód¨..... */
- $"0000 07D7 8F92 61B9 E6E0 BCBF CD4A AB76" /* ...×’a¹æà¼¿ÍJ«v */
- $"5B6E 246A 8DFB D274 41F9 3583 773D 5165" /* [n$jûÒtAù5ƒw=Qe */
- $"2139 B773 476E DF91 33F0 8CDA F420 613F" /* !9·sGnß‘3ðŒÚô a? */
- $"9B35 33C9 8298 A661 A5DB 2CEF 1A1C BC3E" /* ›53É‚˜¦a¥Û,ï..¼> */
- $"09B4 5415 8511 4FE5 3FF8 B88C 339D C169" /* Æ´T.….Oå?ø¸Œ3Ái */
- $"9608 FF62 B2D6 285A 80A2 22C9 E4AA 5A99" /* –.ÿb²Ö(Z€¢"ÉäªZ™ */
- $"B3F5 E9D4 7FFF 7FF4 7D5C 4CC0 788F 0EB6" /* ³õéÔ.ÿ.ô}\LÀx.¶ */
- $"8024 0000 0A1E 1F40 0000 0000 0000 0000" /* €$..Â..@........ */
- $"CA54 CF6A 897B B6D7 9C90 87E9 FF6A 22A0" /* ÊTÏj‰{¶×œ‡éÿj"  */
- $"0765 4AE8 B827 B7A1 C412 4000 0000 0000" /* .eJè¸'·¡Ä.@..... */
- $"0000 2222 DAB7 AEED C4EB AFCB FF79 6610" /* ..""Ú·®íÄë¯Ëÿyf. */
- $"A362 D5F2 1401 DA9F 8978 3FC3 FF60 341C" /* £bÕò..ÚŸ‰x?Ãÿ`4. */
- $"524C CBF3 AF64 9BA4 637F F217 CA8C A4CE" /* RLËó¯d›¤c.ò.ÊŒ¤Î */
- $"A881 46DE C63F CB0B 4C86 F71C CDFF 6CDC" /* ¨FÞÆ?Ë.L†÷.ÍÿlÜ */
- $"3C86 AFD6 02EF 25B3 E392 0238 14ED F9FF" /* <†¯Ö.ï%³ã’.8.íùÿ */
- $"71EA 1A7B 7848 281D C18D 83C1 F0D1 C115" /* qê.{xH(.ÁƒÁðÑÁ. */
- $"C525 7E38 9E60 32A4 CED2 A5DE 8006 1212" /* Å%~8ž`2¤ÎÒ¥Þ€... */
- $"7136 14A1 74D1 9C7D F74C 708E 43DE 4154" /* q6.¡tÑœ}÷LpŽCÞAT */
- $"2939 179A 87BB 2AAF 7401 4404 CB30 458F" /* )9.š‡»*¯t.D.Ë0E */
- $"F1B7 EE42 3E46 458F B220 6F30 EE24 7D86" /* ñ·îB>FE² o0î$}† */
- $"2D28 3CA7 C184 60D3 4EBC 9C79 C402 02FC" /* -(<§Á„`ÓN¼œyÄ..ü */
- $"553C C62D DDC0 3D0C F12B C1FF 546D A4FF" /* U<Æ-ÝÀ=.ñ+ÁÿTm¤ÿ */
- $"5885 6B1B 9EF6 2206 8FB5 1CB0 2D3D B922" /* X…k.žö".µ.°-=¹" */
- $"644F D104 0152 70F8 BF41 4D6E 4F05 B928" /* dOÑ..Rpø¿AMnO.¹( */
- $"396A 4A92 9B1B 24AB 4611 6D95 87D6 2D7C" /* 9jJ’›.$«F.m•‡Ö-| */
- $"7546 B839 A3B1 C612 0F2A 796E 7911 5FF9" /* uF¸9£±Æ..*yny._ù */
- $"03C4 D13E EF00 2DEF 9CFE FDDE 3A2C FF3E" /* .ÄÑ>ï.-ïœþýÞ:,ÿ> */
- $"4567 F432 3673 3F84 8787 B65C 7A4F 2007" /* Egô26s?„‡‡¶\zO . */
- $"FF7C D894 A762 3872 8FA4 9563 D178 5039" /* ÿ|Ø”§b8r¤•cÑxP9 */
- $"C4BD 2EB4 0491 2A80 0000 0000 0000 0001" /* Ľ.´.‘*€........ */
- $"F172 6FA1 09F2 9F35 F3BC 2E0B 8E46 2557" /* ñro¡ÆòŸ5ó¼..ŽF%W */
- $"67C5 4F12 D1CF F08C BC61 0F89 E4A4 9249" /* gÅO.ÑÏðŒ¼a.‰ä¤’I */
- $"2492 4924 9249 221B 4708 65ED 84CA FDD2" /* $’I$’I".G.eí„ÊýÒ */
- $"D193 7C69 0CA3 95EF DDF2 33FF 556E D976" /* Ñ“|i.£•ïÝò3ÿUnÙv */
- $"2E4D FDCE E0FC 8669 83FF 768E 3CBB 179B" /* .MýÎàü†iƒÿvŽ<».› */
- $"DBB9 253D BFFF 79F1 5006 27BF 5548 40B9" /* Û¹%=¿ÿyñP.'¿UH@¹ */
- $"BADC F963 10BA 8BD9 367F E03A 6E29 5908" /* ºÜùc.º‹Ù6.à:n)Y. */
- $"0000 0000 0000 0000 0028 8080 0000 000A" /* .........(€€... */
- $"6370 D000 0142 83C0 0000 0011 CD3F D940" /* cpÐ..BƒÀ....Í?Ù@ */
- $"0022 C990 C912 501C 14FC 1926 5412 0E88" /* ."ÉÉ.P..ü.&T..ˆ */
- $"C32F B2ED E7A4 9249 2492 4924 9249 247E" /* Ã/²í礒I$’I$’I$~ */
- $"FB2C 999E D2ED 6DFF 783B 4C3A 3DB7 14A5" /* û,™žÒímÿx;L:=·.¥ */
- $"872C 2B85 8FC2 72EA 3412 FCA8 32E0 7A2E" /* ‡,+…Ârê4.ü¨2àz. */
- $"B109 F66C 3F99 7C32 2761 1522 7B9C 1851" /* ±Æöl?™|2'a."{œ.Q */
- $"B3CB 5373 0652 CE79 D8C5 B721 03D7 CD81" /* ³ËSs.RÎyØÅ·!.×Í */
- $"A03A CD5F CECF B58A 4122 7ED2 9FFF 7FFF" /*  :Í_ÎϵŠA"~ÒŸÿ.ÿ */
- $"1575 DF0B 430B 0A6C 6108 B421 B33F E9FA" /* .uß.C.Âla.´!³?éú */
- $"AC06 391C EB01 17F4 3BF4 4CDA 87DA 516F" /* ¬.9.ë..ô;ôLÚ‡ÚQo */
- $"EFA3 E7F9 651A 6902 C269 AF79 2EA4 D861" /* ï£çùe.i.Âi¯y.¤Øa */
- $"CBC1 7F37 146D 4163 38BB B16B AAD4 9AC2" /* ËÁ.7.mAc8»±kªÔšÂ */
- $"424A B3CE 1368 78EF B4B0 FE68 2FBA 0CB2" /* BJ³Î.hxï´°þh/º.² */
- $"E672 A89D 999E 64CD 417A 98A3 8458 0603" /* ær¨™ždÍAz˜£„X.. */
- $"C03D 9F9E B15E 8418 0FC6 F3E0 BA39 A3C1" /* À=Ÿž±^„..Æóàº9£Á */
- $"9929 0547 9C29 FC76 57CA B1E5 F887 AE73" /* ™).Gœ)üvWÊ±åø‡®s */
- $"78AA BA9F FF7F C07C 00F0 28E9 7533 0FC1" /* xªºŸÿ.À|.ð(éu3.Á */
- $"097C 4ABC F3CB 6604 EEC2 5194 A1F2 A201" /* Æ|J¼óËf.îÂQ”¡ò¢. */
- $"D6B0 C5F3 4AA3 8FD8 34DC A382 0CD4 134E" /* Ö°ÅóJ£Ø4Ü£‚.Ô.N */
- $"8275 37F5 2388 74C6 1A6C F889 1037 A348" /* ‚u7õ#ˆtÆ.lø‰.7£H */
- $"ACB4 EFF5 B446 564C C6DC 75F7 8445 013F" /* ¬´ïõ´FVLÆÜu÷„E.? */
- $"79FF 407B 05EE 9C66 8A53 FF7A 367A 6D06" /* yÿ@{.îœfŠSÿz6zm. */
- $"9ADF CBDD 25B5 0629 78A0 A071 35BA EE49" /* šßËÝ%µ.)x  q5ºîI */
- $"64E9 3EA3 9A07 917A 66E3 090C B916 3BF5" /* dé>£š.‘zfãÆ.¹.;õ */
- $"10D7 77D5 7281 248E 3F09 0C0F 319E 7F71" /* .×wÕr$Ž?Æ..1ž.q */
- $"98DA A34A C823 06A4 6BFD 8EA1 8C71 EB25" /* ˜Ú£JÈ#.¤kýŽ¡Œqë% */
- $"E5FC 0BA1 DB35 9514 A229 56F0 7E42 9FD0" /* åü.¡Û5•.¢)Vð~BŸÐ */
- $"5435 3CB7 AED9 0A4F 625B A493 D1B2 C654" /* T5<·®ÙÂOb[¤“ѲÆT */
- $"F691 87F9 F8E9 7459 1823 E06B 57D6 C638" /* ö‘‡ùøétY.#àkWÖÆ8 */
- $"7EE2 8CA0 1D79 4000 0000 0000 0000 0000" /* ~⌠.y@......... */
- $"0000 0000 442A 0D8C 8522 4E1A 3752 5040" /* ....D*.Œ…"N.7RP@ */
- $"E53D EE69 0B70 A6BF 9D0D D725 D66E 8D50" /* å=îi.p¦¿.×%ÖnP */
- $"10DB 966B 649B 0CA3 958B 6457 90CC 214A" /* .Û–kd›.£•‹dWÌ!J */
- $"C4C0 27A2 95F4 98AD 14C2 1892 EBE7 864B" /* ÄÀ'¢•ô˜­.Â.’ëç†K */
- $"18AA 55C7 50D2 4A15 7F4E 566A 9C13 9C52" /* .ªUÇPÒJ..NVjœ.œR */
- $"AC77 FE86 B3A2 5D92 D112 516C BA99 60EE" /* ¬wþ†³¢]’Ñ.Qlº™`î */
- $"221A F194 D9DF FF5F FF6B 77F9 4B01 4F8F" /* ".ñ”Ùßÿ_ÿkwùK.O */
- $"F681 8614 2F3E 31E3 EABB 7C34 6025 A491" /* ö†./>1ãê»|4`%¤‘ */
- $"9BC1 A348 628D 34AE 751A F8F7 7521 7F48" /* ›Á£Hb4®u.ø÷u!.H */
- $"68A4 6B9C F66F 252D 6021 9C97 39AB B637" /* h¤kœöo%-`!œ—9«¶7 */
- $"3B5D E8FB 56EE 824A F65D C84D E23C 7BF2" /* ;]èûVî‚Jö]ÈMâ<{ò */
- $"5400 0000 0000 0000 0000 0000 0014 080D" /* T............... */
- $"B05B 4688 1F60 376D 2209 1DE1 7E75 CD30" /* °[Fˆ.`7m"Æ.á~uÍ0 */
- $"5D2F 627B A077 8D86 2001 62AF 1031 6853" /* ]/b{ w† .b¯.1hS */
- $"2A8E 0308 16F6 C4EC E5B6 814A 1DF2 23EB" /* *Ž...öÄìå¶J.ò#ë */
- $"8C16 64F9 A1ED 8A1F 346E 2E1C 5ACB 4376" /* Œ.dù¡íŠ.4n..ZËCv */
- $"5014 B885 5212 5294 8F4F DF56 7339 8A5D" /* P.¸…R.R”OßVs9Š] */
- $"03C0 A05F D60B 5D58 2677 CD67 A4EE 3803" /* .À _Ö.]X&wÍg¤î8. */
- $"B2B1 9AD5 A41A C3EF 3281 3FFF 780A A5BD" /* ²±šÕ¤.Ãï2?ÿxÂ¥½ */
- $"861B 62F7 456F 1021 93CD A115 BD61 7E4C" /* †.b÷Eo.!“Í¡.½a~L */
- $"2306 D6BF D5D9 18AF 12BB 22D9 E32E 6976" /* #.Ö¿ÕÙ.¯.»"Ùã.iv */
- $"9282 5E47 A842 7983 2C87 64C5 6215 A0D9" /* ’‚^G¨Byƒ,‡dÅb. Ù */
- $"E45A EFAE 74F3 E5E5 7679 A7C0 D366 649C" /* äZï®tóååvy§ÀÓfdœ */
- $"9EF3 D763 2D6C D0AD 48E5 7A2A 9454 8B34" /* žó×c-lЭHåz*”T‹4 */
- $"B7FF 7FCD F604 90E4 2716 1C40 DD8A 8B1A" /* ·ÿ.Íö.ä'..@ÝŠ‹. */
- $"24C8 2F0C 06AC 999A 58B7 C15E E6B1 431B" /* $È/..¬™šX·Á^æ±C. */
- $"73D1 FEC5 5182 4A2D 33CB E920 AFBE 9F5A" /* sÑþÅQ‚J-3Ëé ¯¾ŸZ */
- $"0478 C2F3 80D7 241A 2E07 8BF3 FD3F 471A" /* .xÂó€×$...‹óý?G. */
- $"7C53 1C79 2F17 C32F D5C6 B977 E2F9 9D80" /* |S.y/.Ã/ÕÆ¹wâù€ */
- $"558B 7336 75BC 5945 3986 BD1C CE95 EA07" /* U‹s6u¼YE9†½.Εê. */
- $"7152 C778 65AD 73E9 F1B7 24D4 BDB0 7F24" /* qRÇxe­séñ·$Ô½°.$ */
- $"BACD 3C51 D344 33D7 21C7 BE9A 915D 2808" /* ºÍ<QÓD3×!Ǿš‘](. */
- $"3E68 3F1B 43AE 8F30 CE7F FF67 1C78 8498" /* >h?.C®0Î.ÿg.x„˜ */
- $"08D8 E1D9 3F1A E50B EB7C E564 6F4C 57F3" /* .ØáÙ?.å.ë|ådoLWó */
- $"9E60 5F9B 244E 83A9 33C9 668A 3951 7E33" /* ž`_›$Nƒ©3ÉfŠ9Q~3 */
- $"31D7 01E7 0342 6BC0 7FD1 7488 2BE1 9AD1" /* 1×.ç.BkÀ.Ñtˆ+ášÑ */
- $"1938 BBD8 7710 BAD3 BB92 2C80 A162 B2EF" /* .8»Øw.ºÓ»’,€¡b²ï */
- $"3FEA 6FC2 47D2 0D0E 28AB 03DA 4B34 4027" /* ?êoÂGÒ..(«.ÚK4@' */
- $"7FFD 87BC 9D96 E076 3C00 0000 0000 0000" /* .ý‡¼–àv<....... */
- $"0000 0000 0000 136C 1721 95F0 1991 3F80" /* .......l.!•ð.‘?€ */
- $"65DC 1F3F AEA0 BE5C 71D2 94CE C7FF 7FFF" /* eÜ.?® ¾\qÒ”ÎÇÿ.ÿ */
- $"7917 BEAD D458 935A 563C CC9C 6C0D CFFF" /* y.¾­ÔX“ZV<Ìœl.Ïÿ */
- $"55DA 93C2 F199 3D1E C4C2 3C5F A7BC D48E" /* UÚ“Âñ™=.ÄÂ<_§¼ÔŽ */
- $"4980 037B 9FCC F7BC 6E1E 78CD 2838 DC58" /* I€.{ŸÌ÷¼n.xÍ(8ÜX */
- $"F156 C827 88EA BFF7 BD95 BBD6 FE11 C305" /* ñVÈ'ˆê¿÷½•»Öþ.Ã. */
- $"A1D2 FA2A EA0B E56B 285B 91FE 551E F5E2" /* ¡Òú*ê.åk([‘þU.õâ */
- $"687C 5A51 1A67 64D3 BD76 4937 F455 4C94" /* h|ZQ.gdÓ½vI7ôUL” */
- $"6A7E B888 CB40 7AA3 DDEE 8BD8 2D9F 1EB6" /* j~¸ˆË@z£Ýî‹Ø-Ÿ.¶ */
- $"48DF 9C66 6BF3 A26A 3CC4 2D4D E47A 6D9A" /* Hßœfkó¢j<Ä-Mäzmš */
- $"DAB1 1DA4 083A D994 4416 C0D2 2E63 539E" /* Ú±.¤.:Ù”D.ÀÒ.cSž */
- $"7274 3C04 85F4 D7B5 EDEF 507A B2B7 1832" /* rt<.…ô×µíïPz²·.2 */
- $"6615 A186 4A80 0000 0000 0000 0000 0000" /* f.¡†J€.......... */
- $"07CF BF6C 3626 7453 BF7D 8B57 26C9 F556" /* .Ï¿l6&tS¿}‹W&ÉõV */
- $"1F12 0BB9 5DC4 797D 3C69 7DB2 2FFF 7F33" /* ...¹]Äy}<i}²/ÿ.3 */
- $"81FC E4ED 4BF8 9180 3FD2 0142 3F2D 1DF0" /* üäíKø‘€?Ò.B?-.ð */
- $"097B D61C 019A C409 B506 26FC D55D 7AE9" /* Æ{Ö..šÄƵ.&üÕ]zé */
- $"3464 6C57 13E7 565F 2553 70C3 3EC7 87AC" /* 4dlW.çV_%SpÃ>LJ¬ */
- $"3161 5289 3A6A FC0B E254 CAFA 6A32 2F8C" /* 1aR‰:jü.âTÊúj2/Œ */
- $"8B76 FA87 DADD 0333 2250 0058 F5C6 21CD" /* ‹vú‡ÚÝ.3"P.XõÆ!Í */
- $"D094 5CD5 10DD 2FA0 B74B 06FB AA9B 2B62" /* Д\Õ.Ý/ ·K.ûª›+b */
- $"E36D 708E B8F5 0739 3097 7F03 47BE 48F5" /* ãmpޏõ.90—..G¾Hõ */
- $"D079 1641 CA5D DF28 C92B 0EFA B18F CE6F" /* Ðy.AÊ]ß(É+.ú±Îo */
- $"6648 DB26 DE5C 1D17 2BD3 28AF DD89 801C" /* fHÛ&Þ\..+Ó(¯Ý‰€. */
- $"AB0D 40D1 9016 D542 63A0 8222 9D7A F0F5" /* «.@Ñ.ÕBc ‚"zðõ */
- $"A171 2D28 3D2C C22E 09AB 3AA9 C50B 7545" /* ¡q-(=,Â.Æ«:©Å.uE */
- $"4C64 18E8 8E67 3A7D DDBE 36CE 2F97 5AD0" /* Ld.èŽg:}ݾ6Î/—ZÐ */
- $"E4F0 8AFB 6071 6268 E5F6 09EA 245F 9F87" /* äðŠû`qbhåöÆê$_Ÿ‡ */
- $"E304 242C 234C 9FF7 1D0A 11C7 4FE7 20BC" /* ã.$,#LŸ÷.Â.ÇOç ¼ */
- $"EC58 1A4B 5A8E DE45 0E5F 4A03 4C8A 5051" /* ìX.KZŽÞE._J.LŠPQ */
- $"E410 4405 321B BD82 AC69 94F7 AA5E 5C65" /* ä.D.2.½‚¬i”÷ª^\e */
- $"436F 861A C95F 1AB0 2E2B 9689 AA43 B247" /* Co†.É_.°.+–‰ªC²G */
- $"6DE3 4E9E F205 F221 D175 86BB 4434 C0EE" /* mãNžò.ò!Ñu†»D4Àî */
- $"C472 EA2B 499D 63FA B4C8 FAB3 91F3 060D" /* Ärê+Icú´Èú³‘ó.. */
- $"C203 A636 1D98 6B00 D678 0D3C BE92 309E" /* Â.¦6.˜k.Öx.<¾’0ž */
- $"759A 11D4 B514 24FB E4D2 7089 76DE 42DD" /* uš.Ôµ.$ûäÒp‰vÞBÝ */
- $"5338 4798 5943 4A6B 500A 472E 77BE AEBD" /* S8G˜YCJkPÂG.w¾®½ */
- $"93B0 117A 0E2D A8E4 DFED 5A76 1775 2BFF" /* “°.z.-¨äßíZv.u+ÿ */
- $"1A84 CBE1 B007 D3EA 11B0 9BB8 4B3F BB56" /* .„Ëá°.Óê.°›¸K?»V */
- $"33F6 B242 4C5C A63D 638F 1BA5 0AC5 698D" /* 3ö²BL\¦=c.¥ÂÅi */
- $"45B3 D343 D769 FEEE C45D 50B0 9AAA 4146" /* E³ÓC×iþîÄ]P°šªAF */
- $"0BFA F8CC 694B A42D FC1E C3F1 54F0 D3F9" /* .úøÌiK¤-ü.ÃñTðÓù */
- $"F051 5182 D373 5210 38AA F9B0 D3F3 6B07" /* ðQQ‚ÓsR.8ªù°Óók. */
- $"C944 7FCA 2126 D17A 01B1 7763 CDE8 D5FF" /* ÉD.Ê!&Ñz.±wcÍèÕÿ */
- $"00F4 08D7 4060 339C D8E2 7EA4 B00D 3171" /* .ô.×@`3œØâ~¤°.1q */
- $"ABB0 7F47 D146 13B9 398E 14B3 C55D 10AF" /* «°.GÑF.¹9Ž.³Å].¯ */
- $"8D0A 2444 26A0 EFEA 6CB2 51FD EA28 0FD7" /* Â$D& ïêl²Qýê(.× */
- $"4E2F F54F 0066 62F2 66F3 334C 5D9D 77ED" /* N/õO.fbòfó3L]wí */
- $"F3D0 12ED 7A95 89A1 B928 8429 DCFB 8C68" /* óÐ.íz•‰¡¹(„)ÜûŒh */
- $"C35C 3C77 5D7D 5180 A012 ADA3 AE60 AAE0" /* Ã\<w]}Q€ .­£®`ªà */
- $"0D88 09A4 4F7B FAC4 A2FD 327D E109 4F0B" /* .ˆÆ¤O{úÄ¢ý2}áÆO. */
- $"3343 C0ED D985 7402 93E2 7A2E 09B4 09A6" /* 3CÀíÙ…t.“âz.ƴƦ */
- $"5348 2E51 C037 BE62 C1A7 15C4 B9C8 7F4B" /* SH.QÀ7¾bÁ§.ĹÈ.K */
- $"FC22 3596 D989 C701 6701 5488 1001 22B2" /* ü"5–Ù‰Ç.g.Tˆ.."² */
- $"C06A A5D5 2C94 6BA9 D1C6 2B33 5910 8B1F" /* Àj¥Õ,”k©ÑÆ+3Y.‹. */
- $"0B0D 5531 BE0F 3E72 9C60 75A8 2669 220D" /* ..U1¾.>rœ`u¨&i". */
- $"E140 D538 7CD4 5763 D708 6D5E 45C0 AE61" /* á@Õ8|ÔWc×.m^EÀ®a */
- $"EC8B E180 1D9C 712C 4DB9 F177 6733 0F76" /* ì‹á€.œq,M¹ñwg3.v */
- $"9A72 7AD0 D18D 2BE6 9DCE 6294 4092 CE8E" /* šrzÐÑ+æÎb”@’ÎŽ */
- $"ACED 8B00 B050 AE53 C09C 98D6 CFD1 4208" /* ¬í‹.°P®SÀœ˜ÖÏÑB. */
- $"DEB2 AF01 5ED7 E1F4 4EAA 0B09 2263 FE09" /* Þ²¯.^×áôNª.Æ"cþÆ */
- $"2771 6EB7 9181 1DFE A5DD 9A12 4592 02FD" /* 'qn·‘.þ¥Ýš.E’.ý */
- $"5F2D D4D6 5C15 B454 B07C 9B6A B9F9 AEC2" /* _-ÔÖ\.´T°|›j¹ù®Â */
- $"D883 1F5F B9B1 8258 6732 C7E3 5C90 DB16" /* ؃._¹±‚Xg2Çã\Û. */
- $"42EC D875 2B9D FEAF 1FED BD80 261D BAAE" /* BìØu+þ¯.í½€&.º® */
- $"3799 FDC7 DBE5 E769 A11C 3304 5D3B 419C" /* 7™ýÇÛåçi¡.3.];Aœ */
- $"5844 E615 EE7A 5DCE 272E D055 121D 1F84" /* XDæ.îz]Î'.ÐU...„ */
- $"2EC6 E6B1 A7DA D03A D600 6D58 4FF0 9196" /* .Ææ±§ÚÐ:Ö.mXOð‘– */
- $"FBCA CDDC 1B8D 9D1A BB7B 3782 0F3F 626C" /* ûÊÍÜ..»{7‚.?bl */
- $"26AA AF34 6A20 8210 1E96 ED21 5A26 EF04" /* &ª¯4j ‚..–í!Z&ï. */
- $"5F66 5C2D A8A4 F3BC 1871 AD1D FE4D 8C8B" /* _f\-¨¤ó¼.q­.þMŒ‹ */
- $"F1E5 A382 654B 08C7 EFC4 BFBA C29B 5C73" /* ñ壂eK.ÇïÄ¿ºÂ›\s */
- $"2420 9390 3B75 6DE6 0208 6F4F BB53 B2AA" /* $ “;umæ..oO»S²ª */
- $"AD28 4360 1A8A 4301 088C 6F17 68CC 9180" /* ­(C`.ŠC..Œo.hÌ‘€ */
- $"D757 7012 3BE3 C4AB DF05 97B9 4B57 B6FC" /* ×Wp.;ãÄ«ß.—¹KW¶ü */
- $"7693 36DE 89E8 E2AB 4352 A782 4520 DA28" /* v“6Þ‰èâ«CR§‚E Ú( */
- $"F1F2 34D6 2EAE E401 ED61 1E2E 4E74 D4EB" /* ñò4Ö.®ä.ía..NtÔë */
- $"98A9 94AD F856 8EE1 E3D0 06FC AA37 31E5" /* ˜©”­øVŽáãÐ.üª71å */
- $"1047 113E C151 CE86 B6A4 0F82 E5D9 CE50" /* .G.>ÁQΆ¶¤.‚åÙÎP */
- $"57A8 8F86 AFAD 21D1 2C4C F181 8BD7 106C" /* W¨†¯­!Ñ,Lñ‹×.l */
- $"3C77 649E 038E 3C63 66F4 EE1A 2906 755C" /* <wdž.Ž<cfôî.).u\ */
- $"EDD8 6093 6868 531C 9FA3 C5C9 3F3C 7786" /* íØ`“hhS.Ÿ£ÅÉ?<w† */
- $"BCC4 440C 13F9 0BCB 76BA 9364 A3CC 344F" /* ¼ÄD..ù.Ëvº“d£Ì4O */
- $"128B D594 CB9D A2DC 6C03 CA48 2D9E 9706" /* .‹Õ”Ë¢Ül.ÊH-ž—. */
- $"A281 5170 A91B 0033 4552 2A9A BF6F D4A9" /* ¢Qp©..3ER*š¿oÔ© */
- $"61B6 F6C1 7959 FDD2 8F3F C94B 2B90 29BB" /* a¶öÁyYýÒ?ÉK+)» */
- $"9FAA A83B FEFF 80A3 1EC2 B2D9 77CF 963B" /* Ÿª¨;þÿ€£.²ÙwÏ–; */
- $"85FF 5728 5CDD 2F01 7556 8155 F8AA 7984" /* …ÿW(\Ý/.uVUøªy„ */
- $"7543 0C18 A1FC 0353 DF5F D368 41E9 E0EF" /* uC..¡ü.Sß_ÓhAéàï */
- $"C363 A78F 3FE9 41E9 5F77 19A4 A811 FF43" /* Ãc§?éAé_w.¤¨.ÿC */
- $"8EE8 3FBA 00FA 54F6 15F5 CF3B 39A6 0984" /* Žè?º.úTö.õÏ;9¦Æ„ */
- $"CC99 7AE1 8E5B 71A9 1575 DB95 F166 D52F" /* Ì™záŽ[q©.uÛ•ñfÕ/ */
- $"A270 08D4 9515 3B89 2EA1 A097 12A3 B4E9" /* ¢p.Ô•.;‰.¡ —.£´é */
- $"5BFB AE47 8FD7 60F0 33DA E91B 234B 5D2F" /* [û®G×`ð3Úé.#K]/ */
- $"7C4B 00C2 60F1 7260 B78A 1835 B440 611B" /* |K.Â`ñr`·Š.5´@a. */
- $"042D F768 F9C9 8785 50AD 8421 77D4 B97A" /* .-÷hùɇ…P­„!wÔ¹z */
- $"6B02 828C E758 8B31 1E92 DF7F BE67 3DAB" /* k.‚ŒçX‹1.’ß.¾g=« */
- $"E5F8 F1FB FD8C 34F4 4B2F 98BF 24A9 4DF2" /* åøñûýŒ4ôK/˜¿$©Mò */
- $"32A9 A661 B01E F960 12E1 9C18 F197 CEA7" /* 2©¦a°.ù`.áœ.ñ—Χ */
- $"E1C4 4AB4 7CEB 2CE2 33F3 C23C F3FD 2CF9" /* áÄJ´|ë,â3óÂ<óý,ù */
- $"F132 8395 3D39 FD9D 983D 4454 9758 856B" /* ñ2ƒ•=9ý˜=DT—X…k */
- $"6556 B234 72B0 C2CA 71CA 9CEB 7AE4 FD7C" /* eV²4r°ÂÊqÊœëzäý| */
- $"0E3F 1930 6B17 7074 C216 3D9C 24BF 5B97" /* .?.0k.ptÂ.=œ$¿[— */
- $"A7EA 25F0 9DCC AFA5 BBEF 47E9 D7E6 7B0E" /* §ê%ð̯¥»ïGé׿{. */
- $"E02F 87A2 EF87 68FC 9BF7 F274 5F00 FC3D" /* à/‡¢ï‡hü›÷òt_.ü= */
- $"A5F8 7AC7 F0FA A5F8 7D42 C03F 0F42 FE1D" /* ¥øzÇðú¥ø}BÀ?.Bþ. */
- $"ABF0 F7CF E1EE 40ED 1CBC E67A C7C3 33E9" /* «ð÷Ïáî@í.¼æzÇÃ3é */
- $"75CE 6202 697A FF68 B299 C0A6 2F39 4F64" /* uÎb.izÿh²™À¦/9Od */
- $"6775 1459 6387 68C9 941E E328 B150 8D7C" /* gu.Yc‡hÉ”.ã(±P| */
- $"24C4 D953 4443 9A50 E4CC 4E41 B3A9 F28A" /* $ÄÙSDCšPäÌNA³©òŠ */
- $"BB0E 943C 0DAB C98A 023C 332B AE2D AF60" /* ».”<.«ÉŠ.<3+®-¯` */
- $"4D30 BA77 9D1A 93DC CEBB 7560 EA33 084C" /* M0ºw.“Üλu`ê3.L */
- $"BCFD 2F47 685E 4CC9 8A76 F1C8 04AB 126F" /* ¼ý/Gh^LÉŠvñÈ.«.o */
- $"B9FD 4A34 E181 4147 9F56 2AB4 EB2C 50EF" /* ¹ýJ4áAGŸV*´ë,Pï */
- $"D652 4543 763B B857 210B 2B4A BB50 0EAE" /* ÖRECv;¸W!.+J»P.® */
- $"90BD EEEC F92B DD18 0881 9B3A C6DF A028" /* ½îìù+Ý..›:Æß ( */
- $"45EB 36D7 50B4 D756 FB49 9F08 D74D 037B" /* Eë6×P´×VûIŸ.×M.{ */
- $"83A1 001C 0977 1DCC 81D0 B6B9 828A 6851" /* ƒ¡..Æw.Ìж¹‚ŠhQ */
- $"3CAC B3FF 572B 543A 4C73 3F35 0561 EC81" /* <¬³ÿW+T:Ls?5.aì */
- $"A8D4 82BC 9148 5E30 FF3E 3164 C43E 5461" /* ¨Ô‚¼‘H^0ÿ>1dÄ>Ta */
- $"4BD0 139E 6390 0E05 4793 56B8 5080 CBF6" /* KÐ.žc..G“V¸P€Ëö */
- $"9E70 BEA1 FB26 DD1E AEE1 E78D 0D32 FA02" /* žp¾¡û&Ý.®áç.2ú. */
- $"43FC FBC6 7464 2C9A 14AD 2C7C 0969 995F" /* CüûÆtd,š.­,|Æi™_ */
- $"6363 3037 9C34 C5F8 42DF B339 D2B0 5C45" /* cc07œ4ÅøBß³9Ò°\E */
- $"6130 509D 28E7 D3A7 9308 74ED 9265 B7F9" /* a0P(çÓ§“.tí’e·ù */
- $"0F54 D265 33D9 EB57 07C4 852B E3C8 771F" /* .TÒe3ÙëW.Ä…+ãÈw. */
- $"21F8 ADA3 D807 625C 513A E395 604B 0D6A" /* !ø­£Ø.b\Q:ã•`K.j */
- $"A9FC 297E 63AF 7622 23B6 63E1 EF25 F572" /* ©ü)~c¯v"#¶cáï%õr */
- $"01B0 400D 18C6 C9FA 6AF5 3E26 4199 6E68" /* .°@..ÆÉújõ>&A™nh */
- $"99B5 B3A9 F861 3419 C6C7 B65C D0F6 353B" /* ™µ³©øa4.ÆÇ¶\Ðö5; */
- $"6551 1B0A 9D82 1F07 4185 8C46 5867 DC22" /* eQ.‚..A…ŒFXgÜ" */
- $"BD38 AFF7 27BA 1114 9266 5EF4 1EA9 89B4" /* ½8¯÷'º..’f^ô.©‰´ */
- $"A634 E917 65E5 502E 8028 D24E 725F 0C22" /* ¦4é.eåP.€(ÒNr_." */
- $"1513 7B38 5FEA 3150 520B 6D8A 03D8 F796" /* ..{8_ê1PR.mŠ.Ø÷– */
- $"D183 D8FA 82E2 C147 B662 593B 9FC8 A2A0" /* уØú‚âÁG¶bY;ŸÈ¢  */
- $"C63B D151 D905 072C 02E5 919B 0BE9 6D76" /* Æ;ÑQÙ..,.å‘›.émv */
- $"4BEF 7D51 FF67 C2F2 BB61 DDD2 7981 0B7E" /* Kï}QÿgÂò»aÝÒy.~ */
- $"D406 3679 DFA4 FAE3 A33C 28AC 06C6 93C1" /* Ô.6yߤúã£<(¬.Æ“Á */
- $"B82F 53DB 1EB8 A6F3 5A24 A44A 1A76 9204" /* ¸/SÛ.¸¦óZ$¤J.v’. */
- $"6543 FC80 18DA 3C5D 395B 01DC D7E8 C21E" /* eCü€.Ú<]9[.Ü×èÂ. */
- $"A66C 9AE3 08D6 DBFC EE95 9E73 F71D 7CCA" /* ¦lšã.ÖÛüs÷.|Ê */
- $"2A6A F6D2 11D9 AC28 BEDE 8E1B 65EF A995" /* *jöÒ.Ù¬(¾ÞŽ.eï©• */
- $"F7B5 B19D 5F63 F42B D0AD D69A BD47 1EED" /* ÷µ±_cô+Э֚½G.í */
- $"2E5C 0276 3AEA F6D9 6E3F 314C 7F5F 52C3" /* .\.v:êöÙn?1L._RÃ */
- $"093D C8A9 23E4 C154 5587 294A 98A9 0643" /* Æ=È©#äÁTU‡)J˜©.C */
- $"AF18 0D20 51A4 6FE1 F326 11E7 5A91 2919" /* ¯.. Q¤oáó&.çZ‘). */
- $"DD53 B13B 2CB3 DE77 FAB9 420E BAFB 305B" /* ÝS±;,³Þwú¹B.ºû0[ */
- $"E9AB 7A2B 623B 78FE 346D 8BB6 BA40 AE40" /* é«z+b;xþ4m‹¶º@®@ */
- $"5B6D 6D53 81A1 076D 7058 E792 E410 3FA7" /* [mmS¡.mpXç’ä.?§ */
- $"AD06 7E2E 5158 D129 9233 6E1D 6B7C C701" /* ­.~.QXÑ)’3n.k|Ç. */
- $"D61D 42D8 472F D5E2 2710 0B6C 828A 2352" /* Ö.BØG/Õâ'..l‚Š#R */
- $"D400 65FA E227 A938 1832 18CC 2BCE 19A8" /* Ô.eúâ'©8.2.Ì+Î.¨ */
- $"773C 3CB1 C6BD D722 8EE1 8AE2 4D4B 97D4" /* w<<±Æ½×"ŽáŠâMK—Ô */
- $"1763 37E4 2F93 8578 534E 0BA9 B493 3B80" /* .c7ä/“…xSN.©´“;€ */
- $"F018 28BE 2A52 15B2 8499 08A8 005F F028" /* ð.(¾*R.²„™.¨._ð( */
- $"ADFD ACEB 238F 922A 75E4 1C65 F2C3 F14B" /* ­ý¬ë#’*uä.eòÃñK */
- $"213D 7263 4A9A 1C80 12BD 5895 0EC8 B955" /* !=rcJš.€.½X•.ȹU */
- $"8CD0 FB81 63CF FF7F B545 85DF E201 36A9" /* ŒÐûcÏÿ.µE…ßâ.6© */
- $"E524 1BD6 EDDA 7C33 8CD2 E114 BA93 51E0" /* å$.ÖíÚ|3ŒÒá.º“Qà */
- $"A113 A12A FBEA 8570 B5FE E1B6 7963 5B31" /* ¡.¡*ûê…pµþá¶yc[1 */
- $"512A 99B1 3A59 E50E C584 DD7F FF7F FF7E" /* Q*™±:Yå.Å„Ý.ÿ.ÿ~ */
- $"D3C9 019B 1FBC DB70 2C2A 14A6 E7F1 0147" /* ÓÉ.›.¼Ûp,*.¦çñ.G */
- $"5F3A A36C 6F8A 9038 ABD8 EB8F FF7F FE79" /* _:£loŠ8«Øëÿ.þy */
- $"6C12 2D6F FD6D F9A0 0392 0E82 0296 3C14" /* l.-oýmù .’.‚.–<. */
- $"FEFA 803C A3D4 1049 CF30 E22F 6542 7ABF" /* þú€<£Ô.IÏ0â/eBz¿ */
- $"378E 66B2 9091 D396 B953 DCF5 66D3 C5B5" /* 7Žf²‘Ó–¹SÜõfÓŵ */
- $"7719 028C 5C0F F898 00A1 0C1D E181 F9C7" /* w..Œ\.ø˜.¡..áùÇ */
- $"2E46 06D4 D623 1256 EFAE 89E3 4FFF 7FDD" /* .F.ÔÖ#.VﮉãOÿ.Ý */
- $"F00D 4E11 65D5 B8F9 7C0B A045 AC4A 1E42" /* ð.N.eÕ¸ù|. E¬J.B */
- $"221C B512 5480 EF2D CB80 A089 3603 2CA1" /* ".µ.T€ï-Ë€ ‰6.,¡ */
- $"391C 7925 C817 92E3 8438 C438 08D1 0637" /* 9.y%È.’ã„8Ä8.Ñ.7 */
- $"9FCD F4C2 C04C 40BB A484 5043 0C1E 7C85" /* ŸÍôÂÀL@»¤„PC..|… */
- $"D7F6 1F6D BFC7 60AA 4D18 A399 9A13 CCD0" /* ×ö.m¿Ç`ªM.£™š.ÌÐ */
- $"26DA 3F97 24CB E902 0668 67F7 FE63 7A2E" /* &Ú?—$Ëé..hg÷þcz. */
- $"16D6 987F FF7F AFC1 5C35 E63D BA36 6227" /* .Ö˜.ÿ.¯Á\5æ=º6b' */
- $"FF7C FD39 8B8B 1A5F 6026 831B 0764 8805" /* ÿ|ý9‹‹._`&ƒ..dˆ. */
- $"E40B 0F19 7FFF 7FFC DEBC DD5B 9008 0000" /* ä....ÿ.üÞ¼Ý[... */
- $"0C24 1D44 4641 3BC8 4248 E229 62D2 088D" /* .$.DFA;ÈBHâ)bÒ. */
- $"117F DE8D 0B52 C3FD 1DD9 3823 F138 4C98" /* ..Þ.RÃý.Ù8#ñ8L˜ */
- $"58A8 2683 519C F914 4961 5226 891F F863" /* X¨&ƒQœù.IaR&‰.øc */
- $"3FF2 B19F 113D BFEF 9D12 30C6 66BD E2A6" /* ?ò±Ÿ.=¿ï.0Æf½â¦ */
- $"5D8C BE7E BE19 3D8F 03F2 5D26 FF7F FF7E" /* ]Œ¾~¾.=.ò]&ÿ.ÿ~ */
- $"A82B 5E03 E7A8 E8F1 8C4D B6F1 F0E2 FC36" /* ¨+^.ç¨èñŒM¶ñðâü6 */
- $"DE7A 2F55 38B1 B436 2E50 7D25 E3F0 82C8" /* Þz/U8±´6.P}%ãð‚È */
- $"580F 0D19 C280 415C 2A7F FCD9 C720 E649" /* X...€A\*.üÙÇ æI */
- $"4064 2624 04AC 0B71 41FD 3937 8359 4137" /* @d&$.¬.qAý97ƒYA7 */
- $"8CA9 B642 C318 BD37 82D3 B786 8217 3252" /* Œ©¶BÃ.½7‚Ó·†‚.2R */
- $"44EA 4598 57D2 2F66 957F 39FE D712 F449" /* DêE˜WÒ/f•.9þ×.ôI */
- $"213A BEBB B6CC F551 FF7F EB0A AE45 8497" /* !:¾»¶ÌõQÿ.ë®E„— */
- $"0F4C FD34 4090 01FE CFC8 51AA C32A 7D95" /* .Lý4@.þÏÈQªÃ*}• */
- $"D414 2609 E22F 1B7D E10E 97BB 05D1 9D04" /* Ô.&Æâ/.}á.—».Ñ. */
- $"0592 9271 0D39 AB59 F165 0D09 549C B4E3" /* .’’q.9«Yñe.ÆTœ´ã */
- $"AEE5 555F 00A3 5E0A E4D3 BAFE 1EC6 2FCE" /* ®åU_.£^ÂäÓºþ.Æ/Î */
- $"FB04 C9BC 71D8 A42D 2F70 9FE1 EC17 C31D" /* û.ɼqؤ-/pŸáì.Ã. */
- $"ECB2 0A82 EFB1 914C F6D2 E54C 5316 B6C4" /* ì²Â‚ﱑLöÒåLS.¶Ä */
- $"4FFF 653B FD6E 27A6 9959 244B F458 B35C" /* Oÿe;ýn'¦™Y$KôX³\ */
- $"865C EB94 2CD7 7343 B74C C211 8A4D 2A99" /* †\ë”,×sC·LÂ.ŠM*™ */
- $"732E 3B43 CEAC C300 A520 924D 6F1F 8295" /* s.;CάÃ.¥ ’Mo.‚• */
- $"DF36 1FD4 E8F0 9221 6313 1B33 0C98 2721" /* ß6.Ôèð’!c..3.˜'! */
- $"8F55 5BA1 0E46 A755 1D7F A914 458D 9FFF" /* U[¡.F§U..©.EŸÿ */
- $"33CF 4CE3 AFC6 3383 BC4D A7E9 F546 FDCB" /* 3ÏLã¯Æ3ƒ¼M§éõFýË */
- $"8276 7778 2BBA EF7C 3677 6251 58C0 9EFF" /* ‚vwx+ºï|6wbQXÀžÿ */
- $"526C C883 6CFF 7FFF 7D4C 3F9F BD74 6BE9" /* Rlȃlÿ.ÿ}L?Ÿ½tké */
- $"B6EB 9003 823B 235D 6AD9 B382 FC45 F10C" /* ¶ë.‚;#]jÙ³‚üEñ. */
- $"8282 90ED 9D47 E949 FADC 7B04 1C1C 9EF1" /* ‚‚íGéIúÜ{...žñ */
- $"1ABB 270D 07BE 1943 4E14 70E0 48FF 81EE" /* .»'..¾.CN.pàHÿî */
- $"CE8A 5AAD 3CE9 090D 3126 F96A AEBA 5853" /* ΊZ­<éÆ.1&ùj®ºXS */
- $"D02E ADE8 4614 E2B7 2E7E 3DB6 DE6A 77A8" /* Ð.­èF.â·.~=¶Þjw¨ */
- $"48D0 2DBB BAF4 E94C 735D 27D6 87FF 7F80" /* HÐ-»ºôéLs]'Ö‡ÿ.€ */
- $"5BCC 3CA6 1168 D9E0 38B4 22B2 2154 02AA" /* [Ì<¦.hÙà8´"²!T.ª */
- $"A1FF 6D87 EB2B F3EB 3814 9F74 DEF3 4D86" /* ¡ÿm‡ë+óë8.ŸtÞóM† */
- $"ED68 7E75 9E81 1FD9 170B E013 7E4D 97B3" /* íh~už.Ù..à.~M—³ */
- $"51B0 6B2A 42AF EEB4 899B D2A2 6AC9 8EBF" /* Q°k*B¯î´‰›Ò¢jÉŽ¿ */
- $"2858 9FFC 5050 3364 8F2D 313E 94A9 5ED5" /* (XŸüPP3d-1>”©^Õ */
- $"6213 E9DD 6FF6 5813 72DA FE40 0F70 06C4" /* b.éÝoöX.rÚþ@.p.Ä */
- $"FF7D 053C 3E69 C976 DDFF 02D9 4688 D8D7" /* ÿ}.<>iÉvÝÿ.ÙFˆØ× */
- $"8DEF 5187 FCA3 40EE 3167 B6DD 7EE6 42AB" /* ïQ‡ü£@î1g¶Ý~æB« */
- $"B07A DB20 DC1D 7016 631F 8FB0 C83A 9CC2" /* °zÛ Ü.p.c.°È:œÂ */
- $"66B9 304B 74F5 03F7 217C D3E3 6000 ECE6" /* f¹0Ktõ.÷!|Óã`.ìæ */
- $"A319 FD9E 4131 7E74 59C6 FB3F 1B51 FE89" /* £.ýžA1~tYÆû?.Qþ‰ */
- $"52D3 C845 1BF0 4BFE 3BAE 4940 9830 8E9C" /* RÓÈE.ðKþ;®I@˜0Žœ */
- $"F843 F6A2 218E B2E2 8092 8E0E 3889 8137" /* øCö¢!Ž²â€’Ž.8‰7 */
- $"583C 394F CCE6 3D1B 37B8 C9A4 D805 B9E4" /* X<9OÌæ=.7¸É¤Ø.¹ä */
- $"A037 E45D 1167 9627 81E0 538C 1B6D EA0E" /*  7ä].g–'àSŒ.mê. */
- $"18CD 8E3C EE0C 5E0C B048 8DD2 C804 CA38" /* .ÍŽ<î.^.°HÒÈ.Ê8 */
- $"8678 CAA9 5EE1 8B6C E7D9 FDE1 5C14 D52A" /* †xÊ©^á‹lçÙýá\.Õ* */
- $"67F3 8A12 F698 857A 5692 1FB3 FF27 FE1B" /* góŠ.ö˜…zV’.³ÿ'þ. */
- $"7E31 5D25 B4A2 3647 FF07 064A 4D7B F160" /* ~1]%´¢6Gÿ..JM{ñ` */
- $"62D7 81CE 0940 AE5F CAEB F1A6 10C4 CB0E" /* b×ÎÆ@®_Êëñ¦.ÄË. */
- $"3D77 2C40 0146 8C72 B765 F6A9 3047 E748" /* =w,@.FŒr·eö©0GçH */
- $"0239 A725 8B4C 56F0 7E86 9A24 53D7 4832" /* .9§%‹LVð~†š$S×H2 */
- $"7924 73CB 4431 4977 0487 03FC F1B3 A21C" /* y$sËD1Iw.‡.üñ³¢. */
- $"2792 0B05 8183 8348 8EC0 2635 47D9 B51D" /* '’..ƒƒHŽÀ&5GÙµ. */
- $"CE40 1FA4 20C5 93A8 BEB4 B8CD 93D8 A79E" /* Î@.¤ Å“¨¾´¸Í“اž */
- $"62C5 846C 964D 0404 BE21 3AA5 9EC3 4450" /* bÅ„l–M..¾!:¥žÃDP */
- $"FAEE 938A A428 E4D0 7F1B 46A8 7AEC 97FB" /* ú¤(äÐ..F¨zì—û */
- $"1AFF 71DA F26D B5B1 E6F2 66B4 865E 1F12" /* .ÿqÚòmµ±æòf´†^.. */
- $"CE0F 3A8A EDF1 6321 BC5A 22D5 D3D6 BE19" /* Î.:Šíñc!¼Z"ÕÓÖ¾. */
- $"671A 38C3 11E8 FC9D 93AC 895A 1B84 7C9B" /* g.8Ã.èü“¬‰Z.„|› */
- $"979F 5DC5 BBE6 19A8 5D03 BE83 6FA4 B8F2" /* —Ÿ]Å»æ.¨].¾ƒo¤¸ò */
- $"AFCD 8115 B21B C1D5 80B4 5E20 3B19 9E48" /* ¯Í.².ÁÕ€´^ ;.žH */
- $"29C0 68DA F799 EC0D 56B3 7049 5EC1 11CB" /* )ÀhÚ÷™ì.V³pI^Á.Ë */
- $"CBAF FA0A 5AF1 22F1 3A4C 6F13 635A C681" /* ˯úÂZñ"ñ:Lo.cZÆ */
- $"06DA 8B44 A35B CF31 9B6F 57E6 AEC2 8D59" /* .Ú‹D£[Ï1›oWæ®ÂY */
- $"1556 A43E A289 74DC C398 B209 31B9 8CD0" /* .V¤>¢‰tÜØ²Æ1¹ŒÐ */
- $"07BE D253 76AB 7D79 4F26 D099 7AE8 E52C" /* .¾ÒSv«}yO&Йzèå, */
- $"EA35 D7BB E968 CAA0 5F61 EAE5 E9A1 E903" /* ê5×»éhÊ _aêåé¡é. */
- $"100E ED2C 5A66 21E2 1426 BE74 7A19 8C98" /* ..í,Zf!â.&¾tz.Œ˜ */
- $"3D67 A4D2 370F C95D 7131 2D31 0971 6022" /* =g¤Ò7.É]q1-1Æq`" */
- $"F4F2 359E 1FBD D23A CD94 4467 205E F7B1" /* ôò5ž.½Ò:Í”Dg ^÷± */
- $"5D18 EE91 9078 176B ADC2 65EB EECF D1A8" /* ].î‘x.k­ÂeëîÏѨ */
- $"F1B3 B999 E7CC 3079 BD9C 82D8 DF6E 29E0" /* ñ³¹™çÌ0y½œ‚Øßn)à */
- $"9502 EC8D 5C13 629B 109E A7C0 F438 6674" /* •.ì\.b›.ž§Àô8ft */
- $"C48B E75A 7CAC 28AE 3E9C 0ECF 9ADF F7BF" /* Ä‹çZ|¬(®>œ.Ïšß÷¿ */
- $"C51A E20D 64F1 B1DD C986 0C6F 6BFF 5102" /* Å.â.dñ±ÝɆ.okÿQ. */
- $"B233 B826 EBC9 35E2 9799 0A0F E81D 0816" /* ²3¸&ëÉ5â—™Â.è... */
- $"E01C B1A8 E4D9 1CCF 7F2E 4DB3 371B 83C0" /* à.±¨äÙ.Ï..M³7.ƒÀ */
- $"9DFD A603 83D6 4412 7DCF 2E2F 85D8 8259" /* ý¦.ƒÖD.}Ï./…Ø‚Y */
- $"DC97 798F 2E8A 09F5 C1A7 1E56 55F3 BFD0" /* Ü—y.ŠÆõÁ§.VUó¿Ð */
- $"34CE 311A 98BE C87C 8CCE 6EDF C85C A788" /* 4Î1.˜¾È|ŒÎnßÈ\§ˆ */
- $"AA7E 47D5 72AF 1842 5C5F 9D6A C586 CA4C" /* ª~GÕr¯.B\_jņÊL */
- $"34D3 6315 D6CA 0D6D 5B75 6C85 551B E270" /* 4Óc.ÖÊ.m[ul…U.âp */
- $"E9DD 6127 C363 1F5A 0AA4 8F55 114F 9ED3" /* éÝa'Ãc.Z¤U.OžÓ */
- $"034E A968 1BF1 513A 2F0D 3E61 612A 15E6" /* .N©h.ñQ:/.>aa*.æ */
- $"B89F 1877 F38E 8C96 20C3 1952 A559 62AE" /* ¸Ÿ.w󎌖 Ã.R¥Yb® */
- $"20E0 BE7D BF7C FAA3 F56C FF75 6D5E 07E7" /* à¾}¿|ú£õlÿum^.ç */
- $"EB87 E7E9 BFE7 EE37 E7EE B60B E7DA F7CF" /* ë‡çé¿çî7çî¶.çÚ÷Ï */
- $"A6FF 2B5C 2F9F AC00 ED1C BCF0 084D B6D5" /* ¦ÿ+\/Ÿ¬.í.¼ð.M¶Õ */
- $"A3F8 3A1B 179B 5659 AE02 A536 8D65 B1A0" /* £ø:..›VY®.¥6e±  */
- $"F806 81C6 9453 B9E5 1E84 EF36 3D8C 9922" /* ø.Æ”S¹å.„ï6=Œ™" */
- $"A841 EBC7 584D 175D A8CF 5AE5 52F4 364A" /* ¨AëÇXM.]¨ÏZåRô6J */
- $"CACB F4FA 59D1 6C18 1FE0 5F96 0F70 465A" /* ÊËôúYÑl..à_–.pFZ */
- $"7CFD 0C37 59FF 6248 10C6 4872 8573 D54E" /* |ý.7YÿbH.ÆHr…sÕN */
- $"7839 337E D900 4336 CF58 B59C BCC4 602F" /* x93~Ù.C6ÏXµœ¼Ä`/ */
- $"EA1A 205F CD8D 635B AE0D 5750 3316 72C7" /* ê. _Íc[®.WP3.rÇ */
- $"A765 C2F2 CF8C 52FB 1892 F55E B7A5 6D85" /* §eÂòÏŒRû.’õ^·¥m… */
- $"5782 FAB6 FBB5 CDF3 2DC2 0256 2927 4F4F" /* W‚ú¶ûµÍó-Â.V)'OO */
- $"1F92 5F99 B540 87DD 7A80 991B 0677 AB00" /* .’_™µ@‡Ýz€™..w«. */
- $"2D82 C5F6 11F7 F21B 2652 B798 75D5 42A6" /* -‚Åö.÷ò.&R·˜uÕB¦ */
- $"7757 E0E7 3C3F DBA5 6106 9F44 1800 E044" /* wWàç<?Û¥a.ŸD..àD */
- $"5844 8C9D 83C0 C5D3 6B95 CE2A 3EBC D7FD" /* XDŒƒÀÅÓk•Î*>¼×ý */
- $"B79B E645 6FD3 A5EE ECE2 C9A7 53C7 B2E3" /* ·›æEoÓ¥îìâɧSDzã */
- $"C659 D5C5 0FBD 7C88 93C3 D3D9 D81F 0AEB" /* ÆYÕÅ.½|ˆ“ÃÓÙØ.Âë */
- $"5784 8BF9 DAD7 993D 0C8B 9873 08A4 254B" /* W„‹ùÚ×™=.‹˜s.¤%K */
- $"2452 F95D 29CA 8B3E D48D 18FB C813 4ECB" /* $Rù])Ê‹>Ô.ûÈ.NË */
- $"D118 E3FA 926C 7A5F E5CC F774 D1DB B5C1" /* Ñ.ãú’lz_åÌ÷tÑÛµÁ */
- $"579A 2647 619A 67A0 423D 6C64 B3A6 9357" /* Wš&Gašg B=ld³¦“W */
- $"B8C6 8FBE A3AC E380 E548 5ED3 D83D 7DB9" /* ¸Æ¾£¬ã€åH^ÓØ=}¹ */
- $"93E8 9071 F6E0 168F 6BEC F674 6D08 F4DA" /* “èqöà.kìötm.ôÚ */
- $"C1F7 11FD DEF8 2420 30DA 71E2 C605 81EB" /* Á÷.ýÞø$ 0ÚqâÆ.ë */
- $"565B D461 AF6E 3127 34AC BA64 C660 14E1" /* V[Ôa¯n1'4¬ºdÆ`.á */
- $"F6AB DA92 386B 3E7B BD42 90E9 ABA2 6EE7" /* ö«Ú’8k>{½Bé«¢nç */
- $"8D0D 373C D280 46EC 6746 310C EA41 862B" /* .7<Ò€FìgF1.êA†+ */
- $"6D1B 7BE9 93AF 17F6 1D3A E7AB CA55 8A4B" /* m.{铯.ö.:ç«ÊUŠK */
- $"E867 6EF3 29DF FF5F B839 75E1 FA04 DD81" /* ègnó)ßÿ_¸9uáú.Ý */
- $"B6C9 DA44 D268 3B1A FF63 60F5 37A5 DDCB" /* ¶ÉÚDÒh;.ÿc`õ7¥ÝË */
- $"1AB3 5275 7692 7F15 F8E8 6A96 CEB4 D9E5" /* .³Ruv’..øèj–δÙå */
- $"3E5A 0E16 B1D0 B056 D0D2 0360 0900 5773" /* >Z..±Ð°VÐÒ.`Æ.Ws */
- $"BB3F C215 FD55 C9BF E3FC 48A1 CFAB BD39" /* »?Â.ýUÉ¿ãüH¡Ï«½9 */
- $"CD3D 906E 21CB C3DD E4D3 548C 4731 E777" /* Í=n!ËÃÝäÓTŒG1çw */
- $"EE15 C0DE CEBC 0F2F 85A6 9822 F1FF 7B2F" /* î.ÀÞμ./…¦˜"ñÿ{/ */
- $"2530 48C7 0C39 3659 CD03 06C5 7C8E 3D49" /* %0HÇ.96YÍ..Å|Ž=I */
- $"FED5 7B72 4652 772C 39C7 8F1B 63E8 2DC1" /* þÕ{rFRw,9Ç.cè-Á */
- $"1242 CA35 E396 6103 15DF D939 0597 B8D4" /* .BÊ5ã–a..ßÙ9.—¸Ô */
- $"8858 ACE3 3C32 6EE5 69A3 8512 3447 2B3B" /* ˆX¬ã<2nåi£….4G+; */
- $"0647 8C1F 2D31 4E57 0D03 BE26 5235 5275" /* .GŒ.-1NW..¾&R5Ru */
- $"74E8 B8F6 CF32 E077 8C51 41DB ED67 EE30" /* tè¸öÏ2àwŒQAÛígî0 */
- $"AD97 7956 D279 B0A8 768D 00E3 F604 A240" /* ­—yVÒy°¨v.ãö.¢@ */
- $"9656 5BCD B309 D0CD 3ECE C477 31EC F88D" /* –V[ͳÆÐÍ>ÎÄw1ìø */
- $"782F 8B9E 37FA A741 C636 7B55 D047 64A4" /* x/‹ž7ú§AÆ6{UÐGd¤ */
- $"E2EC C69D F609 F38F 821E 8D20 8709 87FF" /* âìÆöÆó‚. ‡Æ‡ÿ */
- $"3C3A B1ED C420 1F0B 52E3 8999 C684 30F3" /* <:±íÄ ..R㉙Ƅ0ó */
- $"C4ED 7FA9 3A2C D0E7 AE48 1AC2 7196 9347" /* Äí.©:,Ðç®H.Âq–“G */
- $"6BC9 BEE1 4112 4209 93CA 307A 7FF7 8B12" /* kɾáA.BÆ“Ê0z.÷‹. */
- $"EE76 8890 A529 33CC F435 A84F 9414 A719" /* îvˆ¥)3Ìô5¨O”.§. */
- $"BFB2 6305 201F 372D 567F 30DF 2E47 D0B9" /* ¿²c. .7-V.0ß.Gй */
- $"C68F 5126 7EAA D95A 12D0 DA8A 8CF4 8A2A" /* ÆQ&~ªÙZ.ÐÚŠŒôŠ* */
- $"CBAE 0509 B614 A9E1 2CA2 D0E0 F017 E395" /* Ë®.ƶ.©á,¢Ðàð.ã• */
- $"AF82 85B5 4509 E75C 8E4D 5465 7DF2 CF39" /* ¯‚…µEÆç\ŽMTe}òÏ9 */
- $"ACFB DD5B C683 62C0 0B1C B7B9 EAEC 049C" /* ¬ûÝ[ƃbÀ..·¹êì.œ */
- $"8045 0178 6757 E317 872D ABC2 B077 6EF6" /* €E.xgWã.‡-«Â°wnö */
- $"3612 4132 3DD7 D39B B49A 04A8 207D 6135" /* 6.A2=×Ó›´š.¨ }a5 */
- $"C64F 3A0F 5028 7B6B 953E 8F19 920A 718F" /* ÆO:.P({k•>.’Âq */
- $"08E9 A079 EC51 A08F 4A77 5130 C807 9BC2" /* .é yìQ JwQ0È.›Â */
- $"B37B 4C7B 9BAA 40F3 4E94 BE51 C027 32B5" /* ³{L{›ª@óN”¾QÀ'2µ */
- $"751F 4793 7271 226E 82F3 CF14 8BC3 F927" /* u.G“rq"n‚óÏ.‹Ãù' */
- $"4C81 7F29 AB70 8B3B E948 86D6 569F FEC2" /* L.)«p‹;éH†ÖVŸþÂ */
- $"BF6C 92F9 1011 3BE3 9E91 6458 1634 34A3" /* ¿l’ù..;ãž‘dX.44£ */
- $"3042 520F 5D64 6429 32CE 04FD 1B98 0698" /* 0BR.]dd)2Î.ý.˜.˜ */
- $"3A36 655C 86C7 C272 4B02 E259 0537 4DB8" /* :6e\†ÇÂrK.âY.7M¸ */
- $"C6C2 6980 ECFB 0FC1 C6D9 0A2C D00F 282A" /* ÆÂi€ìû.ÁÆÙÂ,Ð.(* */
- $"7A0B D91F 08CA 762C A629 048E 9BCC CFD2" /* z.Ù..Êv,¦).Ž›ÌÏÒ */
- $"1EBC 8F60 2F64 F24D F1FB 81C6 8AEC CFDB" /* .¼`/dòMñûÆŠìÏÛ */
- $"623A 01A9 35D2 B5E1 B80A 2D32 084E 3857" /* b:.©5Òµá¸Â-2.N8W */
- $"C025 BCDA 4728 F3AD 35AD 9AAA E054 21B7" /* À%¼ÚG(ó­5­šªàT!· */
- $"A47E 62C5 9921 02C0 09E3 440D 063A 3789" /* ¤~bÅ™!.ÀÆãD..:7‰ */
- $"5072 E54A 4654 E148 AC2E 4A99 C6A5 3923" /* PråJFTáH¬.J™Æ¥9# */
- $"49B5 6906 6531 FD5E 7CCE 1C4B EEDE 7482" /* Iµi.e1ý^|Î.KîÞt‚ */
- $"9E3F 73AE C777 0214 C921 3131 C5CB 9F61" /* ž?s®Çw..É!11ÅËŸa */
- $"64A4 4E70 57C2 5C04 E25B 266E 6887 7477" /* d¤NpWÂ\.â[&nh‡tw */
- $"FCCB 1F0C 89F2 6CF6 713E 4D08 8AC8 9B0C" /* üË..‰òlöq>M.ŠÈ›. */
- $"00AC D9D7 A28A C219 B52B B46A D704 F919" /* .¬Ù×¢ŠÂ.µ+´j×.ù. */
- $"2050 6CCA 215A 299B 9129 9739 DA6F 3A67" /* PlÊ!Z)›‘)—9Úo:g */
- $"FE12 2BF1 4F8B 26ED D21F F727 5B59 22F3" /* þ.+ñO‹&íÒ.÷'[Y"ó */
- $"2E05 F4A0 9754 F431 9AED 1B65 038C CD7F" /* ..ô —Tô1ší.e.ŒÍ. */
- $"8254 E3AE 035C 18D7 0E28 6300 0DF0 998D" /* ‚Tã®.\.×.(c..ð™ */
- $"0191 85AF C71B B3CF F0D6 3A8F B1AA 5E99" /* .‘…¯Ç.³ÏðÖ:±ª^™ */
- $"BAB8 7C7F 0214 F864 4744 E747 7248 3C94" /* º¸|...ødGDçGrH<” */
- $"3AC8 CE04 1019 11ED 4BCC 76E9 FE4E 5728" /* :ÈÎ....íKÌvéþNW( */
- $"5BB0 986C D763 A3C7 AF8A 14E9 D24A AD17" /* [°˜l×c£Ç¯Š.éÒJ­. */
- $"FF66 611F B77C 0830 9093 A560 06FA E9CF" /* ÿfa.·|.0“¥`.úéÏ */
- $"054B 5846 1681 5DBF 34F9 49A9 45E0 8F20" /* .KXF.]¿4ùI©Eà */
- $"7FFD 6264 2193 031D A60F A111 B0B7 CFEE" /* .ýbd!“..¦.¡.°·Ïî */
- $"DE49 EC80 C0F1 D7F6 A495 900B 4126 40BE" /* ÞIì€Àñ×ö¤•.A&@¾ */
- $"185B DFFE C7B0 12AC C143 AA85 70E5 81EF" /* .[ßþǰ.¬ÁCª…påï */
- $"79CE 1662 08E4 203F 1706 40FB CC39 CA8F" /* yÎ.b.ä ?..@ûÌ9Ê */
- $"8002 1CFA 3BCC 6B79 5C83 A4D2 7147 E38F" /* €..ú;Ìky\ƒ¤ÒqGã */
- $"C93B F2E8 6A15 6D30 C314 E898 81E3 FF7B" /* É;òèj.m0Ã.è˜ãÿ{ */
- $"5FC5 EE13 0449 1985 2CBC 73C7 C569 DCB1" /* _Åî..I.…,¼sÇÅiܱ */
- $"8024 F7CA CC7A FE3B CC15 4BCE 5B92 1BBB" /* €$÷ÊÌzþ;Ì.KÎ[’.» */
- $"0048 F291 579F FD20 F11A 1934 CC11 9C3F" /* .Hò‘WŸý ñ..4Ì.œ? */
- $"CE49 027A 9763 9E57 A2FF 7FFD 53E4 E50B" /* ÎI.z—cžW¢ÿ.ýSäå. */
- $"C747 02FF 7869 0537 1482 221E 0220 79D5" /* ÇG.ÿxi.7.‚".. yÕ */
- $"45B1 2E48 6A6C 8486 571F E1F1 BF39 0797" /* E±.Hjl„†W.áñ¿9.— */
- $"5D21 6964 EA9B 13F1 E6B7 C4B5 A2B7 E2BD" /* ]!idê›.ñæ·Äµ¢·â½ */
- $"09C2 B200 0000 0000 003E A392 6527 69B6" /* ÆÂ²......>£’e'i¶ */
- $"B189 8365 F55D 7A2B 0398 4196 BB60 D4F0" /* ±‰ƒeõ]z+.˜A–»`Ôð */
- $"06B6 100C 5B60 D76F 8FEE EFFB D525 0E2B" /* .¶..[`×oîïûÕ%.+ */
- $"3535 B765 22E7 F77C CF5C 8907 7626 62C0" /* 55·e"ç÷|Ï\‰.v&bÀ */
- $"3B04 A170 EEA6 A399 F26B CD7E 92BC 9E13" /* ;.¡p™òkÍ~’¼ž. */
- $"9D2D 6907 B06F 6B9A 957D 3C57 DC9F 06E6" /* -i.°okš•}<WÜŸ.æ */
- $"C3B6 16AD C91B E868 E000 1848 3BE4 5C3A" /* ö.­É.èhà..H;ä\: */
- $"1162 2272 401F 600B A973 281E 62B3 2654" /* .b"r@.`.©s(.b³&T */
- $"74B0 287C C53E A3DA 2A14 E38F 9FFE 3A8E" /* t°(|Å>£Ú*.ãŸþ:Ž */
- $"0D69 7E9D 5B07 1396 ED52 69BC 3971 5630" /* .i~[..–íRi¼9qV0 */
- $"7C63 8DA9 7A40 F364 CC6A FCAC DC7C 59DC" /* |c©z@ódÌjü¬Ü|YÜ */
- $"278A 92E3 6FBF F936 7157 2583 232E E558" /* 'Š’ão¿ù6qW%ƒ#.åX */
- $"0000 C241 6B90 4DCB 6421 F85A B681 4812" /* ..ÂAkMËd!øZ¶H. */
- $"9165 5C06 0195 F213 DB9F 5E2F 4BDE A075" /* ‘e\..•ò.ÛŸ^/KÞ u */
- $"BD9A 741B 971B 3411 1F73 7FF8 D719 BA55" /* ½št.—.4..s.ø×.ºU */
- $"8048 404F FEEA FC74 AEB1 84FD 03F9 5D43" /* €H@Oþêüt®±„ý.ù]C */
- $"BE42 E61F FF7F F4CA BA56 9654 B757 FF60" /* ¾Bæ.ÿ.ôʺV–T·Wÿ` */
- $"CA39 3290 054C E785 0EA7 F04D AF3E B342" /* Ê92.Lç….§ðM¯>³B */
- $"A80A 815D 3954 73F2 871A 51FF 7488 20CD" /* ¨Â]9Tsò‡.Qÿtˆ Í */
- $"90F3 23B8 80FE C6BF 726C 5426 83F2 5400" /* ó#¸€þÆ¿rlT&ƒòT. */
- $"0000 0000 0000 0000 BFA5 D802 777C F954" /* ........¿¥Ø.w|ùT */
- $"286B A586 76CF 26CE 72CA 6FE7 BD43 DB36" /* (k¥†vÏ&ÎrÊoç½CÛ6 */
- $"A826 870E 2EEF E2C4 2E22 E63C FF7F AF51" /* ¨&‡..ïâÄ."æ<ÿ.¯Q */
- $"40C1 B727 22F3 9ACC 894D 0C49 EC7A D998" /* @Á·'"óšÌ‰M.IìzÙ˜ */
- $"64A9 DD22 2545 B85C D621 0609 B73A 9D9F" /* d©Ý"%E¸\Ö!.Æ·:Ÿ */
- $"FF7F FF7F C0F7 00E1 B069 1D76 3BA1 E98C" /* ÿ.ÿ.À÷.á°i.v;¡éŒ */
- $"5F1B 1E11 B6F6 EB6D 6316 9DBC D1B2 DC90" /* _...¶öëmc.¼Ñ²Ü */
- $"5E1D 5EE0 3C65 57D0 B69C 3782 D1BE 3A77" /* ^.^à<eWжœ7‚Ѿ:w */
- $"436E 462B 45B7 FF61 4FA4 A45B 8C34 39D8" /* CnF+E·ÿaO¤¤[Œ49Ø */
- $"1B35 B876 A5F1 F2AD 3F78 D289 1C2E E3B4" /* .5¸v¥ñò­?xÒ‰..ã´ */
- $"A28B 64FA 1E2C 0CCD 0B1C AD42 8866 DDD6" /* ¢‹dú.,.Í..­BˆfÝÖ */
- $"62F0 225B 8DF7 32B3 FC3C 79E9 000B 1CA9" /* bð"[÷2³ü<yé...© */
- $"2C82 4874 34AB B158 47CD FA9F EBC8 0923" /* ,‚Ht4«±XGÍúŸëÈÆ# */
- $"B291 7229 8C3F E7FD 193C 330B A3B4 6969" /* ²‘r)Œ?çý.<3.£´ii */
- $"FCF6 E1BA 4C4A E64C B1BC 5BAF F402 C828" /* üöáºLJæL±¼[¯ô.È( */
- $"3A51 CC67 A851 E207 5A7C 3733 1031 FD5C" /* :QÌg¨Qâ.Z|73.1ý\ */
- $"E4D3 B69F FF67 2C6D 3FC7 D5B4 E63F 55B9" /* äÓ¶Ÿÿg,m?ÇÕ´æ?U¹ */
- $"FD5F 3DB1 4589 6ADF 54F0 F42A 498F 61C8" /* ý_=±E‰jßTðô*IaÈ */
- $"4872 5CD7 F70D 9C80 8880 EB9A 1FE7 C715" /* Hr\×÷.œ€ˆ€ëš.çÇ. */
- $"E57A 280F 96CF 014C 0411 EF44 C4F2 C64F" /* åz(.–Ï.L..ïDÄòÆO */
- $"F91B A9D6 EB9E F615 096F E5C0 5B30 BB79" /* ù.©Öëžö.ÆoåÀ[0»y */
- $"D645 BF4F B70A 2C40 3D24 A4C4 5A01 F3DB" /* ÖE¿O·Â,@=$¤ÄZ.óÛ */
- $"8879 D458 F558 4C8E 3C87 E83C 9C30 F0C3" /* ˆyÔXõXLŽ<‡è<œ0ðà */
- $"F7EB BE6A 2B3B B9CB 4F2E 3B49 CA98 6025" /* ÷ë¾j+;¹ËO.;Iʘ`% */
- $"D6C7 6B39 ED18 A784 5410 F9CD 4FB5 9E32" /* ÖÇk9í.§„T.ùÍOµž2 */
- $"EABF F72F 6ECC 217F E295 4BDA F0C8 2678" /* ê¿÷/nÌ!.â•KÚðÈ&x */
- $"B0F7 3381 2299 1033 5300 BB1C E72F 1EE0" /* °÷3"™.3S.».ç/.à */
- $"75D6 68D0 8C87 A574 580B 4AD8 7BC8 E1C4" /* uÖhÐŒ‡¥tX.JØ{ÈáÄ */
- $"64D3 76AA A080 1E28 FD04 890B B9A1 7E5C" /* dÓvª €.(ý.‰.¹¡~\ */
- $"79E2 31B9 1C3E DBAE 8BC6 DB23 53A4 0F06" /* yâ1¹.>Û®‹ÆÛ#S¤.. */
- $"74AA 7920 6233 E3BF B281 AFAA 957D FDFB" /* tªy b3㿲¯ª•}ýû */
- $"216A 3ECE 3139 37DF 8885 620B 5D55 D0FD" /* !j>Î197߈…b.]UÐý */
- $"F796 6A70 CEFD 33D8 B369 178E 99C0 9FFF" /* ÷–jpÎý3سi.Ž™ÀŸÿ */
- $"7FD2 27D4 D615 4840 B836 A0B5 1D6F 2A5A" /* .Ò'ÔÖ.H@¸6 µ.o*Z */
- $"1338 2369 83A0 D409 0FA7 77EF 19B9 21E6" /* .8#iƒ ÔÆ.§wï.¹!æ */
- $"3E21 0CB0 D4D3 362A EA6F 6340 8D73 27FB" /* >!.°ÔÓ6*êoc@s'û */
- $"C3EF 7823 33DF 7A8C 5C69 20C4 5816 72E4" /* Ãïx#3ßzŒ\i ÄX.rä */
- $"712C 3345 6755 76F3 FEAF 494B D0B4 3C8F" /* q,3EgUvóþ¯IKд< */
- $"B83F A050 C3E9 4CA2 6A6E 7AD0 D7FF 5860" /* ¸? PÃéL¢jnzÐ×ÿX` */
- $"548E 54E7 C3B9 6DDF 462C 54BE 5EF9 1A41" /* TŽTçùmßF,T¾^ù.A */
- $"6A46 A4FB 1C36 1CA4 77EC 2899 F147 3422" /* jF¤û.6.¤wì(™ñG4" */
- $"843C 7FAE 123E 6894 9B7F 3125 EB0F 3129" /* „<.®.>h”›.1%ë.1) */
- $"9DC1 8469 CE90 BB6E 4F2C 385A 0FD1 9AC7" /* Á„iλnO,8Z.ÑšÇ */
- $"3318 3BF0 B1AA A51A 9022 A143 29FF 7FC1" /* 3.;𱪥."¡C)ÿ.Á */
- $"0F0F 6570 67C4 7FA7 9906 DE4E 5439 A278" /* ..epgÄ.§™.ÞNT9¢x */
- $"34E1 3D57 BB0E 086E 4C71 4406 DA9D CA56" /* 4á=W»..nLqD.ÚÊV */
- $"3EFD D077 5DA5 CD7D C244 9128 F408 1F03" /* >ýÐw]¥Í}ÂD‘(ô... */
- $"0C8F FF4B 9274 2EC6 E208 13C5 EE1B 3CEA" /* .ÿK’t.Æâ..Åî.<ê */
- $"C5C0 06F5 0FA1 11FF 7FE3 A446 32E6 F4DA" /* ÅÀ.õ.¡.ÿ.ã¤F2æôÚ */
- $"23EC 5108 3AE0 CD16 AFFF 3965 8196 56E2" /* #ìQ.:àÍ.¯ÿ9e–Vâ */
- $"2881 4EB9 CA14 5C4A 8091 B176 8823 BF09" /* (N¹Ê.\J€‘±vˆ#¿Æ */
- $"CED5 0D88 E6BB DD95 1B72 36E8 809C D432" /* ÎÕ.ˆæ»Ý•.r6耜Ô2 */
- $"872D C08C 7DCB B30E 548B AE16 0D85 6B49" /* ‡-ÀŒ}˳.T‹®..…kI */
- $"9B28 D491 ECD6 F598 691A 0891 135A 63A0" /* ›(Ô‘ìÖõ˜i..‘.Zc  */
- $"593C 1FFD 8A54 4FB9 F2AB 20FC 5CF3 1B88" /* Y<.ýŠTO¹ò« ü\ó.ˆ */
- $"EE7E 8355 45D6 87C8 28CE 7B33 92A2 D8D6" /* î~ƒUEÖ‡È(Î{3’¢ØÖ */
- $"E8DF EF94 500A 0D78 DE9F 8657 F7BD 7F40" /* èßï”PÂ.xÞŸ†W÷½.@ */
- $"5E07 0789 EDC7 F3A5 A0BF 3929 6B19 A460" /* ^..‰íÇó¥ ¿9)k.¤` */
- $"7A50 91FF 42EA 5F12 DFA5 E0A0 84CC E869" /* zP‘ÿBê_.ߥࠄÌèi */
- $"BB1F 6EDA 2238 5DB0 7F22 3521 F04B FF6B" /* ».nÚ"8]°."5!ðKÿk */
- $"6827 722A DD5F 3C9D D3F4 2BE3 614D 0A3F" /* h'r*Ý_<Óô+ãaMÂ? */
- $"62C4 E6AC 95CA 5946 37E8 BC76 97FD 5167" /* bÄæ¬•ÊYF7è¼v—ýQg */
- $"C970 D4C7 0655 C470 5913 DBBD AA8C 87A4" /* ÉpÔÇ.UÄpY.Û½ªŒ‡¤ */
- $"3C63 0B7F 54CD 391E 574D F2D5 C728 20B7" /* <c..TÍ9.WMòÕÇ( · */
- $"9955 DAC8 72A5 DBBB F7ED 4C9F 6FFE 3A4E" /* ™UÚÈr¥Û»÷íLŸoþ:N */
- $"E165 1831 C0E5 8285 96C2 3959 1BE7 E884" /* áe.1Àå‚…–Â9Y.çè„ */
- $"E568 89C1 FD03 D443 F6D1 A7C9 4CFE F7B9" /* åh‰Áý.ÔCöѧÉLþ÷¹ */
- $"A0BA 5040 19D5 965F 0EB5 E503 4B32 E6C8" /*  ºP@.Õ–_.µå.K2æÈ */
- $"B9C1 DEBB B8B7 47DC A850 AF44 D3B7 F562" /* ¹ÁÞ»¸·GܨP¯DÓ·õb */
- $"4210 4DFF 42A0 3D9A 7C63 8124 22A9 B258" /* B.MÿB =š|c$"©²X */
- $"2256 6243 3077 FF57 7389 3FB6 A096 0EAB" /* "VbC0wÿWs‰?¶ –.« */
- $"DD33 EF25 C4B0 7338 F6D7 8730 FF2E DD0A" /* Ý3ï%İs8öׇ0ÿ.Ý */
- $"BBDA 7A6E EFE8 58EE D64B A09E 2B00 EC04" /* »ÚznïèXîÖK ž+.ì. */
- $"09C9 A9F4 82A0 3132 4829 65CA E93B B827" /* ÆÉ©ô‚ 12H)eÊé;¸' */
- $"E81F B387 132B 5D15 E526 6FEC 2CB1 407F" /* è.³‡.+].å&oì,±@. */
- $"8485 FF32 4933 D357 FC45 0E44 EE66 D960" /* „…ÿ2I3ÓWüE.DîfÙ` */
- $"5AA3 A13A FC0B D8E2 622E 0BEE 714F 2672" /* Z£¡:ü.Øâb..îqO&r */
- $"3850 26C4 E626 F9BA 418C BC8A 7481 C6BE" /* 8P&Äæ&ùºAŒ¼Štƾ */
- $"BFA6 0D72 0603 3452 46C0 9FDB BE63 34D9" /* ¿¦.r..4RFÀŸÛ¾c4Ù */
- $"9599 7519 804B F1CE 0FC8 7572 F58E EB32" /* •™u.€KñÎ.ÈurõŽë2 */
- $"3501 CBB0 C05B 5643 485A 0012 64C2 8022" /* 5.˰À[VCHZ..d€" */
- $"BD39 EB39 2B57 0AA3 3931 93D4 885E CDF2" /* ½9ë9+W£91“Ôˆ^Íò */
- $"818D 7734 36C2 BEE1 4F55 116C 47A9 DC40" /* w46¾áOU.lG©Ü@ */
- $"A8A8 4532 7C33 9D7E 070A BA9E 36F7 2445" /* ¨¨E2|3~.ºž6÷$E */
- $"074C 181A 07B2 C470 FA15 8CCB C069 AD0F" /* .L...²Äpú.ŒËÀi­. */
- $"9DD2 8B21 6F22 7300 34B4 4378 25AB D9D2" /* Ò‹!o"s.4´Cx%«ÙÒ */
- $"1D9B B7F7 2F9C C3B1 926F DE61 4463 90BD" /* .›·÷/œÃ±’oÞaDc½ */
- $"BC76 27E7 A5B5 826F 908E 31BA 048F 97C1" /* ¼v'祵‚oŽ1º.—Á */
- $"1884 67A9 C4BA 4B2B 4A58 D0EE 0269 6832" /* .„g©ÄºK+JXÐî.ih2 */
- $"E8C6 03AA D2A2 D034 27AA D49E 9C01 069A" /* èÆ.ªÒ¢Ð4'ªÔžœ..š */
- $"1BDC C40B 3BA7 5F8D 0468 152D E505 7EC0" /* .ÜÄ.;§_.h.-å.~À */
- $"6BBF C4F4 2F45 99CB 1872 C713 FA0D 055F" /* k¿Äô/E™Ë.rÇ.ú.._ */
- $"551D 6E4D 5794 CC71 BAB5 C560 4D20 9464" /* U.nMW”ÌqºµÅ`M ”d */
- $"9F8C 94BA 1C96 0987 1AB4 61BB BA86 751B" /* ŸŒ”º.–Ƈ.´a»º†u. */
- $"9B79 D06A 7A3D A663 FB31 8B86 E588 5D15" /* ›yÐjz=¦cû1‹†åˆ]. */
- $"4A09 8B2B 81FC AE85 0D5A 1D8C A5B7 6DD9" /* JÆ‹+ü®….Z.Œ¥·mÙ */
- $"02F5 50CE 7017 1BDD 3D3D 86CB 250B 491B" /* .õPÎp..Ý==†Ë%.I. */
- $"AA1F 2D21 A416 E8E7 9A53 4299 8CDE CD59" /* ª.-!¤.èçšSB™ŒÞÍY */
- $"C678 B559 D85C C580 6795 AD5F F578 C9EE" /* ÆxµYØ\Å€g•­_õxÉî */
- $"73B2 8F4B 6EEA 6F07 F785 C1B3 374B E51F" /* s²Knêo.÷…Á³7Kå. */
- $"46DC 728C 05A4 6932 792A DB50 4E9A FD82" /* FÜrŒ.¤i2y*ÛPNšý‚ */
- $"A8A2 5EB8 024D C558 D6BC 350C 97B0 B2E8" /* ¨¢^¸.MÅXÖ¼5.—°²è */
- $"8F42 92FD 604D 6FB7 74B6 6EBE 97F6 CE03" /* B’ý`Mo·t¶n¾—öÎ. */
- $"0DFA C340 31C3 4C5E 0041 088B E097 383B" /* .úÃ@1ÃL^.A.‹à—8; */
- $"A236 97CC 8D2B 6F6D 0E58 4E56 1D49 32EC" /* ¢6—Ì+om.XNV.I2ì */
- $"626C C303 42BB D30B B8DE 5868 3C2F E39B" /* blÃ.B»Ó.¸ÞXh</ã› */
- $"A07A 236D 0F21 C0DD 1A0A 933A 7710 6605" /*  z#m.!ÀÝ.“:w.f. */
- $"343E 8D1A 9384 4F16 C01E 5AF7 DF53 0B38" /* 4>.“„O.À.Z÷ßS.8 */
- $"3615 80D7 428E 90F6 4620 02EA 4590 DF22" /* 6.€×BŽöF .êEß" */
- $"4B70 2FB2 CADA A529 F7FA E7C6 BC99 DFCD" /* Kp/²ÊÚ¥)÷úçÆ¼™ßÍ */
- $"5EE7 D677 B5BE F819 6A55 6070 E1A9 DF53" /* ^çÖwµ¾ø.jU`pá©ßS */
- $"3F82 0229 B6B7 D247 1967 8313 056F 9D27" /* ?‚.)¶·ÒG.gƒ..o' */
- $"753E E4DD EB7F 1372 C0F7 D72E 349B 2F9B" /* u>äÝë..rÀ÷×.4›/› */
- $"686C C9AF 0896 0865 7A3A 5A9D 807F 292A" /* hlɯ.–.ez:Z€.)* */
- $"8DDA A776 4B3C 0993 532D D682 A41B 9DC2" /* Ú§vK<Æ“S-Ö‚¤. */
- $"5113 9D60 934B 2055 D671 C6C4 1252 3CEF" /* Q.`“K UÖqÆÄ.R<ï */
- $"C72F AC19 4BED 185D BC60 5957 F81B 8278" /* Ç/¬.Kí.]¼`YWø.‚x */
- $"20B5 9173 4A1B FDC9 295D 54B7 8AFE 6938" /* µ‘sJ.ýÉ)]T·Šþi8 */
- $"FE49 BA78 3225 49A1 4243 823C 52B9 8489" /* þIºx2%I¡BC‚<R¹„‰ */
- $"9BDF 0AA1 9A6B 667D DCE2 FE18 C386 4EE9" /* ›ß¡škf}Üâþ.ÆNé */
- $"8AF7 92D0 4405 227C BD4C B9E4 34A7 2533" /* Š÷’ÐD."|½L¹ä4§%3 */
- $"D3C6 E915 D57B 681B B6DC FF03 D5D4 F1DD" /* ÓÆé.Õ{h.¶Üÿ.ÕÔñÝ */
- $"4FB5 BA54 262A 73C2 1CF4 4CD1 D842 E8C2" /* OµºT&*sÂ.ôLÑØBè */
- $"8169 3555 13EC 6A25 6DE0 3614 EC2E D1BB" /* i5U.ìj%mà6.ì.Ñ» */
- $"E597 BFC6 2ACB 6879 11D1 870D E79E 8422" /* å—¿Æ*Ëhy.ч.çž„" */
- $"C01D 4032 8887 6DBA FBEC 3077 F220 49E3" /* À.@2ˆ‡mºûì0wò Iã */
- $"8693 0B00 9F45 0F57 0A39 DA8E EAA5 CD48" /* †“..ŸE.WÂ9ÚŽê¥ÍH */
- $"2C93 C3EC BDE0 71D5 5749 0952 441C E3F8" /* ,“Ãì½àqÕWIÆRD.ãø */
- $"597F C1E6 FB6B BBED AD71 FC34 CFF8 5877" /* Y.Áæûk»í­qü4ÏøXw */
- $"DB67 5F6D 798F E163 5F6B 1CFA A87B ED7C" /* Ûg_myác_k.ú¨{í| */
- $"F176 3065 72FF 443D BA6B 8FBD 9E85 806A" /* ñv0erÿD=ºk½ž…€j */
- $"2A1B 368C 7A9E B1B1 93DE ABD8 263F 31B3" /* *.6Œzž±±“Þ«Ø&?1³ */
- $"1739 58F1 7233 FE7C 4EC4 32AA CDDB CF11" /* .9Xñr3þ|NÄ2ªÍÛÏ. */
- $"C519 9C61 B756 AF62 D55D 5D48 6AF7 4364" /* Å.œa·V¯bÕ]]Hj÷Cd */
- $"205E F14D AAD6 EFF5 2F0D CBE4 0F19 3159" /* ^ñMªÖïõ/.Ëä..1Y */
- $"94F4 910E 4217 990B CABE EBF5 2B67 2EF6" /* ”ô‘.B.™.ʾëõ+g.ö */
- $"FE41 0C44 1C50 43EA 69F5 4E73 5569 82A1" /* þA.D.PCêiõNsUi‚¡ */
- $"C13C 4899 3AA9 5E13 5F76 BF98 2105 1842" /* Á<H™:©^._v¿˜!..B */
- $"AF34 9AFD CFC8 D1E7 3479 E1F3 C86F D06F" /* ¯4šýÏÈÑç4yáóÈoÐo */
- $"9ED9 9DD8 E2E0 4B44 19F4 03E6 9CC0 3474" /* žÙØâàKD.ô.æœÀ4t */
- $"DFBD 078F D140 1C06 5F8C B6E2 665C 703A" /* ß½.Ñ@.._Œ¶âf\p: */
- $"2841 642E F538 C531 697D 5064 11AD 9E8C" /* (Ad.õ8Å1i}Pd.­žŒ */
- $"5A53 3174 7302 762E 9708 BEF5 AD41 0C01" /* ZS1ts.v.—.¾õ­A.. */
- $"D744 85FC D963 416A 9A3A 6898 F067 5B1C" /* ×D…üÙcAjš:h˜ðg[. */
- $"873B 42B6 72C4 FF18 337A 8A24 EDCE 6B8B" /* ‡;B¶rÄÿ.3zŠ$íÎk‹ */
- $"BF06 0EA4 0227 A131 8620 B03C A2B9 729E" /* ¿..¤.'¡1† °<¢¹rž */
- $"1242 EC64 E340 5C5C 9BFF 120A BB1B 75E5" /* .Bìdã@\\›ÿ.».uå */
- $"385B 68AF C7B7 8BA5 1E7B 6FC1 DDB2 F642" /* 8[h¯Ç·‹¥.{oÁݲöB */
- $"FF56 4D21 66B3 EA8C 7095 8FBD 92CC 7315" /* ÿVM!f³êŒp•½’Ìs. */
- $"665F B398 608C ADD4 11E0 DA38 734A C3DB" /* f_³˜`Œ­Ô.àÚ8sJÃÛ */
- $"9249 4640 27D6 D057 426E 651D BF14 F0DE" /* ’IF@'ÖÐWBne.¿.ðÞ */
- $"9130 2D17 8D66 9689 79BD 9A6D 5AF9 6C7C" /* ‘0-.f–‰y½šmZùl| */
- $"94BF 8531 6507 5621 1C11 8D8F F3A5 83D9" /* ”¿…1e.V!..ó¥ƒÙ */
- $"7EE3 1E6D 9B0A 8D44 F466 DE49 E606 E143" /* ~ã.m›ÂDôfÞIæ.áC */
- $"7E77 D417 D49D 9CF2 89AA B0FA 84A4 33A5" /* ~wÔ.Ôœò‰ª°ú„¤3¥ */
- $"8279 A26A 82C5 27CF FB64 D227 994E C6A7" /* ‚y¢j‚Å'ÏûdÒ'™NƧ */
- $"531C 7B7D D333 20D4 F79E 7C21 CC1E 7ADA" /* S.{}Ó3 Ô÷ž|!Ì.zÚ */
- $"F978 DEBB 1FF2 7420 A72D DE6B AB74 8DC6" /* ùxÞ».òt §-Þk«tÆ */
- $"DD0F 0386 BF57 5F23 4926 C874 D598 47A3" /* Ý..†¿W_#I&ÈtÕ˜G£ */
- $"FBC8 E9B0 38BB C695 B7F4 82A1 CC5F 1E22" /* ûÈé°8»Æ•·ô‚¡Ì_." */
- $"767C 20D5 E64D 44F1 B2D4 2298 C6A1 1842" /* v| ÕæMDñ²Ô"˜Æ¡.B */
- $"8139 0CC8 B9C5 284F 9FC8 945B 5342 94A8" /* 9.ȹÅ(OŸÈ”[SB”¨ */
- $"1A57 3351 E00E DB28 D5E3 9712 4346 6DBA" /* .W3Qà.Û(Õã—.CFmº */
- $"CC9B A1ED CD9B 778D 4523 1E9A AC69 8ED9" /* Ì›¡íÍ›wE#.š¬iŽÙ */
- $"67C4 C16D A548 A029 0075 0185 8D06 B7F0" /* gÄÁm¥H ).u.….·ð */
- $"8258 D26A EB95 D437 F0D2 8E91 D536 F534" /* ‚XÒjë•Ô7ðÒŽ‘Õ6õ4 */
- $"30A1 6DE7 E4B8 48DF 246E 6A43 4FE6 AED0" /* 0¡mçä¸Hß$njCOæ®Ð */
- $"48A0 5E1E C339 6C40 BE36 CEB8 870B F9EB" /* H ^.Ã9l@¾6θ‡.ùë */
- $"5ED8 3CA2 B3FA 8CD9 2D26 FF79 6468 862D" /* ^Ø<¢³úŒÙ-&ÿydh†- */
- $"6B87 3072 15D5 5640 D5D4 B4BA EAD3 84F1" /* k‡0r.ÕV@ÕÔ´ºêÓ„ñ */
- $"6A43 F378 100E 8088 A3FE 989B E75B F67F" /* jCóx..€ˆ£þ˜›ç[ö. */
- $"5B25 3AE2 C08C 8CB0 08DD A37F 94DD 7F03" /* [%:âÀŒŒ°.Ý£.”Ý.. */
- $"35C9 DF27 9A9A B829 6326 A95D 91F7 0BA3" /* 5Éß'šš¸)c&©]‘÷.£ */
- $"7220 E220 F062 D8DE ADE2 2AD6 DDFD C9E4" /* r â ðbØÞ­â*ÖÝýÉä */
- $"FAAE 543D 3CCB 5230 74F7 3120 02FD 6B45" /* ú®T=<ËR0t÷1 .ýkE */
- $"A2AB 805B 13FB 1879 6060 5600 1847 98E5" /* ¢«€[.û.y``V..G˜å */
- $"BF65 2CD4 ACD7 15D0 B77E 5A0F 8095 95CA" /* ¿e,Ô¬×.з~Z.€••Ê */
- $"1847 D25F 7D32 1AE2 89EA 9D49 074D A3E5" /* .GÒ_}2.â‰êI.M£å */
- $"201E 8AC7 CB9C 43BC 0732 70E0 3C4F E625" /* .ŠÇËœC¼.2pà<Oæ% */
- $"88E3 74DB 6FB7 7BE2 7006 F9E7 1F76 DBF3" /* ˆãtÛo·{âp.ùç.vÛó */
- $"C988 D665 F7AA 21E2 A5C1 E969 2917 3BA3" /* ɈÖe÷ª!â¥Áéi).;£ */
- $"17BF 925F F835 9827 813E DA4F EE9B 2DF3" /* .¿’_ø5˜'>ÚOî›-ó */
- $"B640 95E8 70A5 B577 8C1D 99D5 797D D482" /* ¶@•èp¥µwŒ.™Õy}Ô‚ */
- $"E23A 56DD 644D 9623 FEE2 63D2 A3DB E146" /* â:VÝdM–#þâcÒ£ÛáF */
- $"FC39 35A7 6C28 63D8 5240 0C80 0000 0000" /* ü95§l(cØR@.€.... */
- $"0001 4095 99D3 7A7A 0A05 B673 69BC DA9C" /* ..@•™ÓzzÂ.¶si¼Úœ */
- $"A108 DDEA EE48 6385 0790 FEA1 1AFC 2CED" /* ¡.ÝêîHc….þ¡.ü,í */
- $"2225 BE73 2ED7 00BB 2301 80FE 09DF E78E" /* "%¾s.×.»#.€þÆßçŽ */
- $"6FE6 4743 A0EE 0A03 4C9E F046 CDD8 E7F1" /* oæGC îÂ.LžðFÍØçñ */
- $"DB3F 1B67 F6E1 1F31 8096 90DF 5110 40B0" /* Û?.göá.1€–ßQ.@° */
- $"0000 0000 0000 0000 C0B9 E0FC 41FB A11C" /* ........À¹àüAû¡. */
- $"4696 89A0 DE42 F8C7 27D0 3F03 AA51 70FD" /* F–‰ ÞBøÇ'Ð?.ªQpý */
- $"DC5F D7B9 AFD3 A0F3 7BAA A910 9E5C 259E" /* Ü_×¹¯Ó ó{ª©.ž\%ž */
- $"E4FB 8F8E 01C1 96E2 0768 FE5A 0A43 E2F8" /* äûŽ.Á–â.hþZÂCâø */
- $"DA74 9500 C241 D1F6 3EFF 3F06 586F A511" /* Út•.ÂAÑö>ÿ?.Xo¥. */
- $"CCFE 8FE7 61E1 C392 D001 3F52 1CA8 CC23" /* ÌþçaáÃ’Ð.?R.¨Ì# */
- $"93F0 27DF 893F 4AC1 06C3 34DA 8953 BBC0" /* “ð'߉?JÁ.Ã4Ú‰S»À */
- $"84C0 4843 27E0 067E 5EBF FF7A 1540 4C0E" /* „ÀHC'à.~^¿ÿz.@L. */
- $"FA6C 44A1 A7BC DB24 6AD7 C367 EC93 33BF" /* úlD¡§¼Û$j×Ãgì“3¿ */
- $"FECB C1DF 83CC 5BF7 A7C0 DF62 2EFA 4283" /* þËÁ߃Ì[÷§Àßb.úBƒ */
- $"6E49 2492 4924 9249 2492 4924 9246 A4A5" /* nI$’I$’I$’I$’F¤¥ */
- $"7754 9685 B091 D8FF 1549 CF90 2079 3AFB" /* wT–…°‘Øÿ.IÏ y:û */
- $"E925 85CC 62A2 E49B 476B 47B9 319B 630F" /* é%…Ìb¢ä›GkG¹1›c. */
- $"A6B8 182C E282 D1CD 920A 4EB3 21BF 943C" /* ¦¸.,â‚ÑÍ’ÂN³!¿”< */
- $"27BF CCDE BD6E 481A 188C F70B C257 8118" /* '¿ÌÞ½nH..Œ÷.ÂW. */
- $"FBF7 FF78 F422 A3DB AE81 4980 0000 0000" /* û÷ÿxô"£Û®I€.... */
- $"0000 0000 0000 1EE1 BFBB C300 0000 0000" /* .......á¿»Ã..... */
- $"0000 0000 0000 14FB 3FE1 1B7A D142 E13F" /* .......û?á.zÑBá? */
- $"5B6F 704A 61CF 957D 258E F744 FB26 8356" /* [opJaÏ•}%Ž÷Dû&ƒV */
- $"74AD 1DDB 02F2 CF85 7AEB 3A06 6F12 084E" /* t­.Û.òÏ…zë:.o..N */
- $"8E93 D6DA E4FE 9FBE 2D16 1C87 701F 55C3" /* Ž“ÖÚäþŸ¾-..‡p.Uà */
- $"9966 3E8F 36CB 6D9F F3F6 F8D3 B3B9 E2C1" /* ™f>6ËmŸóöøÓ³¹âÁ */
- $"1019 C6E6 8FFF 7FDC 6948 D3AB C944 C64A" /* ..Ææÿ.ÜiHÓ«ÉDÆJ */
- $"8000 0000 0000 0000 000A B0CB 3806 445C" /* €........°Ë8.D\ */
- $"7110 4CDE 3651 AC94 777C 8AB0 5382 04AF" /* q.LÞ6Q¬”w|аS‚.¯ */
- $"32E5 68C2 122F 8A5B 12A8 FF39 CF5E 72FB" /* 2åhÂ./Š[.¨ÿ9Ï^rû */
- $"EFD4 1669 47C6 525E 88EF 0AAC 1EE1 98B6" /* ïÔ.iGÆR^ˆï¬.ᘶ */
- $"0BFF 7FAF 8A4B 7158 F7D7 1707 DE93 841E" /* .ÿ.¯ŠKqX÷×..Þ“„. */
- $"3C82 3260 1FFF 1C8B 6A6E 8C66 0000 0000" /* <‚2`.ÿ.‹jnŒf.... */
- $"0000 0000 0000 0121 EF03 234C 3124 0000" /* .......!ï.#L1$.. */
- $"0000 0000 0000 0000 077C 5957 204B A2ED" /* .........|YW K¢í */
- $"59B8 F3C4 CC60 8A58 7E23 0B9F A0FD 1DC8" /* Y¸óÄÌ`ŠX~#.Ÿ ý.È */
- $"8E0F FE2B 5F9F 12D8 09B3 57BB 7818 3CF5" /* Ž.þ+_Ÿ.ØÆ³W»x.<õ */
- $"D579 D427 5198 BD86 E2FC 8775 915B 37A5" /* ÕyÔ'Q˜½†âü‡u‘[7¥ */
- $"B2E6 6BD8 8404 31D9 4C54 3621 6561 5C3E" /* ²ækØ„.1ÙLT6!ea\> */
- $"4A80 0000 0000 0000 0000 0014 D22D 6758" /* J€..........Ò-gX */
- $"336C 63A1 C13F 3E94 9877 8E90 4E5D 0C70" /* 3lc¡Á?>”˜wŽN].p */
- $"F80A 4262 C2CC C7E4 DAE8 526F 393F 4558" /* øÂBbÂÌÇäÚèRo9?EX */
- $"5CC9 5DDA B2FF 7ED5 F809 3A02 F1EE 2760" /* \É]Ú²ÿ~ÕøÆ:.ñî'` */
- $"FF7E 5037 F054 4A1B 9602 92EA 8D26 A198" /* ÿ~P7ðTJ.–.’ê&¡˜ */
- $"9C4F 8238 A60E 7734 20F8 18FE 478F 5403" /* œO‚8¦.w4 ø.þGT. */
- $"1658 618B A80F 879F 4A98 E809 DEB2 7CE9" /* .Xa‹¨.‡ŸJ˜èÆÞ²|é */
- $"9724 407B B8C8 A48D 4F33 9126 751B 9FC2" /* —$@{¸È¤O3‘&u.ŸÂ */
- $"0283 44C3 5AFD 9546 FCE2 4212 4F5B 01D4" /* .ƒDÃZý•FüâB.O[.Ô */
- $"6E53 A032 DA91 40F4 4BDE 0C23 FF1E D5DE" /* nS 2Ú‘@ôKÞ.#ÿ.ÕÞ */
- $"B543 59DC C0DC 759A 6043 5883 A5FE C785" /* µCYÜÀÜuš`CXƒ¥þÇ… */
- $"BA68 9F46 C21A 4C50 20E3 0488 FB34 1043" /* ºhŸFÂ.LP ã.ˆû4.C */
- $"FC68 562B 635A EE8D E334 0C6F 25A9 E4C9" /* ühV+cZîã4.o%©äÉ */
- $"3484 2AC2 6188 7242 E3F6 AEAC 6F86 2DE2" /* 4„*ÂaˆrBãö®¬o†-â */
- $"C377 BD02 CB1C 9553 5485 6A5B E118 9BBD" /* Ãw½.Ë.•ST…j[á.›½ */
- $"DC6B 2C92 C6CC C866 6E7F FE63 AB01 FE7D" /* Ük,’ÆÌÈfn.þc«.þ} */
- $"FF7F BB81 EA94 87BE B101 F468 0E30 F111" /* ÿ.»ê”‡¾±.ôh.0ñ. */
- $"7BC9 FA0D F87F BDD0 811B 8588 1AE7 8387" /* {Éú.ø.½Ð.…ˆ.烇 */
- $"5C06 B3A9 E2ED 6E5B B524 35AA CBFF 50D6" /* \.³©âín[µ$5ªËÿPÖ */
- $"49D9 6918 3837 59BD E7CC 8796 B0AF 2729" /* IÙi.87Y½ç̇–°¯') */
- $"0512 5A97 66FF 1A85 E004 1882 0108 EA41" /* ..Z—fÿ.…à..‚..êA */
- $"BBCC 15E0 254C 59AF 877D 0722 15FB ADA1" /* »Ì.à%LY¯‡}.".û­¡ */
- $"84C2 9B83 DD5B C6B1 EE29 084C 08F7 06C8" /* „›ƒÝ[Ʊî).L.÷.È */
- $"4F07 9818 6BF2 66E2 582B 2F7D 29AD BAFA" /* O.˜.kòfâX+/})­ºú */
- $"8F9E 0AC8 60AE D10E 3E49 17BF E015 0C5E" /* žÂÈ`®Ñ.>I.¿à..^ */
- $"5C51 5D5B 5BC1 6C83 C428 4505 E9BB 61CB" /* \Q][[ÁlƒÄ(E.é»aË */
- $"D7C2 F3C6 C102 73F5 409E D0CF B43E E497" /* ×ÂóÆÁ.sõ@žÐÏ´>ä— */
- $"C1E0 707B 3F6F EAA8 2F10 9285 7D9D 9F81" /* Áàp{?oê¨/.’…}Ÿ */
- $"303D 3A70 2B3F 4A45 558D 63F6 EEB9 CF21" /* 0=:p+?JEUcöî¹Ï! */
- $"52C1 27C2 8439 0BE2 BE1F A553 A1C7 E44C" /* RÁ'„9.â¾.¥S¡ÇäL */
- $"5422 9BC0 356D 1B40 E53B 3064 AA69 F464" /* T"›À5m.@å;0dªiôd */
- $"7AA7 4E56 F7E2 7AE5 CB6E E538 8582 1927" /* z§NV÷âzåËnå8…‚.' */
- $"019D B4B0 E6D9 0F0E 9670 7723 62CF C422" /* .´°æÙ..–pw#bÏÄ" */
- $"DD53 ED12 92AE 20B0 6B63 6CB3 C596 4F4E" /* ÝSí.’® °kcl³Å–ON */
- $"18B6 FD06 93B2 6F73 A740 770D C39F B873" /* .¶ý.“²os§@w.߸s */
- $"598F 3667 6F7A 29E9 9E6F 9D04 48DD A175" /* Y6goz)éžo.HÝ¡u */
- $"2AFC 61BD D706 2A8E 9789 F513 B8AF B8EA" /* *üa½×.*Ž—‰õ.¸¯¸ê */
- $"2426 7EDF 1EFA 1D19 7A50 D22F D15E 76FE" /* $&~ß.ú..zPÒ/Ñ^vþ */
- $"CD34 19AD 8126 775C A5FB B209 9658 F850" /* Í4.­&w\¥û²Æ–XøP */
- $"F2FD A65F B487 9F50 7FF0 12FD BA8B FB6E" /* òý¦_´‡ŸP.ð.ýº‹ûn */
- $"49F5 50DF C349 B4F9 F4D7 EDEB 53BE DEB0" /* IõPßÃI´ùô×íëS¾Þ° */
- $"7F85 29FB 5DFF 36B9 BEDA 9BF8 3CF2 FDAE" /* .…)û]ÿ6¹¾Ú›ø<òý® */
- $"DFB5 ABBE D3DB ED2B FDBA CFFB 7606 FB74" /* ßµ«¾ÓÛí+ýºÏûv.ût */
- $"D3F8 6B96 83BA F7ED EB3F 7EDE AFE0 EECD" /* Óøk–ƒº÷íë?~Þ¯àîÍ */
- $"FB5E 7F6E 807E DB9B F6BD F0FE D32B EA21" /* û^.n€~Û›ö½ðþÓ+ê! */
- $"EFA8 1EFA 823F 6DCF FB6C 8BEA 6CFD B5AF" /* ï¨.ú‚?mÏûl‹êlýµ¯ */
- $"0774 CFDB D337 FB7A 3F83 BA5D F51F DF55" /* .tÏÛÓ7ûz?ƒº]õ.ßU */
- $"47FB 690F DA86 F791 DDD6 2CCB E6B8 C536" /* Gûi.Ú†÷‘ÝÖ,Ëæ¸Å6 */
- $"D512 AD5E 1B08 0B8A 8D03 2F75 60E5 6BF8" /* Õ.­^...Š./u`åkø */
- $"447B C66A 7EC2 7912 B45F 8E48 277C D8E1" /* D{Æj~Ây.´_ŽH'|Øá */
- $"809C 5755 D718 BAAC F891 2AE5 F97C 3F5E" /* €œWU×.º¬ø‘*åù|?^ */
- $"0116 3A00 99F4 5896 E0EA B189 F5A5 7929" /* ..:.™ôX–à걉õ¥y) */
- $"C491 B57F 2232 B0C2 52F8 89B1 DB2F B284" /* Ä‘µ."2°ÂRø‰±Û/²„ */
- $"C1EE 0C43 EF76 FD94 F871 4077 7E19 EC36" /* Áî.Cïvý”øq@w~.ì6 */
- $"BBFA 6DFF 3C0B 5A98 89B4 84BB 56DB 5FC2" /* »úmÿ<.Z˜‰´„»VÛ_ */
- $"16C2 351A B46E AF45 AAC7 DD2E 97ED 970C" /* .Â5.´n¯EªÇÝ.—í—. */
- $"76D8 F8D0 42EB E639 28E8 BE33 A530 3B58" /* vØøÐBëæ9(è¾3¥0;X */
- $"2374 6B1C 97B0 1CD5 ACD5 615F FD30 62C6" /* #tk.—°.Õ¬Õa_ý0bÆ */
- $"899A 977D 4B74 CAB1 E9EE 6588 4E67 8733" /* ‰š—}KtʱéîeˆNg‡3 */
- $"B359 BCC7 DC7B 9884 E4A8 78CB 77E7 675D" /* ³Y¼ÇÜ{˜„ä¨xËwçg] */
- $"FF2D FCE4 7744 BDD1 A833 6BEC C481 2DA8" /* ÿ-üäwD½Ñ¨3kìÄ-¨ */
- $"3D1C 5D57 7595 1DEB 2278 31AE 4188 B1F2" /* =.]Wu•.ë"x1®Aˆ±ò */
- $"54E1 113D DA75 96ED 71FF 1577 7820 4D22" /* Tá.=Úu–íqÿ.wx M" */
- $"2BD9 3841 A416 96A4 2549 1A9D 3A55 8E39" /* +Ù8A¤.–¤%I.:UŽ9 */
- $"A929 4B4E E11F 0F88 8BB6 7E08 2210 9D21" /* ©)KNá..ˆ‹¶~.".! */
- $"92BF 623B B974 D371 0208 1489 5713 0F66" /* ’¿b;¹tÓq...‰W..f */
- $"3C4C 8394 72A6 08A1 3D86 BA0C 198B CE8B" /* <Lƒ”r¦.¡=†º..‹Î‹ */
- $"FB71 18D8 E044 CE7C A642 F1E5 DC8B F8E6" /* ûq.ØàDÎ|¦BñåÜ‹øæ */
- $"2405 66E0 B6C5 6A4F B1AE 2231 3060 11D4" /* $.fà¶ÅjO±®"10`.Ô */
- $"9963 5EF4 BB3D 1F61 0807 0AE1 0DFC 4718" /* ™c^ô»=.a..Âá.üG. */
- $"6C97 80A7 D438 6A81 B76A 6E7E 7A64 87A1" /* l—€§Ô8j·jn~zd‡¡ */
- $"1D7A 8744 3227 F565 4B4A E311 FA0F B477" /* .z‡D2'õeKJã.ú.´w */
- $"9DD6 0662 8844 7138 BDF8 CBCC 007F BDB6" /* Ö.bˆDq8½øËÌ..½¶ */
- $"07C4 98CC 226B 9762 33D0 99EF 54D9 5800" /* .ĘÌ"k—b3ЙïTÙX. */
- $"509D C37B 39A7 E11B 8771 0999 AB8B AAA6" /* PÃ{9§á.‡qÆ™«‹ª¦ */
- $"C463 6C38 7FB0 9121 2CA2 7634 BBEE 41FB" /* Äcl8.°‘!,¢v4»îAû */
- $"4F3B B050 3E38 15C4 98A6 216D 31C2 7057" /* O;°P>8.ʦ!m1ÂpW */
- $"0B3D 429A 6CFB 0819 EB4D B9D2 549F 6601" /* .=Bšlû..ëM¹ÒTŸf. */
- $"2436 5BEA 9DAC BBDA AB3A AB4F ABFF 768D" /* $6[ꬻګ:«O«ÿv */
- $"E220 E451 7E45 49C5 21FD B2E6 DEFD 2505" /* â äQ~EIÅ!ý²æÞý%. */
- $"836B 3500 54D8 50B8 7538 C5BF B951 7FB2" /* ƒk5.TØP¸u8Å¿¹Q.² */
- $"F927 CBB1 7AA1 D0BD 51E2 D7F7 C440 5DA0" /* ù'˱z¡Ð½Qâ×÷Ä@]  */
- $"89EF FEEE BF2E A5E4 F98A B652 F25A D1DC" /* ‰ïþî¿.¥äùжRòZÑÜ */
- $"482A 40CB A288 250A 22CA BCB4 815D 077E" /* H*@Ë¢ˆ%Â"ʼ´].~ */
- $"229E 59B2 8249 D336 A3C1 5D5B FAE5 483C" /* "žY²‚IÓ6£Á][úåH< */
- $"67F3 255E 1530 AFB1 D900 48FE 254B C54E" /* gó%^.0¯±Ù.Hþ%KÅN */
- $"42DC EE54 066B CE83 B1C9 F021 2031 8DF1" /* BÜîT.k΃±Éð! 1ñ */
- $"FE58 9315 B761 79CA 409A 6CD6 337A 14A9" /* þX“.·ayÊ@šlÖ3z.© */
- $"8622 90BC 3474 727C 66CE 09C5 61B4 A386" /* †"¼4tr|fÎÆÅa´£† */
- $"7509 819F 6EEB 5FCC C0A7 084A 7742 A6E3" /* uÆŸnë_ÌÀ§.JwB¦ã */
- $"F69A 90CA 24AD EB53 60AB 5FD0 FD6F 3DE6" /* öšÊ$­ëS`«_Ðýo=æ */
- $"44CF 80FB A400 B71F 1DD4 C690 A3DB 54CF" /* DÏ€û¤.·..ÔÆ£ÛTÏ */
- $"F492 7EC7 540C 048F 3D35 FD63 7593 751B" /* ô’~ÇT..=5ýcu“u. */
- $"F88F 4B7D E355 6685 FD5F 2743 8DF3 D839" /* øK}ãUf…ý_'CóØ9 */
- $"0894 99DB 1FAA 22B2 8800 8C9F D91F E60B" /* .”™Û.ª"²ˆ.ŒŸÙ.æ. */
- $"0EEE 2870 2932 2AE5 F401 11F0 8B2B 53DB" /* .î(p)2*åô..ð‹+SÛ */
- $"8028 E39D 744F E70B 11F3 A220 ABF4 FCD5" /* €(ãtOç..ó¢ «ôüÕ */
- $"37C9 0AC8 8749 215E 1D89 4022 96D0 04FF" /* 7ÉÂȇI!^.‰@"–Ð.ÿ */
- $"0C57 AC3D 351A 8582 EBA4 EA2B B65B A14B" /* .W¬=5.…‚ë¤ê+¶[¡K */
- $"048B E031 DE15 251C 669F 8457 FF38 D131" /* .‹à1Þ.%.fŸ„Wÿ8Ñ1 */
- $"0027 BB20 9721 6636 A375 AFBA AF7B BDBA" /* .'» —!f6£u¯º¯{½º */
- $"05F3 3114 E55E DAA9 219F 9516 F3DF 12B4" /* .ó1.å^Ú©!Ÿ•.óß.´ */
- $"DA3F 83DF 13A0 9900 3FA6 17E9 B014 E404" /* Ú?ƒß. ™.?¦.é°.ä. */
- $"434D 02D4 4283 D73D F4D1 5D95 8B25 6A6A" /* CM.ÔBƒ×=ôÑ]•‹%jj */
- $"CD5E BA93 82DF 1A30 4B0D 0E21 65A1 0001" /* Í^º“‚ß.0K..!e¡.. */
- $"2869 F06A 8949 311F DB03 39EB E8E1 5BFB" /* (iðj‰I1.Û.9ëèá[û */
- $"F11C 05C6 2469 BAEA 4516 4CC4 DAF5 927A" /* ñ..Æ$iºêE.LÄÚõ’z */
- $"2CEB 3150 DB6F 4DE2 8EED 59C0 604F 9AE5" /* ,ë1PÛoMâŽíYÀ`Ošå */
- $"E136 83B0 F348 3D1A B44D 3A8E D77A B0DE" /* á6ƒ°óH=.´M:Ž×z°Þ */
- $"5267 1055 24F7 3C3D EB3E 08EF 97F9 4B29" /* Rg.U$÷<=ë>.ï—ùK) */
- $"454F 1B5D 4A6E 56E1 0F90 00A1 4467 7454" /* EO.]JnVá..¡DgtT */
- $"B556 362A 9A19 9E35 19E9 BFDF E2AD 91D6" /* µV6*š.ž5.é¿ßâ­‘Ö */
- $"7FB6 95B9 F19D 8D07 2FAF 3162 D880 0AA7" /* .¶•¹ñ./¯1b؀§ */
- $"C9C4 94AD C49A 1231 2D9F 780F 6E3E 57D2" /* ÉÄ”­Äš.1-Ÿx.n>WÒ */
- $"8C1C 582C 179A 721C 7063 F056 F938 4EA1" /* Œ.X,.šr.pcðVù8N¡ */
- $"F3E4 E458 D254 280F 92CA ABDC 4ECF 3EB7" /* óääXÒT(.’Ê«ÜNÏ>· */
- $"95DF A3B8 45C0 1427 BA54 B2E2 D1BC B67D" /* •ߣ¸EÀ.'ºT²âѼ¶} */
- $"5A0F EE12 37D4 BE1C 5785 A90D 2E62 B301" /* Z.î.7Ô¾.W…©..b³. */
- $"F66D A637 374B 17DA 7446 C318 3B11 4F50" /* öm¦77K.ÚtFÃ.;.OP */
- $"ED27 AEB2 D8F6 C3E4 AB48 5E7C 1D46 9463" /* í'®²ØöÃä«H^|.F”c */
- $"E7BA 9296 7BFA FDBB 39F2 7E86 1A5D 8FFA" /* 纒–{úý»9ò~†.]ú */
- $"7E06 FC92 3472 7950 8B67 8329 FA9F 47AA" /* ~.ü’4ryP‹gƒ)úŸGª */
- $"51F3 01AD A6DA 224F E711 AF6F BA8F FA86" /* Qó.­¦Ú"Oç.¯oºú† */
- $"FF61 EBD1 5613 B076 3543 3515 FF1B 1E9C" /* ÿaëÑV.°v5C5.ÿ..œ */
- $"CE78 6A36 7CCF FD63 E9E3 00E6 EA60 1DBE" /* Îxj6|Ïýcéã.æê`.¾ */
- $"42FB 3E66 D69D 8BA6 A0E6 13E1 2087 20D7" /* Bû>fÖ‹¦ æ.á ‡ × */
- $"7941 E3C4 C7C6 67FF 2C9C A486 253A C206" /* yAãÄÇÆgÿ,œ¤†%:Â. */
- $"F961 4A0E D9DD D32A 6D67 A012 B1A2 B549" /* ùaJ.ÙÝÓ*mg .±¢µI */
- $"3F58 8BA1 CA98 94EB 6099 570C D139 09AA" /* ?X‹¡Ê˜”ë`™W.Ñ9ƪ */
- $"8DEB C31A 0812 5DAD 2926 6846 D789 4430" /* ëÃ...]­)&hF׉D0 */
- $"4931 16B5 0804 52F1 040D B0A7 DDD7 7052" /* I1.µ..Rñ..°§Ý×pR */
- $"4269 C765 98AA 3941 F9EE 987A 2EAD 46BE" /* BiÇe˜ª9Aùî˜z.­F¾ */
- $"AA2B DD79 D9F9 7AF7 9318 B633 97CC DB93" /* ª+ÝyÙùz÷“.¶3—ÌÛ“ */
- $"5AF7 23D4 08E5 1FD7 EA45 85E9 4C98 77B6" /* Z÷#Ô.å.×êE…éL˜w¶ */
- $"0038 8756 6C8F 1A76 8D36 D67C 0BBD 248F" /* .8‡Vl.v6Ö|.½$ */
- $"8465 4CC4 7B7A C1B7 6348 F763 66A7 F04E" /* „eLÄ{zÁ·cH÷cf§ðN */
- $"FF4E 1C72 1053 323F 9E55 F75D 4097 9C24" /* ÿN.r.S2?žU÷]@—œ$ */
- $"AD5D 3C1B 766A 50A8 7252 6563 2687 8251" /* ­]<.vjP¨rRec&‡‚Q */
- $"8AE2 2EAE 6AA9 6439 2831 281E 034D 7999" /* Šâ.®j©d9(1(..My™ */
- $"F46F 47C1 911D 553A D887 0E8F 6E83 1B48" /* ôoGÁ‘.U:؇.nƒ.H */
- $"F0D9 C566 C0FF 0F02 5E68 EA76 7381 25B1" /* ðÙÅfÀÿ..^hêvs%± */
- $"D388 A375 370B A655 625B B71A 191C CD9D" /* Óˆ£u7.¦Ub[·...Í */
- $"F3CA 83B2 88D6 3712 B3E3 6CEA 19DC 3295" /* óʃ²ˆÖ7.³ãlê.Ü2• */
- $"3398 DF4F 1279 B346 1DD8 ED24 186F BEE1" /* 3˜ßO.y³F.Øí$.o¾á */
- $"8FD4 5FAD EAFF 6960 DE17 A0A4 B89E 7CF3" /* Ô_­êÿi`Þ. ¤¸ž|ó */
- $"C360 9DA8 91BF 470F ECC0 C0AA E260 3430" /* Ã`¨‘¿G.ìÀÀªâ`40 */
- $"EF4E CAD6 F964 05B0 8E27 C1F6 7516 4350" /* ïNÊÖùd.°Ž'Áöu.CP */
- $"B87D 7D16 703E 7972 1232 2E0F 6577 664C" /* ¸}}.p>yr.2..ewfL */
- $"8FA6 1414 7FB2 A33D A69E FD2F CF21 FC8F" /* ¦...²£=¦žý/Ï!ü */
- $"23A5 6AED 3E28 34A0 F73F F7D6 7F7C 5B6B" /* #¥jí>(4 ÷?÷Ö.|[k */
- $"0596 8B6D BACA 52DF 8E72 CDBA E221 7092" /* .–‹mºÊRߎrͺâ!p’ */
- $"A3AB B99D 1EE3 3F21 1AD2 0F0B DC5A 8BE1" /* £«¹.ã?!.Ò..ÜZ‹á */
- $"9E35 D891 9A60 EF28 5934 FA3B 8009 DC42" /* ž5Ø‘š`ï(Y4ú;€ÆÜB */
- $"11BE 487F D776 AF26 0EBD BF3E 8DCC B940" /* .¾H.×v¯&.½¿>̹@ */
- $"2523 D6E1 447F EA8A 5F66 DE0B 0962 249E" /* %#ÖáD.êŠ_fÞ.Æb$ž */
- $"165D BB6D 1EBD 1237 021B F903 DEEF 78FE" /* .]»m.½.7..ù.Þïxþ */
- $"B3F3 76B7 429F 336D 0EFA FF47 5CBC E3DF" /* ³óv·BŸ3m.úÿG\¼ãß */
- $"FC44 41BA BC9D 67AE 0B43 D817 FBCE 4F36" /* üDAº¼g®.CØ.ûÎO6 */
- $"8209 CCB5 38F6 712E 7DEA 4E9E 4B38 3B80" /* ‚ÆÌµ8öq.}êNžK8;€ */
- $"7B16 28E3 AB59 340E 93F0 4C65 C281 A4F1" /* {.(ã«Y4.“ðLe¤ñ */
- $"08E4 26A6 31AA B6A4 F784 BA8E C7FA 8919" /* .ä&¦1ª¶¤÷„ºŽÇú‰. */
- $"4B19 FA98 09C8 3C79 27DA CB39 881C 3B0E" /* K.ú˜ÆÈ<y'ÚË9ˆ.;. */
- $"9BEA 1EF3 D655 CFEB B4F7 0888 971D 69EF" /* ›ê.óÖUÏë´÷.ˆ—.iï */
- $"1105 0EF2 80B8 FF1E F0BE 107F 9AB0 6C52" /* ...ò€¸ÿ.ð¾..š°lR */
- $"FF78 3AA4 8FE0 3370 40DF C5E8 478A 2FCF" /* ÿx:¤à3p@ßÅèGŠ/Ï */
- $"96C5 8D32 8E07 AA93 DA95 4D9B 60C6 2748" /* –Å2Ž.ª“Ú•M›`Æ'H */
- $"C8F4 8347 D2D9 2E35 75E4 333A 6494 B177" /* ÈôƒGÒÙ.5uä3:d”±w */
- $"C836 6E4F AF08 CDB0 0FA5 D565 A0EC 946F" /* È6nO¯.Ͱ.¥Õe ì”o */
- $"ED5C 03F6 E5DB FA4F D29A BF8F BC7F 12D8" /* í\.öåÛúOÒš¿¼..Ø */
- $"7730 8564 524D 4B31 F681 8C71 C5BC 1641" /* w0…dRMK1öŒqż.A */
- $"6988 F9CF 0385 B8EE 4C04 07DB 5AD2 531C" /* iˆùÏ.…¸îL..ÛZÒS. */
- $"48BA 3E6F E24E AF73 DB5E B729 A4BF 894A" /* Hº>oâN¯sÛ^·)¤¿‰J */
- $"782D E8F2 91C9 E628 322C F20C 2D0C 73DD" /* x-èò‘Éæ(2,ò.-.sÝ */
- $"F093 4ED7 63DF E121 E7B9 DB7E 530D E3BD" /* ð“N×cßá!ç¹Û~S.ã½ */
- $"3469 29CE 5768 BE0F 1E91 46B7 00A0 CC2E" /* 4i)ÎWh¾..‘F·. Ì. */
- $"183D 7D57 762C 062D 0707 EBA4 177D 73E8" /* .=}Wv,.-..ë¤.}sè */
- $"FA30 83A6 479B AA9A 702E B8FD 9B54 0FF3" /* ú0ƒ¦G›ªšp.¸ý›T.ó */
- $"8222 1EB0 4CDD 4CF7 F0AB 8972 B655 9426" /* ‚".°LÝL÷ð«‰r¶U”& */
- $"4EEE 3B88 A6D2 F8B9 6845 0467 D606 9DDD" /* Nî;ˆ¦Òø¹hE.gÖ.Ý */
- $"C547 A61F 71E7 5A8E 6B83 51FD B2C1 A732" /* ÅG¦.qçZŽkƒQý²Á§2 */
- $"A6EA A0AA 6D13 E80B 0EC4 5DF4 348F FF6E" /* ¦ê ªm.è..Ä]ô4ÿn */
- $"2289 CFB4 1AE2 18D1 340F B29B E1FF 16B1" /* "‰Ï´.â.Ñ4.²›áÿ.± */
- $"0F0F B5AD 260A 7FD9 B1F2 3D0C 404F 75A8" /* ..µ­&Â.Ù±ò=.@Ou¨ */
- $"E4DB 52EE 259B D762 E5E5 4FFD 22AC 4856" /* äÛRî%›×bååOý"¬HV */
- $"9C62 8DDB F5D8 58F8 4EC7 1110 30EC E0D8" /* œbÛõØXøNÇ..0ìàØ */
- $"7FED 0176 FEF2 53B3 75C6 34E1 A3A7 79DA" /* .í.vþòS³uÆ4ᣧyÚ */
- $"1FDC 42EC 83B2 F3EB 056C E41B 4E65 3699" /* .ÜB샲óë.lä.Ne6™ */
- $"4BD6 1AE3 85A9 DBF6 89D4 39B0 79F9 8877" /* KÖ.ã…©Ûö‰Ô9°yùˆw */
- $"161C 2CB5 3F3C 294B 8CA3 A6F6 556C 4CAD" /* ..,µ?<)KŒ£¦öUlL­ */
- $"A752 918D 7E61 BA54 02D2 CF5C AEBE 1A0B" /* §R‘~aºT.ÒÏ\®¾.. */
- $"B75C A9CA 9876 AB0B 6028 4D8E D46C E479" /* ·\©Ê˜v«.`(MŽÔläy */
- $"A186 EA09 496E 0935 04E2 4C25 FA18 270B" /* ¡†êÆInÆ5.âL%ú.'. */
- $"A054 DE1C 1BD8 A089 9D95 1335 E93C 7C21" /*  TÞ..Ø ‰•.5é<|! */
- $"435E A570 3C42 AA88 0075 BB20 20AF 90EC" /* C^¥p<Bªˆ.u» ¯ì */
- $"26F9 7E41 5CC7 2154 63A3 D965 075C 1A78" /* &ù~A\Ç!Tc£Ùe.\.x */
- $"2A13 753E DDD9 F846 467C EFC6 5308 2B46" /* *.u>ÝÙøFF|ïÆS.+F */
- $"5BD9 2BFF 5F26 72DB 523D D0FC CE49 47B0" /* [Ù+ÿ_&rÛR=ÐüÎIG° */
- $"D98B 4D36 1B60 7C3A 0707 F46A 8565 4CCB" /* Ù‹M6.`|:..ôj…eLË */
- $"5DC1 A50D C039 BF24 7418 78A7 6D4F DE55" /* ]Á¥.À9¿$t.x§mOÞU */
- $"1CB8 B787 158C 6C4D D840 920F 3130 7A92" /* .¸·‡.ŒlMØ@’.10z’ */
- $"1CF4 1B74 BC2B 8954 0A80 9636 BFC3 6330" /* .ô.t¼+‰T€–6¿Ãc0 */
- $"3E7F 7E4E A811 39F2 3D56 10D3 6A76 4E20" /* >.~N¨.9ò=V.ÓjvN */
- $"F646 5CD3 9166 D2D6 046F E398 A934 2D04" /* öF\Ó‘fÒÖ.o㘩4-. */
- $"2E01 C602 1332 8274 6AE2 D5C9 6226 30B3" /* ..Æ..2‚tjâÕÉb&0³ */
- $"07DB FDF3 B3BB 6C31 B162 FF63 0639 8E6F" /* .Ûýó³»l1±bÿc.9Žo */
- $"3501 A54C 1AA6 42EB EDE7 885E EE2F A6D9" /* 5.¥L.¦Bëíçˆ^î/¦Ù */
- $"B74A AE20 8FFB 6FCF A537 642D F17F A45E" /* ·J® ûoÏ¥7d-ñ.¤^ */
- $"EE37 DE05 7569 A81E F464 A35B 603B 4F40" /* î7Þ.ui¨.ôd£[`;O@ */
- $"D00F C3D2 D04A F943 AC3C 37E2 1B2B A1D3" /* Ð.ÃÒÐJùC¬<7â.+¡Ó */
- $"09D6 A92B F7CB B2FA 9FF7 97F2 83F9 BABC" /* ÆÖ©+÷˲úŸ÷—òƒùº¼ */
- $"E4BE F015 E804 97FC A16F 6E8B 9004 8424" /* ä¾ð.è.—ü¡on‹.„$ */
- $"04F7 1295 0A15 3C1A AA5D 6A75 372A 0BB4" /* .÷.•Â.<.ª]ju7*.´ */
- $"4849 DD4A 012F D969 23A9 FBA7 C3EB D29F" /* HIÝJ./Ùi#©û§ÃëÒŸ */
- $"5CE0 BD6F 8436 26BB 1B52 3BCB DCAA 0791" /* \à½o„6&».R;Ëܪ.‘ */
- $"02B3 8EC7 5A89 D402 C9FF 058E E2C8 AD72" /* .³ŽÇZ‰Ô.Éÿ.ŽâÈ­r */
- $"01BF D9B3 FA52 B000 0000 3090 8B4E 8809" /* .¿Ù³úR°...0‹NˆÆ */
- $"9E4F 59A7 8021 D030 169B 78E6 55B4 9FB8" /* žOY§€!Ð0.›xæU´Ÿ¸ */
- $"48A1 D2F4 BE8E A948 A89E 5E3E BE56 AE8C" /* H¡Òô¾Ž©H¨ž^>¾V®Œ */
- $"BF6C 6485 F435 4906 BE37 4D88 589A 85C0" /* ¿ld…ô5I.¾7MˆXš…À */
- $"5278 59EC 1FED 3652 3FE0 5229 0524 D686" /* RxYì.í6R?àR).$Ö† */
- $"1E5E 14D9 8C56 8742 9625 36BB 4674 0391" /* .^.ÙŒV‡B–%6»Ft.‘ */
- $"9647 FCC9 30C4 6D0D 5812 1271 E9C8 E89D" /* –GüÉ0Äm.X..qéÈè */
- $"7F9B 3420 0269 5F58 4554 F964 BDDA E9F3" /* .›4 .i_XETùd½Úéó */
- $"973A 5B5F 4C59 107B 2D9E 87CB D896 1F13" /* —:[_LY.{-ž‡ËØ–.. */
- $"AC52 F00D 3600 9104 3FF2 399A 0158 5153" /* ¬Rð.6.‘.?ò9š.XQS */
- $"139A A5C2 51CC D2C7 D082 C2A0 E35B FE05" /* .š¥ÂQÌÒÇЂ ã[þ. */
- $"06C9 DBB4 7036 39DB 80AF 4642 9F53 170C" /* .ÉÛ´p69Û€¯FBŸS.. */
- $"2856 38D5 0FA7 B562 4ED8 3BB5 B48A B1C8" /* (V8Õ.§µbNØ;µ´Š±È */
- $"B20B 4B42 4499 C5C1 242B A1BA CB74 D8F1" /* ².KBD™ÅÁ$+¡ºËtØñ */
- $"1CF1 241E 7A2A B847 111D 13DC CD3C 05A3" /* .ñ$.z*¸G...ÜÍ<.£ */
- $"024F 25B5 41E2 0A15 E1C4 1A0E A5D8 0742" /* .O%µAâÂ.áÄ..¥Ø.B */
- $"A359 2372 FD88 7447 1DB7 F766 5B7F E63E" /* £Y#rýˆtG.·÷f[.æ> */
- $"26B8 BC6E 7B72 E331 2BE1 73BD 04A0 E941" /* &¸¼n{rã1+ás½. éA */
- $"45EC 9039 8769 8BFF 1624 8D43 CA24 9D0D" /* Eì9‡i‹ÿ.$CÊ$. */
- $"A05B F467 7401 E777 0608 C4A6 A698 9A9B" /*  [ôgt.çw..Ħ¦˜š› */
- $"7066 11D3 606F 857E 18D8 D9D3 E226 38C0" /* pf.Ó`o…~.ØÙÓâ&8À */
- $"D89B 09D9 A2F1 0171 BAC9 D7BF AB2E BD58" /* Ø›ÆÙ¢ñ.qºÉ׿«.½X */
- $"7178 6CC2 608D 447D D92A 621C 1A82 B764" /* qxlÂ`D}Ù*b..‚·d */
- $"2ABE CBE8 07C0 E2A6 9B83 46A8 1109 FC87" /* *¾Ëè.À⦛ƒF¨.Æü‡ */
- $"F083 9598 26AE 8847 7E22 278D 9311 59FC" /* ðƒ•˜&®ˆG~"'“.Yü */
- $"2995 1D44 BA58 24BC 2A99 3946 0E00 9144" /* )•.DºX$¼*™9F..‘D */
- $"9113 0297 29E3 A7B5 B937 2D23 8405 86ED" /* ‘..—)ã§µ¹7-#„.†í */
- $"29F1 5254 6A8C 0FB8 4B13 F6C3 6028 2C14" /* )ñRTjŒ.¸K.öÃ`(,. */
- $"3B80 E317 225C 7A9B 405C 7E95 A2E4 311B" /* ;€ã."\z›@\~•¢ä1. */
- $"076A D7B8 A4B5 225A 1F29 FAA2 8239 D98F" /* .j׸¤µ"Z.)ú¢‚9Ù */
- $"071A F302 DA24 AE80 2AC0 D108 035D EA76" /* ..ó.Ú$®€*ÀÑ..]êv */
- $"2F7E 850F 9E87 6B19 B2F1 F1E5 F5B3 A5AF" /* /~….ž‡k.²ññåõ³¥¯ */
- $"35BB D867 8257 8A48 5E4F 6983 E22E 6DAD" /* 5»Øg‚WŠH^Oiƒâ.m­ */
- $"D361 1505 ECF2 3F3C DB84 1861 E5AB 6793" /* Óa..ìò?<Û„.aå«g“ */
- $"910D 8F56 6BB5 FD17 29DB 242A 6946 8022" /* ‘.Vkµý.)Û$*iF€" */
- $"7DAF 8120 02EB C840 3765 69EC BB8B F2FF" /* }¯ .ëÈ@7ei컋òÿ */
- $"6031 7BE4 EFC4 BECD 7BD7 CB0A 8B8C 75C2" /* `1{äïľÍ{×Ë‹Œu */
- $"E63A F4E4 B05B 1442 0CB1 BEBD E078 84F5" /* æ:ôä°[.B.±¾½àx„õ */
- $"3D95 24FA 952F 949B AD72 01B7 1CC7 4CA6" /* =•$ú•/”›­r.·.ÇL¦ */
- $"78C2 BA05 B757 517A 5CB1 A380 0C23 0680" /* xº.·WQz\±£€.#.€ */
- $"3113 0CBA 23B8 AA48 F832 B74F 997E 6E03" /* 1..º#¸ªHø2·O™~n. */
- $"D16C 577F 968F E9A4 73CA DA79 07B3 A5F1" /* ÑlW.–é¤sÊÚy.³¥ñ */
- $"2D20 C13D F821 62F9 41A0 A7AA 472A 368A" /* - Á=ø!bùA §ªG*6Š */
- $"28EE 7686 F7B4 D5CF 225E 004E 709F C4E8" /* (îv†÷´ÕÏ"^.NpŸÄè */
- $"FCBC B778 C976 A1E0 1968 1EF9 E998 2DC2" /* ü¼·xÉv¡à.h.ùé˜- */
- $"1693 C645 A4F5 787A 5B10 45C0 F010 8596" /* .“ÆE¤õxz[.EÀð.…– */
- $"A0F6 E8AA 1BAC C958 C0F6 101E 0C4D 2E61" /*  öèª.¬ÉXÀö...M.a */
- $"B76E 4019 58DD 3058 000C 2375 6EBC 6599" /* ·n@.XÝ0X..#un¼e™ */
- $"BEA3 9ADC 0002 F98F 24B3 B036 EA0D F2FD" /* ¾£šÜ..ù$³°6ê.òý */
- $"6823 E10A 59D7 5D0B F6C0 EFB2 7D9D A684" /* h#áÂY×].öÀï²}¦„ */
- $"3084 4AD6 92F2 BFB2 57CA 7294 FF2D 53C8" /* 0„JÖ’ò¿²WÊr”ÿ-SÈ */
- $"8D05 254E 2360 582F CE0C E209 240D FAB4" /* .%N#`X/Î.âÆ$.ú´ */
- $"C638 2103 7462 2AF1 5461 2036 09B4 294F" /* Æ8!.tb*ñTa 6Æ´)O */
- $"52A6 6553 F6B7 85F6 E77F A8B7 058C F201" /* R¦eSö·…öç.¨·.Œò. */
- $"19BA D75B 6612 0013 CFA6 F54F 8855 C000" /* .º×[f...ϦõOˆUÀ. */
- $"00BE 57DE C13B 77B0 AF81 F95D 8E88 7224" /* .¾WÞÁ;w°¯ù]Žˆr$ */
- $"002F C7BE 1D06 F540 58EF 1909 1D8F 037F" /* ./Ǿ..õ@Xï.Æ... */
- $"E973 290F 641E 8849 F996 EA66 D15C CA23" /* és).d.ˆIù–êfÑ\Ê# */
- $"C620 3090 94D8 F95F C58C 720B 7FFE 206C" /* Æ 0”Øù_ÅŒr..þ l */
- $"A3E0 EE49 AE89 4586 6617 FE87 4D7B D300" /* £àîI®‰E†f.þ‡M{Ó. */
- $"4CF6 E77F A882 E041 362F 710E AC03 D573" /* Löç.¨‚àA6/q.¬.Õs */
- $"69FF 7480 0018 484B 0D10 C800 0000 0C24" /* iÿt€..HK..È....$ */
- $"183F ADBF D900 0184 8481 E82C C758 1848" /* .?­¿Ù..„„è,ÇX.H */
- $"4840 6806 1212 B020 EA50 0818 484B F6E7" /* H@h...° êP..HKöç */
- $"7FA5 E774 6249 2F3D 5FF9 2FC0 0C24 1656" /* .¥çtbI/=_ù/À.$.V */
- $"1B91 8000 1846 D5F4 CA01 40C2 3F26 3D84" /* .‘€..FÕôÊ.@Â?&=„ */
- $"7B4A 811F 08D6 B47D 05C2 4402 D57B C1FC" /* {J..Ö´}.ÂD.Õ{Áü */
- $"7D32 E6FE 8125 F24E 514B 2820 7323 F96F" /* }2æþ%òNQK( s#ùo */
- $"B1F9 CDBD 94E4 C9BF 81D6 5A26 1C08 2131" /* ±ùͽ”äÉ¿ÖZ&..!1 */
- $"FF58 608E A4BB BEFD 703F C3EA B596 2AEA" /* ÿX`ޤ»¾ýp?Ãêµ–*ê */
- $"48B2 2319 2F7A B9BC A14D EAB4 49CF 89E9" /* H²#./z¹¼¡Mê´Iωé */
- $"D312 5979 1910 6519 C45E 4B88 F709 D65D" /* Ó.Yy..e.Ä^Kˆ÷ÆÖ] */
- $"BF0F 86DC C883 8469 9757 7FC7 FB91 A851" /* ¿.†Üȃ„i—W.Çû‘¨Q */
- $"7834 0232 03F5 F552 B022 E799 431E 3FE8" /* x4.2.õõR°"ç™C.?è */
- $"BE7C A37B AAE1 D04F 9795 EA98 CAB0 6816" /* ¾|£{ªáÐO—•ê˜Ê°h. */
- $"047F 244A 2BD3 E0CF B862 B172 B1B3 F027" /* ..$J+Óàϸb±r±³ð' */
- $"6505 A5AA 6AB2 5F8E B98F 85CB D487 2603" /* e.¥ªj²_޹…ËÔ‡&. */
- $"BDA4 4C6D 4B74 0A12 117F 6137 6A30 37CE" /* ½¤LmKtÂ...a7j07Î */
- $"0441 188C 63FC 46ED 5C9A B6A0 9012 6450" /* .A.ŒcüFí\š¶ .dP */
- $"A042 C4D3 8E69 8930 0797 25B3 B70D 5C62" /*  BÄÓŽi‰0.—%³·.\b */
- $"6A83 3964 5EF1 4A28 508D FF7F E847 17D0" /* jƒ9d^ñJ(Pÿ.èG.Ð */
- $"7C91 F4BC AA82 5462 99EF FF79 5A7A E45E" /* |‘ô¼ª‚Tb™ïÿyZzä^ */
- $"98FF 5B1E 90FE 7F80 9453 7AD1 4A63 8FFC" /* ˜ÿ[.þ.€”SzÑJcü */
- $"1B61 796C 4B90 7FE9 1959 752B 8579 95F8" /* .aylK.é.Yu+…y•ø */
- $"C5B9 7EC6 2D24 5185 1BCE 12D6 B418 B42C" /* Ź~Æ-$Q….Î.Ö´.´, */
- $"D40F 7AF7 657E 5184 9CAA 8834 B65C 4785" /* Ô.z÷e~Q„œªˆ4¶\G… */
- $"B934 7C3A 8000 0000 99F5 3F06 3790 6AF7" /* ¹4|:€...™õ?.7j÷ */
- $"0769 9D8E F19F 4FF3 EDE6 D059 B97C A1F0" /* .iŽñŸOóíæÐY¹|¡ð */
- $"0CE2 4FAF B846 8CCE 52E4 E898 D2E0 00A3" /* .âO¯¸FŒÎRäè˜Òà.£ */
- $"CB3D F2B1 E7F7 0C30 FF13 DB29 474C C00D" /* Ë=ò±ç÷.0ÿ.Û)GLÀ. */
- $"C6B7 6A2D 2F89 8E2F BDE7 F2BA C3DD 591B" /* Æ·j-/‰Ž/½çòºÃÝY. */
- $"CEDE C7DD 35BA 492C BB53 2AF6 7315 AC30" /* ÎÞÇÝ5ºI,»S*ös.¬0 */
- $"17D7 1C05 3AE4 4AB3 8D31 0DC9 7A9F 0A76" /* .×..:äJ³1.ÉzŸÂv */
- $"B4EE 95EE 6CB5 1C6A FE4F D27E 0966 CE51" /* ´î•îlµ.jþOÒ~ÆfÎQ */
- $"8607 E144 F4AD E999 5480 05FF 7FC2 C645" /* †.áDô­é™T€.ÿ.ÂÆE */
- $"D136 BB6E 89FA 9A2D F827 338F FEB9 B248" /* Ñ6»n‰úš-ø'3þ¹²H */
- $"23A6 377D 0E53 BBF3 D290 3AD8 F58B CE4C" /* #¦7}.S»óÒ:Øõ‹ÎL */
- $"24CA 8E49 76ED DA48 8856 904D C31F 305F" /* $ÊŽIvíÚHˆVMÃ.0_ */
- $"C441 7DAA 86D8 3FE1 5EA7 E20A CDBC 5F2A" /* ÄA}ª†Ø?á^§âÂͼ_* */
- $"35DC 107F DDE2 D88C 7B38 D700 4C54 9C81" /* 5Ü..ÝâØŒ{8×.LTœ */
- $"B8FD F39D 0F47 DE2B 6E17 7D4F E30F F60C" /* ¸ýó.GÞ+n.}Oã.ö. */
- $"0895 5694 3006 1211 EFEC D7F8 F743 3D43" /* .•V”0...ïì×ø÷C=C */
- $"6BA5 7C06 9025 9188 E369 0FC8 94CB F38E" /* k¥|.%‘ˆãi.È”ËóŽ */
- $"DF76 CA67 91C4 D786 F34F 1E56 332B 1404" /* ßvÊg‘Ä׆óO.V3+.. */
- $"B66B 2702 B13D 47B8 1FBD 38D7 A2DF 54EF" /* ¶k'.±=G¸.½8×¢ßTï */
- $"FD1C 00CC 5D05 5B28 3EBF 2FC7 7263 5880" /* ý..Ì].[(>¿/ÇrcX€ */
- $"0364 4A0B 982F 4A13 A55F 5D64 61D2 110C" /* .dJ.˜/J.¥_]daÒ.. */
- $"4319 318A 5BD6 94B7 DBA9 92F0 379B 0E87" /* C.1Š[Ö”·Û©’ð7›.‡ */
- $"4561 92A0 0000 0000 0000 12FE B897 0ABD" /* Ea’ .......þ¸—½ */
- $"B3C7 FEA8 AE43 B177 DA3F 2BA3 2D59 3358" /* ³Çþ¨®C±wÚ?+£-Y3X */
- $"9FAE 567F E53B 2877 9FFF 7FFF 7FFB 4B90" /* Ÿ®V.å;(wŸÿ.ÿ.ûK */
- $"C00D FEA3 7DF6 39C4 C825 2952 2C65 8FFF" /* À.þ£}ö9ÄÈ%)R,eÿ */
- $"7E91 DB49 1333 7DEC 6471 1E2E 394E A080" /* ~‘ÛI.3}ìdq..9N € */
- $"C1C9 0DD4 62C4 4FC9 E332 BC0D F9DD FEAB" /* ÁÉ.ÔbÄOÉã2¼.ùÝþ« */
- $"9D33 8271 2A01 8484 B009 6058 624E 2736" /* 3‚q*.„„°Æ`XbN'6 */
- $"529C A0F4 BCBB 846D 32FD 407C FA84 2D52" /* Rœ ô¼»„m2ý@|ú„-R */
- $"21DC 1623 210B 0410 4061 212D 0386 04FF" /* !Ü.#!...@a!-.†.ÿ */
- $"7F72 1DFF 6F83 6A31 2B6E 0A6B D1F1 9A43" /* .r.ÿoƒj1+nÂkÑñšC */
- $"F340 2C47 D413 DFAC FF76 46AC 4BDD 55F0" /* ó@,GÔ.߬ÿvF¬KÝUð */
- $"2F9A 3BC6 613E 2F69 F45C 08F3 3FCB F83F" /* /š;Æa>/iô\.ó?Ëø? */
- $"F7D8 DC38 0F99 4764 0309 0948 41C6 1212" /* ÷ØÜ8.™Gd.ÆÆHAÆ.. */
- $"293B 5EA3 BE56 F760 BAEF 61FF 43D4 2891" /* );^£¾V÷`ºïaÿCÔ(‘ */
- $"A380 672E FF7E 4B98 FBFB 1ACD 90F6 4A7E" /* £€g.ÿ~K˜ûû.ÍöJ~ */
- $"3B14 E9F4 B1B4 4120 E600 AF42 0056 B131" /* ;.éô±´A æ.¯B.V±1 */
- $"0310 EF4F EA97 E030 9090 A298 F514 CEFA" /* ..ïOê—à0¢˜õ.Îú */
- $"B200 0061 211A A495 FD76 5850 B8F7 1CF1" /* ²..a!.¤•ývXP¸÷.ñ */
- $"A979 F478 5BFF 7FFB E6D6 F6D8 03FF 7FFD" /* ©yôx[ÿ.ûæÖöØ.ÿ.ý */
- $"2A36 38D4 BA43 6280 D508 C4BD 735D 1C6F" /* *68ÔºCb€Õ.Ľs].o */
- $"2444 63E9 1C9A 969F 90A6 F34E D24D 94F2" /* $Dcé.š–Ÿ¦óNÒM”ò */
- $"1A09 F86A 2762 886F FBA0 96EA 1DC7 0364" /* .Æøj'bˆoû –ê.Ç.d */
- $"6192 A000 0000 0000 0000 0000 0061 BE9F" /* a’ ..........a¾Ÿ */
- $"2C25 5C25 4958 1428 AA60 5ABF 5551 6084" /* ,%\%IX.(ª`Z¿UQ`„ */
- $"D319 B739 1DC3 F92F 03A7 CF66 39CC 13BE" /* Ó.·9.Ãù/.§Ïf9Ì.¾ */
- $"100A 204E 9A06 CBD9 A8ED 9E4D CEED AE53" /* . Nš.ËÙ¨ížMÎí®S */
- $"023D B3BF AC07 F70E F7DD 2601 E2B4 B214" /* .=³¿¬.÷.÷Ý&.â´². */
- $"3B1D 74CD 0F60 7063 EFC5 24B8 3B0F DF21" /* ;.tÍ.`pcïÅ$¸;.ß! */
- $"2929 3755 A800 7D09 63D9 1548 5D89 6D22" /* ))7U¨.}ÆcÙ.H]‰m" */
- $"FAEF 37DC EB96 FF52 0018 EBDF 464C 8B34" /* úï7Üë–ÿR..ëßFL‹4 */
- $"DF85 2990 1CF1 7C84 CEDC D384 5003 D5A1" /* ß…).ñ|„ÎÜÓ„P.Õ¡ */
- $"2797 DBDC FDFB 0E8C 3703 470D 1FD5 B974" /* '—ÛÜýû.Œ7.G..Õ¹t */
- $"5A32 CF32 3D2A 0213 FDC8 8A0C B595 4840" /* Z2Ï2=*..ýÈŠ.µ•H@ */
- $"C240 6E40 D585 AF4C 004A F98F FC90 E5BB" /* Â@n@Õ…¯L.Jùüå» */
- $"D6AD 2A34 0A6E 1D4D 933D 2221 80B7 C8EF" /* Ö­*4Ân.M“="!€·Èï */
- $"7C61 2953 2991 F91A 61A3 B54E 56D2 77E1" /* |a)S)‘ù.a£µNVÒwá */
- $"1DB8 8B5F 5E9C 7D32 80A0 C23F BBE6 A2B2" /* .¸‹_^œ}2€ Â?»æ¢² */
- $"D49F C777 4BE6 FDA6 7B0F 2983 E19B 84FF" /* ÔŸÇwKæý¦{.)ƒá›„ÿ */
- $"4B7B 0DD6 A35E 60AD 632D D6D7 7030 0A9F" /* K{.Ö£^`­c-Ö×p0Ÿ */
- $"0FA2 0820 8451 9624 D0FF 1FB4 9B81 61CC" /* .¢. „Q–$Ðÿ.´›aÌ */
- $"591F 6D98 E1AF 16E4 AF42 1FE0 B7C7 30DF" /* Y.m˜á¯.ä¯B.à·Ç0ß */
- $"CFFC EC14 15A1 B07A 4E11 ED5F BDB3 FD2A" /* Ïüì..¡°zN.í_½³ý* */
- $"84B1 6901 4333 27BB 2E8C 3329 2064 A800" /* „±i.C3'».Œ3) d¨. */
- $"0001 2FDE 803E 817B C369 A30F FCF0 FF1D" /* ../Þ€>{Ãi£.üðÿ. */
- $"89A1 2FD7 FF71 B63D 19EC 98DE DFE2 D9B8" /* ‰¡/×ÿq¶=.ì˜ÞßâÙ¸ */
- $"9D39 1737 4722 2A89 D291 623B 279F BF0B" /* 9.7G"*‰Ò‘b;'Ÿ¿. */
- $"E8C0 8AF8 CBE4 0011 5D58 29AB 34B0 335C" /* èÀŠøËä..]X)«4°3\ */
- $"36B2 1383 D820 11B8 22DF 56E1 27EF 932D" /* 6².ƒØ .¸"ßVá'ï“- */
- $"30DE CC72 58E3 9BDD A88C 229A CBC8 A466" /* 0ÞÌrXã›Ý¨Œ"šËȤf */
- $"7C29 FDE8 E789 F28F 3258 A2DD 897B 1C6A" /* |)ýèç‰ò2X¢Ý‰{.j */
- $"C048 306A EEA7 3DF0 F8D4 BECC CDBD 9E43" /* ÀH0jî§=ðøÔ¾ÌͽžC */
- $"A29D 8052 478B 6470 79B7 B38A 5743 CAE7" /* ¢€RG‹dpy·³ŠWCÊç */
- $"0BD4 0F4A 23E1 4C85 39C9 DEB0 75AF 151E" /* .Ô.J#áL…9ÉÞ°u¯.. */
- $"45D5 1681 2BA4 74C9 13B5 746A E399 9467" /* EÕ.+¤tÉ.µtjã™”g */
- $"E6B9 D503 7F7C D57D 4D5F 7FC8 DD43 7D9B" /* æ¹Õ..|Õ}M_.ÈÝC}› */
- $"3CDC F9AD 167C 162B 4E6C 2110 DB2C DF34" /* <Üù­.|.+Nl!.Û,ß4 */
- $"AEED CCE4 05AC 4057 9829 B161 9CA0 8159" /* ®íÌä.¬@W˜)±aœ Y */
- $"A64F FD15 EC5A 4A51 CA6C FD10 9A25 4291" /* ¦Oý.ìZJQÊlý.š%B‘ */
- $"1E90 1FC2 3530 E0DB E4E6 232E CB64 AF95" /* ..Â50àÛäæ#.Ëd¯• */
- $"9494 656D D395 3D62 9EDA 2EC1 DB02 1FAA" /* ””emÓ•=bžÚ.ÁÛ..ª */
- $"6778 0FC0 C4A2 CCA8 EDC0 4DA8 F889 162F" /* gx.ÀĢ̨íÀM¨ø‰./ */
- $"03F9 A9C1 C635 1DAD 2E22 580B 0B2B 83E3" /* .ù©ÁÆ5.­."X..+ƒã */
- $"EC02 5552 3AA8 91BA 45AF 5439 4265 71F6" /* ì.UR:¨‘ºE¯T9Beqö */
- $"3E7A 4412 5DE5 1863 50E6 C0ED C470 3ED9" /* >zD.]å.cPæÀíÄp>Ù */
- $"0E3F 48BA 54C5 915E 03F0 D836 6429 2A67" /* .?HºTÅ‘^.ðØ6d)*g */
- $"B7FA 6AF9 069E 8E67 2848 B570 C3AC 7746" /* ·újù.žŽg(HµpìwF */
- $"EB48 0A2F 4BE4 8EB3 3F8F 791F 0646 DEDF" /* ëHÂ/K䎳?y..FÞß */
- $"316B EFDF 6FD8 C0B9 7319 CE94 8930 C6F6" /* 1kïßoØÀ¹s.Δ‰0Æö */
- $"6399 C4A9 79AD E967 4783 3F8D C538 3C15" /* c™Ä©y­égGƒ?Å8<. */
- $"E5B7 CE98 22B7 5333 A938 B26F 0E1E EF2E" /* å·Î˜"·S3©8²o..ï. */
- $"74B9 72EF 9D8A 80B7 FDC1 8334 A5F9 DCFB" /* t¹r·ýÁƒ4¥ùÜû */
- $"B891 BB38 373C 9BE8 59F4 6018 6E63 DA65" /* ¸‘»87<›èYô`.ncÚe */
- $"9B13 9DC8 28DB 3C15 0D2C 11FC 0E2D 7A0A" /* ›.È(Û<..,.ü.-z */
- $"F8FF 671F C3FF 7F8E 1210 C212 EA5A 5F0B" /* øÿg.Ãÿ.Ž..Â.êZ_. */
- $"9727 F770 25A5 236D 9789 75C7 4089 11DD" /* —'÷p%¥#m—‰uÇ@‰.Ý */
- $"E472 3865 B217 B946 CF22 5225 27DE 566D" /* är8e².¹FÏ"R%'ÞVm */
- $"6799 4F82 0D46 59F5 E466 F9E7 71C3 FA80" /* g™O‚.FYõäfùçqÃú€ */
- $"7826 E598 FF48 E181 6CA8 5A7E C354 0CAA" /* x&å˜ÿHál¨Z~ÃT.ª */
- $"B01C 9EC4 181F 849B 6A13 FB8D C477 70BD" /* °.žÄ..„›j.ûÄwp½ */
- $"F46B 278C 4467 B0CF 3E21 805E EF97 9696" /* ôk'ŒDg°Ï>!€^ï—–– */
- $"CBB9 E3F6 B62E DC26 001A 408F D7E2 07C3" /* ˹ãö¶.Ü&..@×â.à */
- $"C1A4 AD97 4235 8863 A088 1980 C505 6E1F" /* Á¤­—B5ˆc ˆ.€Å.n. */
- $"F392 0B24 B500 20DC 8295 5703 F9B9 FF70" /* ó’.$µ. Ü‚•W.ù¹ÿp */
- $"355C 9B8D BB49 898F 1AAB F65F 7D7E E28F" /* 5\›»I‰.«ö_}~â */
- $"4300 BDCC FB20 4F67 CA07 0CAE 3BAD AA36" /* C.½Ìû OgÊ..®;­ª6 */
- $"A4D8 3358 4176 1AD6 01FA 0450 0000 0042" /* ¤Ø3XAv.Ö.ú.P...B */
- $"7B49 E0E8 A7D8 4EA9 E1A5 597B DB80 BA6D" /* {Iàè§ØN©á¥Y{Û€ºm */
- $"8010 25EA 0A26 833F DE77 DBF7 78B9 564B" /* €.%êÂ&ƒ?ÞwÛ÷x¹VK */
- $"57B2 AF8C BC92 97D7 46A1 23C1 B595 A2EE" /* W²¯Œ¼’—×F¡#Áµ•¢î */
- $"F8A9 29FA 42C2 3557 6345 80B1 FCFD F322" /* ø©)úBÂ5WcE€±üýó" */
- $"E992 9262 A83F E43D B059 CB12 D425 FEF2" /* é’’b¨?ä=°YË.Ô%þò */
- $"9932 1BD8 C65C ED82 D05E E15C 5E9C 76B7" /* ™2.ØÆ\í‚Ð^á\^œv· */
- $"7C64 FCDB A247 D388 3CCB 86B5 C486 2261" /* |düÛ¢GÓˆ<ˆµÄ†"a */
- $"BFD1 7213 39C3 0D69 6AF0 2476 B711 7E91" /* ¿Ñr.9Ã.ijð$v·.~‘ */
- $"6B53 6A04 4F3C 2781 A090 3118 6C3F 49BA" /* kSj.O<' 1.l?Iº */
- $"B81A 3FEB D686 EFCE F487 8315 E33F 84DB" /* ¸.?ëÖ†ïÎô‡ƒ.ã?„Û */
- $"E2C9 F35F 28C5 10C4 FF7F FA4F E953 89FC" /* âÉó_(Å.Äÿ.úOéS‰ü */
- $"8B32 23C6 0D04 5E49 DADA F0FE BCA7 D2C9" /* ‹2#Æ..^IÚÚðþ¼§ÒÉ */
- $"5869 EAD4 F153 9BF5 A5EA 3298 CC8B 8721" /* XiêÔñS›õ¥ê2˜Ì‹‡! */
- $"F919 680B 3F8C 304A 2849 4970 41CF 0F60" /* ù.h.?Œ0J(IIpAÏ.` */
- $"76D9 5820 EF21 CD4A 205A 632F 7CC4 EFDF" /* vÙX ï!ÍJ Zc/|Äïß */
- $"33F3 CCA8 EDAF 405B 78E1 8F79 0F66 6573" /* 3ǫ́í¯@[xáy.fes */
- $"35A2 AD75 1E18 6018 AF23 7C9D A008 1A01" /* 5¢­u..`.¯#| ... */
- $"C5FE 69AA 2C8E D97E 244D D075 F213 0CC6" /* Åþiª,ŽÙ~$MÐuò..Æ */
- $"738F 4395 BBC0 5CB6 3ADC 3DA8 ACB8 E018" /* sC•»À\¶:Ü=¨¬¸à. */
- $"BA5B 13DB 0F6A CB18 DEAC 9749 F5B5 361D" /* º[.Û.jË.Þ¬—Iõµ6. */
- $"CF3A C107 9606 179F F4C7 F3DE CB0B 1F53" /* Ï:Á.–..ŸôÇóÞË..S */
- $"F27E 5D3C 11AB 66B4 8037 0644 AE98 19BF" /* ò~]<.«f´€7.D®˜.¿ */
- $"D564 973A 0CF2 C96F 56D4 5CB8 666F C68C" /* Õd—:.òÉoVÔ\¸foÆŒ */
- $"1E73 E515 8B33 75D2 D3B4 B3A3 8CDE DE0C" /* .så.‹3uÒÓ´³£ŒÞÞ. */
- $"DA37 A3DF 44D2 B57E 2DB2 E891 D36F CC23" /* Ú7£ßDÒµ~-²è‘ÓoÌ# */
- $"ADE8 45BC BB30 78D7 77BD D4A8 087F C83F" /* ­èE¼»0x×w½Ô¨..È? */
- $"E49A 6873 FAC4 C12B 0056 5E18 C3CB C2E9" /* äšhsúÄÁ+.V^.ÃËÂé */
- $"DCAE F0E8 A75F 18DD B8DD 1DCD B0F5 3A1C" /* Ü®ðè§_.ݸÝ.Ͱõ:. */
- $"3816 51A8 0D93 00D0 6FF6 8F07 E4BE EDF9" /* 8.Q¨.“.Ðoö.ä¾íù */
- $"BF0E 6CAA 5384 5DF0 DF12 4CF4 E3B3 5D6C" /* ¿.lªS„]ðß.Lôã³]l */
- $"602A B6F1 C0E0 E520 B0D6 71FB 7996 4930" /* `*¶ñÀàå °Öqûy–I0 */
- $"23DD 3601 3653 C40D 1A64 DC2B D5C2 01C9" /* #Ý6.6SÄ..dÜ+ÕÂ.É */
- $"5002 6BBE 7338 81EE F87D 7687 0FE6 7CF9" /* P.k¾s8îø}v‡.æ|ù */
- $"BAB6 5B35 1A25 421C 5BBA 4D82 4E1F B1D4" /* º¶[5.%B.[ºM‚N.±Ô */
- $"1907 FF78 F534 4A16 7BB6 B598 51F6 E4D3" /* ..ÿxõ4J.{¶µ˜QöäÓ */
- $"A04B 1198 B926 CFAE FC03 22E3 8360 E696" /*  K.˜¹&Ï®ü."ãƒ`æ– */
- $"F546 62F9 7178 F327 E245 4520 8D17 41C4" /* õFbùqxó'âEE .AÄ */
- $"9EC6 EF8D 0924 9416 7901 CE87 5EBB 286D" /* žÆïÆ$”.y.·^»(m */
- $"53BF 09FA 41F6 5FBA 8F4C 79A8 75BA 277A" /* S¿ÆúAö_ºLy¨uº'z */
- $"7D42 642B 38EE 9A49 DEDB F1B3 80D0 E5D0" /* }Bd+8îšIÞÛñ³€ÐåÐ */
- $"2980 F797 E7D0 F90D 4B2F AFDD 4A69 3389" /* )€÷—çÐù.K/¯ÝJi3‰ */
- $"1418 EBD0 6DF0 E38D 6E2F D546 C1A8 C8DD" /* ..ëÐmðãn/ÕFÁ¨ÈÝ */
- $"8977 E053 9C26 053A CF69 97F9 7FB4 9000" /* ‰wàSœ&.:Ïi—ù.´. */
- $"0000 0115 0E67 B64C 0015 DD82 643D 6476" /* .....g¶L..Ý‚d=dv */
- $"ED28 6324 AD72 8124 1AF6 FB1B 21C9 0605" /* í(c$­r$.öû.!É.. */
- $"FAE6 04A6 31BF 6D67 FF7B B889 831A 4FFD" /* úæ.¦1¿mgÿ{¸‰ƒ.Oý */
- $"6BF5 F098 23AB A490 39F7 6AFC 3832 E2E1" /* kõð˜#«¤9÷jü82âá */
- $"11B2 ADB0 ECCA 83DE B4FF 3685 5106 75DE" /* .²­°ìʃ޴ÿ6…Q.uÞ */
- $"3047 28A0 EDBE AD29 17CD DA62 698B CE64" /* 0G( í¾­).ÍÚbi‹Îd */
- $"5999 2B8E BB7D C74F F009 A25D B2B5 BDD9" /* Y™+Ž»}ÇOðÆ¢]²µ½Ù */
- $"B852 BFFE 0B74 9C05 22D7 B0A3 2139 0979" /* ¸R¿þ.tœ."×°£!9Æy */
- $"5C29 BAE8 43DA F9E5 5383 AFD2 14EC 64AA" /* \)ºèCÚùåSƒ¯Ò.ìdª */
- $"442C CE71 74ED 5C27 4331 9374 AC77 47EE" /* D,Îqtí\'C1“t¬wGî */
- $"31AC 4C74 97BC 753C D5DC 3D8B F7D2 C612" /* 1¬Lt—¼u<ÕÜ=‹÷ÒÆ. */
- $"2399 F431 07A1 76CA DAE6 772B 309A C800" /* #™ô1.¡vÊÚæw+0šÈ. */
- $"9F2F D6DF A44C 48EB 853E 4140 A123 BCA3" /* Ÿ/ÖߤLHë…>A@¡#¼£ */
- $"D096 00DA 0822 DFB3 6887 B31F A18F 59BE" /* Ж.Ú."ß³h‡³.¡Y¾ */
- $"6B25 B5CF CFA3 8806 85B7 ED84 B20B CDA2" /* k%µÏÏ£ˆ.…·í„².Í¢ */
- $"A0C8 404B 3FFF 7FF3 3816 5BF0 A16B 85D0" /*  È@K?ÿ.ó8.[ð¡k…Ð */
- $"B87F E4BB 21F9 A3BB 9103 2944 434A 5789" /* ¸.ä»!ù£»‘.)DCJW‰ */
- $"E3EC B1E3 6F3E 154A 37E4 ACA6 4B02 6C5B" /* ãì±ão>.J7䬦K.l[ */
- $"D23A D4D4 83CE F291 CD7F 114F 5935 8EE0" /* Ò:ÔÔƒÎò‘Í..OY5Žà */
- $"17EA F0B3 1D93 BC5F 2CF8 511C E99F 21D8" /* .êð³.“¼_,øQ.éŸ!Ø */
- $"E286 EB17 6FC2 C34B 1110 6398 03BF CB08" /* â†ë.oÂÃK..c˜.¿Ë. */
- $"0018 4848 E24D 90A5 63F9 B1F8 6E20 EF6E" /* ..HHâM¥cù±øn ïn */
- $"25D5 858B 0AE4 2235 581B D4DA E01C B006" /* %Õ…‹Âä"5X.ÔÚà.°. */
- $"E5EB DE78 855B 19E7 4D80 DAC2 1E8F CB2B" /* åëÞx…[.çM€ÚÂ.Ë+ */
- $"0EC8 3FFF 7759 B569 0861 20CC 1D71 2121" /* .È?ÿwYµi.a Ì.q!! */
- $"71A7 FA20 B34B EAB3 4260 A827 6E91 2B3C" /* q§ú ³Kê³B`¨'n‘+< */
- $"5479 449A 3161 D24E 8489 C00A 18A6 3FEC" /* TyDš1aÒN„‰ÀÂ.¦?ì */
- $"61F2 4C86 23C1 85DB 6ECA 221D BCC2 C25F" /* aòL†#Á…ÛnÊ".¼ÂÂ_ */
- $"EFFF 7891 F475 0E20 DC0A 8F85 8208 4541" /* ïÿx‘ôu. ÜÂ…‚.EA */
- $"579B 5EE2 24C4 5C60 39B7 D9F1 ECFD 0F0C" /* W›^â$Ä\`9·Ùñìý.. */
- $"3719 72A8 A543 8BF5 94BF BF6C E6F7 E45A" /* 7.r¨¥C‹õ”¿¿læ÷äZ */
- $"C5CF 1FD7 32F5 2D70 041E 3641 2C46 E23D" /* ÅÏ.×2õ-p..6A,Fâ= */
- $"E072 6889 A892 A27F 44A8 564A 74A3 B421" /* àrh‰¨’¢.D¨VJt£´! */
- $"E1CC A0F3 50E2 2711 6919 76BE D84B D2FE" /* áÌ óPâ'.i.v¾ØKÒþ */
- $"AAED 2D64 7C8F 4C55 7FFF 7EFC 2CBF 05DE" /* ªí-d|LU.ÿ~ü,¿.Þ */
- $"25B2 001C 00EC 6D17 ED17 E559 9DFA F731" /* %²...ìm.í.åYú÷1 */
- $"B21A 7394 8B35 5948 BA4F 5858 020F FF7C" /* ².s”‹5YHºOXX..ÿ| */
- $"C89D 1CFA F89B 9F9C 841F 19EF D626 E6DE" /* È.úø›Ÿœ„..ïÖ&æÞ */
- $"DCC3 3148 38A0 C32F 898F BEC3 0AF3 318C" /* ÜÃ1H8 Ã/‰¾ÃÂó1Œ */
- $"5E09 119B 43C8 9FE6 73B2 F4B9 9789 4BFC" /* ^Æ.›CÈŸæs²ô¹—‰Kü */
- $"99A2 FF7F FF7A 4FD0 8C64 F459 410C 013C" /* ™¢ÿ.ÿzOÐŒdôYA..< */
- $"1C6C 85B5 1C8F D078 995D 714E 1C60 3090" /* .l…µ.Ðx™]qN.`0 */
- $"9058 77C4 BB80 5F57 1871 CA72 B2FD 0016" /* XwÄ»€_W.qÊr²ý.. */
- $"BAA7 F84F F4E9 ACDF F766 8CB4 475D 2F0B" /* º§øOôé¬ß÷fŒ´G]/. */
- $"37BC 18C8 6162 79C2 BDD7 8753 204B A536" /* 7¼.Èaby½ׇS K¥6 */
- $"9CBE 4972 316A BCB1 9442 4238 B88F 2F48" /* œ¾Ir1j¼±”BB8¸/H */
- $"7A45 5CD1 A306 3A23 5A78 354F CDB6 C0A5" /* zE\Ñ£.:#Zx5OͶÀ¥ */
- $"2A5C 19DA 0B0C CD84 8D85 D2B8 1DC9 059C" /* *\.Ú..Í„…Ò¸.É.œ */
- $"A8C4 8118 4848 9372 9372 566C 21E5 2665" /* ¨Ä.HH“r“rVl!å&e */
- $"D16C 6601 48A8 35CE 7FFF 7F19 B54E 7F04" /* Ñlf.H¨5Î.ÿ..µN.. */
- $"10EC 1AA3 13FF 4588 9722 A7AA B011 863C" /* .ì.£.ÿEˆ—"§ª°.†< */
- $"E4B1 717B 7C2D 21E6 267B 4B48 E790 FF76" /* ä±q{|-!æ&{KHçÿv */
- $"40CC F425 41CB 289F 809D 8170 A529 2EDA" /* @Ìô%AË(Ÿ€p¥).Ú */
- $"A105 B3AF FB44 7951 B87A 0091 5B53 5979" /* ¡.³¯ûDyQ¸z.‘[SYy */
- $"CDC6 5976 6393 34F2 21FF 7FFF 7FFF 7D43" /* ÍÆYvc“4ò!ÿ.ÿ.ÿ}C */
- $"4F4B C77F 73C7 0454 BE9C BE9C 282E 440E" /* OKÇ.sÇ.T¾œ¾œ(.D. */
- $"0608 A380 6121 2103 DBD2 250B 5D57 9159" /* ..£€a!!.ÛÒ%.]W‘Y */
- $"B69A 28CF E66A 154F F84F F4E9 99ED 48C4" /* ¶š(Ïæj.OøOôé™íHÄ */
- $"CA7E BE76 FC67 A7CD DC26 1C00 0184 8463" /* Ê~¾vüg§ÍÜ&...„„c */
- $"69A8 C0A9 127C 5830 CC3A 380A C742 E4DE" /* i¨À©.|X0Ì:8ÂÇBäÞ */
- $"06F5 7999 556D FD9F 268B 895F FF4B 7BB9" /* .õy™UmýŸ&‹‰_ÿK{¹ */
- $"C201 52B7 B483 0906 65EC 1848 4750 6F27" /* Â.R·´ƒÆ.eì.HGPo' */
- $"C86C 1F27 9108 6253 0416 4CD3 30E4 7F77" /* Èl.'‘.bS..LÓ0ä.w */
- $"0705 8420 83B6 BCB6 29DE B71E 8DC5 851A" /* ..„ ƒ¶¼¶)Þ·.Å…. */
- $"ABB0 83D8 F2E2 5113 55D2 AAF6 B3AB 7679" /* «°ƒØòâQ.UÒªö³«vy */
- $"49FE A1F8 6F30 0EC0 7D91 534C C78C DC5D" /* Iþ¡øo0.À}‘SLÇŒÜ] */
- $"5A42 CA06 37D8 E0ED 27FA 3E31 C849 D2BE" /* ZBÊ.7Øàí'ú>1ÈIÒ¾ */
- $"847C 0CCF 676F ACFE 91A3 0F62 B711 1897" /* „|.Ïgo¬þ‘£.b·..— */
- $"9DC3 8E37 3AF8 907E 0B69 1577 2856 AA36" /* ÃŽ7:ø~.i.w(Vª6 */
- $"FAC0 D56C 6686 0443 CA96 FDCD 051B 23A7" /* úÀÕlf†.CÊ–ýÍ..#§ */
- $"7DAC 8229 C5FC F840 103A 6407 49F7 6B32" /* }¬‚)Åüø@.:d.I÷k2 */
- $"254F 2B32 7FC1 F460 D5C0 5EE1 3046 612A" /* %O+2.Áô`ÕÀ^á0Fa* */
- $"1BC1 C143 7B76 B9EF ECCB 5EE9 8F0C 3F71" /* .ÁÁC{v¹ïìË^é.?q */
- $"E805 8B9B 17B7 9ECE C237 AF5C 0062 E61E" /* è.‹›.·žÎÂ7¯\.bæ. */
- $"DF6C C1F7 904E 4379 2A9C 92FC 1B04 00A8" /* ßlÁ÷NCy*œ’ü...¨ */
- $"F9D5 DB1B C4C6 9485 ABC2 1199 CCF2 0A47" /* ùÕÛ.ÄÆ”…«Â.™ÌòÂG */
- $"9693 C097 7AD0 449A FC53 DEC5 6EE8 6BF7" /* –“À—zÐDšüSÞÅnèk÷ */
- $"0D7D 4ED8 3426 DA7E ECF9 57ED 9252 9A6A" /* .}NØ4&Ú~ìùWí’Ršj */
- $"2B94 2614 1B6E A495 8261 4D5E DAEF 03FA" /* +”&..n¤•‚aM^Úï.ú */
- $"8A63 9496 E8AB A1A6 5B5C B03E E73E 2889" /* Šc”–è«¡¦[\°>ç>(‰ */
- $"D257 6C28 080A 68DC 226C 950F F55B E7CC" /* ÒWl(.ÂhÜ"l•.õ[çÌ */
- $"95AD FDA7 43EA 7489 A545 C0FC E9B0 2A25" /* •­ý§Cêt‰¥EÀüé°*% */
- $"719C EE06 9E5A 8FC0 D3B0 0C81 1EB0 C8C6" /* qœî.žZÀÓ°..°ÈÆ */
- $"25BD B383 33BD B80D D9A9 48F3 7539 D7D5" /* %½³ƒ3½¸.Ù©Hóu9×Õ */
- $"8021 5EBA 94A7 83A3 69FE 8179 9106 BC56" /* €!^º”§ƒ£iþy‘.¼V */
- $"14A4 427B 8C09 BACB 2FC9 B8F3 CAFA E51C" /* .¤B{ŒÆºË/ɸóÊúå. */
- $"9C07 9A69 033C 6159 163E 6ED8 259D 7AAB" /* œ.ši.<aY.>nØ%z« */
- $"D316 475C F6C7 BD0E 7972 4C59 DF3A D5B4" /* Ó.G\öǽ.yrLYß:Õ´ */
- $"44ED 7D01 B0FB 34D4 4C9C BC2D B8A6 5B65" /* Dí}.°û4ÔLœ¼-¸¦[e */
- $"134F 0C96 5CA1 21CC A249 F17D 4660 9835" /* .O.–\¡!Ì¢Iñ}F`˜5 */
- $"957C 7392 53A9 DE42 E650 604B 10E2 FF12" /* •|s’S©ÞBæP`K.âÿ. */
- $"B47A 044A 524A B8D3 60B5 A258 CEAB 55E8" /* ´z.JRJ¸Ó`µ¢XΫUè */
- $"5219 EC3E A9F6 0813 A2B4 930C EDE4 3BBE" /* R.ì>©ö..¢´“.íä;¾ */
- $"C0E3 7F93 1A3F 38EB 2DE3 492D A3BD FD00" /* Àã.“.?8ë-ãI-£½ý. */
- $"811C 530E 2FB8 9D68 2466 D288 EC29 9094" /* .S./¸h$fÒˆì)” */
- $"A3C7 2D32 0A25 BA73 2023 08CA C360 2C72" /* £Ç-2Â%ºs #.ÊÃ`,r */
- $"8BA9 516A 7081 F2FF 1E84 E1C2 F841 77CE" /* ‹©Qjpòÿ.„áÂøAwÎ */
- $"ABDF 6476 30A4 3018 F7F4 F3EE 1A5E 5DF0" /* «ßdv0¤0.÷ôóî.^]ð */
- $"CAAA AA77 C90D 52C4 6AA9 5755 33B9 1814" /* ʪªwÉ.RÄj©WU3¹.. */
- $"3528 E205 C379 648A E627 A23E D5DB 1CAE" /* 5(â.ÃydŠæ'¢>ÕÛ.® */
- $"4868 B7D4 F381 2534 1F48 2BCC 5211 3B0F" /* Hh·Ôó%4.H+ÌR.;. */
- $"9692 B002 4CFB 1F83 3628 D1EB 5416 0648" /* –’°.Lû.ƒ6(ÑëT..H */
- $"F0F0 B0F8 C7C7 6E92 8C54 6859 791B 7890" /* ðð°øÇÇn’ŒThYy.x */
- $"EBA3 BC74 5F3F C4AD 7C9D 6954 2D0C 15BF" /* 룼t_?Ä­|iT-..¿ */
- $"F699 82A6 4170 D2F1 02A5 7EF3 6061 C9CF" /* ö™‚¦ApÒñ.¥~ó`aÉÏ */
- $"C370 E129 F805 8CC8 C670 CBDC 2D44 D349" /* Ãpá)ø.ŒÈÆpËÜ-DÓI */
- $"F3E5 C5F9 357E 3DF2 CDF3 DC8A 1F13 5B2D" /* óåÅù5~=òÍóÜŠ..[- */
- $"C544 448D 1038 8293 4EEA 75A4 0738 7D9F" /* ÅDD.8‚“Nêu¤.8}Ÿ */
- $"C002 3D68 26D8 7B06 FB10 CCDF C4F3 5364" /* À.=h&Ø{.û.ÌßÄóSd */
- $"2342 154B F8FB 01ED 8893 9160 A3A0 B81D" /* #B.Køû.툓‘`£ ¸. */
- $"47A0 6C82 1CBA FAED 931D E025 BDFF 1535" /* G l‚.ºúí“.à%½ÿ.5 */
- $"CADF 68C5 41FD 3896 1AC9 F979 A885 F5AE" /* ÊßhÅAý8–.Éùy¨…õ® */
- $"EFBE C674 ED92 5FE9 E9AF FF52 D573 A6DD" /* ï¾Ætí’_éé¯ÿRÕs¦Ý */
- $"631B 27E4 62CB B76E 7020 EC65 75E2 DB6F" /* c.'äbË·np ìeuâÛo */
- $"0E10 980A 0EA3 2287 4CF8 D402 52B8 1491" /* ..˜Â.£"‡LøÔ.R¸.‘ */
- $"21C9 BC2B 48BC CBD4 464A C539 6CD5 28F1" /* !ɼ+H¼ËÔFJÅ9lÕ(ñ */
- $"CAE4 CA43 9CB8 B181 BF06 522B 4D19 8295" /* ÊäÊCœ¸±¿.R+M.‚• */
- $"05C8 D7CD 8CFA D3E7 7BC9 630C DCDD 7C7E" /* .È×ÍŒúÓç{Éc.ÜÝ|~ */
- $"E4C6 D7DC 5E38 67CC 5934 9E8D 9552 B837" /* äÆ×Ü^8gÌY4ž•R¸7 */
- $"53AE 6D39 FAB1 2EB6 886C 1855 26ED AD08" /* S®m9ú±.¶ˆl.U&í­. */
- $"1EBE 9570 EA2F DFFF 06F4 ABF3 4534 2831" /* .¾•pê/ßÿ.ô«óE4(1 */
- $"1AE2 0A99 2956 2A90 C2A4 58AC E49E F047" /* .â™)V*¤X¬äžðG */
- $"A9BA C394 E8F4 6427 7966 A79C 4269 9ADD" /* ©ºÃ”èôd'yf§œBišÝ */
- $"AD1D 1A7E 375C D3FB 8C25 0B6B 0460 5EB9" /* ­..~7\ÓûŒ%.k.`^¹ */
- $"416C AE82 DFC3 09DA 1F69 8796 6897 8CD0" /* Al®‚ßÃÆÚ.i‡–h—ŒÐ */
- $"3E1B FF7D 9AE9 7F6D 4E84 967C 674F CA41" /* >.ÿ}šé.mN„–|gOÊA */
- $"44C1 0575 93A9 2599 66D0 AB7B 6260 D32C" /* DÁ.u“©%™fЫ{b`Ó, */
- $"94AF 7FC8 82FD F692 92FE B6ED A660 750F" /* ”¯.È‚ýö’’þ¶í¦`u. */
- $"80A2 A8AA E6F6 7B9F E894 ED71 D223 6F4B" /* €¢¨ªæö{Ÿè”íqÒ#oK */
- $"A203 F64C 7560 DBB1 6F9E EE9F 2945 C994" /* ¢.öLu`Û±ožîŸ)EÉ” */
- $"BA00 D3D1 6414 A300 4296 670B 2350 CDD1" /* º.ÓÑd.£.B–g.#PÍÑ */
- $"DF61 29E8 EC17 87B6 BC62 B6BD 5F31 13B2" /* ßa)èì.‡¶¼b¶½_1.² */
- $"48A2 F723 53C7 6955 969B ED83 6A9B 1B06" /* H¢÷#SÇiU–›íƒj›.. */
- $"C7D0 2584 430B 8C52 D00A 736B D6FB AEDB" /* ÇÐ%„C.ŒRÐÂskÖû®Û */
- $"2BA1 5095 759B 0AFF 5138 58EF 3DC2 B14D" /* +¡P•u›ÂÿQ8Xï=±M */
- $"3B7D 62D0 DE12 CFEF 17A3 32C4 C79A C2DA" /* ;}bÐÞ.Ïï.£2ÄÇšÂÚ */
- $"6BA1 6478 B1D3 2278 3787 6C30 08FD 6095" /* k¡dx±Ó"x7‡l0.ý`• */
- $"FF65 1DF4 7606 34C3 B4EE E609 A3BF 7085" /* ÿe.ôv.4Ã´îæÆ£¿p… */
- $"8B3B 2C80 D860 6043 10A4 24B1 2D80 880D" /* ‹;,€Ø``C.¤$±-€ˆ. */
- $"671A 9A76 E1D4 2304 B4E0 9E47 129D 6316" /* g.šváÔ#.´àžG.c. */
- $"33DF C88C 3BB6 5232 475C D19D FA9B 3303" /* 3ßÈŒ;¶R2G\Ñú›3. */
- $"2956 D8B1 08A5 2735 CD4D F130 C700 DA0D" /* )Vر.¥'5ÍMñ0Ç.Ú. */
- $"7BAE 21FA FB1B 35A5 957E 0211 955B 25D0" /* {®!úû.5¥•~..•[%Ð */
- $"A3DD B72F 5BCD 8792 418E BCB6 C727 DD0F" /* £Ý·/[͇’A޼¶Ç'Ý. */
- $"2D42 F031 2A73 C1F9 7964 B937 1E77 A757" /* -Bð1*sÁùyd¹7.w§W */
- $"D158 CB02 80D3 C310 E1C5 709C 5C69 7F04" /* ÑXË.€ÓÃ.áÅpœ\i.. */
- $"4476 F017 3FF2 B891 0160 D681 AEBC F8C9" /* Dvð.?ò¸‘.`Ö®¼øÉ */
- $"8F46 7922 4414 5CEE 0CA8 417B 33BB 5926" /* Fy"D.\î.¨A{3»Y& */
- $"B7A6 7094 6363 C5F2 9AD7 1751 2456 3B83" /* ·¦p”ccÅòš×.Q$V;ƒ */
- $"9BB0 0ECD 1420 6141 A097 DBF4 802A 2377" /* ›°.Í. aA —Ûô€*#w */
- $"CDAC EFE9 4A16 4B3C 5058 A5DC 1C40 169E" /* ͬïéJ.K<PX¥Ü.@.ž */
- $"3999 F0C2 C418 2E8F 0951 664A 7082 F49F" /* 9™ðÂÄ..ÆQfJp‚ôŸ */
- $"E576 B2B1 5918 E3EE 9B97 1686 6499 A572" /* åv²±Y.ãî›—.†d™¥r */
- $"B1F6 2F39 A798 6292 DE22 007B 60AD 1D94" /* ±ö/9§˜b’Þ".{`­.” */
- $"31BA 068D F15A 06DB 2654 6B52 F692 3C3A" /* 1º.ñZ.Û&TkRö’<: */
- $"0DA8 A74B 30F6 3852 76F0 A897 9086 FBD5" /* .¨§K0ö8Rv𨗆ûÕ */
- $"1C78 047E 7BF2 08EE 7B45 85C5 6ED5 AA43" /* .x.~{ò.î{E…ÅnÕªC */
- $"F423 8A4E 4111 C68E 172E DD87 AF9E BF19" /* ô#ŠNA.ÆŽ..݇¯ž¿. */
- $"D4D2 020C 6FD5 EE3F F0E8 289E 4E6C 0871" /* ÔÒ..oÕî?ðè(žNl.q */
- $"1187 D3F1 E458 94F5 4519 BF3C D239 D86C" /* .‡ÓñäX”õE.¿<Ò9Øl */
- $"17F1 8916 4206 2346 ACD8 1F08 9A44 0AB3" /* .ñ‰.B.#F¬Ø..šD³ */
- $"CEE6 441D 78D5 2909 4CEA 46F7 D6C6 D21A" /* ÎæD.xÕ)ÆLêF÷ÖÆÒ. */
- $"6D41 BB64 ADFF 6252 5A80 3556 C459 2845" /* mA»d­ÿbRZ€5VÄY(E */
- $"C05D C2C5 1F69 4087 0380 C0FF 61AA D5D1" /* À]ÂÅ.i@‡.€ÀÿaªÕÑ */
- $"E5C2 5FC0 CEF4 2D59 B4A3 6BA8 343E 184B" /* åÂ_ÀÎô-Y´£k¨4>.K */
- $"89CE 81FD AC96 C691 FDE5 F993 B9CB 6302" /* ‰Îý¬–Æ‘ýåù“¹Ëc. */
- $"B8EE 86B4 A2F7 19EA DAFD D511 B59F BBD2" /* ¸î†´¢÷.êÚýÕ.µŸ»Ò */
- $"5D4E F6A3 BC58 51D5 273F 2E2E 2B6A 2755" /* ]Nö£¼XQÕ'?..+j'U */
- $"38A3 CA29 BFAB D31D CD53 B29C 7418 40DB" /* 8£Ê)¿«Ó.ÍS²œt.@Û */
- $"FD56 1BF6 9350 5411 CF5C 8D26 B1FA 754F" /* ýV.ö“PT.Ï\&±úuO */
- $"E584 8277 6221 6866 257C 9FC9 65A5 6D93" /* å„‚wb!hf%|ŸÉe¥m“ */
- $"C524 B971 3F1D 34A0 BBF4 6B83 9722 CFAD" /* Å$¹q?.4 »ôkƒ—"Ï­ */
- $"8296 103F 53BB 1B22 8A84 2FAC 94DE 4994" /* ‚–.?S»."Š„/¬”ÞI” */
- $"2D31 56A5 DBCD B661 81D7 B360 4958 8FF5" /* -1V¥ÛͶa׳`IXõ */
- $"EB02 25A9 6386 8241 D936 A3CB AA88 9936" /* ë.%©c†‚AÙ6£Ëªˆ™6 */
- $"1698 4F59 765B 34EA 3741 D2D3 2DAC 854D" /* .˜OYv[4ê7AÒÓ-¬…M */
- $"366B C9A0 15F8 D2E6 7CCF 99EF A794 460C" /* 6kÉ .øÒæ|ϙ倫F. */
- $"934E C88B 2BF5 91F7 7BD1 3DC9 6ED3 91FE" /* “NÈ‹+õ‘÷{Ñ=ÉnÓ‘þ */
- $"E63B EDCC 3D4A CC1B AE5D 88D0 B241 20D1" /* æ;íÌ=JÌ.®]ˆÐ²A Ñ */
- $"AB6C 9FE2 E494 395E 8E3C 0EB0 1796 58CC" /* «lŸâä”9^Ž<.°.–XÌ */
- $"9791 D931 DB33 473E 003E 10CD B736 7295" /* —‘Ù1Û3G>.>.Í·6r• */
- $"DD81 B481 9A0A ED27 3C1E 6298 FD0D BDE0" /* Ý´šÂí'<.b˜ý.½à */
- $"11D6 8A21 79C1 DBB7 FEDC 6E48 8080 5ADB" /* .ÖŠ!yÁÛ·þÜnH€€ZÛ */
- $"E61D 9E0E E6A3 6D38 A028 4016 464D F534" /* æ.ž.æ£m8 (@.FMõ4 */
- $"D764 3AD7 55DF 3CAB 7B3D 12F5 9A8D DDCF" /* ×d:×Uß<«{=.õšÝÏ */
- $"6CCD 0387 C982 0FE9 D431 0FE3 E064 1700" /* lÍ.‡É‚.éÔ1.ãàd.. */
- $"1AAD F49E D6DE A939 8010 C91B 605B 4E0A" /* .­ôžÖÞ©9€.É.`[NÂ */
- $"FCBE ADE9 C17A EC1F 3990 9EB2 E6BF 92AA" /* ü¾­éÁzì.9ž²æ¿’ª */
- $"951C D27F A984 10A9 22DC 996E FF6E 12AE" /* •.Ò.©„.©"Ü™nÿn.® */
- $"DC03 5AB3 2CA0 8291 4174 C69E AE28 DBA8" /* Ü.Z³, ‚‘AtÆž®(Û¨ */
- $"38A8 FF12 67D3 F8A3 00D6 2A2E A564 CEFA" /* 8¨ÿ.gÓø£.Ö*.¥dÎú */
- $"0F00 4B44 62A7 CA9F F072 2821 DD3C 6A34" /* ..KDb§ÊŸðr(!Ý<j4 */
- $"926C 8F3C 1548 D31A 021F 2604 252D A929" /* ’l<.HÓ...&.%-©) */
- $"172B 8212 174F 2D2D CC7D DA15 F9A9 AD7E" /* .+‚..O--Ì}Ú.ù©­~ */
- $"59D3 7885 9215 C77B 6583 4D8F 3308 149C" /* YÓx…’.Ç{eƒM3..œ */
- $"270A 4508 21C9 A05B CDE9 BEF1 C18A 4B74" /* 'ÂE.!É [Íé¾ñÁŠKt */
- $"F07B 0DFE 007B E5AF D9AA CED7 8661 34C7" /* ð{.þ.{å¯ÙªÎ׆a4Ç */
- $"AA26 21AC D09C 6BAA EABB A7C4 486E 40A5" /* ª&!¬Ðœkªê»§ÄHn@¥ */
- $"C791 976A 1EC3 534F 84EC E6E9 7363 FF08" /* Ç‘—j.ÃSO„ìæéscÿ. */
- $"5B20 0E29 000C 5E8F 3339 6210 65CC FD34" /* [ .)..^39b.eÌý4 */
- $"76EB F1B2 76C6 5FDC C1A8 B0F5 53EE 103C" /* vëñ²vÆ_ÜÁ¨°õSî.< */
- $"50B0 650F 8459 9777 E890 E28A BB84 56B9" /* P°e.„Y—wè⊻„V¹ */
- $"0522 90F9 5B81 C982 979E E507 A4BC 26C3" /* ."ù[É‚—žå.¤¼&à */
- $"E356 F2A9 C0D1 BFF3 F882 EC0E 6AA9 CA0D" /* ãVò©ÀÑ¿óø‚ì.j©Ê. */
- $"4419 16FB 9BEF 947E F848 19BF 5CB6 EA4E" /* D..û›ï”~øH.¿\¶êN */
- $"C290 F254 020B 51DB 8094 4D05 E9A5 21A0" /* ÂòT..QÛ€”M.é¥!  */
- $"D3E6 84EA 5A3E 4380 650C B24F 31DA 209F" /* Óæ„êZ>C€e.²O1Ú Ÿ */
- $"F51A 9108 7912 32B0 52A6 A901 CADB A758" /* õ.‘.y.2°R¦©.ÊÛ§X */
- $"C00A D516 E462 35B4 C071 131A 0F01 9A95" /* ÀÂÕ.äb5´Àq....š• */
- $"9739 F131 0E5F 7FBA D8AD 925F 992C 0187" /* —9ñ1._.ºØ­’_™,.‡ */
- $"D97C 832B 847E 1148 0402 0449 FB25 D0F1" /* Ù|ƒ+„~.H...Iû%Ðñ */
- $"C1F8 2B8E CE97 D5A4 BEFE 7F0D E420 E43E" /* Áø+ŽÎ—Õ¤¾þ..ä ä> */
- $"801A 448D 9D61 D23C 5956 3DEB A1A6 0858" /* €.DaÒ<YV=롦.X */
- $"CD98 F32B 92E6 D960 C0E1 E542 294D 6FD3" /* ͘ó+’æÙ`ÀáåB)MoÓ */
- $"4234 37C9 3537 275F AC1E 936D 534A BF02" /* B47É57'_¬.“mSJ¿. */
- $"B742 8CAB BE88 E4FF 23DC D9EB 1FC4 9CF0" /* ·BŒ«¾ˆäÿ#ÜÙë.Äœð */
- $"C5D1 3F1D 5995 AD68 12E9 71B3 2100 AFB7" /* ÅÑ?.Y•­h.éq³!.¯· */
- $"CBF7 9ADB D5FF 48EE B1A2 AE4D E021 7C07" /* Ë÷šÛÕÿHî±¢®Mà!|. */
- $"5AD5 E94C A965 DFE8 B32A 23AB DE05 4FB1" /* ZÕéL©eßè³*#«Þ.O± */
- $"FDB7 ECC5 3611 73D9 B03C 399A D5F6 663D" /* ý·ìÅ6.sÙ°<9šÕöf= */
- $"0E78 0BEE 67D9 2F9D 0072 E938 509C 9779" /* .x.îgÙ/.ré8Pœ—y */
- $"6C64 03A1 B8C9 C1C0 2256 29EA 112C FB1C" /* ld.¡¸ÉÁÀ"V)ê.,û. */
- $"766C DF51 83B1 388F 902E EE03 337E 689A" /* vlßQƒ±8.î.3~hš */
- $"CA5A A9F0 09AF 3422 4115 D489 3FBD 22C1" /* ÊZ©ðƯ4"A.Ô‰?½"Á */
- $"4A4F 642A 0AC8 D01C 2950 18CA D441 780A" /* JOd*ÂÈÐ.)P.ÊÔAx */
- $"C929 A7FF 0AFA 956A A581 B590 9B7A 7D74" /* É)§ÿÂú•j¥µ›z}t */
- $"2084 3DC1 5D81 B12B DF9C 333D EFAD 0ADD" /* „=Á]±+ßœ3=ï­ÂÝ */
- $"3445 4F8C 132E F02F C2E7 E13F BE12 2F84" /* 4EOŒ..ð/Âçá?¾./„ */
- $"7FC3 D55F 876A BE1D 07F2 688D 774C FC3E" /* .ÃÕ_‡j¾..òhwLü> */
- $"A177 C3EA 4FE4 AFFE 1BFF 61D3 2F87 4BFC" /* ¡wÃêOä¯þ.ÿaÓ/‡Kü */
- $"946E 03F8 6CFF 06A3 FC28 FE13 BF0F 6B7E" /* ”n.ølÿ.£ü(þ.¿.k~ */
- $"1EB8 FC3B 47E1 ECEE EEDF F87D 51FF 07D5" /* .¸ü;Gáìîîßø}Qÿ.Õ */
- $"0BBB 87E1 D3FF 0779 FC3B 6FE1 D378 0DF0" /* .»‡áÓÿ.yü;oáÓx.ð */
- $"BD7C 29EB A2DD 17F2 6ADB E1DB 7F0D 97E1" /* ½|)ë¢Ý.òjÛáÛ..—á */
- $"E84D 7750 FC3E 906F C3E8 35DD 42ED AFE1" /* èMwPü>oÃè5ÝBí¯á */
- $"D33F 0E8D F86E 00F7 91DD 3D8B A94D D83C" /* Ó?.øn.÷‘Ý=‹©MØ< */
- $"B51B 129C 103F 899D B929 4724 C188 2C29" /* µ..œ.?‰¹)G$Áˆ,) */
- $"CE89 11F8 9065 1C37 E234 DFEF 60D7 3221" /* Ή.øe.7â4ßï`×2! */
- $"5343 F889 DCDB AFB3 6F20 F76A 31D9 986E" /* SCø‰ÜÛ¯³o ÷j1Ù˜n */
- $"A745 547E 6F18 076D A675 BA1A 1AAF 6558" /* §ET~o..m¦uº..¯eX */
- $"338A FF71 4707 0776 1B62 BCCC 89E5 4726" /* 3ŠÿqG..v.b¼Ì‰åG& */
- $"A7CB 8885 E07C DADC D741 3B1D D81F AB03" /* §Ëˆ…à|ÚÜ×A;.Ø.«. */
- $"2F84 F52D DFD5 7384 4649 7BA2 5AB1 14C8" /* /„õ-ßÕs„FI{¢Z±.È */
- $"3D8D B951 8183 C33A B08E 82CC EF1A F046" /* =¹QƒÃ:°Ž‚Ìï.ðF */
- $"5B62 C9E0 A926 F330 0A61 A30C 6194 7E1E" /* [bÉà©&ó0Âa£.a”~. */
- $"1EE9 3D0D 1ABE 5536 A026 8B32 830F C02F" /* .é=..¾U6 &‹2ƒ.À/ */
- $"3041 04B7 2C65 024D AC81 D2CC 03CA A08A" /* 0A.·,e.M¬ÒÌ.Ê Š */
- $"B105 F3F1 C365 6BCE 9876 A867 7DBA 63AF" /* ±.óñÃekΘv¨g}ºc¯ */
- $"0973 495F DCC1 3552 54BA 5BDB 618D C6C0" /* ÆsI_ÜÁ5RTº[ÛaÆÀ */
- $"91B8 4489 141B A7D3 F188 8A97 DAB0 8942" /* ‘¸D‰..§ÓñˆŠ—Ú°‰B */
- $"EA67 F235 E18A 871B 4B0C DAC6 9050 BA9C" /* êgò5ኇ.K.ÚÆPºœ */
- $"C432 95CE 13CA 93ED 4FD5 9495 377D C920" /* Ä2•Î.Ê“íOÕ”•7}É */
- $"C8A2 F997 5348 8890 91D5 0A23 50BF 3C37" /* È¢ù—SHˆ‘ÕÂ#P¿<7 */
- $"8372 7C96 32AA 1CD2 46BE 8220 C983 2A71" /* ƒr|–2ª.ÒF¾‚ Ƀ*q */
- $"7961 BF33 9590 C086 CCE9 578B 322E FB50" /* ya¿3•À†ÌéW‹2.ûP */
- $"CB68 6459 C127 EB9B E974 EF02 59F4 FF4D" /* ËhdYÁ'ë›étï.YôÿM */
- $"4525 1874 6A9F 99EB DFCC C1B1 72EA 9FA0" /* E%.tjŸ™ëßÌÁ±r꟠ */
- $"DE00 BBB9 D95F 36B9 406E 3CE0 3BCF 32B6" /* Þ.»¹Ù_6¹@n<à;Ï2¶ */
- $"8DC0 55D6 C6DA 3622 8A6E 63F6 28AE 08AC" /* ÀUÖÆÚ6"Šncö(®.¬ */
- $"03AC 288D 069A 750E CBBD 97D9 E42D BA93" /* .¬(.šu.˽—Ùä-º“ */
- $"E82A 4EB3 C008 CC7C B6A7 6F70 F1BC FDAA" /* è*N³À.Ì|¶§opñ¼ýª */
- $"1DF4 D2E4 3ECB 9702 444E 278F 6B50 F00E" /* .ôÒä>Ë—.DN'kPð. */
- $"C228 C132 E5E0 B4DE 93BF DBBD 2C85 ABF9" /* Â(Á2åà´Þ“¿Û½,…«ù */
- $"7FAD EC28 1D40 D390 5A2F 9B14 D348 8C76" /* .­ì(.@ÓZ/›.ÓHŒv */
- $"C04B 1173 BF19 8F50 7E3D 8311 BB79 FDA8" /* ÀK.s¿.P~=ƒ.»yý¨ */
- $"1FD4 24A9 5F59 8B76 709E 5C84 1902 8690" /* .Ô$©_Y‹vpž\„..† */
- $"AD49 334F 5AE8 E376 288C BDE7 EE13 FBDE" /* ­I3OZèãv(Œ½çî.ûÞ */
- $"7606 0135 6DB2 DCD9 F5B3 E7E2 B2B8 8BE1" /* v..5m²ÜÙõ³çⲸ‹á */
- $"1985 85D2 0EC1 5CCD BC74 D88B 7206 5075" /* .……Ò.Á\ͼtØ‹r.Pu */
- $"FB92 BF92 C5CB B6E3 024D EB71 D909 AF79" /* û’¿’Å˶ã.MëqÙÆ¯y */
- $"DD82 BBF2 37F1 1193 74D0 373D 4043 C292" /* Ý‚»ò7ñ.“tÐ7=@CÂ’ */
- $"0B1D 4E8F 04F4 A035 451A 7DCB 02DB D77E" /* ..N.ô 5E.}Ë.Û×~ */
- $"DD1C 3667 1BA7 2584 C128 3835 4454 5C15" /* Ý.6g.§%„Á(85DT\. */
- $"5846 C7D1 4689 3D2A 1172 9BA8 9830 F037" /* XFÇÑF‰=*.r›¨˜0ð7 */
- $"0053 8FD6 4023 68C6 7122 CAC6 0325 5AF3" /* .SÖ@#hÆq"ÊÆ.%Zó */
- $"E104 A423 C5AE F551 6DF6 7B11 D5EB FD34" /* á.¤#Å®õQmö{.Õëý4 */
- $"DF67 C50C 737D 74D5 D5EC 7027 A2D8 C79A" /* ßgÅ.s}tÕÕìp'¢ØÇš */
- $"200D A972 A30A 509A C3DE 483F 8B53 D69C" /* .©r£ÂPšÃÞH?‹SÖœ */
- $"001F 47E9 BD2C 84EC DB83 B493 0326 DE6E" /* ..Gé½,„ìÛƒ´“.&Þn */
- $"336A 7C76 3225 8351 7B2D 37B5 D645 9866" /* 3j|v2%ƒQ{-7µÖE˜f */
- $"019E 6472 40C4 5853 3376 9D90 D3EA A727" /* .ždr@ÄXS3vÓê§' */
- $"07A1 A4B8 A32F 475A 22A2 059C AB5B F13E" /* .¡¤¸£/GZ"¢.œ«[ñ> */
- $"E2DF 5B3E E6B5 B27F 28AF A15F 400C 7D9F" /* âß[>æµ².(¯¡_@.}Ÿ */
- $"43ED 33D4 9B4D CB64 E550 5FED FC2F E485" /* Cí3Ô›MËdåP_íü/ä… */
- $"271E 2DB1 6AE5 6793 EFE8 FCC5 A784 4C95" /* '.-±jåg“ïèüŧ„L• */
- $"E488 B5AC A528 BACB 10FF 4ABD D554 E56B" /* 䈵¬¥(ºË.ÿJ½ÕTåk */
- $"F72E 8ED7 5E48 60A4 82D0 381F A2D4 625C" /* ÷.Ž×^H`¤‚Ð8.¢Ôb\ */
- $"9F80 2A63 5FD3 DD0C EDA8 3DE3 281E A65C" /* Ÿ€*c_ÓÝ.í¨=ã(.¦\ */
- $"88EA 1A96 626D DC03 79BE C4ED EA60 4FC5" /* ˆê.–bmÜ.y¾Äíê`OÅ */
- $"BB10 D9D5 99AF 0534 65C2 05AE 8D23 82B0" /* ».ÙÕ™¯.4eÂ.®#‚° */
- $"6FB7 881A 7BC5 0316 7A28 4B27 2763 A6C3" /* o·ˆ.{Å..z(K''c¦Ã */
- $"8FC7 073A 1391 81BB 707F 625D 355F B1DF" /* Ç.:.‘»p.b]5_±ß */
- $"A749 C3EE A157 EC1F 0F6C 70AB 1A36 5711" /* §IÃî¡Wì..lp«.6W. */
- $"C49B 1CA8 54A0 0FB9 6A2E 0F86 2E57 BC2F" /* Ä›.¨T .¹j..†.W¼/ */
- $"8CDD B76A F6DB 83F9 EEFF 4BF1 DE60 660E" /* ŒÝ·jöÛƒùîÿKñÞ`f. */
- $"BCBA 7D68 D5DE 8663 DF06 3F65 A981 38D7" /* ¼º}hÕÞ†cß.?e©8× */
- $"CC20 EBAE 6143 C79E D2F3 DCF4 FA0F 433E" /* Ì ë®aCÇžÒóÜôú.C> */
- $"6DFE 4C5F 032A F6DD DD11 F85F 5003 22CD" /* mþL_.*öÝÝ.ø_P."Í */
- $"C07E F1CC 40B9 8D61 825D 77C7 91A6 BD49" /* À~ñÌ@¹a‚]wÇ‘¦½I */
- $"2590 4BCD EB13 37A2 D5FA 2931 F311 9028" /* %KÍë.7¢Õú)1ó.( */
- $"6C02 96FC ACF5 1EA4 8E51 4BC9 FDE8 DFEF" /* l.–ü¬õ.¤ŽQKÉýèßï */
- $"C5A0 8082 7E0D C127 3A80 A65B 7989 CCEE" /* Å €‚~.Á':€¦[y‰Ìî */
- $"6F6A 8DDF FB5B 46A5 3757 7FC3 3EFD BC0A" /* ojßû[F¥7W.Ã>ý¼Â */
- $"8567 1CB0 3BE7 A153 D7CE 8F63 D2DC 8840" /* …g.°;ç¡S×ÎcÒ܈@ */
- $"D993 E028 0E86 AA99 3ADE CC55 A789 CFC8" /* Ù“à(.†ª™:ÞÌU§‰ÏÈ */
- $"D92B 9613 3850 B7B3 467A FA09 7D45 E174" /* Ù+–.8P·³FzúÆ}Eát */
- $"D351 3254 64A3 7FC5 0D8D 1EDB FEC9 3F05" /* ÓQ2Td£.Å..ÛþÉ?. */
- $"C3C2 264B ACB8 F3C3 1BFF 04A5 12CF C191" /* ÃÂ&K¬¸óÃ.ÿ.¥.ÏÁ‘ */
- $"8CA0 5985 E34C E583 A230 CD43 8602 BAAF" /* Œ Y…ãL僢0ÍC†.º¯ */
- $"1475 FCA7 B274 1314 051F AF06 089D 13B1" /* .uü§²t....¯...± */
- $"5C06 815E FAA5 6864 CECE D56A 127C 058B" /* \.^ú¥hdÎÎÕj.|.‹ */
- $"1859 E9E8 7A98 4299 3CFF 70CE C2DD 8676" /* .Yéèz˜B™<ÿpÎÂ݆v */
- $"1798 5F8E 9960 922E 9226 3F9B 5657 890F" /* .˜_Ž™`’.’&?›VW‰. */
- $"75BC FECF 6919 6701 D086 0EA5 26BA 8B78" /* u¼þÏi.g.І.¥&º‹x */
- $"7381 41FC 19AD 7201 BFD9 B3D3 2F00 1A1C" /* sAü.­r.¿Ù³Ó/... */
- $"E689 F3BC 5FC7 0418 66A2 5AEE 0374 DE30" /* æ‰ó¼_Ç..f¢Zî.tÞ0 */
- $"DC4B 70F1 ACC6 2BC6 06E9 461F E71B CD5E" /* ÜKpñ¬Æ+Æ.éF.ç.Í^ */
- $"2766 D533 884B A37F 7820 5CCA 3D60 1C3A" /* 'fÕ3ˆK£.x \Ê=`.: */
- $"8865 509F C1F0 86B6 9A91 0A52 426E CF1D" /* ˆePŸÁð†¶š‘ÂRBnÏ. */
- $"4B52 7AFE 9519 ECDB 9DD3 BFA1 80F7 50BD" /* KRzþ•.ìÛÓ¿¡€÷P½ */
- $"D2DD 6FAB F00D 3600 9104 37AC 81AA F9C3" /* ÒÝo«ð.6.‘.7¬ªùà */
- $"3933 A702 AC9C 42F1 4579 C5F2 CD99 165F" /* 93§.¬œBñEyÅòÍ™._ */
- $"2D84 FE8B D02C 055F F99C 1729 45C7 6B56" /* -„þ‹Ð,._ùœ.)EÇkV */
- $"EE73 818A 9940 BB46 1408 639B 9779 C805" /* îsŠ™@»F..c›—yÈ. */
- $"1B0B CC86 D42E E9BB 046D 0E93 7273 E00F" /* ..̆Ô.é».m.“rsà. */
- $"B7D5 D377 E0ED 2494 4623 5BDF C83C 54A5" /* ·ÕÓwàí$”F#[ßÈ<T¥ */
- $"6B6B D343 F20E AD4C B45C 2BF4 7C65 87A1" /* kkÓCò.­L´\+ô|e‡¡ */
- $"E2EA E2B7 FF17 F9A1 5606 D5A7 C113 F062" /* âêâ·ÿ.ù¡V.Õ§Á.ðb */
- $"D50E E647 922C 8746 7CBA 99C8 4400 979D" /* Õ.æG’,‡F|º™ÈD.— */
- $"3D09 19E7 3A84 E245 ED1F 1C14 3967 45CE" /* =Æ.ç:„âEí...9gEÎ */
- $"2B06 C383 F2A6 2CEE 02E6 A2A7 1821 0F3F" /* +.Ãò¦,î.梧.!.? */
- $"4057 F9E9 B830 94C7 65AA C396 6F97 2721" /* @Wùé¸0”ÇeªÃ–o—'! */
- $"F1AC 6AF7 6C6C 3F02 D2F1 343D 8B42 0F6F" /* ñ¬j÷ll?.Òñ4=‹B.o */
- $"E2D4 A7D8 7158 F033 C573 AD72 01B7 1CC7" /* âÔ§ØqXð3Ås­r.·.Ç */
- $"4CA6 78C2 BABD BB30 5E03 BDEE DF19 8240" /* L¦xº½»0^.½îß.‚@ */
- $"9521 A43A B142 2F42 3590 AD8C B9FD A409" /* •!¤:±B/B5­Œ¹ý¤Æ */
- $"9D77 38E7 B8F8 3BCD 4478 61C3 5768 0324" /* w8ç¸ø;ÍDxaÃWh.$ */
- $"4E55 4240 1E87 1F93 D0BA 6929 C235 7E76" /* NUB@.‡.“кi)Â5~v */
- $"F6E8 AA1B AF13 15FD EB95 2609 BE7D BFE8" /* öèª.¯..ýë•&ƾ}¿è */
- $"3E51 8F2E 4780 4EE6 891E F83D FF7D D1C3" /* >Q.G€Næ‰.ø=ÿ}Ñà */
- $"818F 28A2 2AC0 AD00 7F03 5781 2882 A44A" /* (¢*À­...W(‚¤J */
- $"6728 D9F6 E77F A883 C794 71AC 55E9 8112" /* g(Ùöç.¨ƒÇ”q¬Ué. */
- $"BF6F ECDA 9BD1 96B8 79AA A397 A6F2 C93F" /* ¿oìڛі¸yª£—¦òÉ? */
- $"3792 B8C4 8667 AAF4 659D 59F6 E77F A870" /* 7’¸Ä†gªôeYöç.¨p */
- $"24F1 5461 DB69 0F4C F8B3 F02A F6E7 7FA6" /* $ñTaÛi.Lø³ð*öç.¦ */
- $"26C9 5EDE 9BB6 A1C6 9467 854A 5327 BA38" /* &É^Þ›¶¡Æ”g…JS'º8 */
- $"F535 A01A B90A 9580 95A0 FE5C A623 DE0D" /* õ5 .¹Â•€• þ\¦#Þ. */
- $"6C3E BF23 66F2 9312 9490 EB88 1D63 7AF4" /* l>¿#fò“.”ëˆ.czô */
- $"9F5B 7F45 9078 3A5F CC36 7702 EAD5 FA4D" /* Ÿ[.Ex:_Ì6w.êÕúM */
- $"5F9D 258B 14A8 A235 6490 6B7D 2B05 42C3" /* _%‹.¨¢5dk}+.Bà */
- $"2A5A 791E 92C3 B1E8 B323 FF74 81FC B063" /* *Zy.’ñè³#ÿtü°c */
- $"4A31 CBBC 91E2 A64A F935 FE79 4C07 1376" /* J1˼‘â¦Jù5þyL..v */
- $"002A 4795 5221 70B2 005C 41F9 D631 126F" /* .*G•R!p².\AùÖ1.o */
- $"FF7F DF03 06BD 7214 71AB 4EF3 8EEA 0261" /* ÿ.ß..½r.q«NóŽê.a */
- $"D054 C087 EA15 CBD2 4645 2F9F 3600 4144" /* ÐTÀ‡ê.ËÒFE/Ÿ6.AD */
- $"5671 C61E D3CB 8B84 A60D B58E FB69 C71F" /* VqÆ.ÓË‹„¦.µŽûiÇ. */
- $"B09A EDD9 AAC0 6FBA D7FE 8C4D 8262 6C73" /* °šíÙªÀoº×þŒM‚bls */
- $"9F69 0E81 7581 1D52 FB27 C979 1597 69EA" /* Ÿi.u.Rû'Éy.—iê */
- $"F1DF E906 0B77 2E21 D31A 5CCD 9474 95A2" /* ñßé..w.!Ó.\Í”t•¢ */
- $"CB48 AB27 5F53 B82F 1638 16A4 87CD ED1F" /* ËH«'_S¸/.8.¤‡Íí. */
- $"20BC 2894 5EE1 C84C 1AC1 1158 0293 024E" /* ¼(”^áÈL.Á.X.“.N */
- $"1023 0E4F 9BD8 FA73 6E62 FF7F FD08 5797" /* .#.O›Øúsnbÿ.ý.W— */
- $"0788 A951 6DDA 2448 21D2 7FCA 20B4 E1BF" /* .ˆ©QmÚ$H!Ò.Ê ´á¿ */
- $"3262 89C7 5386 ACB1 8B89 6AC3 F907 1355" /* 2b‰ÇS†¬±‹‰jÃù..U */
- $"66D9 1E5A 5B54 19E9 2737 FF7C B8DF 1F5E" /* fÙ.Z[T.é'7ÿ|¸ß.^ */
- $"3592 B16D 6089 DE73 8F19 479D 626B 977D" /* 5’±m`‰Þs.Gbk—} */
- $"185E F7A3 AF62 AD92 E5AC 2F74 B991 F96F" /* .^÷£¯b­’å¬/t¹‘ùo */
- $"211F 5AE0 4C27 344F A9E1 C731 DB20 A0FF" /* !.ZàL'4O©áÇ1Û  ÿ */
- $"7FFF 7F2E 356F CC55 C6B8 C2C9 2AEF 2D31" /* .ÿ..5oÌUƸÂÉ*ï-1 */
- $"EFEB D878 C16F B1B1 3D47 240C 489C 7153" /* ïëØxÁo±±=G$.HœqS */
- $"E5F8 A5C8 6E2C 7650 AED0 C4B7 43EA 67B6" /* åø¥Èn,vP®ÐÄ·Cêg¶ */
- $"94E4 7274 CFEB 4CF3 FD3E 8065 B9CC 35A5" /* ”ärtÏëLóý>€e¹Ì5¥ */
- $"21B1 3804 AD98 4F8A 6FFC 50DA 014C 442B" /* !±8.­˜OŠoüPÚ.LD+ */
- $"AA41 1455 BD94 B366 A37D CA82 7FFC DE57" /* ªA.U½”³f£}Ê‚.üÞW */
- $"2EA9 98C2 5510 E51E 24CC 0428 4C83 1BBE" /* .©˜ÂU.å.$Ì.(Lƒ.¾ */
- $"0A46 A6DD 6963 D4CB 24E8 748B ED10 7B6D" /* ÂF¦ÝicÔË$èt‹í.{m */
- $"E61C 86C3 C80E 3030 FCE9 2263 C956 95A1" /* æ.†ÃÈ.00üé"cÉV•¡ */
- $"AED0 C4B1 D07C F701 9DA0 ED2C C401 BC1A" /* ®ÐıÐ|÷. í,Ä.¼. */
- $"9421 2D43 EF12 7494 8D46 CB82 3FE2 6439" /* ”!-Cï.t”FË‚?âd9 */
- $"6BDE C8CE 23B7 9D2E B6F9 DF4B C1A9 A145" /* kÞÈÎ#·.¶ùßKÁ©¡E */
- $"1512 85E6 30E6 98D1 AC22 EEBC 459C D841" /* ..…æ0æ˜Ñ¬"î¼EœØA */
- $"0A0F 1F31 2F75 7937 220F 7271 FE79 44A6" /* Â..1/uy7".rqþyD¦ */
- $"777E 1645 E0BA D980 0FFF 7D9F EC83 A930" /* w~.EàºÙ€.ÿ}Ÿìƒ©0 */
- $"D12B 216D 4D3F 4AD0 5EE9 DBC7 53D7 0A21" /* Ñ+!mM?JÐ^éÛÇS×Â! */
- $"2372 C608 6701 8AFA 8E33 4125 2B7E 38DA" /* #rÆ.g.ŠúŽ3A%+~8Ú */
- $"5990 99EE B1D0 B07C 9F9D 97DD D658 2C2A" /* Y™î±Ð°|Ÿ—ÝÖX,* */
- $"C7D6 4556 2AA7 297F ACBE 4802 B472 E76F" /* ÇÖEV*§).¬¾H.´rço */
- $"644F 2F11 17FF 7F9D CE1C 2989 7199 03B1" /* dO/..ÿ.Î.)‰q™.± */
- $"E719 2B3B 1131 C4CC 808B BC7A 26A4 479F" /* ç.+;.1ÄÌ€‹¼z&¤GŸ */
- $"4824 6486 E338 DB65 A502 454C C415 B8D0" /* H$d†ã8Ûe¥.ELÄ.¸Ð */
- $"7C77 7323 E381 5958 F415 95B9 142E 85F8" /* |ws#ãYXô.•¹..…ø */
- $"1742 E22F FF17 567B A195 DFF1 7EE0 8E40" /* .Bâ/ÿ.V{¡•ßñ~àŽ@ */
- $"431A B629 DDCE AED1 A925 9FCD 56B5 7945" /* C.¶)Ýήѩ%ŸÍVµyE */
- $"B8B9 77DF 732C CD1E 8137 2645 1135 9593" /* ¸¹wßs,Í.7&E.5•“ */
- $"E31C 333B 30E2 518D E202 A1E0 FEA6 C40E" /* ã.3;0âQâ.¡àþ¦Ä. */
- $"BB50 0174 C21D 0BFB 34C1 1A8D 8E5D FF77" /* »P.tÂ..û4Á.Ž]ÿw */
- $"909A 8111 3123 8200 AFC2 0525 13A1 C383" /* š.1#‚.¯Â.%.¡Ãƒ */
- $"5472 BA45 8D58 8818 E5CD 6FEA D858 47C5" /* TrºEXˆ.åÍoêØXGÅ */
- $"F5A0 7773 3C86 1CE8 9A67 FAA7 5726 643B" /* õ ws<†.èšgú§W&d; */
- $"1BF8 C2C1 E7AD D3CE E89B 97C4 0210 1FAE" /* .øÂÁç­ÓÎè›—Ä...® */
- $"9319 1F1F 7F89 0B76 5918 7EF8 9947 CF44" /* “....‰.vY.~ø™GÏD */
- $"6B5C 4B5D 5067 58A7 F35E CF39 7D01 C555" /* k\K]PgX§ó^Ï9}.ÅU */
- $"FCD3 E0F6 C1A4 9C8A 0B34 2D33 A20D F664" /* üÓàöÁ¤œŠ.4-3¢.öd */
- $"C174 CCE8 CAA1 C45F 2974 101B 86E7 68FD" /* ÁtÌèÊ¡Ä_)t..†çhý */
- $"D6FE 8FE9 AC95 5D3D DE38 1829 E3B9 37FE" /* Öþ鬕]=Þ8.)ã¹7þ */
- $"5008 F383 21C4 4D57 AE92 9F94 A9BB 3A76" /* P.óƒ!ÄMW®’Ÿ”©»:v */
- $"705F 8D2D 889C EB93 FD2B 05C5 89F2 500E" /* p_-ˆœë“ý+.ʼnòP. */
- $"4220 A486 F348 D466 4D62 E368 540A 1D25" /* B ¤†óHÔfMbãhTÂ.% */
- $"AF7C A9EF 43CC E423 16FC 6EE5 C407 DDAE" /* ¯|©ïCÌä#.ünåÄ.Ý® */
- $"EB28 23D2 3FDE 40EF 2ED1 D53A B87B 9C40" /* ë(#Ò?Þ@ï.ÑÕ:¸{œ@ */
- $"80A2 77EF CC8F D34E C33F 7BB4 4748 E4A6" /* €¢wïÌÓNÃ?{´GHä¦ */
- $"B177 05FF 085F CBF9 F1A0 8CA7 4200 32AC" /* ±w.ÿ._Ëùñ Œ§B.2¬ */
- $"7B87 A517 EA04 C96C F9A3 C6ED 5FFF 7FED" /* {‡¥.ê.Élù£Æí_ÿ.í */
- $"D5EB F835 3E15 6882 AED1 72BF B42C 87DE" /* Õëø5>.h‚®Ñr¿´,‡Þ */
- $"8111 0F7A 5DA6 CFEA 79A7 9174 89E8 E637" /* ..z]¦Ïêy§‘t‰èæ7 */
- $"7E56 B53E 9987 2013 8F1A 06A5 07A2 1856" /* ~Vµ>™‡ ...¥.¢.V */
- $"FE30 E259 128A 968B 881F E88D 8566 98D7" /* þ0âY.Š–‹ˆ.è…f˜× */
- $"C815 C397 64E8 9FAC 059A 5922 C863 F220" /* È.×d蟬.šY"Ècò */
- $"EC2A 4AF8 5DB2 A77D FC6A 3AC1 357E D5CC" /* ì*Jø]²§}üj:Á5~ÕÌ */
- $"142B 85B0 FEE0 2579 D845 CDFD F507 4C58" /* .+…°þà%yØEÍýõ.LX */
- $"D86A F299 0BBC A0A8 39A4 03D9 2144 6B3E" /* Øjò™.¼ ¨9¤.Ù!Dk> */
- $"6D67 242B 0FEB B6F4 79CB 58ED 2338 DB9F" /* mg$+.ë¶ôyËXí#8ÛŸ */
- $"6EC7 1626 0FDD 0C77 1E00 2AE4 8B46 F39C" /* nÇ.&.Ý.w..*ä‹Fóœ */
- $"6268 EE5F FF49 B5C8 30E7 9859 E163 A9D4" /* bhî_ÿIµÈ0ç˜Yác©Ô */
- $"C50F BC0C 46BB BBC7 9FFF 7D54 E81B 8936" /* Å.¼.F»»ÇŸÿ}Tè.‰6 */
- $"A032 72E8 6576 5FEA 9A3F A5A9 9E58 B9C2" /*  2rèev_êš?¥©žX¹Â */
- $"A089 A039 5695 766F 3295 A1FF 7F5F FBDB" /*  ‰ 9V•vo2•¡ÿ._ûÛ */
- $"A3FD 1F1F 76AD 6787 B4D0 D1A5 E4EA 72F8" /* £ý..v­g‡´ÐÑ¥äêrø */
- $"0276 0C35 EC34 65A8 000A CA35 6AAE 1800" /* .v.5ì4e¨.ÂÊ5j®.. */
- $"99CA 1B65 F56D 6C3B DF33 AB08 94A3 15CF" /* ™Ê.eõml;ß3«.”£.Ï */
- $"C9B8 D32E 35D7 D32D 57E6 86D2 A5BE 2B3A" /* ɸÓ.5×Ó-Wæ†Ò¥¾+: */
- $"4535 2C10 41FE FDA9 E202 3927 BC4F 5F90" /* E5,.Aþý©â.9'¼O_ */
- $"E637 311C DB00 E394 09F3 005B 7DB3 0DFE" /* æ71.Û.ã”Æó.[}³.þ */
- $"9F1F CAA4 DD03 B381 8330 AB38 E13B 2F9C" /* Ÿ.ʤÝ.³ƒ0«8á;/œ */
- $"3DB5 01C5 100A 5D16 5C8D 792C FA0E 1A85" /* =µ.Å.Â].\y,ú..… */
- $"E3FF 467A 6333 E4F1 F27C 9E2B 161E 18F0" /* ãÿFzc3äñò|ž+...ð */
- $"3F30 9C2C 631D BE74 4B7F 6E21 3FBC 404E" /* ?0œ,c.¾tK.n!?¼@N */
- $"E063 4152 D02D 68E4 869C E7E9 E4E6 4E95" /* àcARÐ-h䆜çéäæN• */
- $"3A66 1FDA 1145 DFB4 0796 9F97 503C E2C9" /* :f.Ú.Eß´.–Ÿ—P<âÉ */
- $"7F49 D644 1290 98BD 8EA0 2FA1 CF00 E383" /* .IÖD.˜½Ž /¡Ï.ム*/
- $"C003 7BFE D79B FF62 A38E 2C39 A64D 19FF" /* À.{þ×›ÿb£Ž,9¦M.ÿ */
- $"6A9D 976A 994B 6626 4F4D 7DC8 F0CA EDB7" /* j—j™Kf&OM}ÈðÊí· */
- $"F99E 21E2 36B4 3AAB E787 C6A2 1783 F623" /* ùž!â6´:«ç‡Æ¢.ƒö# */
- $"8755 1F66 AFBC 2959 6E6E 2E61 AC85 2198" /* ‡U.f¯¼)Ynn.a¬…!˜ */
- $"9978 EDFD 334C F0D6 7F76 9AF2 47AF 5E4B" /* ™xíý3LðÖ.všòG¯^K */
- $"805C 54D3 5F2A 16C5 6675 C288 B44F F851" /* €\TÓ_*.Åfuˆ´OøQ */
- $"1CE9 9F21 BF10 92B9 2366 5D69 AE8E 9989" /* .éŸ!¿.’¹#f]i®Ž™‰ */
- $"36A6 F9E6 75A7 0D47 C8B5 8727 0138 2BFA" /* 6¦ùæu§.Gȵ‡'.8+ú */
- $"5C4A 649C 123C 225E 2CEC 2007 5016 3F11" /* \Jdœ.<"^,ì .P.?. */
- $"B8FF 60CB 7150 EBFD DFED 147E 0A98 E096" /* ¸ÿ`ËqPëýßí.~Â˜à– */
- $"6B76 3AF0 39A5 5BF2 880C E857 174C 8735" /* kv:ð9¥[òˆ.èW.L‡5 */
- $"ACF6 E4B7 3477 6293 FF7C 8515 A8DE 4E73" /* ¬öä·4wb“ÿ|….¨ÞNs */
- $"8E37 8A0C 4384 0CF3 FA01 15F5 9639 ED05" /* Ž7Š.C„.óú..õ–9í. */
- $"C86B 28A0 C331 14BC 2817 FE9B F96A D60D" /* Èk( Ã1.¼(.þ›ùjÖ. */
- $"EBCB 14DA FF7F FF47 8A61 A2C7 F01F 10B7" /* ëË.Úÿ.ÿGŠa¢Çð..· */
- $"3DAF B01C B484 F55D 457E E3EC CC41 95DE" /* =¯°.´„õ]E~ãìÌA•Þ */
- $"097E 8117 F77F FEFB A490 8B96 1300 2B37" /* Æ~.÷.þû¤‹–..+7 */
- $"19FA E04C 4188 E9F6 8950 0668 B082 8FD8" /* .úàLAˆéö‰P.h°‚Ø */
- $"0B7D 6C32 4DBF F84F F4E9 ACAF 719A DC43" /* .}l2M¿øOô鬯qšÜC */
- $"9F8D A53E DF1A BDB0 AAA7 3267 9C2D 357A" /* Ÿ¥>ß.½°ª§2gœ-5z */
- $"9CA7 1AE1 59C4 F467 83D3 308B 004A 42C2" /* œ§.áYÄôgƒÓ0‹.JB */
- $"909B F979 41CE AB25 C6D1 9FE9 46E1 E837" /* ›ùyAΫ%ÆÑŸéFáè7 */
- $"7ADF FF72 225E 4472 D323 F55C BE19 1E50" /* zßÿr"^DrÓ#õ\¾..P */
- $"BF94 6787 CADB F576 300A 054B 0A2D E9B2" /* ¿”g‡ÊÛõv0Â.KÂ-é² */
- $"5C15 DB84 E735 F76D 5477 D8A7 28AF FF7A" /* \.Û„ç5÷mTwا(¯ÿz */
- $"7EB8 06F8 4FF4 E999 ED48 02C4 F111 F61D" /* ~¸.øOôé™íH.Äñ.ö. */
- $"8A6C 1CC6 AE54 94E4 8C5D 7655 4ECC 205F" /* Šl.Æ®T”äŒ]vUNÌ _ */
- $"DBF9 1BA7 83CC 52E9 E9C9 52A4 1151 7DE4" /* Ûù.§ƒÌRééÉR¤.Q}ä */
- $"051B E140 3FC0 D60B 0C11 663F 98A9 8B53" /* ..á@?ÀÖ...f?˜©‹S */
- $"776E BD8D 7678 AD62 ACEE 033F D134 B61E" /* wn½vx­b¬î.?Ñ4¶. */
- $"F86D 3384 AAE7 9074 F7CF 4509 F9B3 4F30" /* øm3„ªçt÷ÏEÆù³O0 */
- $"F32D 840F 1DDA E6B1 BDD4 951F 2379 F890" /* ó-„..Úæ±½Ô•.#yø */
- $"530A E915 A228 D3D8 B188 C692 2767 D628" /* SÂé.¢(ÓØ±ˆÆ’'gÖ( */
- $"12F8 3FFA BA23 F76B 1D92 1FC1 EA73 30FC" /* .ø?úº#÷k.’.Áês0ü */
- $"CE72 0CA5 6695 6326 F93B B52F B9D4 F6F0" /* Îr.¥f•c&ù;µ/¹Ôöð */
- $"FF07 727B 80F9 EBFC 2176 788C 333F 4137" /* ÿ.r{€ùëü!vxŒ3?A7 */
- $"E82C D066 6088 A8EA 168F 40EA F1EE BDE8" /* è,Ðf`ˆ¨ê.@êñî½è */
- $"C023 75BA 66F2 335A 98C0 31A8 2137 7A7B" /* À#uºfò3Z˜À1¨!7z{ */
- $"DA0F 3962 D4B3 3E6E A5A1 3A19 5EED 48A7" /* Ú.9bÔ³>n¥¡:.^íH§ */
- $"7617 DE46 D178 BC48 D85D 7821 DFEC B30D" /* v.ÞFÑx¼HØ]x!ßì³. */
- $"F84F B7CD 80ED 55C7 9E1A F58D 7085 F625" /* øO·Í€íUÇž.õp…ö% */
- $"F564 3BF5 A09E B353 4E45 2F0B FC02 ECFD" /* õd;õ ž³SNE/.ü.ìý */
- $"539F 529C A652 34F1 C0CC BC04 FCE0 2C7D" /* SŸRœ¦R4ñÀ̼.üà,} */
- $"A8A9 9E67 79E9 ADE4 ABEE BFF6 4793 1B91" /* ¨©žgyé­ä«î¿öG“.‘ */
- $"413A 4302 7FB5 190C CB09 0DC9 3B33 E18D" /* A:C..µ..ËÆ.É;3á */
- $"DDAB 23C5 FABA 5DC1 554F C940 B964 7F6A" /* Ý«#Åúº]ÁUOÉ@¹d.j */
- $"A781 2032 BF9E 0262 7C99 CD96 9251 9FB6" /* § 2¿ž.b|™Í–’QŸ¶ */
- $"1C69 9141 7A13 3022 DE48 DA68 C959 A0B5" /* .i‘Az.0"ÞHÚhÉY µ */
- $"0F3A F19A 9301 5051 5855 9D7B 5173 EE47" /* .:ñš“.PQXU{QsîG */
- $"2B0D DB30 28CC 5E41 46F1 E79F 90B3 AB2A" /* +.Û0(Ì^AFñ石«* */
- $"CAEA 6128 10E1 2CC0 DDC2 EBF1 26F1 E1DC" /* Êêa(.á,ÀÝÂëñ&ñáÜ */
- $"EB87 87ED 55F3 827C A066 D932 FCF7 B134" /* 뇇íUó‚| fÙ2ü÷±4 */
- $"8BC9 CC70 B38C B019 8372 EA60 7C36 4D38" /* ‹ÉÌp³Œ°.ƒrê`|6M8 */
- $"F82F 16C2 2390 A91B 203A 8EBE D0EC E278" /* ø/.Â#©. :޾Ðìâx */
- $"7AC4 8493 A217 6AC3 B85A 470D D74A B91D" /* zÄ„“¢.jøZG.×J¹. */
- $"0180 7BAB 4088 5671 6268 5B4A 54FE C179" /* .€{«@ˆVqbh[JTþÁy */
- $"1600 7677 830B 0E81 EEB2 6124 33F8 DBBD" /* ..vwƒ..î²a$3øÛ½ */
- $"1B35 D1F9 0568 3891 0ECB A836 5A86 9636" /* .5Ñù.h8‘.˨6Z†–6 */
- $"9F87 052F 0D66 8AA3 3362 1651 9B33 9057" /* Ÿ‡./.fŠ£3b.Q›3W */
- $"5B98 05EB 23CE 099F 2358 444E 0D64 A9F9" /* [˜.ë#ÎÆŸ#XDN.d©ù */
- $"A569 7D56 A50D 6256 69AF BDD9 7847 D651" /* ¥i}V¥.bVi¯½ÙxGÖQ */
- $"73E2 F76E F277 58DC BFB9 7B8E 593C 0E97" /* sâ÷nòwXÜ¿¹{ŽY<.— */
- $"3C4E 507D FA6C 7984 FAC8 6C42 6882 78AC" /* <NP}úly„úÈlBh‚x¬ */
- $"E40D B7A2 4E43 998B 1C29 D7C6 B7BA 58C9" /* ä.·¢NC™‹.)ׯ·ºXÉ */
- $"3503 114B 86B8 CB5D B605 832D 98FE 0257" /* 5..K†¸Ë]¶.ƒ-˜þ.W */
- $"FB50 8CA0 43D4 71BE E330 1584 5983 668F" /* ûPŒ CÔq¾ã0.„Yƒf */
- $"735C 2448 3B30 82E4 1932 5BF8 129F FE38" /* s\$H;0‚ä.2[ø.Ÿþ8 */
- $"749D 01ED DAFC 95B9 375D BBCB 60D9 FC58" /* t.íÚü•¹7]»Ë`ÙüX */
- $"0796 AEFC 2337 F89E 01F5 48BD 0BAF A61F" /* .–®ü#7øž.õH½.¯¦. */
- $"3EC4 C092 DC6A 584C AAAF 1A9F A20F CEA4" /* >ÄÀ’ÜjXLª¯.Ÿ¢.Τ */
- $"884B 2DB6 09F4 F51B 546F CD71 F4D3 6452" /* ˆK-¶Æôõ.ToÍqôÓdR */
- $"B6E5 3EFF 66F8 0D60 D916 F755 1348 E250" /* ¶å>ÿfø.`Ù.÷U.HâP */
- $"D8E2 6858 B424 B84B D59A 6885 24D3 D845" /* ØâhX´$¸KÕšh…$ÓØE */
- $"692F 4313 B616 584F 7419 0661 0064 C281" /* i/C.¶.XOt..a.d */
- $"A873 131C 5296 042B 1FD5 3EED BFC2 659E" /* ¨s..R–.+.Õ>í¿Âež */
- $"C4C7 2720 8002 28DD 141A BBE7 99F8 028F" /* ÄÇ' €.(Ý..»ç™ø. */
- $"8262 0577 5240 EB9A F866 2901 B75B 3FED" /* ‚b.wR@ëšøf).·[?í */
- $"9E78 9071 83FD 02BC FCDE 2135 42D1 F184" /* žxqƒý.¼üÞ!5BÑñ„ */
- $"309D F47E DF10 F797 4268 120A D377 04A4" /* 0ô~ß.÷—Bh.ÂÓw.¤ */
- $"2998 099E CA35 66AD FB20 8C14 1E0E 714E" /* )˜ÆžÊ5f­û Œ...qN */
- $"B9A7 70EE 5BA0 7A18 FC16 97EB 1A98 CB6C" /* ¹§pî[ z.ü.—ë.˜Ël */
- $"4B5D AC5B 3DC2 2062 E74A 18F2 0A76 6085" /* K]¬[=Â bçJ.òÂv`… */
- $"EF50 1C2F FE23 117A ED22 7BE8 0231 BC71" /* ïP./þ#.zí"{è.1¼q */
- $"707C 6736 BC3C 38AA 81C2 66B6 DCE5 13E9" /* p|g6¼<8ªÂf¶Üå.é */
- $"3076 C7AD 8C4B A962 C37E 4605 CDC0 8247" /* 0vÇ­ŒK©bÃ~F.ÍÀ‚G */
- $"190C 41CD 6923 8D00 BC94 5B5F E2AB 443B" /* ..AÍi#.¼”[_â«D; */
- $"3C5A 7FF6 213C 9E2D 9224 70B1 EA9B 7D36" /* <Z.ö!<ž-’$p±ê›}6 */
- $"E7EA 0D03 CB32 7413 AB26 CB30 1B56 CBDE" /* çê..Ë2t.«&Ë0.VËÞ */
- $"3C31 361D 24E2 F441 4D78 7825 1DA0 0C14" /* <16.$âôAMxx%. .. */
- $"5C84 B112 6FC1 77DB 42CA 7791 960B 9F09" /* \„±.oÁwÛBÊw‘–.ŸÆ */
- $"980A 5629 54C0 EC82 889A B0E3 38F4 E734" /* ˜ÂV)TÀ삈š°ã8ôç4 */
- $"FA91 D5CD 2C8F 43CD 5629 3DAD 81DA 5E0A" /* ú‘ÕÍ,CÍV)=­Ú^Â */
- $"C008 712F EAD3 2486 4CD2 C7BA 0FA9 BBD3" /* À.q/êÓ$†LÒǺ.©»Ó */
- $"6AC2 A912 7736 5A33 CC96 9EDC 9C5A 3084" /* j©.w6Z3Ì–žÜœZ0„ */
- $"C826 A3FB 0661 ED4B 9689 A921 22AB 2399" /* È&£û.aíK–‰©!"«#™ */
- $"6F2A 4A78 A5F8 A059 BE4B 7DFF 5D41 1A31" /* o*Jx¥ø Y¾K}ÿ]A.1 */
- $"E688 045C BD1E D1DB 7C5B 6B89 5C22 3CAF" /* æˆ.\½.ÑÛ|[k‰\"<¯ */
- $"F133 FF14 13A2 9A3F 6E42 54EB 5082 9F25" /* ñ3ÿ..¢š?nBTëP‚Ÿ% */
- $"7C07 6BA6 25EA A890 3560 E915 B058 CB68" /* |.k¦%ê¨5`é.°XËh */
- $"3601 4B07 ACE7 EC8A 2897 F908 D405 455E" /* 6.K.¬çìŠ(—ù.Ô.E^ */
- $"5EDD 427E 791A EA3D 6ACE 3BC0 0D43 731A" /* ^ÝB~y.ê=jÎ;À.Cs. */
- $"C9C6 8C03 BD83 6F85 EF75 7246 2F8E 1CFB" /* ÉÆŒ.½ƒo…ïurF/Ž.û */
- $"8DC9 2726 593F 1D87 A822 399F 9770 324C" /* É'&Y?.‡¨"9Ÿ—p2L */
- $"6ABF 38B9 E89E B2F5 D575 E7DB C449 63CF" /* j¿8¹èž²õÕuçÛÄIcÏ */
- $"EBE1 07BB 80A4 C099 6A15 9A47 96F3 8C8D" /* ëá.»€¤À™j.šG–óŒ */
- $"49E1 1F78 2119 9460 CA7A F257 EDA1 104B" /* Iá.x!.”`ÊzòWí¡.K */
- $"5C68 0E57 188C 62B0 FBE3 CF4F 5251 6525" /* \h.W.Œb°ûãÏORQe% */
- $"CB59 5E3D C6F4 6B04 5B2D 1ED2 3BE1 02BB" /* ËY^=Æôk.[-.Ò;á.» */
- $"7207 12AA BFEC 50F4 83FE 2797 121B 3D14" /* r..ª¿ìPôƒþ'—..=. */
- $"DA23 BE41 D647 E5CA DD2D CD48 8C4D A094" /* Ú#¾AÖGåÊÝ-ÍHŒM ” */
- $"B1A9 4ED5 4735 8818 C4F1 597D 3211 5D12" /* ±©NÕG5ˆ.ÄñY}2.]. */
- $"D96B 5A38 AB9A 7E89 C503 13B0 8354 C887" /* ÙkZ8«š~‰Å..°ƒTȇ */
- $"F766 96F0 EDAE C6B6 17B4 E9A4 9230 C2F5" /* ÷f–ðí®Æ¶.´é¤’0Âõ */
- $"029D 3D72 A1CF 5BB9 E975 DBFF 06DC F5B2" /* .=r¡Ï[¹éuÛÿ.Üõ² */
- $"686F 667B AD3E 1D8D 5BE4 0D6A 2CD7 DE66" /* hof{­>.[ä.j,×Þf */
- $"BE8E C996 696D 58EC 6CFE 40AD 3C95 EAF1" /* ¾ŽÉ–imXìlþ@­<•êñ */
- $"4591 1D62 836E D2E3 4CD8 E4A6 F4F4 C456" /* E‘.bƒnÒãLØä¦ôôÄV */
- $"A70C B3BE AA22 A188 DAB5 D3F7 4B7B 865D" /* §.³¾ª"¡ˆÚµÓ÷K{†] */
- $"4D89 77E6 99A6 46C9 14BA 25E1 55C5 ADBD" /* M‰w晦FÉ.º%áUÅ­½ */
- $"4379 96AF 26DA A399 F009 AE75 248B 0285" /* Cy–¯&Ú£™ðÆ®u$‹.… */
- $"B370 5704 6429 C8AF 0BD3 A332 90B2 8351" /* ³pW.d)ȯ.Ó£2²ƒQ */
- $"F715 32C9 347B EADE 2EBB 9D97 BF95 0C5A" /* ÷.2É4{êÞ.»—¿•.Z */
- $"9203 1EC5 7A8E CF46 C28C 39A2 DE74 C656" /* ’..ÅzŽÏFÂŒ9¢ÞtÆV */
- $"F0BF 3ABF CE5F BE71 B7CE 2FF3 F41B F3EA" /* ð¿:¿Î_¾q·Î/óô.óê */
- $"8BE7 B07E AB17 4F87 74FC FDE8 EF9F BF3F" /* ‹ç°~«.O‡tüýè? */
- $"A9EB F3D5 3F3E 83BE 7BAF EA5F E0FE 7ADF" /* ©ëóÕ?>ƒ¾{¯ê_àþzß */
- $"E7A7 7F9D 3FE7 3BF9 FA77 F9FA 3FF9 F7C7" /* ç§.?ç;ùúwùú?ù÷Ç */
- $"E7E9 871D E84F CFE8 83FC FE85 E3BB E7E7" /* çé‡.èOÏèƒüþ…ã»çç */
- $"AFFE 7D7F F9F5 57E7 AF70 6F9D 2DF3 9ED7" /* ¯þ}.ùõWç¯po-óž× */
- $"C81E F903 FEAB 8EF9 F50D F254 3F3E A4D1" /* È.ù.þ«Žùõ.òT?>¤Ñ */
- $"DD53 F3F6 F37E 7EC9 4775 1BE4 77F9 EEBF" /* ÝSóöó~~ÉGu.äwùî¿ */
- $"9ED1 F9DC 00F7 91DD 3D8B A94D D83C 797F" /* žÑùÜ.÷‘Ý=‹©MØ<y. */
- $"4243 1F04 D29C 94E6 FA35 A9C7 9C1C 0762" /* BC..Òœ”æú5©Çœ..b */
- $"AA92 7DF8 65D6 B16D 30C6 E3F2 22D5 8971" /* ª’}øeÖ±m0Æãò"Õ‰q */
- $"F890 651C 37E3 1F4A 29A4 6637 D7AE 7CB9" /* øe.7ã.J)¤f7×®|¹ */
- $"14C7 D06B 2595 45F8 89DC DBAF B284 6ADA" /* .ÇÐk%•Eø‰ÜÛ¯²„jÚ */
- $"E4DB 9D25 F76C CDA3 EB7E 1B5A 4264 8145" /* äÛ%÷lÍ£ë~.ZBdE */
- $"547E 6F18 076D A675 BA1A 1AB1 0BF1 AEB6" /* T~o..m¦uº..±.ñ®¶ */
- $"C8C2 AAE0 489F 4E11 7F77 336A 41A4 C050" /* ȪàHŸN..w3jA¤ÀP */
- $"D19E AE10 BD35 C5EC DA71 BDEF A017 C32D" /* Ñž®.½5ÅìÚq½ï .Ã- */
- $"CB15 0C8E 0B75 C179 FB84 FDF2 DD5D C21F" /* Ë..Ž.uÁyû„ýòÝ]Â. */
- $"56A5 397D C437 A82F 65F9 2E68 A785 0AF3" /* V¥9}Ä7¨/eù.h§…Âó */
- $"B9F0 7781 E6B8 ACFA 09DC B57D 6317 B29B" /* ¹ðw測úÆÜµ}c.²› */
- $"C754 09FC 3635 9854 0DA1 A3BE D3EE CF40" /* ÇTÆü65˜T.¡£¾ÓîÏ@ */
- $"4BE4 A4D9 07C4 D65E 3887 C8A7 CD3A 83F5" /* Kä¤Ù.ÄÖ^8‡È§Í:ƒõ */
- $"DFA8 10A6 BB6D B811 852D 3877 8782 1E66" /* ߨ.¦»m¸.…-8w‡‚.f */
- $"AF11 43B8 CA3A 6146 3657 AFE0 B314 36CB" /* ¯.C¸Ê:aF6W¯à³.6Ë */
- $"8E1C 272D ED4B 634C AABA 0207 6A1A E2E3" /* Ž.'-íKcLªº..j.âã */
- $"C500 C0A4 894A BAD8 C9A1 0AE7 AC8D 750C" /* Å.À¤‰JºØÉ¡Âç¬u. */
- $"7D84 FBCC DB2E EE05 B04A 002B B383 46DE" /* }„ûÌÛ.î.°J.+³ƒFÞ */
- $"C18D 5BBD B442 9E88 BBB2 89CC 0EBA CF5A" /* Á[½´Bžˆ»²‰Ì.ºÏZ */
- $"5616 DDAB ED7B 4C2E 1C82 0C9D 4820 C0E8" /* V.Ý«í{L..‚.H Àè */
- $"1C4E 39A5 9041 9E33 A20A A73D 821A 238A" /* .N9¥Až3¢Â§=‚.#Š */
- $"3B24 14B9 D9A6 95AA F5B0 13C1 8CFD 790F" /* ;$.¹Ù¦•ªõ°.ÁŒýy. */
- $"33CB 82D3 FE12 0F27 F309 7453 05E0 DF8F" /* 3Ë‚Óþ..'óÆtS.àß */
- $"AAE8 F77A 31BA 0118 43E1 7AE7 69DC 5D12" /* ªè÷z1º..CázçiÜ]. */
- $"BD53 9858 EA6D D8D3 174C FE4C F487 3CCF" /* ½S˜XêmØÓ.LþLô‡<Ï */
- $"9098 7872 8FC3 EBAC 4C76 F503 6915 A1B3" /* ˜xrÃë¬Lvõ.i.¡³ */
- $"5FF8 81CD E13D D511 AAB8 5C7B 1376 C87F" /* _øÍá=Õ.ª¸\{.vÈ. */
- $"2DA1 557D 2053 3341 CC15 418C 0911 5378" /* -¡U} S3AÌ.AŒÆ.Sx */
- $"5FFE 324E 1412 2046 B049 3A77 69B7 417F" /* _þ2N.. F°I:wi·A. */
- $"AC17 B8B0 7FDA 6D19 59F0 DD68 8A88 E55A" /* ¬.¸°.Úm.YðÝhŠˆåZ */
- $"8098 0888 3714 713A 1D17 BB8D F01C 6005" /* €˜.ˆ7.q:..»ð.`. */
- $"8F2E 3D20 2753 1BB4 9BE3 DFD1 709F 99EB" /* .= 'S.´›ãßÑpŸ™ë */
- $"DFCC C1B1 717B 7FA3 52BB C12D E6B7 24D2" /* ßÌÁ±q{.£R»Á-æ·$Ò */
- $"F448 F23D C196 1BAA D61B F422 41B4 D620" /* ôHò=Á–.ªÖ.ô"A´Ö */
- $"466D 45F3 06F6 F631 3E88 5CDE F7F6 BC6F" /* FmEó.öö1>ˆ\Þ÷ö¼o */
- $"789C D06C 02CC 2E71 B6B0 03D2 297B BFCD" /* xœÐl.Ì.q¶°.Ò){¿Í */
- $"8C21 67AD CEE0 DB53 5749 A676 690C 11E3" /* Œ!g­ÎàÛSWI¦vi..ã */
- $"5AD2 905C 78E1 4AB0 E60E C920 4ECC 7CB6" /* ZÒ\xáJ°æ.É NÌ|¶ */
- $"A76F 70F1 BCFD AA1D F4D2 E43F E203 D0C8" /* §opñ¼ýª.ôÒä?â.ÐÈ */
- $"E11E 61AF F1A7 5762 600E 65BB D870 818A" /* á.a¯ñ§Wb`.e»ØpŠ */
- $"CDF0 DFC4 8C9C 1926 678B 2732 C52F 98FD" /* ÍðßÄŒœ.&g‹'2Å/˜ý */
- $"33B3 EE23 138D 5E5F C9C3 FEF9 6111 E3E6" /* 3³î#.^_ÉÃþùa.ãæ */
- $"AF79 A8A5 2949 D590 B463 EDF3 F72A 18FD" /* ¯y¨¥)IÕ´cíó÷*.ý */
- $"BB23 233B 7924 2DD1 A335 B949 467E A30C" /* »##;y$-Ñ£5¹IF~£. */
- $"3185 5FE5 DB63 6748 B22D AB3F 8A8C 0926" /* 1…_åÛcgH²-«?ŠŒÆ& */
- $"5450 E925 A69D 1185 7300 D694 EA1F 4DF2" /* TPé%¦.…s.Ö”ê.Mò */
- $"2413 F4ED 6D64 5B74 BBD5 0E65 26EF A8CD" /* $.ôímd[t»Õ.e&ï¨Í */
- $"5806 0C60 404F 90A0 06B6 AFD1 785F 9646" /* X..`@O .¶¯Ñx_–F */
- $"B1AD 2A45 5777 33FA 49DB 8D3D AC2A BAEA" /* ±­*EWw3úIÛ=¬*ºê */
- $"4527 B4DF 481A 6AB9 4485 05E6 7040 1B93" /* E'´ßH.j¹D….æp@.“ */
- $"D6E0 3BBF A334 E13B 68EC 934B C393 B621" /* Öà;¿£4á;hì“KÓ¶! */
- $"CFC8 69BE A6AC 672C 235E F1FC 4480 DE83" /* ÏÈi¾¦¬g,#^ñüD€Þƒ */
- $"32D7 D269 F78C F22D 5B9F F4DF DDDD D6DE" /* 2×Òi÷Œò-[ŸôßÝÝÖÞ */
- $"4C65 4D61 C1F0 26BF E4C3 D7C9 A034 163D" /* LeMaÁð&¿äÃ×É 4.= */
- $"FBAE 0167 4DF0 EBEF AA8B B742 2832 1F67" /* û®.gMðë懲·B(2.g */
- $"8CC0 80D0 4A6B 9843 DE59 2F7B F944 9DA4" /* ŒÀ€ÐJk˜CÞY/{ùD¤ */
- $"343D 9AD9 9E0B C7B5 0B7D 2CA1 F638 8A3B" /* 4=šÙž.ǵ.},¡ö8Š; */
- $"BB38 A39B 025A 9BA9 34AC ACF0 063D 5483" /* »8£›.Z›©4¬¬ð.=Tƒ */
- $"FE57 22E4 EB2C C699 AEF3 8EFB 1C8C A23A" /* þW"äë,Æ™®óŽû.Œ¢: */
- $"2C15 D2EF AC9A 91C9 993A 4CB0 2DDC 0A32" /* ,.Ò﬚‘É™:L°-ÜÂ2 */
- $"14B9 50D2 8579 8F9D 5AF2 88DB E726 1B39" /* .¹PÒ…yZòˆÛç&.9 */
- $"3E06 69F9 F300 09E4 D3E8 BB4C A704 10E0" /* >.iùó.ÆäÓè»L§..à */
- $"F1D0 53DE 91D8 6723 A047 11C7 57B3 C46C" /* ñÐSÞ‘Øg# G.ÇW³Äl */
- $"84A7 C2E1 C7CC 185C 9F21 7E2B 0F2E 64B1" /* „§ÂáÇÌ.\Ÿ!~+..d± */
- $"D734 4142 C65E A2FB 9ABE B62D 076B 2B65" /* ×4ABÆ^¢ûš¾¶-.k+e */
- $"9D6E 63F1 4825 79A9 3936 C7A7 531F EF6A" /* ncñH%y©96ǧS.ïj */
- $"F859 3084 0421 88A9 A648 8641 ACEB 95DE" /* øY0„.!ˆ©¦H†A¬ë•Þ */
- $"2E94 E3C9 442C 13AF CF63 0404 C5C6 5CE2" /* .”ãÉD,.¯Ïc..ÅÆ\â */
- $"CE90 F9CC A1B6 5713 031E C239 174F CC40" /* ÎùÌ¡¶W...Â9.OÌ@ */
- $"BCA4 EA9A EB6A 1D24 7962 F735 AF5A B937" /* ¼¤êšëj.$yb÷5¯Z¹7 */
- $"AC3B A12E 10A8 D332 6FE3 8ED1 6F01 B198" /* ¬;¡..¨Ó2oãŽÑo.±˜ */
- $"1543 A6A1 367E E226 5D76 B860 E0E1 8963" /* .C¦¡6~â&]v¸`àá‰c */
- $"AA7A F9EE DABF DB52 28F6 69F9 273F 8729" /* ªzùîÚ¿ÛR(öiù'?‡) */
- $"1D00 C7D2 20B9 3483 2125 88FC 94C0 54A6" /* ..ÇÒ ¹4ƒ!%ˆü”ÀT¦ */
- $"42FE F4E5 DA50 F495 F88B 5986 21CB 22E8" /* BþôåÚPô•ø‹Y†!Ë"è */
- $"EE5E 0622 2CB0 BCC8 0C6B 2B2B 23EB 0506" /* î^.",°¼È.k++#ë.. */
- $"A40F 09C2 726F 0C1F B8D4 55D3 2FE4 D629" /* ¤.ÆÂro..¸ÔUÓ/äÖ) */
- $"94C2 C913 BB28 4394 A9D2 8684 9E47 0445" /* ”ÂÉ.»(C”©Ò†„žG.E */
- $"B6CF 3E21 7072 B435 310C D7A3 063D 942B" /* ¶Ï>!pr´51.×£.=”+ */
- $"6AE9 350C 9442 C76E 1E6B A8C1 18A3 4309" /* jé5.”BÇn.k¨Á.£CÆ */
- $"6D55 E62F FC4E C4E9 6CF8 241D FAC5 2CC9" /* mUæ/üNÄélø$.úÅ,É */
- $"E020 6B12 31A6 9B11 710B 8850 FABE 5D63" /* à k.1¦›.q.ˆPú¾]c */
- $"068A 4018 2A90 93A5 9715 531E 8E7B AD7A" /* .Š@.*“¥—.S.Ž{­z */
- $"2921 115F 19CE 2B6A F643 DE89 2E76 890B" /* )!._.Î+jöCÞ‰.v‰. */
- $"5A69 1668 6A02 061F 4832 24EB FC82 6B4D" /* Zi.hj...H2$ëü‚kM */
- $"9B08 D22F CBBF D348 D18F 8B0C C684 6851" /* ›.Ò/Ë¿ÓHÑ‹.Æ„hQ */
- $"6CA9 E2FA 43CE 8A9A 7A58 FB28 0208 A6E0" /* l©âúCΊšzXû(..¦à */
- $"1ACF CE23 C624 5A38 C640 72C0 26F1 2818" /* .ÏÎ#Æ$Z8Æ@rÀ&ñ(. */
- $"07FD 74D9 F3D6 ED38 CA01 6485 CE8C 41A3" /* .ýtÙóÖí8Ê.d…ÎŒA£ */
- $"02C6 18E5 E4D2 2043 FA62 8768 3E14 7E80" /* .Æ.åäÒ Cúb‡h>.~€ */
- $"F2EB 67AD F743 75A0 2DDF 8724 1468 F88D" /* òëg­÷Cu -߇$.hø */
- $"9BF3 11EB 4D4C B372 D210 9B58 BAA0 646A" /* ›ó.ëML³rÒ.›Xº dj */
- $"222F 5E5A C781 1D86 5652 1B57 07AF C8FA" /* "/^ZÇ.†VR.W.¯Èú */
- $"9E77 DD7B FCB9 1D4C 8573 7B03 95AC D2DA" /* žwÝ{ü¹.L…s{.•¬ÒÚ */
- $"3314 4FFC CAF4 39B5 EAF4 9617 2CC5 9258" /* 3.OüÊô9µêô–.,Å’X */
- $"8F99 8C44 8D44 DA10 F1A5 51F7 5533 F13B" /* ™ŒDDÚ.ñ¥Q÷U3ñ; */
- $"CDDC B6D6 BE71 3C92 2628 3B69 DC32 C623" /* Íܶ־q<’&(;iÜ2Æ# */
- $"F497 3959 034A 67C3 10A8 26E2 572F B4B1" /* ô—9Y.JgÃ.¨&âW/´± */
- $"6C5C 3E47 FB9F AA7D D9A4 7A08 4BBA E854" /* l\>GûŸª}Ù¤z.KºèT */
- $"4370 CE77 C69A 11EB 1BD8 B9AF 8225 BC8E" /* CpÎwÆš.ë.ع¯‚%¼Ž */
- $"A261 1CAA A74D B531 A0B9 D462 35DF 9C21" /* ¢a.ª§Mµ1 ¹Ôb5ßœ! */
- $"73F1 EAC1 A13C E0BC AF6C 8111 03DF AF1F" /* sñêÁ¡<༯l..߯. */
- $"4748 1866 322C 535A 7C5E D2BC 4304 3541" /* GH.f2,SZ|^Ò¼C.5A */
- $"F14E 8412 296B 2C37 B642 9B4A 6417 EABB" /* ñN„.)k,7¶B›Jd.ê» */
- $"9034 1260 1B81 AFCC F903 4FAA A3F2 339E" /* 4.`.¯Ìù.Oª£ò3ž */
- $"F332 B080 8C32 31D7 4DEA B260 F190 43F1" /* ó2°€Œ21×Mê²`ñCñ */
- $"CCD5 A584 5C1C 343F FB87 CEA5 F246 8EAC" /* ÌÕ¥„\.4?û‡Î¥òFެ */
- $"C407 302C FEE7 3F59 F4B8 74ED ED62 D373" /* Ä.0,þç?Yô¸tííbÓs */
- $"A4BA B53A 0554 5403 9C2C E745 1087 5546" /* ¤ºµ:.TT.œ,çE.‡UF */
- $"2671 7BA6 3A33 703E BEF5 CD28 10A5 462B" /* &q{¦:3p>¾õÍ(.¥F+ */
- $"D902 9493 B2FC 176F 34BA 5A2D D2BC 0CBB" /* Ù.”“²ü.o4ºZ-Ò¼.» */
- $"5AB7 B854 08D3 CD79 3C71 1A89 E643 2FBC" /* Z·¸T.ÓÍy<q.‰æC/¼ */
- $"5A24 FEA6 EC06 1F23 79D9 3886 F6F4 7FB9" /* Z$þ¦ì..#yÙ8†öô.¹ */
- $"F892 1A20 DC66 1EB1 D6FD 1C48 52DE 4267" /* ø’. Üf.±Öý.HRÞBg */
- $"77E2 620B 2DC0 6828 575C F7CA 74BC FE73" /* wâb.-Àh(W\÷Êt¼þs */
- $"FABD C9ED 4E8F 71A7 8CCD 8D80 8BD2 8AA3" /* ú½ÉíNq§ŒÍ€‹ÒŠ£ */
- $"45C0 EF2A 387D 038E 8B00 BA81 12CD F93F" /* EÀï*8}.Ž‹.º.Íù? */
- $"E9BE 9134 2928 439B 69CF 3DB1 5DFC 3DAF" /* 龑4)(C›iÏ=±]ü=¯ */
- $"86CA 34A7 4574 C91C 3F99 3EA9 B6E9 F3AF" /* †Ê4§EtÉ.?™>©¶éó¯ */
- $"6757 09A3 C49E A9AD 7201 BFD9 B3FA 52B0" /* gWƣĞ©­r.¿Ù³úR° */
- $"0000 0030 908B 4E52 45F1 3CBE F04A D2E4" /* ...0‹NREñ<¾ðJÒä */
- $"83AF 6AEA 78E9 A438 C877 BAAD 65CB C703" /* ƒ¯jêxé¤8Èwº­eËÇ. */
- $"70B2 B9DD E19B 6B8C 0CE9 E402 0C9F 94F0" /* p²¹Ýá›kŒ.éä..Ÿ”ð */
- $"21BC 4E05 C03C 012A 66EF D0BC 2B72 292E" /* !¼N.À<.*fïм+r). */
- $"3592 1FDB 2A5C 8D2D C2FF 5C5B 6AB8 F695" /* 5’.Û*\-Âÿ\[j¸ö• */
- $"F279 2C54 0529 555A 6ACA 22A4 C28B D693" /* òy,T.)UZjÊ"¤Â‹Ö“ */
- $"1FC9 4492 43F3 A323 F990 0A31 9356 30D3" /* .ÉD’Có£#ùÂ1“V0Ó */
- $"D6F0 0D36 0091 043F F239 9D1E 114E 3693" /* Öð.6.‘.?ò9..N6“ */
- $"DF1C 23DF A27A 5B11 A44D 9199 07D1 AF2C" /* ß.#ߢz[.¤M‘™.ѯ, */
- $"63EB 21C5 D29F 8644 8C6A 129A 9CB9 ED72" /* cë!ÅÒŸ†DŒj.šœ¹ír */
- $"9286 3E0E B604 539A F262 B727 9284 01F9" /* ’†>.¶.Sšòb·'’„.ù */
- $"5AE1 DA5A 8A02 140E 5275 5433 BCDF 8038" /* ZáÚZŠ...RuT3¼ß€8 */
- $"0050 856F A747 857B 8376 255A 9185 28CC" /* .P…o§G…{ƒv%Z‘…(Ì */
- $"301A EC7C B5D3 89CC A695 1C87 8266 7CA8" /* 0.ì|µÓ‰Ì¦•.‡‚f|¨ */
- $"A203 7467 426E 9507 3DB3 1F90 F66B DC9F" /* ¢.tgBn•.=³.ökÜŸ */
- $"ACF6 CDB2 4FCC 5AE4 2F94 F555 CB9E D8AC" /* ¬öͲOÌZä/”õU˞ج */
- $"950B FF38 0FE4 5056 E5E8 F371 9A98 5697" /* •.ÿ8.äPVåèóqš˜V— */
- $"6319 5197 B545 E594 AADD B2F2 CA27 260D" /* c.Q—µE唪ݲòÊ'&. */
- $"9BAF 0E45 0846 5573 F96B 7AC1 CC89 E86E" /* ›¯.E.FUsùkzÁ̉èn */
- $"61E6 72E2 05E3 9F8D 26D8 F178 BCC0 0B18" /* aærâ.ãŸ&Øñx¼À.. */
- $"967C EA80 F7C1 45AE 8FAE A41C 41B6 438E" /* –|ê€÷ÁE®®¤.A¶CŽ */
- $"46EF 1094 D558 01A8 BBAD 7380 DA27 2772" /* Fï.”ÕX.¨»­s€Ú''r */
- $"9D67 1330 A48C 62EA 0643 14EC 3E22 A055" /* g.0¤Œbê.C.ì>" U */
- $"4E39 4E23 853D C587 99C8 CFD2 AEBB 9843" /* N9N#…=Ň™ÈÏÒ®»˜C */
- $"ECC9 0241 3253 8CF1 E068 1936 3BB2 56D3" /* ìÉ.A2SŒñàh.6;²VÓ */
- $"46F7 6A71 98D1 A300 1337 B3B0 7ABB 5752" /* F÷jq˜Ñ£..7³°z»WR */
- $"DB7A 7F85 5CFE 59DE A852 6987 DC11 C6B5" /* Ûz.…\þYÞ¨Ri‡Ü.Ƶ */
- $"E45B 7DD1 1F3A D566 C16D 3FBF 7BAD 7201" /* ä[}Ñ.:ÕfÁm?¿{­r. */
- $"B71C C74C A678 C2BB 10FD 534A 5E5D 79C0" /* ·.ÇL¦x».ýSJ^]yÀ */
- $"000C 2336 9113 B9C5 5D4A 1756 1C8B 0CD6" /* ..#6‘.¹Å]J.V.‹.Ö */
- $"AA8B DFF5 6CE3 CDAB B9B4 D85C 93FF 76AA" /* ª‹ßõlãÍ«¹´Ø\“ÿvª */
- $"15CF CF39 A864 B236 A172 03A1 65A1 9F76" /* .ÏÏ9¨d²6¡r.¡e¡Ÿv */
- $"FF55 00DE C7D0 C767 2787 9EB3 7CE5 C5BC" /* ÿU.ÞÇÐÇg'‡ž³|åż */
- $"8E08 6085 37A2 229C 73D3 2CC5 F6E8 AA1B" /* Ž.`…7¢"œsÓ,Åöèª. */
- $"AF13 15FD EB95 2609 6006 23C6 7910 8FFE" /* ¯..ýë•&Æ`.#Æy.þ */
- $"8C5E 60A6 A558 E899 0A05 0F37 EC94 8E51" /* Œ^`¦¥Xè™Â..7씎Q */
- $"7838 9A11 8483 88B0 E284 B88D CDEA 9D56" /* x8š.„ƒˆ°â„¸ÍêV */
- $"5C7E CFA2 8001 847E ABC9 360E 17EA 2D34" /* \~Ï¢€.„~«É6..ê-4 */
- $"8314 96C0 3810 D88F A54E 6E7C 6030 76FA" /* ƒ.–À8.Ø¥Nn|`0vú */
- $"18A4 A549 37FC 11F6 E77F A883 C794 71AC" /* .¤¥I7ü.öç.¨ƒÇ”q¬ */
- $"55F1 7F88 664A FEE4 01C4 5576 1BE6 9C41" /* Uñ.ˆfJþä.ÄUv.æœA */
- $"D800 6121 2FC0 E681 A16E 21AF D5FE 0E80" /* Ø.a!/Àæ¡n!¯Õþ.€ */
- $"A800 0000 3090 8C40 9184 82DA 7187 51C6" /* ¨...0Œ@‘„‚Úq‡QÆ */
- $"44DC C420 FF13 98AD D100 2C07 132C 8D6C" /* DÜÄ ÿ.˜­Ñ.,..,l */
- $"5D16 A089 D8F6 E77F A870 24F1 5461 DB69" /* ]. ‰Øöç.¨p$ñTaÛi */
- $"0F41 5029 7A41 B55F 0000 0184 846A 850C" /* .AP)zAµ_...„„j…. */
- $"241E E628 EDA6 4000 3090 6AA2 F6E7 7FA6" /* $.æ(í¦@.0j¢öç.¦ */
- $"26C9 5EDE 9BB6 A1B1 51E6 8D5D F800 0061" /* &É^Þ›¶¡±Qæ]ø..a */
- $"19B3 E47D 6F6F DB03 0885 4A53 27BA 38F5" /* .³ä}ooÛ..…JS'º8õ */
- $"35A0 1AB9 0A95 8FAE 85E3 F528 5A8B E645" /* 5 .¹Â•®…ãõ(Z‹æE */
- $"8419 0456 6A38 D0DA 4948 8987 2323 1216" /* „..Vj8ÐÚIH‰‡##.. */
- $"A4F8 FD1A C374 D30C BF43 CD86 B984 F23C" /* ¤øý.ÃtÓ.¿C͆¹„ò< */
- $"5487 B47F E217 F15A D8CF A66A 96A9 EAF3" /* T‡´.â.ñZØÏ¦j–©êó */
- $"F966 0205 D320 1556 5C3C 073A 8E66 1E3F" /* ùf..Ó .V\<.:Žf.? */
- $"A74E FF2C BC45 E9DB 3B25 FF7F 46AD 13A9" /* §Nÿ,¼EéÛ;%ÿ.F­.© */
- $"5C21 458B 6AD4 829C 1DFB 54BA E5F2 3C76" /* \!E‹jÔ‚œ.ûTºåò<v */
- $"3898 11F6 D710 7470 00FC 0742 CA59 9E40" /* 8˜.ö×.tp.ü.BÊYž@ */
- $"757C 5952 61FF 4D28 0991 1673 9B01 06B9" /* u|YRaÿM(Æ‘.s›..¹ */
- $"3999 E9B5 06CD B1DA CB08 FF19 DE70 8D10" /* 9™éµ.ͱÚË.ÿ.Þp. */
- $"E725 848E D27D 2B0B 54F0 B60B 26AB CD92" /* ç%„ŽÒ}+.Tð¶.&«Í’ */
- $"E4F8 C007 FF68 6933 E2FF 31D5 435B FF7F" /* äøÀ.ÿhi3âÿ1ÕC[ÿ. */
- $"9A8E 9845 007F FEDA 4C63 9892 513A ABD9" /* šŽ˜E..þÚLc˜’Q:«Ù */
- $"A98A C012 5C99 31C0 D48F E334 671D A695" /* ©ŠÀ.\™1ÀÔã4g.¦• */
- $"C7EF 3AAA FF37 D381 4F42 983F FC4D AE82" /* Çï:ªÿ7ÓOB˜?üM®‚ */
- $"FF43 6555 9E7F 10A3 7B95 415D 41FF 20B3" /* ÿCeUž..£{•A]Aÿ ³ */
- $"8CB1 7302 0000 0000 584E AB14 398C A865" /* Œ±s.....XN«.9Œ¨e */
- $"5A7B 1650 52EB 8BCE 3E92 461D 071B 8F21" /* Z{.PRë‹Î>’F...! */
- $"2CFF 4F5F FD2E 999E B77D A47D 61B4 2C01" /* ,ÿO_ý.™ž·}¤}a´,. */
- $"D397 493D CB48 AB27 EB4A 13A7 8C89 7F64" /* Ó—I=ËH«'ëJ.§Œ‰.d */
- $"6C08 FF21 9696 98C7 6248 1615 541F EC81" /* l.ÿ!––˜ÇbH..T.ì */
- $"8E18 FAED 5257 3D01 2CBB 74C1 DA64 81A0" /* Ž.úíRW=.,»tÁÚd  */
- $"39BF B272 4068 15E8 A44A 007C 732C D9DC" /* 9¿²r@h.è¤J.|s,ÙÜ */
- $"1CF8 4612 8611 A36D 67BC 6E6A EA14 9D87" /* .øF.†.£mg¼njê.‡ */
- $"2962 C4B4 5442 9564 BFAA D0FB 991F 4288" /* )bÄ´TB•d¿ªÐû™.Bˆ */
- $"7CB2 2A41 333E 7827 5070 F3A6 67FF 7FFF" /* |²*A3>x'Ppó¦gÿ.ÿ */
- $"7601 CFFE E44B 4413 809B 3877 B59D BC19" /* v.ÏþäKD.€›8wµ¼. */
- $"548F 0A5B C1E9 A8D7 6B5D 8EC8 8A1A BB3D" /* TÂ[Áé¨×k]ŽÈŠ.»= */
- $"3CD1 3139 57CF 9E94 00E9 CF6E 3830 3561" /* <Ñ19WÏž”.éÏn805a */
- $"8DE4 A59F FD1B 45CF C608 D0FD 5D48 485E" /* 䥟ý.EÏÆ.Ðý]HH^ */
- $"D5A3 30A5 F9EE 5D55 B9C2 E552 3A9F B087" /* Õ£0¥ùî]U¹ÂåR:Ÿ°‡ */
- $"FE87 5DBC 5E73 0F16 9221 2B0D F399 AB6F" /* þ‡]¼^s..’!+.ó™«o */
- $"9950 0000 0000 0000 0008 2444 88CE 3BBD" /* ™P........$DˆÎ;½ */
- $"CC78 4932 9C47 DEFA 74E7 91BF 9827 FF7B" /* ÌxI2œGÞútç‘¿˜'ÿ{ */
- $"77EB 9B1B 9F7F FDAB 6552 35A1 0C22 E9C6" /* wë›.Ÿ.ý«eR5¡."éÆ */
- $"42E3 FF7F FF7F E9FD A23B 2F7D 3ADD FC90" /* Bãÿ.ÿ.éý¢;/}:Ýü */
- $"E4A1 F8B9 0560 0F86 D7FE 3F46 C953 2A03" /* 䡸¹.`.†×þ?FÉS*. */
- $"F1C7 F5AE D0C4 B743 EA67 B694 E47D 45CD" /* ñÇõ®ÐÄ·Cêg¶”ä}EÍ */
- $"6F92 178A E383 8B71 800E D9AF A55A F149" /* o’.Šãƒ‹q€.Ù¯¥ZñI */
- $"A838 5671 4C9A 8915 447A CDA9 C6B7 DD68" /* ¨8VqLš‰.DzͩƷÝh */
- $"A5FB F404 CF63 A62E CC5E 89D3 FDB2 C841" /* ¥ûô.Ïc¦.Ì^‰Óý²ÈA */
- $"7A37 5B5D 5958 4B46 20B1 D389 5188 F9FE" /* z7[]YXKF ±Ó‰Qˆùþ */
- $"8FF1 D718 6C8C 3254 0000 0000 0000 0000" /* ñ×.lŒ2T........ */
- $"0000 00A1 EBEC C33A 8622 D0FF 7FFF 7FFF" /* ...¡ëìÃ:†"Ðÿ.ÿ.ÿ */
- $"705D C7FE 49E7 01B7 A65D D5BC 2041 80B0" /* p]ÇþIç.·¦]Õ¼ A€° */
- $"89ED F68A A000 F438 EBD0 C908 0B67 414F" /* ‰íöŠ .ô8ëÐÉ..gAO */
- $"C8F1 4312 2EC8 05E6 CA19 184F FF5B BA24" /* ÈñC..È.æÊ..Oÿ[º$ */
- $"57E8 A6B4 FBD3 FF79 4D8E FF44 BC50 6938" /* W覴ûÓÿyMŽÿD¼Pi8 */
- $"137F FF7D 6251 8D1A 9B33 CF7E 0BCB EAD7" /* ..ÿ}bQ.›3Ï~.Ëê× */
- $"2E0D EAE0 0003 0906 AA2B 66A8 C950 0000" /* ..êà..Æ.ª+f¨ÉP.. */
- $"0000 0000 0000 0000 0001 1E1F F600 1848" /* ............ö..H */
- $"4BF6 7A7C F92D 3E7A 437E 2254 51EB 4AF5" /* Köz|ù->zC~"TQëJõ */
- $"C6BF 442A 12CD 51FF 7FFE B8AE D0C4 B1D0" /* Æ¿D*.ÍQÿ.þ¸®ÐıР*/
- $"7CF7 019D A0ED 2CC4 01BC 1A94 212D 43EF" /* |÷. í,Ä.¼.”!-Cï */
- $"1274 9B67 94D5 062D 5FCC E23C 4816 416B" /* .t›g”Õ.-_Ìâ<H.Ak */
- $"1540 59C2 1D35 213D A11C EE70 8D15 5394" /* .@YÂ.5!=¡.îp.S” */
- $"53C6 29CF 4E19 F4CF 5B94 7FFF 7F8B 2813" /* SÆ)ÏN.ôÏ[”.ÿ.‹(. */
- $"3E95 DE81 30D0 3188 2A75 4F35 CB11 DDD5" /* >•Þ0Ð1ˆ*uO5Ë.ÝÕ */
- $"7FFD A983 95A9 71E7 A7A3 7D3F F944 0A7E" /* .ý©ƒ•©qç§£}?ùDÂ~ */
- $"24D9 966F 6B6A 0FD0 23AC 7000 0000 0000" /* $Ù–okj.Ð#¬p..... */
- $"0009 D4AF 9196 E5A4 B8AC 407F F9EE C709" /* .ÆÔ¯‘–夸¬@.ùîÇÆ */
- $"F927 08C3 CA6C 3A3A D90F E306 BCC4 6D6C" /* ù'.ÃÊl::Ù.ã.¼Äml */
- $"C7A9 F042 6F4C FDC9 60AB A087 6338 8F12" /* Ç©ðBoLýÉ`« ‡c8. */
- $"4D29 D00C C575 C7B5 9FA4 E96C 1FA0 AAFB" /* M)Ð.ÅuǵŸ¤él. ªû */
- $"09E9 8DF9 1BE0 C62D 3C1D F55B DD77 A0FD" /* Æéù.àÆ-<.õ[Ýw ý */
- $"5C16 D959 BA08 0000 0000 0000 0145 AE01" /* \.ÙYº........E®. */
- $"712A 0E06 1212 70CD 94A8 0A2C 18F5 1E3B" /* q*....pÍ”¨Â,.õ.; */
- $"52FA C8F6 56F3 F7E4 69E6 54A0 3FF6 2487" /* RúÈöVó÷äiæT ?ö$‡ */
- $"C65F 0EFF 7F4F 8D07 C817 FE78 727D 3C75" /* Æ_.ÿ.O.È.þxr}<u */
- $"E4C6 1003 FECF 3E7E 6252 08C0 4A83 50D7" /* äÆ..þÏ>~bR.ÀJƒP× */
- $"DADA 8602 5949 900F D2B6 D10D 2661 3014" /* ÚÚ†.YI.Ò¶Ñ.&a0. */
- $"4541 17FF 2106 00DF AC82 0046 09BB A5AF" /* EA.ÿ!..߬‚.FÆ»¥¯ */
- $"CE51 0EBF F9AD 787A 907F 9F9A 628F E16B" /* ÎQ.¿ù­xz.Ÿšbák */
- $"C015 137E 9C68 FCFA A817 FF7F DD6B FDB6" /* À..~œhüú¨.ÿ.Ýký¶ */
- $"3DA3 7C9D 3309 0B8A B551 C370 4401 CD7F" /* =£|3Æ.еQÃpD.Í. */
- $"7503 8425 E297 1B3F FF49 4FF8 3583 685A" /* u.„%â—.?ÿIOø5ƒhZ */
- $"B273 A7F7 CEBF F27E D78C 3E35 5332 152B" /* ²s§÷οò~׌>5S2.+ */
- $"033C C7FF 7B97 1AF0 F2A4 3C88 CC7B B96E" /* .<Çÿ{—.ðò¤<ˆÌ{¹n */
- $"65B3 533C F2F8 5E4B 6DBF 7D78 A316 310F" /* e³S<òø^Km¿}x£.1. */
- $"6B09 FD62 88D7 77FF 7447 524E C235 00A3" /* kÆýbˆ×wÿtGRNÂ5.£ */
- $"8F5A 4BEE D240 6154 C17C 2CC2 68F0 A959" /* ZKîÒ@aTÁ|,Âhð©Y */
- $"2F12 9B74 7E8E 423F BB1D BC9A C75B C618" /* /.›t~ŽB?».¼šÇ[Æ. */
- $"19D1 C6CB 0A15 BD77 99BD 96D3 CC07 F5AC" /* .ÑÆËÂ.½w™½–ÓÌ.õ¬ */
- $"D2ED DE5E F19D 5CFC B2B0 5407 0386 32C6" /* ÒíÞ^ñ\ü²°T..†2Æ */
- $"5F49 7BAD 3270 BF81 CF97 C934 7E23 7237" /* _I{­2p¿Ï—É4~#r7 */
- $"727B 0FA2 6DB0 D717 8C73 B109 E089 AAC5" /* r{.¢m°×.Œs±Æà‰ªÅ */
- $"7D98 9061 2956 EA75 0135 E870 3430 4E9B" /* }˜a)Vêu.5èp40N› */
- $"C76C D3D6 7EEB 83DB 9EEB C9A0 983D 1327" /* ÇlÓÖ~ëƒÛžëÉ ˜=.' */
- $"62D8 FD62 CA51 7135 80B0 ABFF 431B 9843" /* bØýbÊQq5€°«ÿC.˜C */
- $"68B4 A929 44E4 1F3E E3A1 22AA 5E87 579C" /* h´©)Dä.>ã¡"ª^‡Wœ */
- $"745B 9CA4 438C BFC2 9A1B 17BE BA75 06E4" /* t[œ¤CŒ¿Âš..¾ºu.ä */
- $"0108 698C E4F2 341C 24CC 7913 6237 ED48" /* ..iŒäò4.$Ìy.b7íH */
- $"E797 4D7A 0D5A D1EA ACDF F974 4F9F 9139" /* ç—Mz.ZÑê¬ßùtOŸ‘9 */
- $"6A87 3972 A1C8 0A2B 1E8B 6DB7 B811 4AB0" /* j‡9r¡ÈÂ+.‹m·¸.J° */
- $"EEE8 BB23 959C 239D 4165 DBED ACE4 F133" /* îè»#•œ#AeÛí¬äñ3 */
- $"8276 40BB C447 29FE 3EB6 5BA4 A6D0 2441" /* ‚v@»ÄG)þ>¶[¤¦Ð$A */
- $"1431 8B2D 8BFD 96B7 C8C2 9F9B DFB9 2B06" /* .1‹-‹ý–·ÈŸ›ß¹+. */
- $"E191 00FF 7E4B 8281 D609 D163 B8CB AF9A" /* á‘.ÿ~K‚ÖÆÑc¸Ë¯š */
- $"0995 7385 27FC 3C6A 5310 024D BAD1 8013" /* Æ•s…'ü<jS..MºÑ€. */
- $"8995 3DF4 FA80 FE12 8F5F 40E5 09E6 E7E8" /* ‰•=ôú€þ._@寿çè */
- $"C5E7 1309 3E97 E278 0228 1693 F565 F83E" /* Åç.Æ>—âx.(.“õeø> */
- $"4161 0037 E0AA D0CC 3AED 4E56 04E8 4456" /* Aa.7àªÐÌ:íNV.èDV */
- $"6E50 4626 C7E0 0790 014E 329B 0DDB D87D" /* nPF&Çà..N2›.ÛØ} */
- $"4532 6482 3F51 D651 3F62 D6EB 3BCA 75EB" /* E2d‚?QÖQ?bÖë;Êuë */
- $"5444 A42F 3CFB 4146 19FB 5376 876F 6BC1" /* TD¤/<ûAF.ûSv‡okÁ */
- $"B80B 7787 71DF 4CAA D70A 98BC 98E1 15A1" /* ¸.w‡qßLª×˜¼˜á.¡ */
- $"7996 F17F FF7A 91CF 350C FA04 5753 7ECB" /* y–ñ.ÿz‘Ï5.ú.WS~Ë */
- $"29F1 A4AD F335 59DB A580 EAA3 98AD FEB0" /* )ñ¤­ó5YÛ¥€ê£˜­þ° */
- $"275E BABE 6679 9AD4 B246 75F2 ECAA B042" /* '^º¾fyšÔ²Fuò쪰B */
- $"92C9 745E 1C58 58FF 2570 9228 4EAF 6F65" /* ’Ét^.XXÿ%p’(N¯oe */
- $"56F3 1D0C 85AA 9468 8000 0000 0101 3082" /* Vó..…ª”h€.....0‚ */
- $"08FD E30F FF75 70BF FCCA 2225 E5FC 3464" /* .ýã.ÿup¿üÊ"%åü4d */
- $"00CA 6C43 E833 80DE 2895 5F84 4B08 CEFA" /* .ÊlCè3€Þ(•_„K.Îú */
- $"AA94 EE33 24E7 CA20 A668 4717 FD5F F7F2" /* ª”î3$çÊ ¦hG.ý_÷ò */
- $"59E7 D6C6 6D0D 8E0F 1AC3 BBFA 3890 8ACB" /* YçÖÆm.Ž..ûú8ŠË */
- $"9250 6D82 E892 D4B9 1F14 D987 9818 877A" /* ’Pm‚è’Ô¹..Ù‡˜.‡z */
- $"66F0 905A B088 D761 B529 F02A 6964 6C65" /* fðZ°ˆ×aµ)ð*idle */
- $"8FB8 9A87 7771 9A12 C8A6 7F9C 9905 D643" /* ¸š‡wqš.Ȧ.œ™.ÖC */
- $"E554 91F5 0C26 4299 30C6 BC87 B38C 86FB" /* åT‘õ.&B™0Ƽ‡³Œ†û */
- $"ED50 C019 3822 52A8 97C6 1F49 176D FB8C" /* íPÀ.8"R¨—Æ.I.mûŒ */
- $"87B7 E37C 196E 3695 357A E2B8 FDE5 736E" /* ‡·ã|.n6•5zâ¸ýåsn */
- $"DF11 6026 3CD9 51CF 2A50 6F8A 53B0 0F16" /* ß.`&<ÙQÏ*PoŠS°.. */
- $"938B 745A F84D 571C A582 9723 90B4 49D7" /* “‹tZøMW.¥‚—#´I× */
- $"B11D 7BA6 45C1 2AFA D519 A471 60A3 17A9" /* ±.{¦EÁ*úÕ.¤q`£.© */
- $"2C13 6E04 D58E 3F37 0115 E4AE F51C 1BA8" /* ,.n.ÕŽ?7..ä®õ..¨ */
- $"EF7F 4C9F 7B47 8C5A D1D6 CAC7 D416 D6D4" /* ï.LŸ{GŒZÑÖÊÇÔ.ÖÔ */
- $"7F05 9504 5685 0D6D E0E8 6809 9307 7864" /* ..•.V….màèhÆ“.xd */
- $"1A86 1BA6 A321 D08C 1B0C 0981 9395 6DC0" /* .†.¦£!ÐŒ..Æ“•mÀ */
- $"C74F ECF7 CA1B FF4B 1896 BDBE 4876 8A4B" /* ÇOì÷Ê.ÿK.–½¾HvŠK */
- $"519F CC3C 7813 BE21 C40C B001 30F4 4FC7" /* QŸÌ<x.¾!Ä.°.0ôOÇ */
- $"B76C B9FA 26F6 38C8 116D B8F0 0B9D 818F" /* ·l¹ú&ö8È.m¸ð. */
- $"56F9 F934 AE60 71FD E583 8D07 A4A4 DE41" /* Vùù4®`qýåƒ.¤¤ÞA */
- $"FB75 B83F 384B 11C9 CC5E CD9D FF4C 05A8" /* ûu¸?8K.ÉÌ^ÍÿL.¨ */
- $"D59F 1E59 4797 FF7F DFD8 391C E8BA 72E2" /* ÕŸ.YG—ÿ.ߨ9.èºrâ */
- $"C1F8 9F5C 5317 01E3 EC2D 4120 97D2 BAEC" /* ÁøŸ\S..ãì-A —Òºì */
- $"DBB0 FF30 FC56 2E43 3716 1B7B A8CD 19AE" /* Û°ÿ0üV.C7..{¨Í.® */
- $"7FFF 7FF4 468B FF45 749B 3C67 EE31 1651" /* .ÿ.ôF‹ÿEt›<gî1.Q */
- $"17B2 B21C A982 A185 E8A3 03BC 2DCB C09A" /* .²².©‚¡…è£.¼-ËÀš */
- $"8522 64CF BB21 6955 068D F002 871B 05F3" /* …"dÏ»!iU.ð.‡..ó */
- $"9F44 7384 D624 E1FA A24D 67C7 BC5E F7BF" /* ŸDs„Ö$áú¢MgǼ^÷¿ */
- $"59BC DC3C BE4B 1456 0C6F F2C1 0841 038D" /* Y¼Ü<¾K.V.oòÁ.A. */
- $"723C 14FA 4F19 0AD4 1F88 0A1B FF14 3D93" /* r<.úO.ÂÔ.ˆÂ.ÿ.=“ */
- $"27AA 6E0B 4AA7 6A11 E06D 5D82 C930 1B53" /* 'ªn.J§j.àm]‚É0.S */
- $"0227 A9AA 253A 41E6 31D5 8B87 DC08 819B" /* .'©ª%:Aæ1Õ‹‡Ü.› */
- $"E5EE EA0F 6AA0 0000 0006 9BC0 594E 0004" /* åîê.j ....›ÀYN.. */
- $"D326 312C 0364 8835 C4D7 5040 3724 3CD9" /* Ó&1,.dˆ5Ä×P@7$<Ù */
- $"B889 2E14 12BC F0AD 9D2E 326B 1654 5952" /* ¸‰...¼ð­.2k.TYR */
- $"2B5F 1A9D 5403 C9C5 A731 1B3C 3443 783C" /* +_.T.Éŧ1.<4Cx< */
- $"A459 248B BBC7 DEDC 74AD E2A1 D647 5047" /* ¤Y$‹»ÇÞÜt­â¡ÖGPG */
- $"AD17 15AF FF5C 88C4 025F 4361 3F83 BFC9" /* ­..¯ÿ\ˆÄ._Ca?ƒ¿É */
- $"FF6D 7E58 128D 33D7 7076 E73A 9CF6 76D8" /* ÿm~X.3×pvç:œövØ */
- $"A0FF 2C44 2029 0B59 B427 3BDC 915B 87CF" /*  ÿ,D ).Y´';Ü‘[‡Ï */
- $"75D6 EC52 7793 6DFA A4E2 9E2D 7D25 FBC2" /* uÖìRw“mú¤âž-}%û */
- $"2028 DE78 D868 BEC5 E9D2 BFFA 8B12 9265" /* (ÞxØh¾ÅéÒ¿ú‹.’e */
- $"B01D 92F7 F71E 8782 F1CD 4E98 B46E 6DA5" /* °.’÷÷.‡‚ñÍN˜´nm¥ */
- $"8825 F851 1CE9 9F21 D8E2 86EB BAF4 126F" /* ˆ%øQ.éŸ!Øâ†ëºô.o */
- $"9CB3 0144 009A 6F38 0919 9C1F D0CE D23C" /* œ³.D.šo8Æ.œ.ÐÎÒ< */
- $"C9DD 9273 D8F6 6733 6E5A 2E7A 635C 8723" /* ÉÝ’sØög3nZ.zc\‡# */
- $"6E04 1283 1A43 02CA 74E4 8000 0309 08DB" /* n..ƒ.C.Êtä€..Æ.Û */
- $"EF05 DC00 D116 0D58 1A69 2055 1BA0 D8DE" /* ï.Ü.Ñ..X.i U. ØÞ */
- $"34B6 EA40 CC06 C673 559A 75F2 9B58 C474" /* 4¶ê@Ì.ÆsUšuò›XÄt */
- $"DD4C AB9A 9E6D 653B FCDF 4F33 3707 105E" /* ÝL«šžme;üßO37..^ */
- $"DBCE D327 45FB C663 E1AF 375B B106 B0B8" /* ÛÎÓ'EûÆcá¯7[±.°¸ */
- $"26EE AE4B 538A CF74 588E 928B 58C7 2D93" /* &î®KSŠÏtXŽ’‹XÇ-“ */
- $"371E BC81 0ED0 9F2C 1A18 8DD7 7E65 4FBF" /* 7.¼.П,..×~eO¿ */
- $"511B 63A1 8F26 2A08 A4D3 2BF3 96E6 FC32" /* Q.c¡&*.¤Ó+ó–æü2 */
- $"D457 8287 D843 6D19 2458 0EA4 AC8F 0512" /* ÔW‚‡ØCm.$X.¤¬.. */
- $"831D D4CA 9BFF 5A6E 951A 5897 451F 750C" /* ƒ.ÔÊ›ÿZn•.X—E.u. */
- $"CAD4 89C1 94A7 4BFA 4030 4828 1E37 C049" /* ÊÔ‰Á”§Kú@0H(.7ÀI */
- $"34C4 54B1 1054 2645 14E5 6DFF 7FFF 7328" /* 4ÄT±.T&E.åmÿ.ÿs( */
- $"F1A4 AAA2 4FD2 507D 86D5 FF7F FA43 F49A" /* ñ¤ª¢OÒP}†Õÿ.úCôš */
- $"5049 0839 5964 8186 EE46 1867 158E 9E2C" /* PI.9Yd†îF.g.Žž, */
- $"D618 8FF5 D416 6838 6187 9CF7 21BC DE1F" /* Ö.õÔ.h8a‡œ÷!¼Þ. */
- $"F84F F4E9 ACDB ECD8 6CA6 6725 85B4 4049" /* øOôé¬ÛìØl¦g%…´@I */
- $"AA9E 4935 7E1F 54E7 B0D5 A026 B073 899B" /* ªžI5~.Tç°Õ &°s‰› */
- $"51C4 8C2E 483C B3BF 38A0 4BCF 2042 EE90" /* QÄŒ.H<³¿8 KÏ Bî */
- $"4E1B 8C94 420F 99A7 9EA1 7D96 12A3 8C8D" /* N.Œ”B.™§ž¡}–.£Œ */
- $"819B C97D C518 51CB 0D8A A7A1 7159 EB10" /* ›É}Å.QË.Ч¡qYë. */
- $"4A27 5CD0 0ED7 2688 5F74 CE10 DF6A 5B4F" /* J'\Ð.×&ˆ_tÎ.ßj[O */
- $"E370 A282 105D 2F43 6E74 6B07 05EC 880E" /* ãp¢‚.]/Cntk..ìˆ. */
- $"15AF 5118 9D27 327D 2552 9996 020B 2D9A" /* .¯Q.'2}%R™–..-š */
- $"9AFC 6849 6068 6491 42FA 889C 7949 285A" /* šühI`hd‘BúˆœyI(Z */
- $"7FFE 5B6D DAF2 7FFF 772D E08E B9E4 65A3" /* .þ[mÚò.ÿw-àŽ¹äe£ */
- $"B49A DDC8 FF52 8DA3 B318 F84F F4E9 99ED" /* ´šÝÈÿR£³.øOôé™í */
- $"48C4 CA7E BE77 2634 6A22 1FAD 4752 8D9B" /* HÄÊ~¾w&4j".­GR› */
- $"B935 0449 1A27 9EAB B000 C242 3BB7 72B7" /* ¹5.I.'ž«°.ÂB;·r· */
- $"3ACC B41F 0AC9 CFFD 58DA D99F 498A 21CF" /* :Ì´.ÂÉÏýXÚÙŸIŠ!Ï */
- $"50B8 A155 9BB3 B3DA 13FE 251F 14F2 3431" /* P¸¡U›³³Ú.þ%..ò41 */
- $"6DBF 2774 3EFC 55BB 9CB3 40A4 CA00 A112" /* m¿'t>üU»œ³@¤Ê.¡. */
- $"3E83 51D4 9D13 DE0D F86D 3384 AAE7 9074" /* >ƒQÔ.Þ.øm3„ªçt */
- $"F7CF 4509 F99A 70B2 2E74 43C3 1363 021F" /* ÷ÏEÆùšp².tCÃ.c.. */
- $"6482 E471 22FA 6265 2DF9 C302 43F8 9053" /* d‚äq"úbe-ùÃ.CøS */
- $"0AE9 15A2 28D4 FD7C 05AF C7B8 26D5 7C0F" /* Âé.¢(Ôý|.¯Ç¸&Õ|. */
- $"22E0 4735 518D BE4B 4E83 1EF8 3FFA BA23" /* "àG5Q¾KNƒ.ø?úº# */
- $"3AE8 F76B 1D92 2038 64C1 EA73 30FC CE72" /* :è÷k.’ 8dÁês0üÎr */
- $"0CA5 6697 157E 55C4 8BAE E703 6FF5 F743" /* .¥f—.~UÄ‹®ç.oõ÷C */
- $"B456 C85F 3BFF 2629 95B7 02F4 F580 A49B" /* ´VÈ_;ÿ&)•·.ôõ€¤› */
- $"1587 2316 D131 66C1 C6DB F3DC C409 D801" /* .‡#.Ñ1fÁÆÛóÜÄÆØ. */
- $"E2DA 30B6 73FD 99EF AA26 25D7 DF07 FBEB" /* âÚ0¶sý™ïª&%×ß.ûë */
- $"094E 2E8E BD11 3C49 81BA E6BE 7666 ECBE" /* ÆN.޽.<Iºæ¾vfì¾ */
- $"59D2 4ACC B4CE 3FAD 2173 25CB E42F 37B8" /* YÒJÌ´Î?­!s%Ëä/7¸ */
- $"F3CC 79EF 695C 10F4 0381 2D14 1B0F D632" /* óÌyïi\.ô.-...Ö2 */
- $"8A1E 9C29 F617 6A4B 204E A147 C08D 1AA5" /* Š.œ)ö.jK N¡GÀ.¥ */
- $"7418 DED9 DE83 A555 A75B AB00 C650 247F" /* t.ÞÙÞƒ¥U§[«.ÆP$. */
- $"0222 5558 731B 54DB 14F6 3A0E 1FAD A8D8" /* ."UXs.TÛ.ö:..­¨Ø */
- $"F327 DC8F AF3F 630B 3BA9 7933 8D30 458C" /* ó'ܯ?c.;©y30EŒ */
- $"4C2F 6E3A 0A64 DDC5 926A 71CB 2347 EE4D" /* L/n:ÂdÝÅ’jqË#GîM */
- $"647B D94D BE24 7F62 6A14 EBE2 696F 8735" /* d{ÙM¾$.bj.ëâio‡5 */
- $"A96F E268 6912 A4A9 3254 0293 CB09 0DC0" /* ©oâhi.¤©2T.“ËÆ.À */
- $"206B EB7B F6B9 0643 5E74 4F2C 555A AE2D" /* kë{ö¹.C^tO,UZ®- */
- $"B16B 7FA3 8ADE 7EAC 764F 9A20 BC94 05F1" /* ±k.£ŠÞ~¬vOš ¼”.ñ */
- $"9AAC 0118 36B8 6B30 D696 6E84 EEC2 5342" /* š¬..6¸k0Ö–n„îÂSB */
- $"03A8 EFD3 CB37 D50D F676 35DB AD6C 280A" /* .¨ïÓË7Õ.öv5Û­l( */
- $"DB04 D23A 0922 A2E3 5F45 EBD1 5C49 F6AA" /* Û.Ò:Æ"¢ã_EëÑ\Iöª */
- $"4579 1BA2 D94E D3F0 7A7E C24E 79B0 5D24" /* Ey.¢ÙNÓðz~ÂNy°]$ */
- $"B98E 23E7 4C4F 54D9 A3CE 389F 63F6 2426" /* ¹Ž#çLOTÙ£Î8Ÿcö$& */
- $"7087 D921 86D6 709F 768D 5684 BB90 47B7" /* p‡Ù!†ÖpŸvV„»G· */
- $"AC32 98D7 E247 3668 E954 8105 EE44 AF58" /* ¬2˜×âG6héT.îD¯X */
- $"13FF 573A 9F89 06C9 FB77 277E 08C9 09E9" /* .ÿW:Ÿ‰.Éûw'~.ÉÆé */
- $"B180 F96E C5AB 1E5D 3029 E229 CE1B B2AD" /* ±€ùnÅ«.]0)â)Î.²­ */
- $"BA11 DD98 0D9C 4C45 66DD 8553 3BA2 6F5B" /* º.ݘ.œLEfÝ…S;¢o[ */
- $"699B CEF3 48A7 6C31 63E6 E189 9C68 B9EC" /* i›ÎóH§l1cæá‰œh¹ì */
- $"A663 411F EBCB 41AB 8F7E 7EAD 87DA 5BF3" /* ¦cA.ëËA«~~­‡Ú[ó */
- $"AAC9 975B AC1F 712B F7ED DEBD 04C3 B85A" /* ªÉ—[¬.q+÷íÞ½.øZ */
- $"470D D74A B91D 0180 7BAB 4088 5671 6268" /* G.×J¹..€{«@ˆVqbh */
- $"5B4A 54FE C179 1600 7677 830B 0E81 EEB4" /* [JTþÁy..vwƒ..î´ */
- $"056E 79FF 8251 AB20 A6BC 15A5 E71F 7D4A" /* .nyÿ‚Q« ¦¼.¥ç.}J */
- $"2F6E 951A DE36 7A81 C704 9A4A F239 E1DC" /* /n•.Þ6zÇ.šJò9áÜ */
- $"FF6C DE49 B4C8 F6C1 F764 8D19 4686 DFC2" /* ÿlÞI´ÈöÁ÷d.F†ß */
- $"5C72 4A52 9784 F974 DCA4 A177 21DA 9869" /* \rJR—„ùtܤ¡w!Ú˜i */
- $"80A4 5BC6 FD54 A56B C7B1 4705 3A32 C896" /* €¤[ÆýT¥kDZG.:2È– */
- $"4539 25E5 90CC F228 B7F9 ADA5 CC2C 59CA" /* E9%åÌò(·ù­¥Ì,YÊ */
- $"D14D 4B86 9CC0 D367 7EF5 DB6D C2E1 06DB" /* ÑMK†œÀÓg~õÛmÂá.Û */
- $"58BC 0D97 DCFE 3CB1 EA45 C36F 1B60 83C9" /* X¼.—Üþ<±êEÃo.`ƒÉ */
- $"663F B883 83BA A69F 2653 0747 18C7 6D20" /* f?¸ƒƒº¦Ÿ&S.G.Çm */
- $"F2C7 6E01 47DA AB9D 2D83 D5CE 1E9C 779A" /* òÇn.GÚ«-ƒÕÎ.œwš */
- $"5FAE 6015 63DE 317A EFCA 7142 F3F8 A7E1" /* _®`.cÞ1zïÊqBóø§á */
- $"F739 60AB DF24 41BF EB6C AF15 7223 E56C" /* ÷9`«ß$A¿ël¯.r#ål */
- $"8D61 D9D1 C61F 8F8E 8435 6452 C45A 917B" /* aÙÑÆ.Ž„5dRÄZ‘{ */
- $"0856 B8BA 14E2 0A77 ABA0 E605 2E39 63EA" /* .V¸º.âÂw« æ..9cê */
- $"E7F5 4804 6535 7672 575F 37EA 9E69 1A1C" /* çõH.e5vrW_7êži.. */
- $"E380 CB7D C109 2D50 73EF 4119 54BE CBFE" /* ã€Ë}ÁÆ-PsïA.T¾Ëþ */
- $"4552 74A1 3E73 C457 1436 9DFF 3C25 8231" /* ERt¡>sÄW.6ÿ<%‚1 */
- $"2C25 ACE4 F084 E842 60E8 355D 22BE 6FEE" /* ,%¬äð„èB`è5]"¾oî */
- $"93F9 DDE6 DAED 4E44 545A FE4E 5EA4 0487" /* “ùÝæÚíNDTZþN^¤.‡ */
- $"36F1 52AF 8683 2DE8 F30B 72DE E807 2068" /* 6ñR¯†ƒ-èó.rÞè. h */
- $"742B 7262 BF7E 516C D41F CA56 9DE1 E3B8" /* t+rb¿~QlÔ.ÊVá㸠*/
- $"8D72 2993 C073 516D A343 DDE0 984D F06A" /* r)“ÀsQm£CÝà˜Mðj */
- $"CD83 D22D C161 30D7 2E9A FED4 4E85 5D2E" /* ̓Ò-Áa0×.šþÔN…]. */
- $"CF72 2181 7F23 BC37 FF83 C30D 43E0 DBC7" /* Ïr!.#¼7ÿƒÃ.CàÛÇ */
- $"A277 B4D9 4E68 1FB1 AF7B 6D8B 8F43 2A1B" /* ¢w´ÙNh.±¯{m‹C*. */
- $"9FE4 6CCC E826 C4AA 96C9 98A9 4D3B 981F" /* ŸälÌè&Ī–ɘ©M;˜. */
- $"8786 8633 89B0 2B42 4266 BC27 0098 D2B3" /* ‡††3‰°+BBf¼'.˜Ò³ */
- $"E8E4 0D2C 6E14 D34D 3613 4568 4A1E 8E5E" /* èä.,n.ÓM6.EhJ.Ž^ */
- $"E328 D89C 85D3 D8C2 C15B 3533 989F F015" /* ã(Øœ…ÓØÂÁ[53˜Ÿð. */
- $"1B49 871D 031B 2DBE D49E 880D A557 0694" /* .I‡...-¾Ôžˆ.¥W.” */
- $"60C3 47A1 CD2A 961B F73C 94A3 6B17 4268" /* `ÃG¡Í*–.÷<”£k.Bh */
- $"F766 81DC 33BC 8C1D 5571 D2D7 FB1C 9378" /* ÷fÜ3¼Œ.UqÒ×û.“x */
- $"01B7 BDCC 5DD0 9171 5FA1 50DA 7EBF 1586" /* .·½Ì]Бq_¡PÚ~¿.† */
- $"FA82 9E6F CBE4 0977 9C9C 2373 E789 5A3E" /* ú‚žoËäÆwœœ#sç‰Z> */
- $"8743 EB0E ED13 7955 DB28 2874 8065 2078" /* ‡Cë.í.yUÛ((t€e x */
- $"97A7 6C13 2283 729A CCF9 E449 A627 7652" /* —§l."ƒršÌùäI¦'vR */
- $"E821 2F1F 574E 6887 1830 6E01 5A8D 02FB" /* è!/.WNh‡.0n.Z.û */
- $"DB61 8EEF 4E08 B607 26FA 2B4C FF47 38FE" /* ÛaŽïN.¶.&ú+LÿG8þ */
- $"9B7C A3E4 DB46 F898 CFE9 8F3C 8717 2975" /* ›|£äÛFø˜Ïé<‡.)u */
- $"9BA2 582E 86D1 D882 C127 EFD7 E71A B5DD" /* ›¢X.†ÑØ‚Á'ï×ç.µÝ */
- $"7772 6391 2722 2884 AA0F 9C72 9A96 F4F8" /* wrc‘'"(„ª.œrš–ôø */
- $"BFF8 869A FD00 3B41 A8C7 DCD0 2834 270C" /* ¿ø†šý.;A¨ÇÜÐ(4'. */
- $"B93C 8702 5B16 8A32 0289 979B 0A35 3A7B" /* ¹<‡.[.Š2.‰—›Â5:{ */
- $"5870 6189 03C2 DD00 FAB2 B137 AB93 3EF5" /* Xpa‰.ÂÝ.ú²±7«“>õ */
- $"24E3 1FE1 A206 963E 1344 FE12 285A 5C52" /* $ã.á¢.–>.Dþ.(Z\R */
- $"692E D315 6C73 2CBE 7ADC 81BC EBC8 13EA" /* i.Ó.ls,¾zܼëÈ.ê */
- $"796B 6056 E9E7 D971 6E09 7086 252C 6A19" /* yk`VéçÙqnÆp†%,j. */
- $"7351 153D F4C4 FE01 6235 917F B203 171A" /* sQ.=ôÄþ.b5‘.²... */
- $"1822 B42B 9226 D163 5572 7E7E C508 BEBA" /* ."´+’&ÑcUr~~Å.¾º */
- $"D0D2 1C24 8D62 565D C183 F78D 4726 0541" /* ÐÒ.$bV]Áƒ÷G&.A */
- $"F829 10C7 1B21 E59C C4E5 7688 6268 FABC" /* ø).Ç.!åœÄåvˆbhú¼ */
- $"C0B9 6C02 8820 3F44 54A7 8C83 F14F 61B8" /* À¹l.ˆ ?DT§ŒƒñOa¸ */
- $"707C AB32 9D59 F01E D18A 37FC 40F9 5C59" /* p|«2Yð.ÑŠ7ü@ù\Y */
- $"EEA8 E442 FDC8 CA73 970F 6EE0 1348 AC8E" /* î¨äBýÈÊs—.nà.H¬Ž */
- $"9D65 4DA9 2820 AEDB A7F3 C1B4 8E3F 8780" /* eM©( ®Û§óÁ´Ž?‡€ */
- $"8DA9 F7D9 F116 DD30 778E 4FB6 49D3 AFE8" /* ©÷Ùñ.Ý0wŽO¶IÓ¯è */
- $"74B1 EB63 92B8 4210 3B22 3613 6784 41A2" /* t±ëc’¸B.;"6.g„A¢ */
- $"5953 1EFF 16A9 1769 9852 73D0 B6C2 3523" /* YS.ÿ.©.i˜RsжÂ5# */
- $"854B 1247 531D 47C5 7AFC 1B6B F0C4 2E2F" /* …K.GS.GÅzü.kðÄ./ */
- $"6C60 82C9 9C4D 2FAD 25A5 BEC6 8590 7388" /* l`‚ÉœM/­%¥¾Æ…sˆ */
- $"5D15 9A65 E013 D48B 7D9C 34B2 A617 75A8" /* ].šeà.Ô‹}œ4²¦.u¨ */
- $"8E8E 2D91 1AEC 26D5 8B9C D03C A02A A829" /* ŽŽ-‘.ì&Õ‹œÐ< *¨) */
- $"738D 9A4E 8F31 82A9 39B7 7CFE D412 810E" /* sšN1‚©9·|þÔ.. */
- $"1372 6D79 8D49 BAC1 9FFB 5D52 56AD 488F" /* .rmyIºÁŸû]RV­H */
- $"4E1D A232 7348 1FE2 483F AB9F A23C 0997" /* N.¢2sH.âH?«Ÿ¢<Æ— */
- $"678D 1AB7 7F66 8927 7DED 2A66 E03B 05C9" /* g.·.f‰'}í*fà;.É */
- $"0420 66A2 E0AE E1B9 259E 64C9 FF0E A7C7" /* . f¢à®á¹%ždÉÿ.§Ç */
- $"5E9D 69F4 DD50 394C 344E 9DA9 6BCA 3D9F" /* ^iôÝP9L4N©kÊ=Ÿ */
- $"8FA9 C156 3248 2310 8AB9 6131 B94F FF36" /* ©ÁV2H#.йa1¹Oÿ6 */
- $"DF00 9E80 5713 E9AD 3B07 879E C876 E063" /* ß.ž€W.é­;.‡žÈvàc */
- $"38D8 2776 3081 5810 1760 927C D93C EE88" /* 8Ø'v0X..`’|Ù<îˆ */
- $"518B 755A EBF1 B276 C65B 98DD 1421 8AA1" /* Q‹uZëñ²vÆ[˜Ý.!Š¡ */
- $"27D2 A8B2 5E3E B7B7 8F73 CDCB 9896 D80F" /* 'Ò¨²^>··s͢–Ø. */
- $"1D50 2E28 4F54 26A9 E68F 822C 3031 0A5B" /* .P.(OT&©æ‚,01Â[ */
- $"213A 8ED8 B1B8 C32C F5EF 6784 3641 A888" /* !:ŽØ±¸Ã,õïg„6A¨ˆ */
- $"1AF9 941B E9B2 42C0 D9BE AAD7 2727 9E13" /* .ù”.é²BÀÙ¾ª×''ž. */
- $"284F A530 1F62 679B 7860 E677 9E24 3663" /* (O¥0.bg›x`æwž$6c */
- $"E7D1 E4B5 D37B C274 9ECB CFA2 CC95 8A75" /* çÑäµÓ{ÂtžËϢ̕Šu */
- $"0C3A FB7D F074 1433 5EC7 1FC4 330E F221" /* .:û}ðt.3^Ç.Ä3.ò! */
- $"AE39 4A04 097F 4B21 27CD C193 39CB 3AB2" /* ®9J.Æ.K!'ÍÁ“9Ë:² */
- $"0B6E D8E0 54EA 0F75 15F9 D75D 0D82 624D" /* .nØàTê.u.ù×].‚bM */
- $"7D19 8E11 1AD0 764F CEA8 F0FE 2913 6841" /* }.Ž..ÐvOΨðþ).hA */
- $"89B8 CA62 C997 34B9 5950 4842 4F13 1ACD" /* ‰¸ÊbÉ—4¹YPHBO..Í */
- $"39AD 30CA 4ED2 A17D 0B09 206B 9426 EF50" /* 9­0ÊNÒ¡}.Æ k”&ïP */
- $"63C6 386E 74BB BDE0 420F 6154 5260 E1A2" /* cÆ8nt»½àB.aTR`ᢠ*/
- $"8546 3192 76D1 1F38 268E 7AC6 049F 321D" /* …F1’vÑ.8&ŽzÆ.Ÿ2. */
- $"CB51 35C7 067C 961B DA2F 4BCB E065 A8DB" /* ËQ5Ç.|–.Ú/KËàe¨Û */
- $"16C9 1F05 ABAF 93FF 333A F049 3161 6838" /* .É..«¯“ÿ3:ðI1ah8 */
- $"6E1A FEF2 564C 3F48 3800 BC9C F009 AF34" /* n.þòVL?H8.¼œðƯ4 */
- $"2241 15D4 764F 4764 CEDF 6D7D 2E9C 8141" /* "A.ÔvOGdÎßm}.œA */
- $"1E00 E109 D827 DDAA A47C 2854 9229 8998" /* ..áÆØ'ݪ¤|(T’)‰˜ */
- $"9175 1FFB 496B 36C7 3695 3631 390B 06E6" /* ‘u.ûIk6Ç6•619..æ */
- $"EB0D 3BA7 F1BE A2FF 6D3A 9FB6 FCFD ADEF" /* ë.;§ñ¾¢ÿm:Ÿ¶üý­ï */
- $"EDBA 3FDB 632F EDB1 BF6D BE7E DB9F 97ED" /* íº?Ûc/í±¿m¾~ÛŸ—í */
- $"45FD AB93 F6E8 7FED A7F7 DAC3 FC34 6F43" /* Eý«“öè.í§÷ÚÃü4oC */
- $"E1DB 5507 762F DB7E 5F51 DDF5 1DFE DD07" /* áÛU.v/Û~_QÝõ.þÝ. */
- $"E1FD A67F B4E6 7EDB 8BF6 AE3F B6BC D3E4" /* áý¦.´æ~Û‹ö®?¶¼Óä */
- $"D00B 0F87 A0FF 2AC3 3F6D 84F8 7475 99F2" /* Ð..‡ ÿ*Ã?m„øtu™ò */
- $"F382 BE95 100F 8FEE C1C8 D086 E345 E973" /* 󂾕..îÁÈІãEés */
- $"0FE4 06B6 7813 7115 B8D0 D91B C698 D10D" /* .ä.¶x.q.¸ÐÙ.ƘÑ. */
- $"A370 844F 9330 E047 0201 F880 D146 6522" /* £p„O“0àG..ø€ÑFe" */
- $"8E52 12DE 3D1A 9231 5315 682E 4706 8685" /* ŽR.Þ=.’1S.h.G.†… */
- $"DA39 C538 9828 7ED0 714F 3E27 532A 3840" /* Ú9Å8˜(~ÐqO>'S*8@ */
- $"C912 3E46 8205 3243 7835 7284 12D6 CCF5" /* É.>F‚.2Cx5r„.ÖÌõ */
- $"36AF 0975 8A27 4F44 3857 B5A3 160D 1391" /* 6¯ÆuŠ'OD8Wµ£...‘ */
- $"8005 2453 86CB 51B3 E493 EA9C 707F 7047" /* €.$S†ËQ³ä“êœp.pG */
- $"1DA8 1386 91D1 6105 7D84 1563 FC52 D5D3" /* .¨.†‘Ña.}„.cüRÕÓ */
- $"EDA7 D4A0 4AC1 BB4E 49D6 62F4 CA92 CE8E" /* í§Ô JÁ»NIÖbôÊ’ÎŽ */
- $"8DE0 84DC 418D ACE2 71AD 9206 3C98 3281" /* à„ÜA¬âq­’.<˜2 */
- $"104E A1F2 8982 6ED6 223E B67B BE6A C51F" /* .N¡ò‰‚nÖ">¶{¾jÅ. */
- $"4BF8 6C35 B6A4 5EC8 87BB 4834 7CF3 16AC" /* Køl5¶¤^ȇ»H4|ó.¬ */
- $"2453 B3DA 3503 94D6 2E70 2B6F 975E 21DB" /* $S³Ú5.”Ö.p+o—^!Û */
- $"F409 0368 9A2E DFB2 7A4B 9A6F 4165 1173" /* ôÆ.hš.ß²zKšoAe.s */
- $"A53E 329A 7925 FB80 9664 2C09 A9E5 715C" /* ¥>2šy%û€–d,Æ©åq\ */
- $"E42F 8E14 EC68 05A8 D565 53C2 9C98 86A2" /* ä/Ž.ìh.¨ÕeSœ˜†¢ */
- $"2C2D 6443 A1D0 A619 2320 6CD3 FE48 8006" /* ,-dC¡Ð¦.# lÓþH€. */
- $"FC0F 3690 DF76 1FD8 2E16 0705 D91F EEBE" /* ü.6ßv.Ø....Ù.î¾ */
- $"E961 32B9 E252 4F0E EE4A 6F73 AEBB 014A" /* éa2¹âRO.îJos®».J */
- $"8F45 1551 9123 7C3A 13F8 1B57 EB6A 0AFB" /* E.Q‘#|:.ø.WëjÂû */
- $"9AE9 65F5 9FDE 5F1C 7C23 84F1 6DCD CC52" /* šéeõŸÞ_.|#„ñmÍÌR */
- $"97DD 03E6 C571 0C23 F06B 9F21 2E2C 79D5" /* —Ý.æÅq.#ðkŸ!.,yÕ */
- $"1827 1436 E6FB C5FB BA11 617B 9B32 3DCD" /* .'.6æûÅûº.a{›2=Í */
- $"B0AD AA8F 53D0 2F20 849C D667 9436 A677" /* °­ªSÐ/ „œÖg”6¦w */
- $"38C9 1B5A 26E2 B4D4 29BB 2D9E 56D4 652D" /* 8É.Z&â´Ô)»-žVÔe- */
- $"9A12 FC7E FBD5 0075 3EC9 64FE D0CE 06A2" /* š.ü~ûÕ.u>ÉdþÐÎ.¢ */
- $"B63F 8731 DB8A 6917 26EA CCFC C1E6 10AA" /* ¶?‡1ÛŠi.&êÌüÁæ.ª */
- $"704E 20EA 7518 0416 6BBE 2867 9470 9FE6" /* pN êu...k¾(g”pŸæ */
- $"3D2A D178 6CD1 0B7D E518 4682 FC48 EA03" /* =*ÑxlÑ.}å.F‚üHê. */
- $"EFA0 ADEE B643 CDFD 796D C309 E13B 9DD3" /* ï ­î¶CÍýymÃÆá;Ó */
- $"82CC 1237 8D6B 9CB9 0438 AF1A 6190 136E" /* ‚Ì.7kœ¹.8¯.a.n */
- $"A170 6109 4BA8 FD0B 4C10 DE61 71A9 A5FF" /* ¡paÆK¨ý.L.Þaq©¥ÿ */
- $"5AD1 3895 15D0 912A BC62 5344 A7FD 7B9B" /* ZÑ8•.Б*¼bSD§ý{› */
- $"0360 8C71 DD04 20C7 4685 E6B7 7941 7BD7" /* .`ŒqÝ. ÇF…æ·yA{× */
- $"DBBB 3F61 742B D692 AD3D B778 6442 3DD1" /* Û»?at+Ö’­=·xdB=Ñ */
- $"A97E 1312 9AF4 05C1 7B33 9FE2 B3F5 D16C" /* ©~..šô.Á{3Ÿâ³õÑl */
- $"875D 7109 13EC BB96 0664 DF60 1958 8DE5" /* ‡]qÆ.ì»–.dß`.Xå */
- $"5B3F 3E75 9D21 0415 CE9C 3172 87C7 FF05" /* [?>u!..Μ1r‡Çÿ. */
- $"F787 4F14 E63B 4DCE 247D B3A3 475C 5336" /* ÷‡O.æ;MÎ$}³£G\S6 */
- $"C794 AF23 6415 68C6 B893 1B16 8C81 3F43" /* Ç”¯#d.hƸ“..Œ?C */
- $"C455 6EB8 8D5A 6919 4C3A D980 BFB1 3699" /* ÄUn¸Zi.L:Ù€¿±6™ */
- $"C790 C7D1 7B05 12AA 803A 172B DEF2 00CC" /* ÇÇÑ{..ª€:.+Þò.Ì */
- $"FF38 62C8 1815 1D3A F60D 2B9B 87A0 05C5" /* ÿ8bÈ...:ö.+›‡ .Å */
- $"3587 0181 8754 06D7 2CFC 78B8 0C65 D5BC" /* 5‡.‡T.×,üx¸.eÕ¼ */
- $"2903 C07C 0631 A0B9 E94E 192F DE4B 4924" /* ).À|.1 ¹éN./ÞKI$ */
- $"A4F0 BB9A 49C5 B751 38EB 7289 9806 FC5C" /* ¤ð»šIÅ·Q8ër‰˜.ü\ */
- $"D822 ED93 CA92 14B6 5056 017F 7826 CDE1" /* Ø"í“Ê’.¶PV..x&Íá */
- $"8401 9F6C A7F7 4AD5 E86F FDC3 05AF 6AE3" /* „.Ÿl§÷JÕèoýÃ.¯jã */
- $"5EED 07E3 E5ED 7EE7 FB97 0B99 E191 605B" /* ^í.ãåí~çû—.™á‘`[ */
- $"955A 6A3C 33C6 2BB8 9562 0E38 09C1 1ED9" /* •Zj<3Æ+¸•b.8ÆÁ.Ù */
- $"8914 73AF E9AA 7B2F 214E 7EEA 98E8 B976" /* ‰.s¯éª{/!N~ê˜è¹v */
- $"E058 E0B5 6DB4 5B1C F212 2C8E 0AE5 7100" /* àXàµm´[.ò.,ŽÂåq. */
- $"BC1E 84CD 0598 7CF9 EA4E 1E96 2B4A DE9E" /* ¼.„Í.˜|ùêN.–+JÞž */
- $"6CE9 E79B 0336 9059 E109 DF83 A2AE 9E74" /* léç›.6YáÆßƒ¢®žt */
- $"5BB1 0236 590C 66CD 0658 ECE5 50A2 EDDD" /* [±.6Y.fÍ.XìåP¢íÝ */
- $"D7BB DAF7 548B 7F21 2A40 7821 FDA2 62B6" /* ×»Ú÷T‹.!*@x!ý¢b¶ */
- $"C862 B0B2 96CF 27D5 EC9D F5C8 42D8 F42A" /* Èb°²–Ï'ÕìõÈBØô* */
- $"5962 F21A D191 6744 1AE2 64B4 6744 A1B2" /* Ybò.Ñ‘gD.âd´gD¡² */
- $"7625 FF0D F0CF A1F8 3273 C4B8 FCCE C2BC" /* v%ÿ.ðÏ¡ø2sĸüμ */
- $"EDD5 F0C6 765F 2446 5EF5 2195 04EE C94B" /* íÕðÆv_$F^õ!•.îÉK */
- $"C9C2 4F82 0D0F 6034 3560 64A8 C372 4E17" /* ÉÂO‚..`45`d¨ÃrN. */
- $"D4F6 B2DC 2162 A6DC 9B35 5F36 628E EA58" /* Ôö²Ü!b¦Ü›5_6bŽêX */
- $"B2EF D0B8 79FF 3F60 39DC 34C9 8DD1 C7DA" /* ²ïиyÿ?`9Ü4ÉÑÇÚ */
- $"BFFD 9220 B977 42CD 1F4E 00C7 1A7B F29F" /* ¿ý’ ¹wBÍ.N.Ç.{òŸ */
- $"9738 8D5E 3E5F BA1F D4BD 0592 2006 1216" /* —8^>_º.Ô½.’ ... */
- $"D478 DE72 171A A49D 9C4A 0691 CD59 6FB3" /* ÔxÞr..¤œJ.‘ÍYo³ */
- $"F3C5 B3CD DCC8 5794 133C 85B3 176A 0C6A" /* óųÍÜÈW”.<…³.j.j */
- $"323E C74F 7CE3 4042 38AB E9CA 5700 E39B" /* 2>ÇO|ã@B8«éÊW.ã› */
- $"26D3 62B7 59F8 966D A789 35AA C72D 9943" /* &Ób·Yø–m§‰5ªÇ-™C */
- $"C884 2E53 30B3 D351 EFCC 6BF8 9889 8AB6" /* È„.S0³ÓQïÌkø˜‰Š¶ */
- $"E284 F5A4 64BD F89F 98A4 8082 6292 48EB" /* â„õ¤d½øŸ˜¤€‚b’Hë */
- $"2039 4A80 D5D7 BEFC 2DC1 69A9 F484 9B4E" /* 9J€Õ×¾ü-Ái©ô„›N */
- $"94C9 6E87 31A6 6D4E 23DB 77A9 37D5 CEE9" /* ”Én‡1¦mN#Ûw©7ÕÎé */
- $"10B5 22DB 58B2 3DFB 973A E321 F02A 2985" /* .µ"ÛX²=û—:ã!ð*)… */
- $"AE7E F964 9A23 4B8D 90FD 75F4 9944 3CEB" /* ®~ùdš#Kýuô™D<ë */
- $"C5C5 B0BA DA1C AA0A B59A EFCA 903A 972B" /* ÅŰºÚ.ªÂµšïÊ:—+ */
- $"10E9 2A66 2BAB 3E63 8312 E494 A82C AEE8" /* .é*f+«>cƒ.䔨,®è */
- $"DE3B 902F 4DE5 A934 7FA5 59D8 B355 75C7" /* Þ;/Må©4.¥YسUuÇ */
- $"DC51 6208 6D60 DE89 F04A F698 FC35 5341" /* ÜQb.m`Þ‰ðJö˜ü5SA */
- $"A8C7 894B 5E8F 0638 0F21 36AB 23FF 37BF" /* ¨Ç‰K^.8.!6«#ÿ7¿ */
- $"CA6E C0CE 1C93 9BB1 FEA7 49E8 9BA5 7F32" /* ÊnÀÎ.“›±þ§I蛥.2 */
- $"4C9D C8BA 821C 1E07 F277 BE63 241C D5F6" /* LȺ‚...òw¾c$.Õö */
- $"07CB 7A98 E51E B0FC B312 223C 21BF 5DEE" /* .Ëz˜å.°ü³."<!¿]î */
- $"0229 A0EE 8B90 5918 5910 F6A6 EEB6 503D" /* .) î‹Y.Y.ö¦î¶P= */
- $"8E76 A3B6 E583 FEFF 5B3D F804 F6EE 956E" /* Žv£¶åƒþÿ[=ø.öî•n */
- $"FEE7 D95F 9D05 AE0B 4926 52B4 23C3 D17A" /* þçÙ_.®.I&R´#ÃÑz */
- $"FC0F CC41 1264 0956 8CA2 6A30 C0D0 275F" /* ü.ÌA.dÆVŒ¢j0ÀÐ'_ */
- $"0CE8 C646 CC49 EF38 CC94 8B6C 1737 9636" /* .èÆFÌIï8Ì”‹l.7–6 */
- $"4EA7 0FE7 217B F3F1 A10D 7E49 242E 6F19" /* N§.ç!{óñ¡.~I$.o. */
- $"A8CF 369A 44DE 6C99 A9D4 24DA 6909 62C3" /* ¨Ï6šDÞl™©Ô$ÚiÆbà */
- $"0C4C D4CD D80E 72E6 FF6B A90E 7080 977B" /* .LÔÍØ.ræÿk©.p€—{ */
- $"4BEB 6A2A 72BB 0574 45FB 1E12 6408 C966" /* Këj*r».tEû..d.Éf */
- $"A632 9AC7 E67D 82C9 3FED 1E27 C1FA C47A" /* ¦2šÇæ}‚É?í.'ÁúÄz */
- $"AFCF 5719 3BCA 3975 BE3A 550B 6DC9 91CC" /* ¯ÏW.;Ê9u¾:U.mÉ‘Ì */
- $"F28E 751C 1B20 E7BB 58FF 0D92 2BF7 DE26" /* òŽu.. ç»Xÿ.’+÷Þ& */
- $"DFE3 B230 78F7 C64E ADF8 7741 F45A E3BC" /* ßã²0x÷ÆN­øwAôZã¼ */
- $"5185 1323 1C74 3288 F720 5DB7 B5C9 1EFD" /* Q….#.t2ˆ÷ ]·µÉ.ý */
- $"C844 7159 7047 A9BA 6CA1 403E CE2E 3522" /* ÈDqYpG©ºl¡@>Î.5" */
- $"1088 A628 490C 5F8D 64C4 7E17 CBD3 290D" /* .ˆ¦(I._dÄ~.ËÓ). */
- $"91B1 B073 AD4A BF5B A1E9 6306 3E9A F87E" /* ‘±°s­J¿[¡éc.>šø~ */
- $"2DEC 7390 2CF5 3305 93C2 15DA 7FFF 7FC6" /* -ìs,õ3.“Â.Ú.ÿ.Æ */
- $"0578 C93E BF93 5B69 25D4 E0F9 5726 0D7E" /* .xÉ>¿“[i%ÔàùW&.~ */
- $"9C06 C76B 1BF5 3206 F26C 4F57 6A13 7488" /* œ.Çk.õ2.òlOWj.tˆ */
- $"07F4 1787 316E 19B5 2CB4 D7B8 23EE BF15" /* .ô.‡1n.µ,´×¸#î¿. */
- $"84F7 C141 CE7E 358F F83B 081D 2680 C5CB" /* „÷ÁAÎ~5ø;..&€ÅË */
- $"2002 0FFB D329 10E3 1880 E0F6 29FF 14F6" /* ..ûÓ).ã.€àö)ÿ.ö */
- $"1447 24FF 4BDD 371B 00F3 0334 6FE5 D217" /* .G$ÿKÝ7..ó.4oåÒ. */
- $"8E7D 3CCB EC04 D019 0583 0792 D4F4 59E5" /* Ž}<Ëì.Ð..ƒ.’ÔôYå */
- $"0914 52FB CE7A 2EFD B899 ED16 38FB E1D4" /* Æ.RûÎz.ý¸™í.8ûáÔ */
- $"3312 BAAE 3EF3 45B7 2A77 62F3 4787 8900" /* 3.º®>óE·*wbóG‡‰. */
- $"050D 5A64 92D3 64E7 7950 4234 FCC0 0EC6" /* ..Zd’ÓdçyPB4üÀ.Æ */
- $"004C 8652 616B B5FF 87F6 72D0 400B 9574" /* .L†Rakµÿ‡örÐ@.•t */
- $"7ADD 2EE6 F979 EE70 393F 5E65 09EC 561B" /* zÝ.æùyîp9?^eÆìV. */
- $"2FF4 F6FA 9226 2AA7 C2D2 4517 2258 15C7" /* /ôöú’&*§ÂÒE."X.Ç */
- $"D27E DE80 0000 0009 BB69 0154 3C66 FD24" /* Ò~Þ€...Æ»i.T<fý$ */
- $"D6C1 DFFC 41CF 26FD 27E3 9482 7299 C4A3" /* ÖÁßüAÏ&ý'㔂r™Ä£ */
- $"A4B0 4F99 5ED7 6507 C196 C060 D7BD 7BA6" /* ¤°O™^×e.Á–À`×½{¦ */
- $"A0A2 C1E7 0ECE 98C4 36F0 B006 0526 5FC4" /*  ¢Áç.ΘÄ6ð°..&_Ä */
- $"CDEF A25D CE59 7B6F 507F C409 957F 43E6" /* Íï¢]ÎY{oP.ÄÆ•.Cæ */
- $"20AB C4BE 33C2 E794 46B7 5341 D8C9 5487" /* «Ä¾3Âç”F·SAØÉT‡ */
- $"3000 A3E6 41BE 7D2A B553 6A8D C345 2E1E" /* 0.£æA¾}*µSjÃE.. */
- $"BF55 F536 52DD 101F D6C9 BB65 B7E4 0CFC" /* ¿Uõ6RÝ..ÖÉ»e·ä.ü */
- $"03D7 F641 F641 7A4F 8EE2 BA7A 352C ED91" /* .×öAöAzOŽâºz5,í‘ */
- $"9057 F893 C46F 62F7 A791 A8DE 8A25 BB17" /* Wø“Äob÷§‘¨ÞŠ%». */
- $"F164 F2ED 43E5 A2E2 17E9 C95D DE1C 45F4" /* ñdòíCå¢â.éÉ]Þ.Eô */
- $"3019 8090 809D D124 EE5C B48E 6C92 2A74" /* 0.€€Ñ$î\´Žl’*t */
- $"ACA0 4F0A 1777 70CF EBEC 112A 9035 16AB" /* ¬ OÂ.wpÏëì.*5.« */
- $"B36D 13D6 9F72 69CD E213 F146 6733 BAA3" /* ³m.ÖŸriÍâ.ñFg3º£ */
- $"0080 0000 0000 0000 0001 0151 0AD3 43F0" /* .€.........QÂÓCð */
- $"14A4 0000 61F0 20D9 9F3A 47FC 60A2 4780" /* .¤..að ÙŸ:Gü`¢G€ */
- $"F2D0 2A57 2C4C D349 5B9A 1BE3 0D39 80AD" /* òÐ*W,LÓI[š.ã.9€­ */
- $"72C4 873D 5028 F09E F0F5 700F B776 4B38" /* rć=P(ðžðõp.·vK8 */
- $"4FC6 7D26 AE5D 219E DDCE 4AA3 9AA9 FE19" /* OÆ}&®]!žÝÎJ£š©þ. */
- $"EC25 FEF0 0626 D259 8ECF 0364 6192 A000" /* ì%þð.&ÒYŽÏ.da’ . */
- $"0000 0000 0000 0000 0184 84B4 4FF0 1848" /* .........„„´Oð.H */
- $"4BC2 3700 0000 0000 0000 00B5 DA5E 3FF1" /* KÂ7........µÚ^?ñ */
- $"C9FC 9186 4A80 0000 0000 0000 0000 0000" /* Éü‘†J€.......... */
- $"0510 0FC3 251B 71C0 D918 64A8 0000 0000" /* ...Ã%.qÀÙ.d¨.... */
- $"0000 0000 0000 07E1 1EE1 F164 E11A 319D" /* .......á.áñdá.1 */
- $"3806 659F 8C35 7012 B17E 6096 52F0 8E96" /* 8.eŸŒ5p.±~`–RðŽ– */
- $"1438 1EBF 363A 49C9 51BD 3517 4ADA 7060" /* .8.¿6:IÉQ½5.JÚp` */
- $"0849 8F8B FCEC FD48 0000 54DF 4C0B E043" /* .I‹üìýH..TßL.àC */
- $"F3B6 1CEB 518A F2B1 5A9C 9500 0000 0000" /* ó¶.ëQŠò±Zœ•..... */
- $"0196 C058 0636 AF4B 041F 37EC DE6F 4B4E" /* .–ÀX.6¯K..7ìÞoKN */
- $"291D A2A6 3CB8 9BAC 4B0C 5017 9031 0EF1" /* ).¢¦<¸›¬K.P.1.ñ */
- $"3CF7 F63B 73A1 B4A6 9EA7 0513 C571 8EA8" /* <÷ö;s¡´¦ž§..Åqލ */
- $"5D0A 28FC DCB6 D27A 0000 0000 0159 D076" /* ]Â(üܶÒz.....YÐv */
- $"3D1E 84A9 1C76 876E 7B6B 8519 1F9F 01C6" /* =.„©.v‡n{k…..Ÿ.Æ */
- $"1A11 B2A2 4841 4D47 5463 5D18 2AFE 54F5" /* ..²¢HAMGTc].*þTõ */
- $"591E 5FF1 39C7 C0CD 0D20 F366 59DE FE22" /* Y._ñ9ÇÀÍ. ófYÞþ" */
- $"B12C 4608 009D F105 49C8 16B5 417A 6079" /* ±,F..ñ.IÈ.µAz`y */
- $"40B0 7E7A C4B3 83B8 485D 42B1 4000 0000" /* @°~zijƒ¸H]B±@... */
- $"0E9F 0340 5469 49BB 5767 B4BE 47AF 19B3" /* .Ÿ.@TiI»Wg´¾G¯.³ */
- $"4E69 B99F 25DF C3C0 1B9C 5455 41D2 F508" /* Ni¹Ÿ%ßÃÀ.œTUAÒõ. */
- $"9900 1F13 B43E C345 C4B3 C066 8A27 C3D3" /* ™...´>ÃEijÀfŠ'ÃÓ */
- $"7A8A 6368 2F2C 3F2F 5D43 59ED 5E40 9E4F" /* zŠch/,?/]CYí^@žO */
- $"59BB 6A03 B7F8 083A 021D F8F0 79AF 43B0" /* Y»j.·ø.:..øðy¯C° */
- $"2270 F775 B8D8 FB59 371A 8B22 9F0B 55FA" /* "p÷u¸ØûY7.‹"Ÿ.Uú */
- $"C9B1 5565 0914 AA67 2D9E 81B2 60FC 1333" /* ɱUeÆ.ªg-ž²`ü.3 */
- $"318F 21E9 97E4 1400 F69E F709 7AE3 82A5" /* 1!é—ä..öž÷Æzã‚¥ */
- $"C9DE 7D16 1DF8 EDF8 FC5E DB3E FC2A F822" /* ÉÞ}..øíøü^Û>ü*ø" */
- $"886E F247 9BC1 250E 905C 4AF7 4B22 3595" /* ˆnòG›Á%.\J÷K"5• */
- $"0835 2567 EEC1 C4C8 B70D D782 6A22 C9DA" /* .5%gîÁÄÈ·.ׂj"ÉÚ */
- $"ADA3 0370 EED9 E428 E163 963A E6F0 5D4A" /* ­£.pîÙä(ác–:æð]J */
- $"F42A D11F B46D 7FBC 2D87 4274 4756 896E" /* ô*Ñ.´m.¼-‡BtGV‰n */
- $"C489 80C0 62F6 88A8 184A 79BE 3068 A9AF" /* ĉ€Àböˆ¨.Jy¾0h©¯ */
- $"D703 390B 1A76 3136 B799 726A AAA8 C23D" /* ×.9..v16·™rjª¨Â= */
- $"EEB0 E0F1 49E1 A6B7 204F 7BF3 6E44 F25E" /* î°àñIᦷ O{ónDò^ */
- $"7E0A 5125 CA89 B477 15CD 83CC CD21 C6BE" /* ~ÂQ%ʉ´w.̓ÌÍ!ƾ */
- $"F20B 99F3 C30C 5113 2E0A FF7E 1034 1BFF" /* ò.™óÃ.Q..Âÿ~.4.ÿ */
- $"0378 72CF B0EE D132 2A2D 14A9 E37F 6B10" /* .xrϰîÑ2*-.©ã.k. */
- $"B5CE 0500 0000 0000 0000 0160 A7E3 A715" /* µÎ.........`§ã§. */
- $"0C13 DE44 025B 9720 0000 0000 0000 0001" /* ..ÞD.[— ........ */
- $"E0F5 5A21 77FB C1F6 EAF0 244A EE78 B6FA" /* àõZ!wûÁöêð$Jîx¶ú */
- $"1769 3D98 AA28 2EB6 9826 A16B D6B8 BA89" /* .i=˜ª(.¶˜&¡kÖ¸º‰ */
- $"26C6 25C9 9E66 FD9C 6D2D FCDA FCB9 6AB2" /* &Æ%Éžfýœm-üÚü¹j² */
- $"B42A 7008 5069 CB61 D530 B47A FCFF 7F95" /* ´*p.PiËaÕ0´züÿ.• */
- $"FA58 2D11 111A 53BF FB17 59E1 63E7 0FAD" /* úX-...S¿û.Yácç.­ */
- $"B016 A862 3107 8DF0 7112 DD6A B6E3 2477" /* °.¨b1.ðq.Ýj¶ã$w */
- $"3162 94F0 6826 75B0 D0B8 4C13 21C7 E4BC" /* 1b”ðh&u°Ð¸L.!Çä¼ */
- $"FB86 7A83 DF1C A4D9 C3B4 E3DE C334 1633" /* û†zƒß.¤ÙôãÞÃ4.3 */
- $"DC27 76B9 7ADF 50CA F95E C7C9 D5EB 402C" /* Ü'v¹zßPÊù^ÇÉÕë@, */
- $"276F A0B0 D88B CF4A 0FD2 380A E3E7 2BA5" /* 'o °Ø‹ÏJ.Ò8Âãç+¥ */
- $"DD24 A247 B631 75B1 6D3A 4C60 9BAB E4C5" /* Ý$¢G¶1u±m:L`›«äÅ */
- $"BBCB 2972 36B9 AC74 5FF5 B5DB 231B 95F3" /* »Ë)r6¹¬t_õµÛ#.•ó */
- $"7CFF 8E5F 86E9 1906 B3DF 75C7 0364 6192" /* |ÿŽ_†é..³ßuÇ.da’ */
- $"A000 0000 0000 0000 0000 003B B1A0 0000" /*  ..........;± .. */
- $"0000 0000 0000 0000 0000 0016 D51B CEEA" /* ............Õ.Îê */
- $"0406 C003 4E50 C0B8 8DB2 F37C FF8E 5F86" /* ..À.NPÀ¸²ó|ÿŽ_† */
- $"E919 06B3 DF75 C703 6461 92A0 0000 0000" /* é..³ßuÇ.da’ .... */
- $"0000 0000 0000 3BB1 A000 0000 0000 0000" /* ......;± ....... */
- $"0000 0000 0000 16D5 1BCE EA04 06C0 034E" /* .......Õ.Îê..À.N */
- $"50C0 B88D B2F4 4BED 0C57 2F64 38E7 DFE6" /* PÀ¸²ôKí.W/d8çßæ */
- $"95DB 93EF B9ED 1250 6A6A A6E3 4478 1E7E" /* •Û“ï¹í.Pjj¦ãDx.~ */
- $"F105 8E1B 961B 230C 9500 0000 0000 0C18" /* ñ.Ž.–.#.•....... */
- $"0EA3 5F13 6306 E1B5 4B22 3D26 79A1 06E4" /* .£_.c.áµK"=&y¡.ä */
- $"228F F320 0B74 8820 0000 0000 0000 0007" /* "ó .tˆ ........ */
- $"9F62 443B 9A51 EAB0 7C1A A374 E7F1 52F3" /* ŸbD;šQê°|.£tçñRó */
- $"3BB8 C1E0 5919 6C04 A2E2 1032 6917 1394" /* ;¸ÁàY.l.¢â.2i..” */
- $"CCBE 472A 0652 C144 6D1E 755C ECF9 9725" /* ̾G*.RÁDm.u\ìù—% */
- $"A84A 55AE 7A0E 6730 FCA7 B6E0 FF31 08C0" /* ¨JU®z.g0ü§¶àÿ1.À */
- $"3E76 4DDC 9E24 A60B C4A7 4CDD C221 1941" /* >vMÜž$¦.ħLÝÂ!.A */
- $"0810 2DE3 206F C551 4910 77AA 762A 1FF2" /* ..-ã oÅQI.wªv*.ò */
- $"D39A 0ADC 1089 90F8 D098 1E77 BDD1 AF74" /* ÓšÂÜ.‰øÐ˜.w½Ñ¯t */
- $"4DEF D00D 0B2C CA2F 9EDC 27C4 35F9 F924" /* MïÐ..,Ê/žÜ'Ä5ùù$ */
- $"67FF 74E5 A746 B627 6267 F6D0 9B94 22D4" /* gÿtå§F¶'bgöЛ”"Ô */
- $"5FFE DF67 A7A9 E3CA 02A5 44D1 E926 DCA4" /* _þßg§©ãÊ.¥DÑé&ܤ */
- $"7490 4AB8 E094 7037 FF7C 8CF7 2A9B B784" /* tJ¸à”p7ÿ|Œ÷*›·„ */
- $"794E 9026 D48F FF7F F013 AABF F874 63DA" /* yN&Ôÿ.ð.ª¿øtcÚ */
- $"0302 FBFA AA6A 31D5 E2DF 85F7 2ACD D98C" /* ..ûúªj1Õâß…÷*ÍÙŒ */
- $"175D 1243 F1C0 CEA2 344C B6FC ADCF C6AA" /* .].CñÀ΢4L¶ü­Ïƪ */
- $"5CAE FA82 783F 58DD 754D 5C63 A018 19F8" /* \®ú‚x?XÝuM\c ..ø */
- $"7EFE 8953 AE16 22B9 4ED7 43D2 8A0B FA52" /* ~þ‰S®."¹N×CÒŠ.úR */
- $"5703 08CA 555B E51E 307B 0565 E165 22F3" /* W..ÊU[å.0{.eáe"ó */
- $"7130 0CEC CA23 576D 8D58 BED1 FEB6 9A2F" /* q0.ìÊ#WmX¾Ñþ¶š/ */
- $"DCEA 3288 3EEC B12A D43C B191 2627 7723" /* Üê2ˆ>ì±*Ô<±‘&'w# */
- $"F40F 1B7A F1E3 9A7E 366D 7490 EE80 3570" /* ô..zñãš~6mtî€5p */
- $"CB59 D05D F384 AA96 71FE 68E8 4D32 F9D2" /* ËYÐ]󄪖qþhèM2ùÒ */
- $"48BC 7B03 EA3B 879E 2E96 671F 8098 CE76" /* H¼{.ê;‡ž.–g.€˜Îv */
- $"87D8 0336 5C88 91F4 3C69 D76B 4DEF 29DA" /* ‡Ø.6\ˆ‘ô<i×kMï)Ú */
- $"F378 1035 720A CE61 C2E3 5776 CA53 F43B" /* óx.5rÂÎaÂãWvÊSô; */
- $"4FCB 79E4 5164 1270 A23E 6048 2089 7B12" /* OËyäQd.p¢>`H ‰{. */
- $"BCA8 E157 DFD5 E879 C14C 1B1A 3431 2856" /* ¼¨áWßÕèyÁL..41(V */
- $"0E74 D87F 7691 A923 632A 5EBC 6E95 6A46" /* .tØ.v‘©#c*^¼n•jF */
- $"8E68 7118 3704 6E41 37CB C9AC 7F84 1005" /* Žhq.7.nA7Ëɬ.„.. */
- $"C308 7C90 C6E0 B56C 8CF8 3C33 A97E C46C" /* Ã.|ÆàµlŒø<3©~Äl */
- $"E373 91A9 4A3F 7331 481D 843F 0472 59DC" /* ãs‘©J?s1H.„?.rYÜ */
- $"0837 85BA 4867 C202 6BFC 7433 F093 530F" /* .7…ºHgÂ.küt3ð“S. */
- $"D721 8927 26CF AA6B B4E1 7981 FCE4 9F4E" /* ×!‰'&Ϫk´áyüäŸN */
- $"1105 9E7B 7F68 1CE7 D811 E270 FCA3 9CDE" /* ..ž{.h.çØ.âpü£œÞ */
- $"BFE6 48BA AC07 B55E 4E7F 5946 115B B1DC" /* ¿æHº¬.µ^N.YF.[±Ü */
- $"F694 3A9B EADD 7971 E0F1 B6E1 C6FF 4337" /* ö”:›êÝyqàñ¶áÆÿC7 */
- $"F543 A074 FC74 AD1F 45BF 7867 C472 7605" /* õC tüt­.E¿xgÄrv. */
- $"1786 E496 2D22 22BE 5760 9ACE A5C9 22B9" /* .†ä–-""¾W`šÎ¥É"¹ */
- $"9A14 4136 93E4 3E4A 715C 6F69 8447 5764" /* š.A6“ä>Jq\oi„GWd */
- $"D761 77A8 2C3F E200 ACAD 8331 11D0 ABE6" /* ×aw¨,?â.¬­ƒ1.Ыæ */
- $"EA7B 5A22 58CF 097E 732F 894B E99C 6BAF" /* ê{Z"XÏÆ~s/‰Kéœk¯ */
- $"B36C 68AA 5668 EF92 66E9 DDF9 FF78 DB89" /* ³lhªVhï’féÝùÿxÛ‰ */
- $"FC78 2032 99D9 62F0 1380 3FE8 41DF F341" /* üx 2™Ùbð.€?èAßóA */
- $"F1FD 7F08 CE2E F09A 9335 6735 0FAD 8093" /* ñý..Î.ðš“5g5.­€“ */
- $"B6B1 53A2 964F EA7E 72A2 9A29 794D 98F0" /* ¶±S¢–Oê~r¢š)yM˜ð */
- $"DD57 AE65 C61E DDEC BDB4 35C2 D050 E063" /* ÝW®eÆ.Ýì½´5ÂÐPàc */
- $"5F54 BCA5 928D 786D CAE3 8F96 BFEB 027E" /* _T¼¥’xmÊã–¿ë.~ */
- $"6BBC 8795 7C88 1A2C 9908 36A1 6CAB 9268" /* k¼‡•|ˆ.,™.6¡l«’h */
- $"EB0D 816F F34D 55F5 B562 BCFF 4190 EE42" /* ë.oóMUõµb¼ÿAîB */
- $"F195 E7F3 E220 7E51 74A2 FA23 23F7 20F0" /* ñ•çóâ ~Qt¢ú##÷ ð */
- $"985F 011C 34B8 C988 C519 C623 81BC D026" /* ˜_..4¸ÉˆÅ.Æ#¼Ð& */
- $"A8C5 B82C 7A7F 86F7 E60E 44F2 CD53 6FAB" /* ¨Å¸,z.†÷æ.DòÍSo« */
- $"2D69 1FD4 75B7 A011 80E7 09B3 B9CF 4503" /* -i.Ôu· .€çƳ¹ÏE. */
- $"F4A5 1DE3 AE8A 96F7 E245 0DF9 3859 24FA" /* ô¥.㮊–÷âE.ù8Y$ú */
- $"7B43 665F B15E D4D3 FB2A 666E FB6A 6CA8" /* {Cf_±^ÔÓû*fnûjl¨ */
- $"9CAF C052 D658 6DC3 BDD1 C752 21FA 6426" /* œ¯ÀRÖXmýÑÇR!úd& */
- $"857C D05D 41C2 0241 306C 6FD4 81E3 69F7" /* …|Ð]AÂ.A0loÔãi÷ */
- $"A6F5 227F 39F9 780E 829A 17A9 C649 2BF5" /* ¦õ".9ùx.‚š.©ÆI+õ */
- $"01DD E500 A973 E599 890C A548 CE34 2877" /* .Ýå.©s噉.¥HÎ4(w */
- $"D160 A2EE 4B3B CC7A 0C87 6723 51FD C222" /* Ñ`¢îK;Ìz.‡g#QýÂ" */
- $"9BFB E72D 2769 6250 2054 22C9 ABB2 3125" /* ›ûç-'ibP T"É«²1% */
- $"7DA0 73A3 C083 1AAD 90F2 F0A8 C22D 9DF5" /* } s£Àƒ.­òð¨Â-õ */
- $"3FFB 6B56 18BE 61A6 B198 F1BC 1E4E 0CFE" /* ?ûkV.¾a¦±˜ñ¼.N.þ */
- $"B323 8275 A644 CAC4 D36B 9AF9 FCC8 5DEC" /* ³#‚u¦DÊÄÓkšùüÈ]ì */
- $"292B CC9B A0B6 9148 09DF E46D 1B2C 4EDF" /* )+Ì› ¶‘HÆßäm.,Nß */
- $"EDB9 2DB4 BAD5 C50B 2115 C476 E09A F407" /* í¹-´ºÕÅ.!.Ävàšô. */
- $"5EE8 2E9F 870F A319 32D4 EBEC CB7B FDE9" /* ^è.Ÿ‡.£.2ÔëìË{ýé */
- $"FB5C 0D41 61F3 BA97 0F9E 558F 6E39 C213" /* û\.Aaóº—.žUn9Â. */
- $"3101 A5E8 ECEC 15E5 4F29 F69A 58CD D82D" /* 1.¥èìì.åO)öšXÍØ- */
- $"986E E8E0 6898 17CC 98C4 C851 AC75 9306" /* ˜nèàh˜.̘ÄÈQ¬u“. */
- $"5241 0350 E2EB 38CA 1682 6132 FF45 578A" /* RA.Pâë8Ê.‚a2ÿEWŠ */
- $"FA7F 7557 AC2C 9A18 3835 A62B 7D09 0992" /* ú.uW¬,š.85¦+}ÆÆ’ */
- $"EF78 BD49 5317 373A B07D 6420 DC30 5067" /* ïx½IS.7:°}d Ü0Pg */
- $"A659 F316 4436 8E8E 9786 1163 A6A5 B841" /* ¦Yó.D6ŽŽ—†.c¦¥¸A */
- $"99AA 4E1C 6163 309A 3C23 0208 FF4B 2967" /* ™ªN.ac0š<#..ÿK)g */
- $"B7F7 37E4 A337 D0DC C48A A742 FB2D C529" /* ·÷7ä£7ÐÜÄŠ§Bû-Å) */
- $"BC6C 5BBE BC5C 03B1 F87F D7EA F5AC B94B" /* ¼l[¾¼\.±ø.×êõ¬¹K */
- $"5A88 84AB E44E BE6A F337 96B0 7CB6 1140" /* Zˆ„«äN¾jó7–°|¶.@ */
- $"25CB 45D6 BE02 A9D4 7868 1EDD F660 7963" /* %ËEÖ¾.©Ôxh.Ýö`yc */
- $"B438 C030 3EA5 51FA F451 FA84 A6FF 2E5A" /* ´8À0>¥QúôQú„¦ÿ.Z */
- $"EA95 2300 C0F4 39AA 42BA 4120 4EEC AFDD" /* ê•#.Àô9ªBºA Nì¯Ý */
- $"20B4 6C42 0552 1177 6F1A AC6D FE8B 98E1" /* ´lB.R.wo.¬mþ‹˜á */
- $"D3FB F52E BCE3 5BB1 7235 F597 3E0D 8C46" /* Óûõ.¼ã[±r5õ—>.ŒF */
- $"7361 1E2A C081 CA97 C8EA CD3F E91D 823F" /* sa.*ÀÊ—ÈêÍ?é.‚? */
- $"73A7 5EA1 F641 9CBD 219D D7E4 EE0D 270E" /* s§^¡öAœ½!×äî.'. */
- $"14DF F756 B4E5 062C 8251 4AD0 B090 A0AF" /* .ß÷V´å.,‚QJа ¯ */
- $"CD2A 3C80 6068 C9CD C3D7 3D7F 258B 365A" /* Í*<€`hÉÍÃ×=.%‹6Z */
- $"5E1A 90DC D058 4ED9 DF50 6F40 07A9 2BDE" /* ^.ÜÐXNÙßPo@.©+Þ */
- $"8486 5404 AB9C E323 0C4E D3DB 8352 0C0F" /* „†T.«œã#.NÓÛƒR.. */
- $"CD59 A5F5 56CC 0BB2 B603 85C3 C709 7D6E" /* ÍY¥õVÌ.²¶.…ÃÇÆ}n */
- $"A10E 33C2 AE0F D52F 5AD7 2279 E6EB 7E6C" /* ¡.3®.Õ/Z×"yæë~l */
- $"1757 589D C6DC B4FD 470C FFD9" /* .WXÆÜ´ýG.ÿÙ */
-};
-
diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
deleted file mode 100644
index 495ec37f53..0000000000
--- a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns
deleted file mode 100644
index da5307e389..0000000000
--- a/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg b/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg
deleted file mode 100644
index 55294dcc9a..0000000000
--- a/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index b5d43021ec..a874ce1245 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -1,860 +1,860 @@
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; secondlife setup.nsi
-;; Copyright 2004-2010, Linden Research, Inc.
-;;
-;; NSIS Unicode 2.38.1 or higher required
-;; http://www.scratchpaper.com/
-;;
-;; Author: James Cook, Don Kjer, Callum Prentice
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Compiler flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-SetOverwrite on ; overwrite files
-SetCompress auto ; compress iff saves space
-SetCompressor /solid lzma ; compress whole installer as one block
-SetDatablockOptimize off ; only saves us 0.1%, not worth it
-XPStyle on ; add an XP manifest to the installer
-RequestExecutionLevel admin ; on Vista we must be admin because we write to Program Files
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Project flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-%%VERSION%%
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; - language files - one for each language (or flavor thereof)
-;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
-;; application directory so we have to add a path to these include files)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-!include "%%SOURCE%%\installers\windows\lang_da.nsi"
-!include "%%SOURCE%%\installers\windows\lang_de.nsi"
-!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
-!include "%%SOURCE%%\installers\windows\lang_es.nsi"
-!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
-!include "%%SOURCE%%\installers\windows\lang_it.nsi"
-!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
-!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
-!include "%%SOURCE%%\installers\windows\lang_pl.nsi"
-!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
-!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
-
-# *TODO: Move these into the language files themselves
-LangString LanguageCode ${LANG_DANISH} "da"
-LangString LanguageCode ${LANG_GERMAN} "de"
-LangString LanguageCode ${LANG_ENGLISH} "en"
-LangString LanguageCode ${LANG_SPANISH} "es"
-LangString LanguageCode ${LANG_FRENCH} "fr"
-LangString LanguageCode ${LANG_JAPANESE} "ja"
-LangString LanguageCode ${LANG_ITALIAN} "it"
-LangString LanguageCode ${LANG_KOREAN} "ko"
-LangString LanguageCode ${LANG_DUTCH} "nl"
-LangString LanguageCode ${LANG_POLISH} "pl"
-LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
-LangString LanguageCode ${LANG_SIMPCHINESE} "zh"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
-;; For example:
-;; !define INSTFLAGS "%(flags)s"
-;; !define INSTNAME "SecondLife%(grid_caps)s"
-;; !define SHORTCUT "Second Life (%(grid_caps)s)"
-;; !define URLNAME "secondlife%(grid)s"
-;; !define UNINSTALL_SETTINGS 1
-
-%%GRID_VARS%%
-
-Name ${INSTNAME}
-
-SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
-
-BrandingText " " ; bottom of window text
-Icon %%SOURCE%%\installers\windows\install_icon.ico
-UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
-WindowIcon on ; show our icon in left corner
-BGGradient off ; no big background window
-CRCCheck on ; make sure CRC is OK
-InstProgressFlags smooth colored ; new colored smooth look
-ShowInstDetails nevershow ; no details, no "show" button
-SetOverwrite on ; stomp files by default
-AutoCloseWindow true ; after all files install, close window
-
-InstallDir "$PROGRAMFILES\${INSTNAME}"
-InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
-DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
-Page directory dirPre
-Page instfiles
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Var INSTPROG
-Var INSTEXE
-Var INSTFLAGS
-Var INSTSHORTCUT
-Var COMMANDLINE ; command line passed to this installer, set in .onInit
-Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
-Var SKIP_DIALOGS ; set from command line in .onInit. autoinstall
- ; GUI and the defaults.
-
-;;; Function definitions should go before file includes, because calls to
-;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
-;;; the end of this script NSIS has to decompress the whole installer before
-;;; it can call the DLL function. JC
-
-!include "FileFunc.nsh" ; For GetParameters, GetOptions
-!insertmacro GetParameters
-!insertmacro GetOptions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; After install completes, launch app
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function .onInstSuccess
- Push $R0 # Option value, unused
-
- StrCmp $SKIP_DIALOGS "true" label_launch
-
- ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
- # If parameter was there (no error) just launch
- # Otherwise ask
- IfErrors label_ask_launch label_launch
-
-label_ask_launch:
- # Don't launch by default when silent
- IfSilent label_no_launch
- MessageBox MB_YESNO $(InstSuccesssQuestion) \
- IDYES label_launch IDNO label_no_launch
-
-label_launch:
- # Assumes SetOutPath $INSTDIR
- Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
-label_no_launch:
- Pop $R0
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Pre-directory page callback
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function dirPre
- StrCmp $SKIP_DIALOGS "true" 0 +2
- Abort
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Make sure we're not on Windows 98 / ME
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckWindowsVersion
- DetailPrint "Checking Windows version..."
- Call GetWindowsVersion
- Pop $R0
- ; Just get first two characters, ignore 4.0 part of "NT 4.0"
- StrCpy $R0 $R0 2
- ; Blacklist certain OS versions
- StrCmp $R0 "95" win_ver_bad
- StrCmp $R0 "98" win_ver_bad
- StrCmp $R0 "ME" win_ver_bad
- StrCmp $R0 "NT" win_ver_bad
- Return
-win_ver_bad:
- StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
- MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
- Return
-win_ver_abort:
- Quit
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Make sure the user can install/uninstall
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckIfAdministrator
- DetailPrint $(CheckAdministratorInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorInstMB)
- Quit
-lbl_is_admin:
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CheckIfAdministrator
- DetailPrint $(CheckAdministratorUnInstDP)
- UserInfo::GetAccountType
- Pop $R0
- StrCmp $R0 "Admin" lbl_is_admin
- MessageBox MB_OK $(CheckAdministratorUnInstMB)
- Quit
-lbl_is_admin:
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Checks to see if the current version has already been installed (according to the registry).
-; If it has, allow user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckIfAlreadyCurrent
- Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
- StrCmp $0 ${VERSION_LONG} 0 continue_install
- StrCmp $SKIP_DIALOGS "true" continue_install
- MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
- Quit
-continue_install:
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Checks for CPU valid (must have SSE2 support)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckCPUFlags
- Call GetWindowsVersion
- Pop $R0
- StrCmp $R0 "2000" OK_SSE ; sse check not available on win2k.
-
- Push $1
- System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
- IntCmp $1 1 OK_SSE
- MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE
- Quit
-
- OK_SSE:
- Pop $1
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Close the program, if running. Modifies no variables.
-; Allows user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CloseSecondLife
- Push $0
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
-
- StrCmp $SKIP_DIALOGS "true" CLOSE
- MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
-
- CANCEL_INSTALL:
- Quit
-
- CLOSE:
- DetailPrint $(CloseSecondLifeInstDP)
- SendMessage $0 16 0 0
-
- LOOP:
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- Sleep 500
- Goto LOOP
-
- DONE:
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Test our connection to secondlife.com
-; Also allows us to count attempted installs by examining web logs.
-; *TODO: Return current SL version info and have installer check
-; if it is up to date.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function CheckNetworkConnection
- Push $0
- Push $1
- Push $2 # Option value for GetOptions
- DetailPrint $(CheckNetworkConnectionDP)
- ; Look for a tag value from the stub installer, used for statistics
- ; to correlate installs. Default to "" if not found on command line.
- StrCpy $2 ""
- ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
- GetTempFileName $0
- !define HTTP_TIMEOUT 5000 ; milliseconds
- ; Don't show secondary progress bar, this will be quick.
- NSISdl::download_quiet \
- /TIMEOUT=${HTTP_TIMEOUT} \
- "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
- $0
- Pop $1 ; Return value, either "success", "cancel" or an error message
- ; MessageBox MB_OK "Download result: $1"
- ; Result ignored for now
- ; StrCmp $1 "success" +2
- ; DetailPrint "Connection failed: $1"
- Delete $0 ; temporary file
- Pop $2
- Pop $1
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Delete files in Documents and Settings\<user>\SecondLife\cache
-; Delete files in Documents and Settings\All Users\SecondLife\cache
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;Function RemoveCacheFiles
-;
-;; Delete files in Documents and Settings\<user>\SecondLife
-;Push $0
-;Push $1
-;Push $2
-; DetailPrint $(RemoveCacheFilesDP)
-;
-; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-;
-; LOOP:
-; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
-; StrCmp $1 "" DONE ; no more users
-;
-; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
-; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-;
-; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
-; ExpandEnvStrings $2 $2
-;
-; ; When explicitly uninstalling, everything goes away
-; RMDir /r "$2\Application Data\SecondLife\cache"
-;
-; CONTINUE:
-; IntOp $0 $0 + 1
-; Goto LOOP
-; DONE:
-;Pop $2
-;Pop $1
-;Pop $0
-;
-;; Delete files in Documents and Settings\All Users\SecondLife
-;Push $0
-; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
-; StrCmp $0 "" +2
-; RMDir /r "$0\SecondLife\cache"
-;Pop $0
-;
-;; Delete filse in C:\Windows\Application Data\SecondLife
-;; If the user is running on a pre-NT system, Application Data lives here instead of
-;; in Documents and Settings.
-;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
-;
-;FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Delete the installed shader files
-;;; Since shaders are in active development, we'll likely need to shuffle them
-;;; around a bit from build to build. This ensures that shaders that we move
-;;; or rename in the dev tree don't get left behind in the install.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveOldShaders
-
-;; Remove old shader files first so fallbacks will work. see DEV-5663
-RMDir /r "$INSTDIR\app_settings\shaders\*"
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Delete the installed XUI files
-;;; We've changed the directory hierarchy for skins, putting all XUI and texture
-;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
-;;; to skins/xui/en-us. Need to clean up the old path when upgrading
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveOldXUI
-
-;; remove old XUI and texture files
-RmDir /r "$INSTDIR\skins\html"
-RmDir /r "$INSTDIR\skins\xui"
-RmDir /r "$INSTDIR\skins\textures"
-Delete "$INSTDIR\skins\*.txt"
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Remove any releasenotes files.
-;;; We are no longer including release notes with the viewer. This will delete
-;;; any that were left behind by an older installer. Delete will not fail if
-;;; the files do not exist
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveOldReleaseNotes
-
-;; remove releasenotes.txt file from application directory, and the shortcut
-;; from the start menu.
-Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
-Delete "$INSTDIR\releasenotes.txt"
-
-FunctionEnd
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Delete files in Documents and Settings\<user>\SecondLife
-; Delete files in Documents and Settings\All Users\SecondLife
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.DocumentsAndSettingsFolder
-
-; Delete files in Documents and Settings\<user>\SecondLife
-Push $0
-Push $1
-Push $2
-
- DetailPrint "Deleting files in Documents and Settings folder"
-
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- ; If uninstalling a normal install remove everything
- ; Otherwise (preview/dmz etc) just remove cache
- StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
- RM_ALL:
- RMDir /r "$2\Application Data\SecondLife"
- RM_CACHE:
- # Local Settings directory is the cache, there is no "cache" subdir
- RMDir /r "$2\Local Settings\Application Data\SecondLife"
- # Vista version of the same
- RMDir /r "$2\AppData\Local\SecondLife"
- Delete "$2\Application Data\SecondLife\user_settings\settings_windlight.xml"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-
-Pop $2
-Pop $1
-Pop $0
-
-; Delete files in Documents and Settings\All Users\SecondLife
-Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- RMDir /r "$0\SecondLife"
-Pop $0
-
-; Delete filse in C:\Windows\Application Data\SecondLife
-; If the user is running on a pre-NT system, Application Data lives here instead of
-; in Documents and Settings.
-RMDir /r "$WINDIR\Application Data\SecondLife"
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Close the program, if running. Modifies no variables.
-; Allows user to bail out of uninstall process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.CloseSecondLife
- Push $0
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
-
- CANCEL_UNINSTALL:
- Quit
-
- CLOSE:
- DetailPrint $(CloseSecondLifeUnInstDP)
- SendMessage $0 16 0 0
-
- LOOP:
- FindWindow $0 "Second Life" ""
- IntCmp $0 0 DONE
- Sleep 500
- Goto LOOP
-
- DONE:
- Pop $0
- Return
-FunctionEnd
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; Delete the stored password for the current Windows user
-; DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
-;
-Function un.RemovePassword
-
-DetailPrint "Removing Second Life password"
-
-SetShellVarContext current
-Delete "$APPDATA\SecondLife\user_settings\password.dat"
-SetShellVarContext all
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Delete the installed files
-;;; This deletes the uninstall executable, but it works
-;;; because it is copied to temp directory before running
-;;;
-;;; Note: You must list all files here, because we only
-;;; want to delete our files, not things users left in the
-;;; application directories.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.ProgramFiles
-
-;; Remove mozilla file first so recursive directory deletion doesn't get hung up
-Delete "$INSTDIR\app_settings\mozilla\components"
-
-;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
-%%DELETE_FILES%%
-
-;; Optional/obsolete files. Delete won't fail if they don't exist.
-Delete "$INSTDIR\dronesettings.ini"
-Delete "$INSTDIR\message_template.msg"
-Delete "$INSTDIR\newview.pdb"
-Delete "$INSTDIR\newview.map"
-Delete "$INSTDIR\SecondLife.pdb"
-Delete "$INSTDIR\SecondLife.map"
-Delete "$INSTDIR\comm.dat"
-Delete "$INSTDIR\*.glsl"
-Delete "$INSTDIR\motions\*.lla"
-Delete "$INSTDIR\trial\*.html"
-Delete "$INSTDIR\newview.exe"
-;; Remove entire help directory
-Delete "$INSTDIR\help\Advanced\*"
-RMDir "$INSTDIR\help\Advanced"
-Delete "$INSTDIR\help\basics\*"
-RMDir "$INSTDIR\help\basics"
-Delete "$INSTDIR\help\Concepts\*"
-RMDir "$INSTDIR\help\Concepts"
-Delete "$INSTDIR\help\welcome\*"
-RMDir "$INSTDIR\help\welcome"
-Delete "$INSTDIR\help\*"
-RMDir "$INSTDIR\help"
-
-Delete "$INSTDIR\uninst.exe"
-RMDir "$INSTDIR"
-
-IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
-
-FOLDERFOUND:
- ; Silent uninstall always removes all files (/SD IDYES)
- MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
- RMDir /r "$INSTDIR"
-
-NOFOLDER:
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Uninstall settings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-UninstallText $(UninstallTextMsg)
-ShowUninstDetails show
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Uninstall section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Section Uninstall
-
-; Start with some default values.
-StrCpy $INSTFLAGS ""
-StrCpy $INSTPROG "${INSTNAME}"
-StrCpy $INSTEXE "${INSTEXE}"
-StrCpy $INSTSHORTCUT "${SHORTCUT}"
-Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
-
-; uninstall for all users (if you change this, change it in the install as well)
-SetShellVarContext all
-
-; Make sure we're not running
-Call un.CloseSecondLife
-
-; Clean up registry keys and subkeys (these should all be !defines somewhere)
-DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
-DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
-
-; Clean up shortcuts
-Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
-RMDir "$SMPROGRAMS\$INSTSHORTCUT"
-
-Delete "$DESKTOP\$INSTSHORTCUT.lnk"
-Delete "$INSTDIR\$INSTSHORTCUT.lnk"
-Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
-
-; Clean up cache and log files.
-; Leave them in-place for non AGNI installs.
-
-!ifdef UNINSTALL_SETTINGS
-Call un.DocumentsAndSettingsFolder
-!endif
-
-; remove stored password on uninstall
-Call un.RemovePassword
-
-Call un.ProgramFiles
-
-SectionEnd ; end of uninstall section
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; (From the NSIS documentation, JC)
-; GetWindowsVersion
-;
-; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
-; Updated by Joost Verburg
-;
-; Returns on top of stack
-;
-; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
-; or
-; '' (Unknown Windows Version)
-;
-; Usage:
-; Call GetWindowsVersion
-; Pop $R0
-; ; at this point $R0 is "NT 4.0" or whatnot
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function GetWindowsVersion
-
- Push $R0
- Push $R1
-
- ReadRegStr $R0 HKLM \
- "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
-
- IfErrors 0 lbl_winnt
-
- ; we are not NT
- ReadRegStr $R0 HKLM \
- "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
-
- StrCpy $R1 $R0 1
- StrCmp $R1 '4' 0 lbl_error
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '4.0' lbl_win32_95
- StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
-
- lbl_win32_95:
- StrCpy $R0 '95'
- Goto lbl_done
-
- lbl_win32_98:
- StrCpy $R0 '98'
- Goto lbl_done
-
- lbl_win32_ME:
- StrCpy $R0 'ME'
- Goto lbl_done
-
- lbl_winnt:
-
- StrCpy $R1 $R0 1
-
- StrCmp $R1 '3' lbl_winnt_x
- StrCmp $R1 '4' lbl_winnt_x
-
- StrCpy $R1 $R0 3
-
- StrCmp $R1 '5.0' lbl_winnt_2000
- StrCmp $R1 '5.1' lbl_winnt_XP
- StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
-
- lbl_winnt_x:
- StrCpy $R0 "NT $R0" 6
- Goto lbl_done
-
- lbl_winnt_2000:
- Strcpy $R0 '2000'
- Goto lbl_done
-
- lbl_winnt_XP:
- Strcpy $R0 'XP'
- Goto lbl_done
-
- lbl_winnt_2003:
- Strcpy $R0 '2003'
- Goto lbl_done
-
- lbl_error:
- Strcpy $R0 ''
- lbl_done:
-
- Pop $R1
- Exch $R0
-
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Note: to add new languages, add a language file include to the list
-;; at the top of this file, add an entry to the menu and then add an
-;; entry to the language ID selector below
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function .onInit
- Push $0
- ${GetParameters} $COMMANDLINE ; get our command line
-
- ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0
- IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
- StrCpy $SKIP_DIALOGS "true"
-
- ${GetOptions} $COMMANDLINE "/LANGID=" $0 ; /LANGID=1033 implies US English
- ; If no language (error), then proceed
- IfErrors lbl_configure_default_lang
- ; No error means we got a language, so use it
- StrCpy $LANGUAGE $0
- Goto lbl_return
-
-lbl_configure_default_lang:
- ; If we currently have a version of SL installed, default to the language of that install
- ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
- IfErrors +2 0 ; If error skip the copy instruction
- StrCpy $LANGUAGE $0
-
- ; For silent installs, no language prompt, use default
- IfSilent lbl_return
- StrCmp $SKIP_DIALOGS "true" lbl_return
-
-lbl_build_menu:
- Push ""
- # Use separate file so labels can be UTF-16 but we can still merge changes
- # into this ASCII file. JC
- !include "%%SOURCE%%\installers\windows\language_menu.nsi"
-
- Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
- LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
- Pop $0
- StrCmp $0 "cancel" 0 +2
- Abort
- StrCpy $LANGUAGE $0
-
- ; save language in registry
- WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
-lbl_return:
- Pop $0
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function un.onInit
- ; read language from registry and set for uninstaller
- ; Key will be removed on successful uninstall
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
- IfErrors lbl_end
- StrCpy $LANGUAGE $0
-lbl_end:
- Return
-FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; MAIN SECTION
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Section "" ; (default section)
-
-SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
-
-; Start with some default values.
-StrCpy $INSTFLAGS "${INSTFLAGS}"
-StrCpy $INSTPROG "${INSTNAME}"
-StrCpy $INSTEXE "${INSTEXE}"
-StrCpy $INSTSHORTCUT "${SHORTCUT}"
-
-Call CheckWindowsVersion ; warn if on Windows 98/ME
-Call CheckCPUFlags ; Make sure we have SSE2 support
-Call CheckIfAdministrator ; Make sure the user can install/uninstall
-Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
-Call CloseSecondLife ; Make sure we're not running
-Call CheckNetworkConnection ; ping secondlife.com
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
-;Call RemoveCacheFiles ; Installing over removes potentially corrupted
- ; VFS and cache files.
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Need to clean out shader files from previous installs to fix DEV-5663
-Call RemoveOldShaders
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Need to clean out old XUI files that predate skinning
-Call RemoveOldXUI
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Clear out old releasenotes.txt files. These are now on the public wiki.
-Call RemoveOldReleaseNotes
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Files
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
-%%INSTALL_FILES%%
-
-# Pass the installer's language to the client to use as a default
-StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Shortcuts in start menu
-CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
-SetOutPath "$INSTDIR"
-CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-
-
-WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
- "InternetShortcut" "URL" \
- "http://join.secondlife.com/"
-WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
- "InternetShortcut" "URL" \
- "http://www.secondlife.com/account/"
-WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
- "InternetShortcut" "URL" \
- "http://wiki.secondlife.com/wiki/LSL_Portal"
-CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
- '"$INSTDIR\uninst.exe"' ''
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Other shortcuts
-SetOutPath "$INSTDIR"
-CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
- "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
-CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
- '"$INSTDIR\uninst.exe"' ''
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Write registry
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
-WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
-WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
-WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Write URL registry info
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
-;; URL param must be last item passed to viewer, it ignores subsequent params
-;; to avoid parameter injection attacks.
-WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
-WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
-;; URL param must be last item passed to viewer, it ignores subsequent params
-;; to avoid parameter injection attacks.
-WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
-
-; write out uninstaller
-WriteUninstaller "$INSTDIR\uninst.exe"
-
-; end of default section
-SectionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; secondlife setup.nsi
+;; Copyright 2004-2010, Linden Research, Inc.
+;;
+;; NSIS Unicode 2.38.1 or higher required
+;; http://www.scratchpaper.com/
+;;
+;; Author: James Cook, Don Kjer, Callum Prentice
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Compiler flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+SetOverwrite on ; overwrite files
+SetCompress auto ; compress iff saves space
+SetCompressor /solid lzma ; compress whole installer as one block
+SetDatablockOptimize off ; only saves us 0.1%, not worth it
+XPStyle on ; add an XP manifest to the installer
+RequestExecutionLevel admin ; on Vista we must be admin because we write to Program Files
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Project flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+%%VERSION%%
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; - language files - one for each language (or flavor thereof)
+;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
+;; application directory so we have to add a path to these include files)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+!include "%%SOURCE%%\installers\windows\lang_da.nsi"
+!include "%%SOURCE%%\installers\windows\lang_de.nsi"
+!include "%%SOURCE%%\installers\windows\lang_en-us.nsi"
+!include "%%SOURCE%%\installers\windows\lang_es.nsi"
+!include "%%SOURCE%%\installers\windows\lang_fr.nsi"
+!include "%%SOURCE%%\installers\windows\lang_ja.nsi"
+!include "%%SOURCE%%\installers\windows\lang_it.nsi"
+!include "%%SOURCE%%\installers\windows\lang_ko.nsi"
+!include "%%SOURCE%%\installers\windows\lang_nl.nsi"
+!include "%%SOURCE%%\installers\windows\lang_pl.nsi"
+!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi"
+!include "%%SOURCE%%\installers\windows\lang_zh.nsi"
+
+# *TODO: Move these into the language files themselves
+LangString LanguageCode ${LANG_DANISH} "da"
+LangString LanguageCode ${LANG_GERMAN} "de"
+LangString LanguageCode ${LANG_ENGLISH} "en"
+LangString LanguageCode ${LANG_SPANISH} "es"
+LangString LanguageCode ${LANG_FRENCH} "fr"
+LangString LanguageCode ${LANG_JAPANESE} "ja"
+LangString LanguageCode ${LANG_ITALIAN} "it"
+LangString LanguageCode ${LANG_KOREAN} "ko"
+LangString LanguageCode ${LANG_DUTCH} "nl"
+LangString LanguageCode ${LANG_POLISH} "pl"
+LangString LanguageCode ${LANG_PORTUGUESEBR} "pt"
+LangString LanguageCode ${LANG_SIMPCHINESE} "zh"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
+;; For example:
+;; !define INSTFLAGS "%(flags)s"
+;; !define INSTNAME "SecondLife%(grid_caps)s"
+;; !define SHORTCUT "Second Life (%(grid_caps)s)"
+;; !define URLNAME "secondlife%(grid)s"
+;; !define UNINSTALL_SETTINGS 1
+
+%%GRID_VARS%%
+
+Name ${INSTNAME}
+
+SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
+
+BrandingText " " ; bottom of window text
+Icon %%SOURCE%%\installers\windows\install_icon.ico
+UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
+WindowIcon on ; show our icon in left corner
+BGGradient off ; no big background window
+CRCCheck on ; make sure CRC is OK
+InstProgressFlags smooth colored ; new colored smooth look
+ShowInstDetails nevershow ; no details, no "show" button
+SetOverwrite on ; stomp files by default
+AutoCloseWindow true ; after all files install, close window
+
+InstallDir "$PROGRAMFILES\${INSTNAME}"
+InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
+DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
+Page directory dirPre
+Page instfiles
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Variables
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Var INSTPROG
+Var INSTEXE
+Var INSTFLAGS
+Var INSTSHORTCUT
+Var COMMANDLINE ; command line passed to this installer, set in .onInit
+Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
+Var SKIP_DIALOGS ; set from command line in .onInit. autoinstall
+ ; GUI and the defaults.
+
+;;; Function definitions should go before file includes, because calls to
+;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
+;;; the end of this script NSIS has to decompress the whole installer before
+;;; it can call the DLL function. JC
+
+!include "FileFunc.nsh" ; For GetParameters, GetOptions
+!insertmacro GetParameters
+!insertmacro GetOptions
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; After install completes, launch app
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInstSuccess
+ Push $R0 # Option value, unused
+
+ StrCmp $SKIP_DIALOGS "true" label_launch
+
+ ${GetOptions} $COMMANDLINE "/AUTOSTART" $R0
+ # If parameter was there (no error) just launch
+ # Otherwise ask
+ IfErrors label_ask_launch label_launch
+
+label_ask_launch:
+ # Don't launch by default when silent
+ IfSilent label_no_launch
+ MessageBox MB_YESNO $(InstSuccesssQuestion) \
+ IDYES label_launch IDNO label_no_launch
+
+label_launch:
+ # Assumes SetOutPath $INSTDIR
+ Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM'
+label_no_launch:
+ Pop $R0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Pre-directory page callback
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function dirPre
+ StrCmp $SKIP_DIALOGS "true" 0 +2
+ Abort
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Make sure we're not on Windows 98 / ME
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckWindowsVersion
+ DetailPrint "Checking Windows version..."
+ Call GetWindowsVersion
+ Pop $R0
+ ; Just get first two characters, ignore 4.0 part of "NT 4.0"
+ StrCpy $R0 $R0 2
+ ; Blacklist certain OS versions
+ StrCmp $R0 "95" win_ver_bad
+ StrCmp $R0 "98" win_ver_bad
+ StrCmp $R0 "ME" win_ver_bad
+ StrCmp $R0 "NT" win_ver_bad
+ Return
+win_ver_bad:
+ StrCmp $SKIP_DIALOGS "true" +2 ; If skip_dialogs is set just install
+ MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
+ Return
+win_ver_abort:
+ Quit
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Make sure the user can install/uninstall
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckIfAdministrator
+ DetailPrint $(CheckAdministratorInstDP)
+ UserInfo::GetAccountType
+ Pop $R0
+ StrCmp $R0 "Admin" lbl_is_admin
+ MessageBox MB_OK $(CheckAdministratorInstMB)
+ Quit
+lbl_is_admin:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CheckIfAdministrator
+ DetailPrint $(CheckAdministratorUnInstDP)
+ UserInfo::GetAccountType
+ Pop $R0
+ StrCmp $R0 "Admin" lbl_is_admin
+ MessageBox MB_OK $(CheckAdministratorUnInstMB)
+ Quit
+lbl_is_admin:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Checks to see if the current version has already been installed (according to the registry).
+; If it has, allow user to bail out of install process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckIfAlreadyCurrent
+ Push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
+ StrCmp $0 ${VERSION_LONG} 0 continue_install
+ StrCmp $SKIP_DIALOGS "true" continue_install
+ MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK continue_install
+ Quit
+continue_install:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Checks for CPU valid (must have SSE2 support)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckCPUFlags
+ Call GetWindowsVersion
+ Pop $R0
+ StrCmp $R0 "2000" OK_SSE ; sse check not available on win2k.
+
+ Push $1
+ System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
+ IntCmp $1 1 OK_SSE
+ MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE
+ Quit
+
+ OK_SSE:
+ Pop $1
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Close the program, if running. Modifies no variables.
+; Allows user to bail out of install process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CloseSecondLife
+ Push $0
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+
+ StrCmp $SKIP_DIALOGS "true" CLOSE
+ MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
+
+ CANCEL_INSTALL:
+ Quit
+
+ CLOSE:
+ DetailPrint $(CloseSecondLifeInstDP)
+ SendMessage $0 16 0 0
+
+ LOOP:
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ Sleep 500
+ Goto LOOP
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Test our connection to secondlife.com
+; Also allows us to count attempted installs by examining web logs.
+; *TODO: Return current SL version info and have installer check
+; if it is up to date.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function CheckNetworkConnection
+ Push $0
+ Push $1
+ Push $2 # Option value for GetOptions
+ DetailPrint $(CheckNetworkConnectionDP)
+ ; Look for a tag value from the stub installer, used for statistics
+ ; to correlate installs. Default to "" if not found on command line.
+ StrCpy $2 ""
+ ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
+ GetTempFileName $0
+ !define HTTP_TIMEOUT 5000 ; milliseconds
+ ; Don't show secondary progress bar, this will be quick.
+ NSISdl::download_quiet \
+ /TIMEOUT=${HTTP_TIMEOUT} \
+ "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
+ $0
+ Pop $1 ; Return value, either "success", "cancel" or an error message
+ ; MessageBox MB_OK "Download result: $1"
+ ; Result ignored for now
+ ; StrCmp $1 "success" +2
+ ; DetailPrint "Connection failed: $1"
+ Delete $0 ; temporary file
+ Pop $2
+ Pop $1
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Delete files in Documents and Settings\<user>\SecondLife\cache
+; Delete files in Documents and Settings\All Users\SecondLife\cache
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;Function RemoveCacheFiles
+;
+;; Delete files in Documents and Settings\<user>\SecondLife
+;Push $0
+;Push $1
+;Push $2
+; DetailPrint $(RemoveCacheFilesDP)
+;
+; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+;
+; LOOP:
+; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+; StrCmp $1 "" DONE ; no more users
+;
+; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+;
+; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+; ExpandEnvStrings $2 $2
+;
+; ; When explicitly uninstalling, everything goes away
+; RMDir /r "$2\Application Data\SecondLife\cache"
+;
+; CONTINUE:
+; IntOp $0 $0 + 1
+; Goto LOOP
+; DONE:
+;Pop $2
+;Pop $1
+;Pop $0
+;
+;; Delete files in Documents and Settings\All Users\SecondLife
+;Push $0
+; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+; StrCmp $0 "" +2
+; RMDir /r "$0\SecondLife\cache"
+;Pop $0
+;
+;; Delete filse in C:\Windows\Application Data\SecondLife
+;; If the user is running on a pre-NT system, Application Data lives here instead of
+;; in Documents and Settings.
+;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
+;
+;FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed shader files
+;;; Since shaders are in active development, we'll likely need to shuffle them
+;;; around a bit from build to build. This ensures that shaders that we move
+;;; or rename in the dev tree don't get left behind in the install.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveOldShaders
+
+;; Remove old shader files first so fallbacks will work. see DEV-5663
+RMDir /r "$INSTDIR\app_settings\shaders\*"
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed XUI files
+;;; We've changed the directory hierarchy for skins, putting all XUI and texture
+;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
+;;; to skins/xui/en-us. Need to clean up the old path when upgrading
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveOldXUI
+
+;; remove old XUI and texture files
+RmDir /r "$INSTDIR\skins\html"
+RmDir /r "$INSTDIR\skins\xui"
+RmDir /r "$INSTDIR\skins\textures"
+Delete "$INSTDIR\skins\*.txt"
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Remove any releasenotes files.
+;;; We are no longer including release notes with the viewer. This will delete
+;;; any that were left behind by an older installer. Delete will not fail if
+;;; the files do not exist
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function RemoveOldReleaseNotes
+
+;; remove releasenotes.txt file from application directory, and the shortcut
+;; from the start menu.
+Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
+Delete "$INSTDIR\releasenotes.txt"
+
+FunctionEnd
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Delete files in Documents and Settings\<user>\SecondLife
+; Delete files in Documents and Settings\All Users\SecondLife
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.DocumentsAndSettingsFolder
+
+; Delete files in Documents and Settings\<user>\SecondLife
+Push $0
+Push $1
+Push $2
+
+ DetailPrint "Deleting files in Documents and Settings folder"
+
+ StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+
+ LOOP:
+ EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+ StrCmp $1 "" DONE ; no more users
+
+ ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+ StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+
+ ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+ ExpandEnvStrings $2 $2
+
+ ; If uninstalling a normal install remove everything
+ ; Otherwise (preview/dmz etc) just remove cache
+ StrCmp $INSTFLAGS "" RM_ALL RM_CACHE
+ RM_ALL:
+ RMDir /r "$2\Application Data\SecondLife"
+ RM_CACHE:
+ # Local Settings directory is the cache, there is no "cache" subdir
+ RMDir /r "$2\Local Settings\Application Data\SecondLife"
+ # Vista version of the same
+ RMDir /r "$2\AppData\Local\SecondLife"
+ Delete "$2\Application Data\SecondLife\user_settings\settings_windlight.xml"
+
+ CONTINUE:
+ IntOp $0 $0 + 1
+ Goto LOOP
+ DONE:
+
+Pop $2
+Pop $1
+Pop $0
+
+; Delete files in Documents and Settings\All Users\SecondLife
+Push $0
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+ StrCmp $0 "" +2
+ RMDir /r "$0\SecondLife"
+Pop $0
+
+; Delete filse in C:\Windows\Application Data\SecondLife
+; If the user is running on a pre-NT system, Application Data lives here instead of
+; in Documents and Settings.
+RMDir /r "$WINDIR\Application Data\SecondLife"
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Close the program, if running. Modifies no variables.
+; Allows user to bail out of uninstall process.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.CloseSecondLife
+ Push $0
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
+
+ CANCEL_UNINSTALL:
+ Quit
+
+ CLOSE:
+ DetailPrint $(CloseSecondLifeUnInstDP)
+ SendMessage $0 16 0 0
+
+ LOOP:
+ FindWindow $0 "Second Life" ""
+ IntCmp $0 0 DONE
+ Sleep 500
+ Goto LOOP
+
+ DONE:
+ Pop $0
+ Return
+FunctionEnd
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; Delete the stored password for the current Windows user
+; DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
+;
+Function un.RemovePassword
+
+DetailPrint "Removing Second Life password"
+
+SetShellVarContext current
+Delete "$APPDATA\SecondLife\user_settings\password.dat"
+SetShellVarContext all
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Delete the installed files
+;;; This deletes the uninstall executable, but it works
+;;; because it is copied to temp directory before running
+;;;
+;;; Note: You must list all files here, because we only
+;;; want to delete our files, not things users left in the
+;;; application directories.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.ProgramFiles
+
+;; Remove mozilla file first so recursive directory deletion doesn't get hung up
+Delete "$INSTDIR\app_settings\mozilla\components"
+
+;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
+%%DELETE_FILES%%
+
+;; Optional/obsolete files. Delete won't fail if they don't exist.
+Delete "$INSTDIR\dronesettings.ini"
+Delete "$INSTDIR\message_template.msg"
+Delete "$INSTDIR\newview.pdb"
+Delete "$INSTDIR\newview.map"
+Delete "$INSTDIR\SecondLife.pdb"
+Delete "$INSTDIR\SecondLife.map"
+Delete "$INSTDIR\comm.dat"
+Delete "$INSTDIR\*.glsl"
+Delete "$INSTDIR\motions\*.lla"
+Delete "$INSTDIR\trial\*.html"
+Delete "$INSTDIR\newview.exe"
+;; Remove entire help directory
+Delete "$INSTDIR\help\Advanced\*"
+RMDir "$INSTDIR\help\Advanced"
+Delete "$INSTDIR\help\basics\*"
+RMDir "$INSTDIR\help\basics"
+Delete "$INSTDIR\help\Concepts\*"
+RMDir "$INSTDIR\help\Concepts"
+Delete "$INSTDIR\help\welcome\*"
+RMDir "$INSTDIR\help\welcome"
+Delete "$INSTDIR\help\*"
+RMDir "$INSTDIR\help"
+
+Delete "$INSTDIR\uninst.exe"
+RMDir "$INSTDIR"
+
+IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
+
+FOLDERFOUND:
+ ; Silent uninstall always removes all files (/SD IDYES)
+ MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
+ RMDir /r "$INSTDIR"
+
+NOFOLDER:
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Uninstall settings
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+UninstallText $(UninstallTextMsg)
+ShowUninstDetails show
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Uninstall section
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section Uninstall
+
+; Start with some default values.
+StrCpy $INSTFLAGS ""
+StrCpy $INSTPROG "${INSTNAME}"
+StrCpy $INSTEXE "${INSTEXE}"
+StrCpy $INSTSHORTCUT "${SHORTCUT}"
+Call un.CheckIfAdministrator ; Make sure the user can install/uninstall
+
+; uninstall for all users (if you change this, change it in the install as well)
+SetShellVarContext all
+
+; Make sure we're not running
+Call un.CloseSecondLife
+
+; Clean up registry keys and subkeys (these should all be !defines somewhere)
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
+DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
+
+; Clean up shortcuts
+Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
+RMDir "$SMPROGRAMS\$INSTSHORTCUT"
+
+Delete "$DESKTOP\$INSTSHORTCUT.lnk"
+Delete "$INSTDIR\$INSTSHORTCUT.lnk"
+Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
+
+; Clean up cache and log files.
+; Leave them in-place for non AGNI installs.
+
+!ifdef UNINSTALL_SETTINGS
+Call un.DocumentsAndSettingsFolder
+!endif
+
+; remove stored password on uninstall
+Call un.RemovePassword
+
+Call un.ProgramFiles
+
+SectionEnd ; end of uninstall section
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; (From the NSIS documentation, JC)
+; GetWindowsVersion
+;
+; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
+; Updated by Joost Verburg
+;
+; Returns on top of stack
+;
+; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
+; or
+; '' (Unknown Windows Version)
+;
+; Usage:
+; Call GetWindowsVersion
+; Pop $R0
+; ; at this point $R0 is "NT 4.0" or whatnot
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function GetWindowsVersion
+
+ Push $R0
+ Push $R1
+
+ ReadRegStr $R0 HKLM \
+ "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
+
+ IfErrors 0 lbl_winnt
+
+ ; we are not NT
+ ReadRegStr $R0 HKLM \
+ "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
+
+ StrCpy $R1 $R0 1
+ StrCmp $R1 '4' 0 lbl_error
+
+ StrCpy $R1 $R0 3
+
+ StrCmp $R1 '4.0' lbl_win32_95
+ StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
+
+ lbl_win32_95:
+ StrCpy $R0 '95'
+ Goto lbl_done
+
+ lbl_win32_98:
+ StrCpy $R0 '98'
+ Goto lbl_done
+
+ lbl_win32_ME:
+ StrCpy $R0 'ME'
+ Goto lbl_done
+
+ lbl_winnt:
+
+ StrCpy $R1 $R0 1
+
+ StrCmp $R1 '3' lbl_winnt_x
+ StrCmp $R1 '4' lbl_winnt_x
+
+ StrCpy $R1 $R0 3
+
+ StrCmp $R1 '5.0' lbl_winnt_2000
+ StrCmp $R1 '5.1' lbl_winnt_XP
+ StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
+
+ lbl_winnt_x:
+ StrCpy $R0 "NT $R0" 6
+ Goto lbl_done
+
+ lbl_winnt_2000:
+ Strcpy $R0 '2000'
+ Goto lbl_done
+
+ lbl_winnt_XP:
+ Strcpy $R0 'XP'
+ Goto lbl_done
+
+ lbl_winnt_2003:
+ Strcpy $R0 '2003'
+ Goto lbl_done
+
+ lbl_error:
+ Strcpy $R0 ''
+ lbl_done:
+
+ Pop $R1
+ Exch $R0
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Note: to add new languages, add a language file include to the list
+;; at the top of this file, add an entry to the menu and then add an
+;; entry to the language ID selector below
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInit
+ Push $0
+ ${GetParameters} $COMMANDLINE ; get our command line
+
+ ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0
+ IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
+ StrCpy $SKIP_DIALOGS "true"
+
+ ${GetOptions} $COMMANDLINE "/LANGID=" $0 ; /LANGID=1033 implies US English
+ ; If no language (error), then proceed
+ IfErrors lbl_configure_default_lang
+ ; No error means we got a language, so use it
+ StrCpy $LANGUAGE $0
+ Goto lbl_return
+
+lbl_configure_default_lang:
+ ; If we currently have a version of SL installed, default to the language of that install
+ ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+ IfErrors +2 0 ; If error skip the copy instruction
+ StrCpy $LANGUAGE $0
+
+ ; For silent installs, no language prompt, use default
+ IfSilent lbl_return
+ StrCmp $SKIP_DIALOGS "true" lbl_return
+
+lbl_build_menu:
+ Push ""
+ # Use separate file so labels can be UTF-16 but we can still merge changes
+ # into this ASCII file. JC
+ !include "%%SOURCE%%\installers\windows\language_menu.nsi"
+
+ Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
+ LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
+ Pop $0
+ StrCmp $0 "cancel" 0 +2
+ Abort
+ StrCpy $LANGUAGE $0
+
+ ; save language in registry
+ WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
+lbl_return:
+ Pop $0
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.onInit
+ ; read language from registry and set for uninstaller
+ ; Key will be removed on successful uninstall
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+ IfErrors lbl_end
+ StrCpy $LANGUAGE $0
+lbl_end:
+ Return
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; MAIN SECTION
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Section "" ; (default section)
+
+SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
+
+; Start with some default values.
+StrCpy $INSTFLAGS "${INSTFLAGS}"
+StrCpy $INSTPROG "${INSTNAME}"
+StrCpy $INSTEXE "${INSTEXE}"
+StrCpy $INSTSHORTCUT "${SHORTCUT}"
+
+Call CheckWindowsVersion ; warn if on Windows 98/ME
+Call CheckCPUFlags ; Make sure we have SSE2 support
+Call CheckIfAdministrator ; Make sure the user can install/uninstall
+Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this version
+Call CloseSecondLife ; Make sure we're not running
+Call CheckNetworkConnection ; ping secondlife.com
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
+;Call RemoveCacheFiles ; Installing over removes potentially corrupted
+ ; VFS and cache files.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Need to clean out shader files from previous installs to fix DEV-5663
+Call RemoveOldShaders
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Need to clean out old XUI files that predate skinning
+Call RemoveOldXUI
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Clear out old releasenotes.txt files. These are now on the public wiki.
+Call RemoveOldReleaseNotes
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Files
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
+%%INSTALL_FILES%%
+
+# Pass the installer's language to the client to use as a default
+StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Shortcuts in start menu
+CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
+SetOutPath "$INSTDIR"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+
+
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
+ "InternetShortcut" "URL" \
+ "http://join.secondlife.com/"
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
+ "InternetShortcut" "URL" \
+ "http://www.secondlife.com/account/"
+WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
+ "InternetShortcut" "URL" \
+ "http://wiki.secondlife.com/wiki/LSL_Portal"
+CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
+ '"$INSTDIR\uninst.exe"' ''
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Other shortcuts
+SetOutPath "$INSTDIR"
+CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
+ "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM"
+CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
+ '"$INSTDIR\uninst.exe"' ''
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Write registry
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
+WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
+WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Write URL registry info
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
+WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
+;; URL param must be last item passed to viewer, it ignores subsequent params
+;; to avoid parameter injection attacks.
+WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
+WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
+WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
+WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
+;; URL param must be last item passed to viewer, it ignores subsequent params
+;; to avoid parameter injection attacks.
+WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"'
+
+; write out uninstaller
+WriteUninstaller "$INSTDIR\uninst.exe"
+
+; end of default section
+SectionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 446ded8096..642a1907f0 100644..100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -41,6 +41,7 @@
#include "llcapabilitylistener.h"
#include "llchannelmanager.h"
#include "llconsole.h"
+#include "llenvmanager.h"
#include "llfirstuse.h"
#include "llfloatercamera.h"
#include "llfloaterreg.h"
@@ -84,6 +85,7 @@
#include "llwindow.h"
#include "llworld.h"
#include "llworldmap.h"
+#include "stringize.h"
using namespace LLVOAvatarDefines;
@@ -575,7 +577,10 @@ void LLAgent::setFlying(BOOL fly)
// static
void LLAgent::toggleFlying()
{
- LLToolPie::instance().stopClickToWalk();
+ if ( gAgent.mAutoPilot )
+ {
+ LLToolPie::instance().stopClickToWalk();
+ }
BOOL fly = !gAgent.getFlying();
@@ -608,6 +613,8 @@ void LLAgent::standUp()
//-----------------------------------------------------------------------------
void LLAgent::setRegion(LLViewerRegion *regionp)
{
+ bool teleport = true;
+
llassert(regionp);
if (mRegionp != regionp)
{
@@ -645,6 +652,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
gSky.mVOGroundp->setRegion(regionp);
}
+ // Notify windlight managers
+ teleport = (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE);
}
else
{
@@ -685,6 +694,15 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
LLSelectMgr::getInstance()->updateSelectionCenter();
LLFloaterMove::sUpdateFlyingStatus();
+
+ if (teleport)
+ {
+ LLEnvManagerNew::instance().onTeleport();
+ }
+ else
+ {
+ LLEnvManagerNew::instance().onRegionCrossing();
+ }
}
@@ -3335,8 +3353,11 @@ bool LLAgent::teleportCore(bool is_local)
// hide land floater too - it'll be out of date
LLFloaterReg::hideInstance("about_land");
- // hide the search floater (EXT-8276)
- LLFloaterReg::hideInstance("search");
+ // hide the Region/Estate floater
+ LLFloaterReg::hideInstance("region_info");
+
+ // minimize the Search floater (STORM-1474)
+ LLFloaterReg::getInstance("search")->setMinimized(TRUE);
LLViewerParcelMgr::getInstance()->deselectLand();
LLViewerMediaFocus::getInstance()->clearFocus();
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index c30d3b9aa3..f195c985c0 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -393,8 +393,6 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi
LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation
LLVector3 object_extents = object->getScale();
- const LLVector4a* oe4 = object->mDrawable->getSpatialExtents();
- object_extents.set( oe4[1][0], oe4[1][1], oe4[1][2] );
// make sure they object extents are non-zero
object_extents.clamp(0.001f, F32_MAX);
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index d426afb17c..b9125ec8d3 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -33,7 +33,6 @@
#include "llagentwearablesfetch.h"
#include "llappearancemgr.h"
#include "llcallbacklist.h"
-#include "llfolderview.h"
#include "llgesturemgr.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
@@ -45,6 +44,7 @@
#include "llsidepanelappearance.h"
#include "llsidetray.h"
#include "lltexlayer.h"
+#include "lltooldraganddrop.h"
#include "llviewerregion.h"
#include "llvoavatarself.h"
#include "llwearable.h"
@@ -1692,37 +1692,6 @@ void LLAgentWearables::userRemoveWearablesOfType(const LLWearableType::EType &ty
}
}
-// static
-void LLAgentWearables::userRemoveAllClothes()
-{
- // We have to do this up front to avoid having to deal with the case of multiple wearables being dirty.
- if (gAgentCamera.cameraCustomizeAvatar())
- {
- // switching to outfit editor should automagically save any currently edited wearable
- LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit"));
- }
- userRemoveAllClothesStep2(TRUE);
-}
-
-// static
-void LLAgentWearables::userRemoveAllClothesStep2(BOOL proceed)
-{
- if (proceed)
- {
- gAgentWearables.removeWearable(LLWearableType::WT_SHIRT,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_PANTS,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_SHOES,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_SOCKS,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_JACKET,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_GLOVES,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_UNDERSHIRT,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_UNDERPANTS,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_SKIRT,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_ALPHA,true,0);
- gAgentWearables.removeWearable(LLWearableType::WT_TATTOO,true,0);
- }
-}
-
// Combines userRemoveAllAttachments() and userAttachMultipleAttachments() logic to
// get attachments into desired state with minimal number of adds/removes.
void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array)
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index 3ef50f14da..252b812c27 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -165,7 +165,6 @@ private:
void removeWearableFinal(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/);
protected:
static bool onRemoveWearableDialog(const LLSD& notification, const LLSD& response);
- static void userRemoveAllClothesStep2(BOOL proceed); // userdata is NULL
//--------------------------------------------------------------------
// Server Communication
@@ -211,7 +210,6 @@ public:
public:
static void userRemoveWearable(const LLWearableType::EType &type, const U32 &index);
static void userRemoveWearablesOfType(const LLWearableType::EType &type);
- static void userRemoveAllClothes();
typedef std::vector<LLViewerObject*> llvo_vec_t;
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 1388d9aee0..a0af94ba77 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2285,7 +2285,9 @@ void LLAppearanceMgr::autopopulateOutfits()
void LLAppearanceMgr::onFirstFullyVisible()
{
gAgentAvatarp->debugAvatarVisible();
- autopopulateOutfits();
+ // The auto-populate is failing at the point of generating outfits
+ // folders, so don't do the library copy until that is resolved.
+ // autopopulateOutfits();
}
bool LLAppearanceMgr::updateBaseOutfit()
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index d2582d524d..7e597fe5dc 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1,4 +1,4 @@
- /**
+/**
* @file llappviewer.cpp
* @brief The LLAppViewer class definitions
*
@@ -56,6 +56,7 @@
#include "llallocator.h"
#include "llares.h"
#include "llcurl.h"
+#include "llcalc.h"
#include "lltexturestats.h"
#include "lltexturestats.h"
#include "llviewerwindow.h"
@@ -136,6 +137,7 @@
#include "lltoolmgr.h"
#include "llassetstorage.h"
#include "llpolymesh.h"
+#include "llproxy.h"
#include "llaudioengine.h"
#include "llstreamingaudio.h"
#include "llviewermenu.h"
@@ -320,6 +322,41 @@ static std::string gLaunchFileOnQuit;
// Used on Win32 for other apps to identify our window (eg, win_setup)
const char* const VIEWER_WINDOW_CLASSNAME = "Second Life";
+//-- LLDeferredTaskList ------------------------------------------------------
+
+/**
+ * A list of deferred tasks.
+ *
+ * We sometimes need to defer execution of some code until the viewer gets idle,
+ * e.g. removing an inventory item from within notifyObservers() may not work out.
+ *
+ * Tasks added to this list will be executed in the next LLAppViewer::idle() iteration.
+ * All tasks are executed only once.
+ */
+class LLDeferredTaskList: public LLSingleton<LLDeferredTaskList>
+{
+ LOG_CLASS(LLDeferredTaskList);
+
+ friend class LLAppViewer;
+ typedef boost::signals2::signal<void()> signal_t;
+
+ void addTask(const signal_t::slot_type& cb)
+ {
+ mSignal.connect(cb);
+ }
+
+ void run()
+ {
+ if (!mSignal.empty())
+ {
+ mSignal();
+ mSignal.disconnect_all_slots();
+ }
+ }
+
+ signal_t mSignal;
+};
+
//----------------------------------------------------------------------------
// List of entries from strings.xml to always replace
@@ -468,18 +505,6 @@ void request_initial_instant_messages()
}
}
-// A settings system callback for CrashSubmitBehavior
-bool handleCrashSubmitBehaviorChanged(const LLSD& newvalue)
-{
- S32 cb = newvalue.asInteger();
- const S32 NEVER_SUBMIT_REPORT = 2;
- if(cb == NEVER_SUBMIT_REPORT)
- {
- LLAppViewer::instance()->destroyMainloopTimeout();
- }
- return true;
-}
-
// Use these strictly for things that are constructed at startup,
// or for things that are performance critical. JC
static void settings_to_globals()
@@ -611,9 +636,6 @@ bool LLAppViewer::sendURLToOtherInstance(const std::string& url)
// Static members.
// The single viewer app.
LLAppViewer* LLAppViewer::sInstance = NULL;
-
-const std::string LLAppViewer::sGlobalSettingsName = "Global";
-
LLTextureCache* LLAppViewer::sTextureCache = NULL;
LLImageDecodeThread* LLAppViewer::sImageDecodeThread = NULL;
LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
@@ -664,7 +686,7 @@ LLAppViewer::~LLAppViewer()
}
bool LLAppViewer::init()
-{
+{
//
// Start of the application
//
@@ -697,6 +719,11 @@ bool LLAppViewer::init()
LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ;
+ //set the max heap size.
+ initMaxHeapSize() ;
+
+ LLPrivateMemoryPoolManager::initClass((BOOL)gSavedSettings.getBOOL("MemoryPrivatePoolEnabled")) ;
+
// write Google Breakpad minidump files to our log directory
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
logdir += gDirUtilp->getDirDelimiter();
@@ -722,7 +749,7 @@ bool LLAppViewer::init()
// *NOTE:Mani - LLCurl::initClass is not thread safe.
// Called before threads are created.
- LLCurl::initClass();
+ LLCurl::initClass(gSavedSettings.getBOOL("CurlUseMultipleThreads"));
LL_INFOS("InitInfo") << "LLCurl initialized." << LL_ENDL ;
LLMachineID::init();
@@ -745,6 +772,23 @@ bool LLAppViewer::init()
initThreads();
LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ;
+ // Initialize settings early so that the defaults for ignorable dialogs are
+ // picked up and then correctly re-saved after launching the updater (STORM-1268).
+ LLUI::settings_map_t settings_map;
+ settings_map["config"] = &gSavedSettings;
+ settings_map["ignores"] = &gWarningSettings;
+ settings_map["floater"] = &gSavedSettings; // *TODO: New settings file
+ settings_map["account"] = &gSavedPerAccountSettings;
+
+ LLUI::initClass(settings_map,
+ LLUIImageList::getInstance(),
+ ui_audio_callback,
+ &LLUI::sGLScaleFactor);
+ LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ;
+
+ LLNotifications::instance();
+ LL_INFOS("InitInfo") << "Notifications initialized." << LL_ENDL ;
+
writeSystemInfo();
// Initialize updater service (now that we have an io pump)
@@ -771,16 +815,6 @@ bool LLAppViewer::init()
LL_INFOS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;
LL_INFOS("InitInfo") << "libcurl version is: " << LLCurl::getVersionString() << LL_ENDL;
- // Get the single value from the crash settings file, if it exists
- std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- gCrashSettings.loadFromFile(crash_settings_filename);
- if(gSavedSettings.getBOOL("IgnoreAllNotifications"))
- {
- gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, CRASH_BEHAVIOR_ALWAYS_SEND);
- gCrashSettings.saveToFile(crash_settings_filename, FALSE);
- }
- LL_INFOS("InitInfo") << "Crash settings done." << LL_ENDL ;
-
/////////////////////////////////////////////////
// OS-specific login dialogs
/////////////////////////////////////////////////
@@ -796,19 +830,8 @@ bool LLAppViewer::init()
{
LLError::setPrintLocation(true);
}
-
- // Widget construction depends on LLUI being initialized
- LLUI::settings_map_t settings_map;
- settings_map["config"] = &gSavedSettings;
- settings_map["ignores"] = &gWarningSettings;
- settings_map["floater"] = &gSavedSettings; // *TODO: New settings file
- settings_map["account"] = &gSavedPerAccountSettings;
- LLUI::initClass(settings_map,
- LLUIImageList::getInstance(),
- ui_audio_callback,
- &LLUI::sGLScaleFactor);
-
+
// Setup paths and LLTrans after LLUI::initClass has been called
LLUI::setupPaths();
LLTransUtil::parseStrings("strings.xml", default_trans_args);
@@ -1055,7 +1078,7 @@ bool LLAppViewer::init()
//EXT-7013 - On windows for some locale (Japanese) standard
//datetime formatting functions didn't support some parameters such as "weekday".
//Names for days and months localized in xml are also useful for Polish locale(STORM-107).
- std::string language = LLControlGroup::getInstance(sGlobalSettingsName)->getString("Language");
+ std::string language = gSavedSettings.getString("Language");
if(language == "ja" || language == "pl")
{
LLStringOps::setupWeekDaysNames(LLTrans::getString("dateTimeWeekdaysNames"));
@@ -1070,9 +1093,97 @@ bool LLAppViewer::init()
LLAgentLanguage::init();
+ return true;
+}
+
+void LLAppViewer::initMaxHeapSize()
+{
+ //set the max heap size.
+ //here is some info regarding to the max heap size:
+ //------------------------------------------------------------------------------------------
+ // OS | setting | SL address bits | max manageable memory space | max heap size
+ // Win 32 | default | 32-bit | 2GB | < 1.7GB
+ // Win 32 | /3G | 32-bit | 3GB | < 1.7GB or 2.7GB
+ //Linux 32 | default | 32-bit | 3GB | < 2.7GB
+ //Linux 32 |HUGEMEM | 32-bit | 4GB | < 3.7GB
+ //64-bit OS |default | 32-bit | 4GB | < 3.7GB
+ //64-bit OS |default | 64-bit | N/A (> 4GB) | N/A (> 4GB)
+ //------------------------------------------------------------------------------------------
+ //currently SL is built under 32-bit setting, we set its max heap size no more than 1.6 GB.
+
+ //F32 max_heap_size_gb = llmin(1.6f, (F32)gSavedSettings.getF32("MaxHeapSize")) ;
+ F32 max_heap_size_gb = gSavedSettings.getF32("MaxHeapSize") ;
+ BOOL enable_mem_failure_prevention = (BOOL)gSavedSettings.getBOOL("MemoryFailurePreventionEnabled") ;
+
+ LLMemory::initMaxHeapSizeGB(max_heap_size_gb, enable_mem_failure_prevention) ;
+}
+void LLAppViewer::checkMemory()
+{
+ const static F32 MEMORY_CHECK_INTERVAL = 1.0f ; //second
+ //const static F32 MAX_QUIT_WAIT_TIME = 30.0f ; //seconds
+ const static U32 MAX_SIZE_CHECKED_MEMORY_BLOCK = 64 * 1024 * 1024 ; //64 MB
+ //static F32 force_quit_timer = MAX_QUIT_WAIT_TIME + MEMORY_CHECK_INTERVAL ;
+ static void* last_reserved_address = NULL ;
- return true;
+ if(MEMORY_CHECK_INTERVAL > mMemCheckTimer.getElapsedTimeF32())
+ {
+ return ;
+ }
+ mMemCheckTimer.reset() ;
+
+ if(gGLManager.mDebugGPU)
+ {
+ //update the availability of memory
+ LLMemory::updateMemoryInfo() ;
+ }
+
+ //check the virtual address space fragmentation
+ if(!last_reserved_address)
+ {
+ last_reserved_address = LLMemory::tryToAlloc(last_reserved_address, MAX_SIZE_CHECKED_MEMORY_BLOCK) ;
+ }
+ else
+ {
+ last_reserved_address = LLMemory::tryToAlloc(last_reserved_address, MAX_SIZE_CHECKED_MEMORY_BLOCK) ;
+ if(!last_reserved_address) //failed, try once more
+ {
+ last_reserved_address = LLMemory::tryToAlloc(last_reserved_address, MAX_SIZE_CHECKED_MEMORY_BLOCK) ;
+ }
+ }
+
+ S32 is_low = !last_reserved_address || LLMemory::isMemoryPoolLow() ;
+
+ //if(is_low < 0) //to force quit
+ //{
+ // if(force_quit_timer > MAX_QUIT_WAIT_TIME) //just hit the limit for the first time
+ // {
+ // //send out the notification to tell the viewer is about to quit in 30 seconds.
+ // LLNotification::Params params("ForceQuitDueToLowMemory");
+ // LLNotifications::instance().add(params);
+
+ // force_quit_timer = MAX_QUIT_WAIT_TIME - MEMORY_CHECK_INTERVAL ;
+ // }
+ // else
+ // {
+ // force_quit_timer -= MEMORY_CHECK_INTERVAL ;
+ // if(force_quit_timer < 0.f)
+ // {
+ // forceQuit() ; //quit
+ // }
+ // }
+ //}
+ //else
+ //{
+ // force_quit_timer = MAX_QUIT_WAIT_TIME + MEMORY_CHECK_INTERVAL ;
+ //}
+
+ LLPipeline::throttleNewMemoryAllocation(!is_low ? FALSE : TRUE) ;
+
+ if(is_low)
+ {
+ LLMemory::logMemoryInfo() ;
+ }
}
static LLFastTimer::DeclareTimer FTM_MESSAGES("System Messages");
@@ -1100,7 +1211,7 @@ bool LLAppViewer::mainLoop()
//-------------------------------------------
// Create IO Pump to use for HTTP Requests.
- gServicePump = new LLPumpIO(gAPRPoolp);
+ gServicePump = new LLPumpIO;
LLHTTPClient::setPump(*gServicePump);
LLCurl::setCAFile(gDirUtilp->getCAFile());
@@ -1110,7 +1221,6 @@ bool LLAppViewer::mainLoop()
LLVoiceClient::getInstance()->init(gServicePump);
LLTimer frameTimer,idleTimer;
LLTimer debugTime;
- LLFrameTimer memCheckTimer;
LLViewerJoystick* joystick(LLViewerJoystick::getInstance());
joystick->setNeedsReset(true);
@@ -1121,7 +1231,9 @@ bool LLAppViewer::mainLoop()
// point of posting.
LLSD newFrame;
- const F32 memory_check_interval = 1.0f ; //second
+ //LLPrivateMemoryPoolTester::getInstance()->run(false) ;
+ //LLPrivateMemoryPoolTester::getInstance()->run(true) ;
+ //LLPrivateMemoryPoolTester::destroy() ;
// Handle messages
while (!LLApp::isExiting())
@@ -1132,18 +1244,8 @@ bool LLAppViewer::mainLoop()
llclearcallstacks;
//check memory availability information
- {
- if(memory_check_interval < memCheckTimer.getElapsedTimeF32())
- {
- memCheckTimer.reset() ;
-
- //update the availability of memory
- LLMemoryInfo::getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
- }
- llcallstacks << "Available physical mem(KB): " << mAvailPhysicalMemInKB << llcallstacksendl ;
- llcallstacks << "Available virtual mem(KB): " << mAvailVirtualMemInKB << llcallstacksendl ;
- }
-
+ checkMemory() ;
+
try
{
pingMainloopTimeout("Main:MiscNativeWindowEvents");
@@ -1307,7 +1409,7 @@ bool LLAppViewer::mainLoop()
idleTimer.reset();
bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ;
S32 total_work_pending = 0;
- S32 total_io_pending = 0;
+ S32 total_io_pending = 0;
while(!is_slow)//do not unpause threads if the frame rates are very low.
{
S32 work_pending = 0;
@@ -1375,15 +1477,7 @@ bool LLAppViewer::mainLoop()
}
catch(std::bad_alloc)
{
- {
- llinfos << "Availabe physical memory(KB) at the beginning of the frame: " << mAvailPhysicalMemInKB << llendl ;
- llinfos << "Availabe virtual memory(KB) at the beginning of the frame: " << mAvailVirtualMemInKB << llendl ;
-
- LLMemoryInfo::getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ;
-
- llinfos << "Current availabe physical memory(KB): " << mAvailPhysicalMemInKB << llendl ;
- llinfos << "Current availabe virtual memory(KB): " << mAvailVirtualMemInKB << llendl ;
- }
+ LLMemory::logMemoryInfo(TRUE) ;
//stop memory leaking simulation
LLFloaterMemLeak* mem_leak_instance =
@@ -1476,16 +1570,16 @@ bool LLAppViewer::cleanup()
}
// *TODO - generalize this and move DSO wrangling to a helper class -brad
- std::set<struct apr_dso_handle_t *>::const_iterator i;
- for(i = mPlugins.begin(); i != mPlugins.end(); ++i)
+ for(std::map<apr_dso_handle_t*, boost::shared_ptr<LLAPRPool> >::iterator plugin = mPlugins.begin();
+ plugin != mPlugins.end(); ++plugin)
{
int (*ll_plugin_stop_func)(void) = NULL;
- apr_status_t rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_stop_func, *i, "ll_plugin_stop");
+ apr_status_t rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll_plugin_stop_func, plugin->first, "ll_plugin_stop");
ll_plugin_stop_func();
- rv = apr_dso_unload(*i);
+ rv = apr_dso_unload(plugin->first);
}
- mPlugins.clear();
+ mPlugins.clear(); // Forget handles and destroy all memory pools.
//flag all elements as needing to be destroyed immediately
// to ensure shutdown order
@@ -1543,7 +1637,9 @@ bool LLAppViewer::cleanup()
// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be deleted.
LLWorldMap::getInstance()->reset(); // release any images
-
+
+ LLCalc::cleanUp();
+
llinfos << "Global stuff deleted" << llendflush;
if (gAudiop)
@@ -1640,9 +1736,7 @@ bool LLAppViewer::cleanup()
llinfos << "Cleaning up Objects" << llendflush;
LLViewerObject::cleanupVOClasses();
-
- LLWaterParamManager::cleanupClass();
- LLWLParamManager::cleanupClass();
+
LLPostProcess::cleanupClass();
LLTracker::cleanupInstance();
@@ -1708,10 +1802,6 @@ bool LLAppViewer::cleanup()
llinfos << "Saved settings" << llendflush;
}
- std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- // save all settings, even if equals defaults
- gCrashSettings.saveToFile(crash_settings_filename, FALSE);
-
std::string warnings_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFilename("Default", "Warnings"));
gWarningSettings.saveToFile(warnings_settings_filename, TRUE);
@@ -1841,7 +1931,6 @@ bool LLAppViewer::cleanup()
gSavedSettings.cleanup();
LLUIColorTable::instance().clear();
- gCrashSettings.cleanup();
LLWatchdog::getInstance()->cleanup();
@@ -1869,9 +1958,14 @@ bool LLAppViewer::cleanup()
LLWeb::loadURLExternal( gLaunchFileOnQuit, false );
llinfos << "File launched." << llendflush;
}
+ llinfos << "Cleaning up LLProxy." << llendl;
+ LLProxy::cleanupClass();
LLMainLoopRepeater::instance().stop();
+ //release all private memory pools.
+ LLPrivateMemoryPoolManager::destroyClass() ;
+
ll_close_fail_log();
MEM_TRACK_RELEASE
@@ -1923,7 +2017,7 @@ bool LLAppViewer::initThreads()
if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
{
- LLFastTimer::sLogLock = new LLMutex(NULL);
+ LLFastTimer::sLogLock = new LLMutex;
mFastTimerLogThread = new LLFastTimerLogThread(LLFastTimer::sLogName);
mFastTimerLogThread->start();
}
@@ -1984,7 +2078,6 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
llerrs << "Invalid settings location list" << llendl;
}
- LLControlGroup* global_settings = LLControlGroup::getInstance(sGlobalSettingsName);
for(LLInitParam::ParamIterator<SettingsGroup>::const_iterator it = mSettingsLocationList->groups.begin(), end_it = mSettingsLocationList->groups.end();
it != end_it;
++it)
@@ -2017,11 +2110,15 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
std::string full_settings_path;
if (file_it->file_name_setting.isProvided()
- && global_settings->controlExists(file_it->file_name_setting))
+ && gSavedSettings.controlExists(file_it->file_name_setting))
{
// try to find filename stored in file_name_setting control
- full_settings_path = global_settings->getString(file_it->file_name_setting);
- if (!gDirUtilp->fileExists(full_settings_path))
+ full_settings_path = gSavedSettings.getString(file_it->file_name_setting);
+ if (full_settings_path.empty())
+ {
+ continue;
+ }
+ else if (!gDirUtilp->fileExists(full_settings_path))
{
// search in default path
full_settings_path = gDirUtilp->getExpandedFilename((ELLPath)path_index, full_settings_path);
@@ -2167,8 +2264,6 @@ bool LLAppViewer::initConfiguration()
gSavedSettings.setS32("WatchdogEnabled", 0);
#endif
- gCrashSettings.getControl(CRASH_BEHAVIOR_SETTING)->getSignal()->connect(boost::bind(&handleCrashSubmitBehaviorChanged, _2));
-
// These are warnings that appear on the first experience of that condition.
// They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
// for disable/reset ability
@@ -2299,15 +2394,33 @@ bool LLAppViewer::initConfiguration()
{
const std::string& name = *itr;
const std::string& value = *(++itr);
- LLControlVariable* c = LLControlGroup::getInstance(sGlobalSettingsName)->getControl(name);
- if(c)
+ std::string name_part;
+ std::string group_part;
+ LLControlVariable* control = NULL;
+
+ // Name can be further split into ControlGroup.Name, with the default control group being Global
+ size_t pos = name.find('.');
+ if (pos != std::string::npos)
+ {
+ group_part = name.substr(0, pos);
+ name_part = name.substr(pos+1);
+ llinfos << "Setting " << group_part << "." << name_part << " to " << value << llendl;
+ LLControlGroup* g = LLControlGroup::getInstance(group_part);
+ if (g) control = g->getControl(name_part);
+ }
+ else
+ {
+ llinfos << "Setting Global." << name << " to " << value << llendl;
+ control = gSavedSettings.getControl(name);
+ }
+
+ if (control)
{
- c->setValue(value, false);
+ control->setValue(value, false);
}
else
{
- llwarns << "'--set' specified with unknown setting: '"
- << name << "'." << llendl;
+ llwarns << "Failed --set " << name << ": setting name unknown." << llendl;
}
}
}
@@ -2764,7 +2877,8 @@ void LLAppViewer::checkForCrash(void)
// Pop up a freeze or crash warning dialog
//
S32 choice;
- if(gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) == CRASH_BEHAVIOR_ASK)
+ const S32 cb = gCrashSettings.getS32("CrashSubmitBehavior");
+ if(cb == CRASH_BEHAVIOR_ASK)
{
std::ostringstream msg;
msg << LLTrans::getString("MBFrozenCrashed");
@@ -2773,7 +2887,7 @@ void LLAppViewer::checkForCrash(void)
alert,
OSMB_YESNO);
}
- else if(gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) == CRASH_BEHAVIOR_NEVER_SEND)
+ else if(cb == CRASH_BEHAVIOR_NEVER_SEND)
{
choice = OSBTN_NO;
}
@@ -2830,10 +2944,9 @@ bool LLAppViewer::initWindow()
LL_INFOS("AppInit") << "gViewerwindow created." << LL_ENDL;
// Need to load feature table before cheking to start watchdog.
- const S32 NEVER_SUBMIT_REPORT = 2;
bool use_watchdog = false;
int watchdog_enabled_setting = gSavedSettings.getS32("WatchdogEnabled");
- if(watchdog_enabled_setting == -1)
+ if (watchdog_enabled_setting == -1)
{
use_watchdog = !LLFeatureManager::getInstance()->isFeatureAvailable("WatchdogDisabled");
}
@@ -2843,8 +2956,7 @@ bool LLAppViewer::initWindow()
use_watchdog = bool(watchdog_enabled_setting);
}
- bool send_reports = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING) != NEVER_SUBMIT_REPORT;
- if(use_watchdog && send_reports)
+ if (use_watchdog)
{
LLWatchdog::getInstance()->init(watchdog_killer_callback);
}
@@ -3153,8 +3265,7 @@ void LLAppViewer::handleViewerCrash()
else crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,ERROR_MARKER_FILE_NAME);
llinfos << "Creating crash marker file " << crash_file_name << llendl;
- LLAPRFile crash_file ;
- crash_file.open(crash_file_name, LL_APR_W);
+ LLAPRFile crash_file(crash_file_name, LL_APR_W);
if (crash_file.getFileHandle())
{
LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL;
@@ -3218,11 +3329,10 @@ bool LLAppViewer::anotherInstanceRunning()
LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
//Freeze case checks
- if (LLAPRFile::isExist(marker_file, NULL, LL_APR_RB))
+ if (LLAPRFile::isExist(marker_file, LL_APR_RB))
{
// File exists, try opening with write permissions
- LLAPRFile outfile ;
- outfile.open(marker_file, LL_APR_WB);
+ LLAPRFile outfile(marker_file, LL_APR_WB);
apr_file_t* fMarker = outfile.getFileHandle() ;
if (!fMarker)
{
@@ -3261,25 +3371,25 @@ void LLAppViewer::initMarkerFile()
std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME);
std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME);
- if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB) && !anotherInstanceRunning())
+ if (LLAPRFile::isExist(mMarkerFileName, LL_APR_RB) && !anotherInstanceRunning())
{
gLastExecEvent = LAST_EXEC_FROZE;
LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
}
- if(LLAPRFile::isExist(logout_marker_file, NULL, LL_APR_RB))
+ if(LLAPRFile::isExist(logout_marker_file, LL_APR_RB))
{
gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
LLAPRFile::remove(logout_marker_file);
}
- if(LLAPRFile::isExist(llerror_marker_file, NULL, LL_APR_RB))
+ if(LLAPRFile::isExist(llerror_marker_file, LL_APR_RB))
{
if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
else gLastExecEvent = LAST_EXEC_LLERROR_CRASH;
LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
LLAPRFile::remove(llerror_marker_file);
}
- if(LLAPRFile::isExist(error_marker_file, NULL, LL_APR_RB))
+ if(LLAPRFile::isExist(error_marker_file, LL_APR_RB))
{
if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
else gLastExecEvent = LAST_EXEC_OTHER_CRASH;
@@ -3295,7 +3405,7 @@ void LLAppViewer::initMarkerFile()
// Create the marker file for this execution & lock it
apr_status_t s;
- s = mMarkerFile.open(mMarkerFileName, LL_APR_W, TRUE);
+ s = mMarkerFile.open(mMarkerFileName, LL_APR_W, LLAPRFile::long_lived);
if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
{
@@ -3831,6 +3941,11 @@ bool LLAppViewer::initCache()
}
}
+void LLAppViewer::addOnIdleCallback(const boost::function<void()>& cb)
+{
+ LLDeferredTaskList::instance().addTask(cb);
+}
+
void LLAppViewer::purgeCache()
{
LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << LL_ENDL;
@@ -4014,6 +4129,8 @@ public:
static LLFastTimer::DeclareTimer FTM_AUDIO_UPDATE("Update Audio");
static LLFastTimer::DeclareTimer FTM_CLEANUP("Cleanup");
+static LLFastTimer::DeclareTimer FTM_CLEANUP_DRAWABLES("Drawables");
+static LLFastTimer::DeclareTimer FTM_CLEANUP_OBJECTS("Objects");
static LLFastTimer::DeclareTimer FTM_IDLE_CB("Idle Callbacks");
static LLFastTimer::DeclareTimer FTM_LOD_UPDATE("Update LOD");
static LLFastTimer::DeclareTimer FTM_OBJECTLIST_UPDATE("Update Objectlist");
@@ -4290,8 +4407,14 @@ void LLAppViewer::idle()
{
LLFastTimer t(FTM_CLEANUP);
- gObjectList.cleanDeadObjects();
- LLDrawable::cleanupDeadDrawables();
+ {
+ LLFastTimer t(FTM_CLEANUP_OBJECTS);
+ gObjectList.cleanDeadObjects();
+ }
+ {
+ LLFastTimer t(FTM_CLEANUP_DRAWABLES);
+ LLDrawable::cleanupDeadDrawables();
+ }
}
//
@@ -4341,7 +4464,6 @@ void LLAppViewer::idle()
//
// Update weather effects
//
- LLWorld::getInstance()->updateClouds(gFrameDTClamped);
gSky.propagateHeavenlyBodies(gFrameDTClamped); // moves sun, moon, and planets
// Update wind vector
@@ -4357,9 +4479,6 @@ void LLAppViewer::idle()
// Compute average wind and use to drive motion of water
average_wind = regionp->mWind.getAverage();
- F32 cloud_density = regionp->mCloudLayer.getDensityRegion(wind_position_region);
-
- gSky.setCloudDensityAtAgent(cloud_density);
gSky.setWind(average_wind);
//LLVOWater::setWind(average_wind);
}
@@ -4420,6 +4539,9 @@ void LLAppViewer::idle()
gAudiop->idle(max_audio_decode_time);
}
}
+
+ // Execute deferred tasks.
+ LLDeferredTaskList::instance().run();
// Handle shutdown process, for example,
// wait for floaters to close, send quit message,
@@ -4519,7 +4641,7 @@ void LLAppViewer::idleShutdown()
void LLAppViewer::sendLogoutRequest()
{
- if(!mLogoutRequestSent)
+ if(!mLogoutRequestSent && gMessageSystem)
{
LLMessageSystem* msg = gMessageSystem;
msg->newMessageFast(_PREHASH_LogoutRequest);
@@ -4541,8 +4663,7 @@ void LLAppViewer::sendLogoutRequest()
gLogoutInProgress = TRUE;
mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME);
- LLAPRFile outfile ;
- outfile.open(mLogoutMarkerFileName, LL_APR_W);
+ LLAPRFile outfile(mLogoutMarkerFileName, LL_APR_W);
mLogoutMarkerFile = outfile.getFileHandle() ;
if (mLogoutMarkerFile)
{
@@ -4994,14 +5115,15 @@ void LLAppViewer::loadEventHostModule(S32 listen_port)
}
#endif // LL_WINDOWS
- apr_dso_handle_t * eventhost_dso_handle = NULL;
- apr_pool_t * eventhost_dso_memory_pool = NULL;
+ boost::shared_ptr<LLAPRPool> eventhost_dso_memory_pool_ptr(new LLAPRPool);
+ LLAPRPool& eventhost_dso_memory_pool(*eventhost_dso_memory_pool_ptr);
+ apr_dso_handle_t* eventhost_dso_handle = NULL;
//attempt to load the shared library
- apr_pool_create(&eventhost_dso_memory_pool, NULL);
+ eventhost_dso_memory_pool.create();
apr_status_t rv = apr_dso_load(&eventhost_dso_handle,
dso_path.c_str(),
- eventhost_dso_memory_pool);
+ eventhost_dso_memory_pool());
llassert_always(! ll_apr_warn_status(rv, eventhost_dso_handle));
llassert_always(eventhost_dso_handle != NULL);
@@ -5021,7 +5143,8 @@ void LLAppViewer::loadEventHostModule(S32 listen_port)
llerrs << "problem loading eventhost plugin, status: " << status << llendl;
}
- mPlugins.insert(eventhost_dso_handle);
+ // Store the handle and link it to the pool that was used to allocate it.
+ mPlugins[eventhost_dso_handle] = eventhost_dso_memory_pool_ptr;
}
void LLAppViewer::launchUpdater()
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 61ee6a7cf1..168aaf5d94 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -164,11 +164,13 @@ public:
login_completed_signal_t mOnLoginCompleted;
boost::signals2::connection setOnLoginCompletedCallback( const login_completed_signal_t::slot_type& cb ) { return mOnLoginCompleted.connect(cb); }
+ void addOnIdleCallback(const boost::function<void()>& cb); // add a callback to fire (once) when idle
+
void purgeCache(); // Clear the local cache.
// mute/unmute the system's master audio
virtual void setMasterSystemAudioMute(bool mute);
- virtual bool getMasterSystemAudioMute();
+ virtual bool getMasterSystemAudioMute();
// Metrics policy helper statics.
static void metricsUpdateRegion(U64 region_handle);
@@ -191,11 +193,12 @@ protected:
private:
+ void initMaxHeapSize();
bool initThreads(); // Initialize viewer threads, return false on failure.
bool initConfiguration(); // Initialize settings from the command line/config file.
void initUpdater(); // Initialize the updater service.
bool initCache(); // Initialize local client cache.
-
+ void checkMemory() ;
// We have switched locations of both Mac and Windows cache, make sure
// files migrate and old cache is cleared out.
@@ -267,10 +270,9 @@ private:
LLAllocator mAlloc;
- std::set<struct apr_dso_handle_t*> mPlugins;
+ std::map<apr_dso_handle_t*, boost::shared_ptr<LLAPRPool> > mPlugins;
- U32 mAvailPhysicalMemInKB ;
- U32 mAvailVirtualMemInKB ;
+ LLFrameTimer mMemCheckTimer;
boost::scoped_ptr<LLUpdaterService> mUpdater;
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 714e0e6163..db11462fcb 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -111,6 +111,7 @@ int main( int argc, char **argv )
}
delete viewer_app_ptr;
viewer_app_ptr = NULL;
+
return 0;
}
@@ -361,46 +362,35 @@ void LLAppViewerLinux::handleCrashReporting(bool reportFreeze)
}
else
{
- const S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
-
- // Always generate the report, have the logger do the asking, and
- // don't wait for the logger before exiting (-> total cleanup).
- if (CRASH_BEHAVIOR_NEVER_SEND != cb)
- {
- // launch the actual crash logger
- const char* ask_dialog = "-dialog";
- if (CRASH_BEHAVIOR_ASK != cb)
- ask_dialog = ""; // omit '-dialog' option
- const char * cmdargv[] =
- {cmd.c_str(),
- ask_dialog,
- "-user",
- (char*)LLGridManager::getInstance()->getGridLabel().c_str(),
- "-name",
- LLAppViewer::instance()->getSecondLifeTitle().c_str(),
- NULL};
- fflush(NULL);
- pid_t pid = fork();
- if (pid == 0)
- { // child
- execv(cmd.c_str(), (char* const*) cmdargv); /* Flawfinder: ignore */
- llwarns << "execv failure when trying to start " << cmd << llendl;
- _exit(1); // avoid atexit()
+ // launch the actual crash logger
+ const char * cmdargv[] =
+ {cmd.c_str(),
+ "-user",
+ (char*)LLGridManager::getInstance()->getGridLabel().c_str(),
+ "-name",
+ LLAppViewer::instance()->getSecondLifeTitle().c_str(),
+ NULL};
+ fflush(NULL);
+ pid_t pid = fork();
+ if (pid == 0)
+ { // child
+ execv(cmd.c_str(), (char* const*) cmdargv); /* Flawfinder: ignore */
+ llwarns << "execv failure when trying to start " << cmd << llendl;
+ _exit(1); // avoid atexit()
+ }
+ else
+ {
+ if (pid > 0)
+ {
+ // DO NOT wait for child proc to die; we want
+ // the logger to outlive us while we quit to
+ // free up the screen/keyboard/etc.
+ ////int childExitStatus;
+ ////waitpid(pid, &childExitStatus, 0);
}
else
{
- if (pid > 0)
- {
- // DO NOT wait for child proc to die; we want
- // the logger to outlive us while we quit to
- // free up the screen/keyboard/etc.
- ////int childExitStatus;
- ////waitpid(pid, &childExitStatus, 0);
- }
- else
- {
- llwarns << "fork failure." << llendl;
- }
+ llwarns << "fork failure." << llendl;
}
}
// Sometimes signals don't seem to quit the viewer. Also, we may
diff --git a/indra/newview/llappviewerlinux_api_dbus.cpp b/indra/newview/llappviewerlinux_api_dbus.cpp
index 32e7e0a83d..1ae469dfcf 100644
--- a/indra/newview/llappviewerlinux_api_dbus.cpp
+++ b/indra/newview/llappviewerlinux_api_dbus.cpp
@@ -27,11 +27,11 @@
#if LL_DBUS_ENABLED
#include "linden_common.h"
+#include "llaprpool.h"
extern "C" {
#include <dbus/dbus-glib.h>
-#include "apr_pools.h"
#include "apr_dso.h"
}
@@ -44,7 +44,7 @@ extern "C" {
#undef LL_DBUS_SYM
static bool sSymsGrabbed = false;
-static apr_pool_t *sSymDBUSDSOMemoryPool = NULL;
+static LLAPRPool sSymDBUSDSOMemoryPool;
static apr_dso_handle_t *sSymDBUSDSOHandleG = NULL;
bool grab_dbus_syms(std::string dbus_dso_name)
@@ -63,11 +63,11 @@ bool grab_dbus_syms(std::string dbus_dso_name)
#define LL_DBUS_SYM(REQUIRED, DBUSSYM, RTN, ...) do{rv = apr_dso_sym((apr_dso_handle_sym_t*)&ll##DBUSSYM, sSymDBUSDSOHandle, #DBUSSYM); if (rv != APR_SUCCESS) {INFOMSG("Failed to grab symbol: %s", #DBUSSYM); if (REQUIRED) sym_error = true;} else DEBUGMSG("grabbed symbol: %s from %p", #DBUSSYM, (void*)ll##DBUSSYM);}while(0)
//attempt to load the shared library
- apr_pool_create(&sSymDBUSDSOMemoryPool, NULL);
+ sSymDBUSDSOMemoryPool.create();
if ( APR_SUCCESS == (rv = apr_dso_load(&sSymDBUSDSOHandle,
dbus_dso_name.c_str(),
- sSymDBUSDSOMemoryPool) ))
+ sSymDBUSDSOMemoryPool()) ))
{
INFOMSG("Found DSO: %s", dbus_dso_name.c_str());
@@ -109,11 +109,7 @@ void ungrab_dbus_syms()
sSymDBUSDSOHandleG = NULL;
}
- if ( sSymDBUSDSOMemoryPool )
- {
- apr_pool_destroy(sSymDBUSDSOMemoryPool);
- sSymDBUSDSOMemoryPool = NULL;
- }
+ sSymDBUSDSOMemoryPool.destroy();
// NULL-out all of the symbols we'd grabbed
#define LL_DBUS_SYM(REQUIRED, DBUSSYM, RTN, ...) do{ll##DBUSSYM = NULL;}while(0)
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index c2916717bd..8929c0c1a4 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -113,6 +113,7 @@ int main( int argc, char **argv )
}
delete viewer_app_ptr;
viewer_app_ptr = NULL;
+
return 0;
}
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index 445bd208ef..f94c843ad9 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -518,11 +518,7 @@ void LLAppViewerWin32::handleCrashReporting(bool reportFreeze)
}
else
{
- S32 cb = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
- if(cb != CRASH_BEHAVIOR_NEVER_SEND)
- {
- _spawnl(_P_NOWAIT, exe_path.c_str(), arg_str, NULL);
- }
+ _spawnl(_P_NOWAIT, exe_path.c_str(), arg_str, NULL);
}
}
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index d7ba4ea470..966f5b941e 100644..100755
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -127,6 +127,15 @@ void on_new_single_inventory_upload_complete(
group_perms,
next_owner_perms);
+ U32 inventory_item_flags = 0;
+ if (server_response.has("inventory_flags"))
+ {
+ inventory_item_flags = (U32) server_response["inventory_flags"].asInteger();
+ if (inventory_item_flags != 0)
+ {
+ llinfos << "inventory_item_flags " << inventory_item_flags << llendl;
+ }
+ }
S32 creation_date_now = time_corrected();
LLPointer<LLViewerInventoryItem> item = new LLViewerInventoryItem(
server_response["new_inventory_item"].asUUID(),
@@ -138,7 +147,7 @@ void on_new_single_inventory_upload_complete(
item_name,
item_description,
LLSaleInfo::DEFAULT,
- LLInventoryItemFlags::II_FLAGS_NONE,
+ inventory_item_flags,
creation_date_now);
gInventory.updateItem(item);
@@ -449,7 +458,7 @@ void LLSendTexLayerResponder::uploadComplete(const LLSD& content)
std::string result = content["state"];
LLUUID new_id = content["new_asset"];
- llinfos << "result: " << result << "new_id:" << new_id << llendl;
+ llinfos << "result: " << result << " new_id: " << new_id << llendl;
if (result == "complete"
&& mBakedUploadData != NULL)
{ // Invoke
diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h
index 70871b62e2..381b919c4a 100644
--- a/indra/newview/llassetuploadresponders.h
+++ b/indra/newview/llassetuploadresponders.h
@@ -112,6 +112,7 @@ private:
struct LLBakedUploadData;
class LLSendTexLayerResponder : public LLAssetUploadResponder
{
+ LOG_CLASS(LLSendTexLayerResponder);
public:
LLSendTexLayerResponder(const LLSD& post_data,
const LLUUID& vfile_id,
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index cbbdcb2983..4cdfcea64e 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -49,6 +49,7 @@
#include "llfloaterpay.h"
#include "llfloaterwebcontent.h"
#include "llfloaterworldmap.h"
+#include "llfolderview.h"
#include "llgiveinventory.h"
#include "llinventorybridge.h"
#include "llinventorymodel.h" // for gInventory.findCategoryUUIDForType
@@ -69,6 +70,7 @@
#include "lltrans.h"
#include "llcallingcard.h"
#include "llslurl.h" // IDEVO
+#include "llsidepanelinventory.h"
// static
void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name)
@@ -312,7 +314,14 @@ static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarNa
std::string url = getProfileURL(username);
// PROFILES: open in webkit window
- LLWeb::loadWebURLInternal(url, "", agent_id.asString());
+ const bool show_chrome = false;
+ static LLCachedControl<LLRect> profile_rect(gSavedSettings, "WebProfileRect");
+ LLFloaterWebContent::create(LLFloaterWebContent::Params().
+ url(url).
+ id(agent_id.asString()).
+ show_chrome(show_chrome).
+ window_class("profile").
+ preferred_media_size(profile_rect));
}
// static
@@ -327,7 +336,9 @@ void LLAvatarActions::showProfile(const LLUUID& id)
//static
bool LLAvatarActions::profileVisible(const LLUUID& id)
{
- LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", id.asString()));
+ LLSD sd;
+ sd["id"] = id;
+ LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", sd));
return browser && browser->isShown();
}
@@ -335,7 +346,9 @@ bool LLAvatarActions::profileVisible(const LLUUID& id)
//static
void LLAvatarActions::hideProfile(const LLUUID& id)
{
- LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", id.asString()));
+ LLSD sd;
+ sd["id"] = id;
+ LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", sd));
if (browser)
{
browser->closeFloater();
@@ -444,8 +457,6 @@ void LLAvatarActions::share(const LLUUID& id)
namespace action_give_inventory
{
- typedef std::set<LLUUID> uuid_set_t;
-
/**
* Returns a pointer to 'Add More' inventory panel of Edit Outfit SP.
*/
@@ -475,18 +486,16 @@ namespace action_give_inventory
/**
* Checks My Inventory visibility.
*/
+
static bool is_give_inventory_acceptable()
{
- LLInventoryPanel* active_panel = get_active_inventory_panel();
- if (!active_panel) return false;
-
// check selection in the panel
- const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
if (inventory_selected_uuids.empty()) return false; // nothing selected
bool acceptable = false;
- uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
- const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+ std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+ const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
for (; it != it_end; ++it)
{
LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
@@ -529,12 +538,12 @@ namespace action_give_inventory
}
}
- static void build_items_string(const uuid_set_t& inventory_selected_uuids , std::string& items_string)
+ static void build_items_string(const std::set<LLUUID>& inventory_selected_uuids , std::string& items_string)
{
llassert(inventory_selected_uuids.size() > 0);
const std::string& separator = LLTrans::getString("words_separator");
- for (uuid_set_t::const_iterator it = inventory_selected_uuids.begin(); ; )
+ for (std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin(); ; )
{
LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
if (NULL != inv_cat)
@@ -570,10 +579,7 @@ namespace action_give_inventory
return;
}
- LLInventoryPanel* active_panel = get_active_inventory_panel();
- if (!active_panel) return;
-
- const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
if (inventory_selected_uuids.empty())
{
return;
@@ -590,8 +596,8 @@ namespace action_give_inventory
// We souldn't open IM session, just calculate session ID for logging purpose. See EXT-6710
const LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, avatar_uuid);
- uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
- const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+ std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+ const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
const std::string& separator = LLTrans::getString("words_separator");
std::string noncopy_item_names;
@@ -654,10 +660,7 @@ namespace action_give_inventory
{
llassert(avatar_names.size() == avatar_uuids.size());
- LLInventoryPanel* active_panel = get_active_inventory_panel();
- if (!active_panel) return;
-
- const uuid_set_t inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
if (inventory_selected_uuids.empty())
{
return;
@@ -678,6 +681,29 @@ namespace action_give_inventory
}
}
+
+
+//static
+std::set<LLUUID> LLAvatarActions::getInventorySelectedUUIDs()
+{
+ std::set<LLUUID> inventory_selected_uuids;
+
+ LLInventoryPanel* active_panel = action_give_inventory::get_active_inventory_panel();
+ if (active_panel)
+ {
+ inventory_selected_uuids = active_panel->getRootFolder()->getSelectionList();
+ }
+
+ if (inventory_selected_uuids.empty())
+ {
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ inventory_selected_uuids = sidepanel_inventory->getInboxOrOutboxSelectionList();
+ }
+
+ return inventory_selected_uuids;
+}
+
//static
void LLAvatarActions::shareWithAvatars()
{
@@ -705,12 +731,12 @@ bool LLAvatarActions::canShareSelectedItems(LLInventoryPanel* inv_panel /* = NUL
// check selection in the panel
LLFolderView* root_folder = inv_panel->getRootFolder();
- const uuid_set_t inventory_selected_uuids = root_folder->getSelectionList();
+ const std::set<LLUUID> inventory_selected_uuids = root_folder->getSelectionList();
if (inventory_selected_uuids.empty()) return false; // nothing selected
bool can_share = true;
- uuid_set_t::const_iterator it = inventory_selected_uuids.begin();
- const uuid_set_t::const_iterator it_end = inventory_selected_uuids.end();
+ std::set<LLUUID>::const_iterator it = inventory_selected_uuids.begin();
+ const std::set<LLUUID>::const_iterator it_end = inventory_selected_uuids.end();
for (; it != it_end; ++it)
{
LLViewerInventoryCategory* inv_cat = gInventory.getCategory(*it);
@@ -773,6 +799,10 @@ bool LLAvatarActions::canOfferTeleport(const LLUUID& id)
// static
bool LLAvatarActions::canOfferTeleport(const uuid_vec_t& ids)
{
+ // We can't send more than 250 lures in a single message, so disable this
+ // button when there are too many id's selected.
+ if(ids.size() > 250) return false;
+
bool result = true;
for (uuid_vec_t::const_iterator it = ids.begin(); it != ids.end(); ++it)
{
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 956fed7461..fbfd815f41 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -36,6 +36,7 @@
class LLInventoryPanel;
+
/**
* Friend-related actions (add, remove, offer teleport, etc)
*/
@@ -196,6 +197,8 @@ public:
*/
static bool canShareSelectedItems(LLInventoryPanel* inv_panel = NULL);
+ static std::set<LLUUID> getInventorySelectedUUIDs();
+
private:
static bool callbackAddFriendWithMessage(const LLSD& notification, const LLSD& response);
static bool handleRemove(const LLSD& notification, const LLSD& response);
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 01d19c5ba0..79e6c7b66b 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -386,6 +386,7 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b
{
bool voice_status = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
getChild<LLButton>("speak_flyout_btn")->setEnabled(voice_status);
+ gMenuBarView->getChild<LLView>("Nearby Voice")->setEnabled(voice_status);
if (voice_status)
{
LLFirstUse::speak(true);
@@ -570,7 +571,7 @@ BOOL LLBottomTray::postBuild()
// it takes some time between logging in to world and connecting to voice channel.
getChild<LLButton>("speak_btn")->setEnabled(false);
getChild<LLButton>("speak_flyout_btn")->setEnabled(false);
-
+ gMenuBarView->getChild<LLView>("Nearby Voice")->setEnabled(false);
// Registering Chat Bar to receive Voice client status change notifications.
LLVoiceClient::getInstance()->addObserver(this);
diff --git a/indra/newview/llcloud.cpp b/indra/newview/llcloud.cpp
deleted file mode 100644
index cda0f6e4a2..0000000000
--- a/indra/newview/llcloud.cpp
+++ /dev/null
@@ -1,538 +0,0 @@
-/**
- * @file llcloud.cpp
- * @brief Implementation of viewer LLCloudLayer class
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llmath.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v4math.h"
-#include "llquaternion.h"
-#include "llrand.h"
-#include "v4color.h"
-
-#include "llwind.h"
-#include "llcloud.h"
-#include "llgl.h"
-#include "llviewerobjectlist.h"
-#include "llvoclouds.h"
-#include "llvosky.h"
-#include "llsky.h"
-#include "llviewerregion.h"
-#include "patch_dct.h"
-#include "patch_code.h"
-#include "llglheaders.h"
-#include "pipeline.h"
-#include "lldrawpool.h"
-#include "llworld.h"
-
-extern LLPipeline gPipeline;
-
-const F32 CLOUD_UPDATE_RATE = 1.0f; // Global time dilation for clouds
-const F32 CLOUD_GROW_RATE = 0.05f;
-const F32 CLOUD_DECAY_RATE = -0.05f;
-const F32 CLOUD_VELOCITY_SCALE = 0.01f;
-const F32 CLOUD_DENSITY = 25.f;
-const S32 CLOUD_COUNT_MAX = 20;
-const F32 CLOUD_HEIGHT_RANGE = 48.f;
-const F32 CLOUD_HEIGHT_MEAN = 192.f;
-
-enum
-{
- LL_PUFF_GROWING = 0,
- LL_PUFF_DYING = 1
-};
-
-// Used for patch decoder
-S32 gBuffer[16*16];
-
-
-//static
-S32 LLCloudPuff::sPuffCount = 0;
-
-LLCloudPuff::LLCloudPuff() :
- mAlpha(0.01f),
- mRate(CLOUD_GROW_RATE*CLOUD_UPDATE_RATE),
- mLifeState(LL_PUFF_GROWING)
-{
-}
-
-LLCloudGroup::LLCloudGroup() :
- mCloudLayerp(NULL),
- mDensity(0.f),
- mTargetPuffCount(0),
- mVOCloudsp(NULL)
-{
-}
-
-void LLCloudGroup::cleanup()
-{
- if (mVOCloudsp)
- {
- if (!mVOCloudsp->isDead())
- {
- gObjectList.killObject(mVOCloudsp);
- }
- mVOCloudsp = NULL;
- }
-}
-
-void LLCloudGroup::setCenterRegion(const LLVector3 &center)
-{
- mCenterRegion = center;
-}
-
-void LLCloudGroup::updatePuffs(const F32 dt)
-{
- mDensity = mCloudLayerp->getDensityRegion(mCenterRegion);
-
- if (!mVOCloudsp)
- {
- mVOCloudsp = (LLVOClouds *)gObjectList.createObjectViewer(LLViewerObject::LL_VO_CLOUDS, mCloudLayerp->getRegion());
- mVOCloudsp->setCloudGroup(this);
- mVOCloudsp->setPositionRegion(mCenterRegion);
- mVOCloudsp->setScale(LLVector3(256.f/CLOUD_GROUPS_PER_EDGE + CLOUD_PUFF_WIDTH,
- 256.f/CLOUD_GROUPS_PER_EDGE + CLOUD_PUFF_WIDTH,
- CLOUD_HEIGHT_RANGE + CLOUD_PUFF_HEIGHT)*0.5f);
- gPipeline.createObject(mVOCloudsp);
- }
-
- LLVector3 velocity;
- LLVector3d vel_d;
- // Update the positions of all of the clouds
- for (U32 i = 0; i < mCloudPuffs.size(); i++)
- {
- LLCloudPuff &puff = mCloudPuffs[i];
- velocity = mCloudLayerp->getRegion()->mWind.getCloudVelocity(mCloudLayerp->getRegion()->getPosRegionFromGlobal(puff.mPositionGlobal));
- velocity *= CLOUD_VELOCITY_SCALE*CLOUD_UPDATE_RATE;
- vel_d.setVec(velocity);
- mCloudPuffs[i].mPositionGlobal += vel_d;
- mCloudPuffs[i].mAlpha += mCloudPuffs[i].mRate * dt;
- mCloudPuffs[i].mAlpha = llmin(1.f, mCloudPuffs[i].mAlpha);
- mCloudPuffs[i].mAlpha = llmax(0.f, mCloudPuffs[i].mAlpha);
- }
-}
-
-void LLCloudGroup::updatePuffOwnership()
-{
- U32 i = 0;
- while (i < mCloudPuffs.size())
- {
- if (mCloudPuffs[i].getLifeState() == LL_PUFF_DYING)
- {
- i++;
- continue;
- }
- if (inGroup(mCloudPuffs[i]))
- {
- i++;
- continue;
- }
-
- //llinfos << "Cloud moving to new group" << llendl;
- LLCloudGroup *new_cgp = LLWorld::getInstance()->findCloudGroup(mCloudPuffs[i]);
- if (!new_cgp)
- {
- //llinfos << "Killing puff not in group" << llendl;
- mCloudPuffs[i].setLifeState(LL_PUFF_DYING);
- mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE;
- i++;
- continue;
- }
- //llinfos << "Puff handed off!" << llendl;
- LLCloudPuff puff;
- puff.mPositionGlobal = mCloudPuffs[i].mPositionGlobal;
- puff.mAlpha = mCloudPuffs[i].mAlpha;
- mCloudPuffs.erase(mCloudPuffs.begin() + i);
- new_cgp->mCloudPuffs.push_back(puff);
- }
-
- //llinfos << "Puff count: " << LLCloudPuff::sPuffCount << llendl;
-}
-
-void LLCloudGroup::updatePuffCount()
-{
- if (!mVOCloudsp)
- {
- return;
- }
- S32 i;
- S32 target_puff_count = llround(CLOUD_DENSITY * mDensity);
- target_puff_count = llmax(0, target_puff_count);
- target_puff_count = llmin(CLOUD_COUNT_MAX, target_puff_count);
- S32 current_puff_count = (S32) mCloudPuffs.size();
- // Create a new cloud if we need one
- if (current_puff_count < target_puff_count)
- {
- LLVector3d puff_pos_global;
- mCloudPuffs.resize(target_puff_count);
- for (i = current_puff_count; i < target_puff_count; i++)
- {
- puff_pos_global = mVOCloudsp->getPositionGlobal();
- F32 x = ll_frand(256.f/CLOUD_GROUPS_PER_EDGE) - 128.f/CLOUD_GROUPS_PER_EDGE;
- F32 y = ll_frand(256.f/CLOUD_GROUPS_PER_EDGE) - 128.f/CLOUD_GROUPS_PER_EDGE;
- F32 z = ll_frand(CLOUD_HEIGHT_RANGE) - 0.5f*CLOUD_HEIGHT_RANGE;
- puff_pos_global += LLVector3d(x, y, z);
- mCloudPuffs[i].mPositionGlobal = puff_pos_global;
- mCloudPuffs[i].mAlpha = 0.01f;
- LLCloudPuff::sPuffCount++;
- }
- }
-
- // Count the number of live puffs
- S32 live_puff_count = 0;
- for (i = 0; i < (S32) mCloudPuffs.size(); i++)
- {
- if (mCloudPuffs[i].getLifeState() != LL_PUFF_DYING)
- {
- live_puff_count++;
- }
- }
-
-
- // Start killing enough puffs so the live puff count == target puff count
- S32 new_dying_count = llmax(0, live_puff_count - target_puff_count);
- i = 0;
- while (new_dying_count > 0)
- {
- if (mCloudPuffs[i].getLifeState() != LL_PUFF_DYING)
- {
- //llinfos << "Killing extra live cloud" << llendl;
- mCloudPuffs[i].setLifeState(LL_PUFF_DYING);
- mCloudPuffs[i].mRate = CLOUD_DECAY_RATE*CLOUD_UPDATE_RATE;
- new_dying_count--;
- }
- i++;
- }
-
- // Remove fully dead puffs
- i = 0;
- while (i < (S32) mCloudPuffs.size())
- {
- if (mCloudPuffs[i].isDead())
- {
- //llinfos << "Removing dead puff!" << llendl;
- mCloudPuffs.erase(mCloudPuffs.begin() + i);
- LLCloudPuff::sPuffCount--;
- }
- else
- {
- i++;
- }
- }
-}
-
-BOOL LLCloudGroup::inGroup(const LLCloudPuff &puff) const
-{
- // Do min/max check on center of the cloud puff
- F32 min_x, min_y, max_x, max_y;
- F32 delta = 128.f/CLOUD_GROUPS_PER_EDGE;
- min_x = mCenterRegion.mV[VX] - delta;
- min_y = mCenterRegion.mV[VY] - delta;
- max_x = mCenterRegion.mV[VX] + delta;
- max_y = mCenterRegion.mV[VY] + delta;
-
- LLVector3 pos_region = mCloudLayerp->getRegion()->getPosRegionFromGlobal(puff.getPositionGlobal());
-
- if ((pos_region.mV[VX] < min_x)
- || (pos_region.mV[VY] < min_y)
- || (pos_region.mV[VX] > max_x)
- || (pos_region.mV[VY] > max_y))
- {
- return FALSE;
- }
- return TRUE;
-}
-
-LLCloudLayer::LLCloudLayer()
-: mOriginGlobal(0.0f, 0.0f, 0.0f),
- mMetersPerEdge(1.0f),
- mMetersPerGrid(1.0f),
- mWindp(NULL),
- mDensityp(NULL)
-{
- S32 i, j;
- for (i = 0; i < 4; i++)
- {
- mNeighbors[i] = NULL;
- }
-
- F32 x, y;
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- y = (0.5f + i)*(256.f/CLOUD_GROUPS_PER_EDGE);
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- x = (0.5f + j)*(256.f/CLOUD_GROUPS_PER_EDGE);
-
- mCloudGroups[i][j].setCloudLayerp(this);
- mCloudGroups[i][j].setCenterRegion(LLVector3(x, y, CLOUD_HEIGHT_MEAN));
- }
- }
-}
-
-
-
-LLCloudLayer::~LLCloudLayer()
-{
- destroy();
-}
-
-
-void LLCloudLayer::create(LLViewerRegion *regionp)
-{
- llassert(regionp);
-
- mRegionp = regionp;
- mDensityp = new F32 [CLOUD_GRIDS_PER_EDGE * CLOUD_GRIDS_PER_EDGE];
-
- U32 i;
- for (i = 0; i < CLOUD_GRIDS_PER_EDGE*CLOUD_GRIDS_PER_EDGE; i++)
- {
- mDensityp[i] = 0.f;
- }
-}
-
-void LLCloudLayer::setRegion(LLViewerRegion *regionp)
-{
- mRegionp = regionp;
-}
-
-void LLCloudLayer::destroy()
-{
- reset();
-
- delete [] mDensityp;
- mDensityp = NULL;
- mWindp = NULL;
-}
-
-
-void LLCloudLayer::reset()
-{
- // Kill all of the existing puffs
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].cleanup();
- }
- }
-}
-
-void LLCloudLayer::setWindPointer(LLWind *windp)
-{
- if (mWindp)
- {
- mWindp->setCloudDensityPointer(NULL);
- }
- mWindp = windp;
- if (mWindp)
- {
- mWindp->setCloudDensityPointer(mDensityp);
- }
-}
-
-
-void LLCloudLayer::setWidth(F32 width)
-{
- mMetersPerEdge = width;
- mMetersPerGrid = width / CLOUD_GRIDS_PER_EDGE;
-}
-
-
-F32 LLCloudLayer::getDensityRegion(const LLVector3 &pos_region)
-{
- // "position" is region-local
- S32 i, j, ii, jj;
-
- i = lltrunc(pos_region.mV[VX] / mMetersPerGrid);
- j = lltrunc(pos_region.mV[VY] / mMetersPerGrid);
- ii = i + 1;
- jj = j + 1;
-
-
- // clamp
- if (i >= (S32)CLOUD_GRIDS_PER_EDGE)
- {
- i = CLOUD_GRIDS_PER_EDGE - 1;
- ii = i;
- }
- else if (i < 0)
- {
- i = 0;
- ii = i;
- }
- else if (ii >= (S32)CLOUD_GRIDS_PER_EDGE || ii < 0)
- {
- ii = i;
- }
-
- if (j >= (S32)CLOUD_GRIDS_PER_EDGE)
- {
- j = CLOUD_GRIDS_PER_EDGE - 1;
- jj = j;
- }
- else if (j < 0)
- {
- j = 0;
- jj = j;
- }
- else if (jj >= (S32)CLOUD_GRIDS_PER_EDGE || jj < 0)
- {
- jj = j;
- }
-
- F32 dx = (pos_region.mV[VX] - (F32) i * mMetersPerGrid) / mMetersPerGrid;
- F32 dy = (pos_region.mV[VY] - (F32) j * mMetersPerGrid) / mMetersPerGrid;
- F32 omdx = 1.0f - dx;
- F32 omdy = 1.0f - dy;
-
- F32 density = dx * dy * *(mDensityp + ii + jj * CLOUD_GRIDS_PER_EDGE) +
- dx * omdy * *(mDensityp + i + jj * CLOUD_GRIDS_PER_EDGE) +
- omdx * dy * *(mDensityp + ii + j * CLOUD_GRIDS_PER_EDGE) +
- omdx * omdy * *(mDensityp + i + j * CLOUD_GRIDS_PER_EDGE);
-
- return density;
-}
-
-void LLCloudLayer::decompress(LLBitPack &bitpack, LLGroupHeader *group_headerp)
-{
- LLPatchHeader patch_header;
-
- init_patch_decompressor(group_headerp->patch_size);
-
- // Don't use the packed group_header stride because the strides used on
- // simulator and viewer are not equal.
- group_headerp->stride = group_headerp->patch_size; // offset required to step up one row
- set_group_of_patch_header(group_headerp);
-
- decode_patch_header(bitpack, &patch_header);
- decode_patch(bitpack, gBuffer);
- decompress_patch(mDensityp, gBuffer, &patch_header);
-}
-
-void LLCloudLayer::updatePuffs(const F32 dt)
-{
- // We want to iterate through all of the cloud groups
- // and update their density targets
-
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].updatePuffs(dt);
- }
- }
-}
-
-void LLCloudLayer::updatePuffOwnership()
-{
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].updatePuffOwnership();
- }
- }
-}
-
-void LLCloudLayer::updatePuffCount()
-{
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- mCloudGroups[i][j].updatePuffCount();
- }
- }
-}
-
-LLCloudGroup *LLCloudLayer::findCloudGroup(const LLCloudPuff &puff)
-{
- S32 i, j;
-
- for (i = 0; i < CLOUD_GROUPS_PER_EDGE; i++)
- {
- for (j = 0; j < CLOUD_GROUPS_PER_EDGE; j++)
- {
- if (mCloudGroups[i][j].inGroup(puff))
- {
- return &(mCloudGroups[i][j]);
- }
- }
- }
- return NULL;
-}
-
-
-
-void LLCloudLayer::connectNeighbor(LLCloudLayer *cloudp, U32 direction)
-{
- if (direction >= 4)
- {
- // Only care about cardinal 4 directions.
- return;
- }
-
- mNeighbors[direction] = cloudp;
- if (cloudp)
- mNeighbors[direction]->mNeighbors[gDirOpposite[direction]] = this;
-}
-
-
-void LLCloudLayer::disconnectNeighbor(U32 direction)
-{
- if (direction >= 4)
- {
- // Only care about cardinal 4 directions.
- return;
- }
-
- if (mNeighbors[direction])
- {
- mNeighbors[direction]->mNeighbors[gDirOpposite[direction]] = NULL;
- mNeighbors[direction] = NULL;
- }
-}
-
-
-void LLCloudLayer::disconnectAllNeighbors()
-{
- S32 i;
- for (i = 0; i < 4; i++)
- {
- disconnectNeighbor(i);
- }
-}
diff --git a/indra/newview/llcloud.h b/indra/newview/llcloud.h
deleted file mode 100644
index 0435ba1ece..0000000000
--- a/indra/newview/llcloud.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- * @file llcloud.h
- * @brief Description of viewer LLCloudLayer class
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLCLOUD_H
-#define LL_LLCLOUD_H
-
-// Some ideas on how clouds should work
-//
-// Each region has a cloud layer
-// Each cloud layer has pre-allocated space for N clouds
-// The LLSky class knows the max number of clouds to render M.
-// All clouds use the same texture, but the tex-coords can take on 8 configurations
-// (four rotations, front and back)
-//
-// The sky's part
-// --------------
-// The sky knows that A clouds have been assigned to regions and there are B left over.
-// Divide B by number of active regions to get C.
-// Ask each region to add C more clouds and return total number D.
-// Add up all the D's to get a new A.
-//
-// The cloud layer's part
-// ----------------------
-// The cloud layer is a grid of possibility. Each grid's value represents the probablility
-// (0.0 to 1.0) that a cloud placement query will succeed.
-//
-// The sky asks the region to add C more clouds.
-// The cloud layer tries a total of E times to place clouds and returns total cloud count.
-//
-// Clouds move according to local wind velocity.
-// If a cloud moves out of region then it's location is sent to neighbor region
-// or it is allowed to drift and decay.
-//
-// The clouds in non-visible regions do not propagate every frame.
-// Each frame one non-visible region is allowed to propagate it's clouds
-// (might have to check to see if incoming cloud was already visible or not).
-//
-//
-
-#include "llmath.h"
-//#include "vmath.h"
-#include "v3math.h"
-#include "v3dmath.h"
-#include "v4math.h"
-#include "v4color.h"
-#include "llpointer.h"
-#include "lldarray.h"
-
-#include "llframetimer.h"
-
-const U32 CLOUD_GRIDS_PER_EDGE = 16;
-
-const F32 CLOUD_PUFF_WIDTH = 64.f;
-const F32 CLOUD_PUFF_HEIGHT = 48.f;
-
-class LLWind;
-class LLVOClouds;
-class LLViewerRegion;
-class LLCloudLayer;
-class LLBitPack;
-class LLGroupHeader;
-
-const S32 CLOUD_GROUPS_PER_EDGE = 4;
-
-class LLCloudPuff
-{
-public:
- LLCloudPuff();
-
- const LLVector3d &getPositionGlobal() const { return mPositionGlobal; }
- friend class LLCloudGroup;
-
- void updatePuffs(const F32 dt);
- void updatePuffOwnership();
-
- F32 getAlpha() const { return mAlpha; }
- U32 getLifeState() const { return mLifeState; }
- void setLifeState(const U32 state) { mLifeState = state; }
- BOOL isDead() const { return mAlpha <= 0.f; }
-
-
- static S32 sPuffCount;
-protected:
- F32 mAlpha;
- F32 mRate;
- LLVector3d mPositionGlobal;
-
- BOOL mLifeState;
-};
-
-class LLCloudGroup
-{
-public:
- LLCloudGroup();
-
- void cleanup();
-
- void setCloudLayerp(LLCloudLayer *clp) { mCloudLayerp = clp; }
- void setCenterRegion(const LLVector3 &center);
-
- void updatePuffs(const F32 dt);
- void updatePuffOwnership();
- void updatePuffCount();
-
- BOOL inGroup(const LLCloudPuff &puff) const;
-
- F32 getDensity() const { return mDensity; }
- S32 getNumPuffs() const { return (S32) mCloudPuffs.size(); }
- const LLCloudPuff &getPuff(const S32 i) { return mCloudPuffs[i]; }
-protected:
- LLCloudLayer *mCloudLayerp;
- LLVector3 mCenterRegion;
- F32 mDensity;
- S32 mTargetPuffCount;
-
- std::vector<LLCloudPuff> mCloudPuffs;
- LLPointer<LLVOClouds> mVOCloudsp;
-};
-
-
-class LLCloudLayer
-{
-public:
- LLCloudLayer();
- ~LLCloudLayer();
-
- void create(LLViewerRegion *regionp);
- void destroy();
-
- void reset(); // Clears all active cloud puffs
-
-
- void updatePuffs(const F32 dt);
- void updatePuffOwnership();
- void updatePuffCount();
-
- LLCloudGroup *findCloudGroup(const LLCloudPuff &puff);
-
- void setRegion(LLViewerRegion *regionp);
- LLViewerRegion* getRegion() const { return mRegionp; }
- void setWindPointer(LLWind *windp);
- void setOriginGlobal(const LLVector3d &origin_global) { mOriginGlobal = origin_global; }
- void setWidth(F32 width);
-
- void setBrightness(F32 brightness);
- void setSunColor(const LLColor4 &color);
-
- F32 getDensityRegion(const LLVector3 &pos_region); // "position" is in local coordinates
-
- void decompress(LLBitPack &bitpack, LLGroupHeader *group_header);
-
- LLCloudLayer* getNeighbor(const S32 n) const { return mNeighbors[n]; }
-
- void connectNeighbor(LLCloudLayer *cloudp, U32 direction);
- void disconnectNeighbor(U32 direction);
- void disconnectAllNeighbors();
-
-public:
- LLVector3d mOriginGlobal;
- F32 mMetersPerEdge;
- F32 mMetersPerGrid;
-
-
- F32 mMaxAlpha; // The max cloud puff _render_ alpha
-
-protected:
- LLCloudLayer *mNeighbors[4];
- LLWind *mWindp;
- LLViewerRegion *mRegionp;
- F32 *mDensityp; // the probability density grid
-
- LLCloudGroup mCloudGroups[CLOUD_GROUPS_PER_EDGE][CLOUD_GROUPS_PER_EDGE];
-};
-
-
-#endif
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index 18ae6107e7..c7fc45f61e 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -27,10 +27,16 @@
#include "lldateutil.h"
+#include <boost/date_time/gregorian/gregorian.hpp>
+#include <boost/date_time/posix_time/ptime.hpp>
+
// Linden libraries
#include "lltrans.h"
#include "llui.h"
+using namespace boost::gregorian;
+using namespace boost::posix_time;
+
static S32 DAYS_PER_MONTH_NOLEAP[] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static S32 DAYS_PER_MONTH_LEAP[] =
@@ -186,3 +192,24 @@ std::string LLDateUtil::ageFromDate(const std::string& date_string)
//{
// return ageFromDateISO(date_string, LLDate::now());
//}
+
+S32 LLDateUtil::secondsSinceEpochFromString(const std::string& format, const std::string& str)
+{
+ date_input_facet *facet = new date_input_facet(format);
+
+ std::stringstream ss;
+ ss << str;
+ ss.imbue(std::locale(ss.getloc(), facet));
+
+ date d;
+ ss >> d;
+
+ ptime time_t_date(d);
+ ptime time_t_epoch(date(1970,1,1));
+
+ // We assume that the date defined by str is in UTC, so the difference
+ // is calculated with no time zone corrections.
+ time_duration diff = time_t_date - time_t_epoch;
+
+ return diff.total_seconds();
+}
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
index 2843a357c9..f027d360f7 100644
--- a/indra/newview/lldateutil.h
+++ b/indra/newview/lldateutil.h
@@ -69,6 +69,20 @@ namespace LLDateUtil
//std::string ageFromDateISO(const std::string& date_string);
//std::string ageFromDate(S32 born_year, S32 born_month, S32 born_day, const LLDate& now);
+
+ /**
+ * Convert a string of a specified date format into seconds since the Epoch.
+ *
+ * Many of the format flags are those used by strftime(...), but not all.
+ * For the full list of supported time format specifiers
+ * see http://www.boost.org/doc/libs/1_47_0/doc/html/date_time/date_time_io.html#date_time.format_flags
+ *
+ * @param format Format characters string. Example: "%A %b %d, %Y"
+ * @param str Date string containing the time in specified format.
+ *
+ * @return Number of seconds since 01/01/1970 UTC.
+ */
+ S32 secondsSinceEpochFromString(const std::string& format, const std::string& str);
}
#endif
diff --git a/indra/newview/lldaycyclemanager.cpp b/indra/newview/lldaycyclemanager.cpp
new file mode 100644
index 0000000000..347a467a8b
--- /dev/null
+++ b/indra/newview/lldaycyclemanager.cpp
@@ -0,0 +1,230 @@
+/**
+ * @file lldaycyclemanager.cpp
+ * @brief Implementation for the LLDayCycleManager class.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lldaycyclemanager.h"
+
+#include "lldiriterator.h"
+
+void LLDayCycleManager::getPresetNames(preset_name_list_t& names) const
+{
+ names.clear();
+
+ for (dc_map_t::const_iterator it = mDayCycleMap.begin(); it != mDayCycleMap.end(); ++it)
+ {
+ names.push_back(it->first);
+ }
+}
+
+void LLDayCycleManager::getPresetNames(preset_name_list_t& user, preset_name_list_t& sys) const
+{
+ user.clear();
+ sys.clear();
+
+ for (dc_map_t::const_iterator it = mDayCycleMap.begin(); it != mDayCycleMap.end(); ++it)
+ {
+ const std::string& name = it->first;
+
+ if (isSystemPreset(name))
+ {
+ sys.push_back(name);
+ }
+ else
+ {
+ user.push_back(name);
+ }
+ }
+}
+
+void LLDayCycleManager::getUserPresetNames(preset_name_list_t& user) const
+{
+ preset_name_list_t sys; // unused
+ getPresetNames(user, sys);
+}
+
+bool LLDayCycleManager::getPreset(const std::string name, LLWLDayCycle& day_cycle) const
+{
+ dc_map_t::const_iterator it = mDayCycleMap.find(name);
+ if (it == mDayCycleMap.end())
+ {
+ return false;
+ }
+
+ day_cycle = it->second;
+ return true;
+}
+
+bool LLDayCycleManager::getPreset(const std::string name, LLSD& day_cycle) const
+{
+ LLWLDayCycle dc;
+ if (!getPreset(name, dc))
+ {
+ return false;
+ }
+
+ day_cycle = dc.asLLSD();
+ return true;
+}
+
+bool LLDayCycleManager::presetExists(const std::string name) const
+{
+ LLWLDayCycle dummy;
+ return getPreset(name, dummy);
+}
+
+bool LLDayCycleManager::isSystemPreset(const std::string& name) const
+{
+ return gDirUtilp->fileExists(getSysDir() + LLURI::escape(name) + ".xml");
+}
+
+bool LLDayCycleManager::savePreset(const std::string& name, const LLSD& data)
+{
+ // Save given preset.
+ LLWLDayCycle day;
+ day.loadDayCycle(data, LLEnvKey::SCOPE_LOCAL);
+ day.save(getUserDir() + LLURI::escape(name) + ".xml");
+
+ // Add it to our map.
+ addPreset(name, data);
+ mModifySignal();
+ return true;
+}
+
+bool LLDayCycleManager::deletePreset(const std::string& name)
+{
+ // Remove it from the map.
+ dc_map_t::iterator it = mDayCycleMap.find(name);
+ if (it == mDayCycleMap.end())
+ {
+ LL_WARNS("Windlight") << "No day cycle named " << name << LL_ENDL;
+ return false;
+ }
+ mDayCycleMap.erase(it);
+
+ // Remove from the filesystem.
+ std::string filename = LLURI::escape(name) + ".xml";
+ if (gDirUtilp->fileExists(getUserDir() + filename))
+ {
+ gDirUtilp->deleteFilesInDir(getUserDir(), filename);
+ }
+
+ // Signal interested parties.
+ mModifySignal();
+ return true;
+}
+
+bool LLDayCycleManager::isSkyPresetReferenced(const std::string& preset_name) const
+{
+ // We're traversing local day cycles, they can only reference local skies.
+ LLWLParamKey key(preset_name, LLEnvKey::SCOPE_LOCAL);
+
+ for (dc_map_t::const_iterator it = mDayCycleMap.begin(); it != mDayCycleMap.end(); ++it)
+ {
+ if (it->second.hasReferencesTo(key))
+ {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+boost::signals2::connection LLDayCycleManager::setModifyCallback(const modify_signal_t::slot_type& cb)
+{
+ return mModifySignal.connect(cb);
+}
+
+// virtual
+void LLDayCycleManager::initSingleton()
+{
+ LL_DEBUGS("Windlight") << "Loading all day cycles" << LL_ENDL;
+ loadAllPresets();
+}
+
+void LLDayCycleManager::loadAllPresets()
+{
+ mDayCycleMap.clear();
+
+ // First, load system (coming out of the box) day cycles.
+ loadPresets(getSysDir());
+
+ // Then load user presets. Note that user day cycles will modify any system ones already loaded.
+ loadPresets(getUserDir());
+}
+
+void LLDayCycleManager::loadPresets(const std::string& dir)
+{
+ LLDirIterator dir_iter(dir, "*.xml");
+
+ while (1)
+ {
+ std::string file;
+ if (!dir_iter.next(file)) break; // no more files
+ loadPreset(dir + file);
+ }
+}
+
+bool LLDayCycleManager::loadPreset(const std::string& path)
+{
+ LLSD data = LLWLDayCycle::loadDayCycleFromPath(path);
+ if (data.isUndefined())
+ {
+ llwarns << "Error loading day cycle from " << path << llendl;
+ return false;
+ }
+
+ std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
+ addPreset(name, data);
+
+ return true;
+}
+
+bool LLDayCycleManager::addPreset(const std::string& name, const LLSD& data)
+{
+ if (name.empty())
+ {
+ llassert(name.empty());
+ return false;
+ }
+
+ LLWLDayCycle day;
+ day.loadDayCycle(data, LLEnvKey::SCOPE_LOCAL);
+ mDayCycleMap[name] = day;
+ return true;
+}
+
+// static
+std::string LLDayCycleManager::getSysDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", "");
+}
+
+// static
+std::string LLDayCycleManager::getUserDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "windlight/days", "");
+}
diff --git a/indra/newview/lldaycyclemanager.h b/indra/newview/lldaycyclemanager.h
new file mode 100644
index 0000000000..3d2144960d
--- /dev/null
+++ b/indra/newview/lldaycyclemanager.h
@@ -0,0 +1,84 @@
+/**
+ * @file lldaycyclemanager.h
+ * @brief Implementation for the LLDayCycleManager class.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLDAYCYCLEMANAGER_H
+#define LL_LLDAYCYCLEMANAGER_H
+
+#include <map>
+#include <string>
+
+#include "llwldaycycle.h"
+#include "llwlparammanager.h"
+
+/**
+ * WindLight day cycles manager class
+ *
+ * Provides interface for accessing, loading and saving day cycles.
+ */
+class LLDayCycleManager : public LLSingleton<LLDayCycleManager>
+{
+ LOG_CLASS(LLDayCycleManager);
+
+public:
+ typedef std::list<std::string> preset_name_list_t;
+
+ typedef std::map<std::string, LLWLDayCycle> dc_map_t;
+ typedef boost::signals2::signal<void()> modify_signal_t;
+
+ void getPresetNames(preset_name_list_t& names) const;
+ void getPresetNames(preset_name_list_t& user, preset_name_list_t& sys) const;
+ void getUserPresetNames(preset_name_list_t& user) const;
+
+ bool getPreset(const std::string name, LLWLDayCycle& day_cycle) const;
+ bool getPreset(const std::string name, LLSD& day_cycle) const;
+ bool presetExists(const std::string name) const;
+ bool isSystemPreset(const std::string& name) const;
+ bool savePreset(const std::string& name, const LLSD& data);
+ bool deletePreset(const std::string& name);
+
+ /// @return true if there is a day cycle that refers to the sky preset.
+ bool isSkyPresetReferenced(const std::string& preset_name) const;
+
+ /// Emitted when a preset gets added or deleted.
+ boost::signals2::connection setModifyCallback(const modify_signal_t::slot_type& cb);
+
+private:
+ friend class LLSingleton<LLDayCycleManager>;
+ /*virtual*/ void initSingleton();
+
+ void loadAllPresets();
+ void loadPresets(const std::string& dir);
+ bool loadPreset(const std::string& path);
+ bool addPreset(const std::string& name, const LLSD& data);
+
+ static std::string getSysDir();
+ static std::string getUserDir();
+
+ dc_map_t mDayCycleMap;
+ modify_signal_t mModifySignal;
+};
+
+#endif // LL_LLDAYCYCLEMANAGER_H
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
index b6d67899f8..216cc66ef8 100644
--- a/indra/newview/lldebugview.cpp
+++ b/indra/newview/lldebugview.cpp
@@ -62,7 +62,8 @@ void LLDebugView::init()
LLRect r;
LLRect rect = getLocalRect();
- r.set(10, rect.getHeight() - 100, rect.getWidth()/2, 100);
+ // Rectangle to draw debug data in (full height, 3/4 width)
+ r.set(10, rect.getHeight() - 100, ((rect.getWidth()*3)/4), 100);
LLConsole::Params cp;
cp.name("debug console");
cp.max_lines(20);
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index ad3710843c..debac9dcbf 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -387,7 +387,6 @@ void LLDrawable::makeActive()
pcode == LLViewerObject::LL_VO_SURFACE_PATCH ||
pcode == LLViewerObject::LL_VO_PART_GROUP ||
pcode == LLViewerObject::LL_VO_HUD_PART_GROUP ||
- pcode == LLViewerObject::LL_VO_CLOUDS ||
pcode == LLViewerObject::LL_VO_GROUND ||
pcode == LLViewerObject::LL_VO_SKY)
{
@@ -1519,10 +1518,6 @@ BOOL LLDrawable::isAnimating() const
{
return TRUE;
}
- if (mVObjp->getPCode() == LLViewerObject::LL_VO_CLOUDS)
- {
- return TRUE;
- }
if (!isRoot() && !mVObjp->getAngularVelocity().isExactlyZero())
{
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
index f5483d969d..286284f828 100644
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -35,7 +35,6 @@
#include "lldrawpoolalpha.h"
#include "lldrawpoolavatar.h"
#include "lldrawpoolbump.h"
-#include "lldrawpoolclouds.h"
#include "lldrawpoolground.h"
#include "lldrawpoolsimple.h"
#include "lldrawpoolsky.h"
@@ -191,15 +190,16 @@ void LLDrawPool::renderPostDeferred(S32 pass)
//virtual
void LLDrawPool::endRenderPass( S32 pass )
{
- for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++)
+ /*for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++)
{ //dummy cleanup of any currently bound textures
if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE)
{
gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType());
gGL.getTexUnit(i)->disable();
}
- }
+ }*/
+ //make sure channel 0 is active channel
gGL.getTexUnit(0)->activate();
}
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 8d46133912..9719140a37 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -88,16 +88,13 @@ void LLDrawPoolAlpha::endDeferredPass(S32 pass)
void LLDrawPoolAlpha::renderDeferred(S32 pass)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
- {
- LLFastTimer t(FTM_RENDER_GRASS);
- gDeferredTreeProgram.bind();
- LLGLEnable test(GL_ALPHA_TEST);
- //render alpha masked objects
- LLRenderPass::renderTexture(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask());
- gDeferredTreeProgram.unbind();
- }
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ LLFastTimer t(FTM_RENDER_GRASS);
+ gDeferredDiffuseAlphaMaskProgram.bind();
+ gDeferredDiffuseAlphaMaskProgram.setAlphaRange(0.33f, 1.f);
+
+ //render alpha masked objects
+ LLRenderPass::pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+ gDeferredDiffuseAlphaMaskProgram.unbind();
}
@@ -124,7 +121,7 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
if (pass == 0)
{
simple_shader = &gDeferredAlphaProgram;
- fullbright_shader = &gObjectFullbrightProgram;
+ fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
//prime simple shader (loads shadow relevant uniforms)
gPipeline.bindDeferredShader(*simple_shader);
@@ -138,6 +135,8 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
gPipeline.mDeferredDepth.bindTarget();
simple_shader = NULL;
fullbright_shader = NULL;
+ gObjectFullbrightAlphaMaskProgram.bind();
+ gObjectFullbrightAlphaMaskProgram.setAlphaRange(0.33f, 1.f);
}
deferred_render = TRUE;
@@ -156,6 +155,7 @@ void LLDrawPoolAlpha::endPostDeferredPass(S32 pass)
{
gPipeline.mDeferredDepth.flush();
gPipeline.mScreen.bindTarget();
+ gObjectFullbrightAlphaMaskProgram.unbind();
}
deferred_render = FALSE;
@@ -173,13 +173,13 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
if (LLPipeline::sUnderWaterRender)
{
- simple_shader = &gObjectSimpleWaterProgram;
- fullbright_shader = &gObjectFullbrightWaterProgram;
+ simple_shader = &gObjectSimpleWaterAlphaMaskProgram;
+ fullbright_shader = &gObjectFullbrightWaterAlphaMaskProgram;
}
else
{
- simple_shader = &gObjectSimpleProgram;
- fullbright_shader = &gObjectFullbrightProgram;
+ simple_shader = &gObjectSimpleAlphaMaskProgram;
+ fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
}
if (mVertexShaderLevel > 0)
@@ -225,29 +225,32 @@ void LLDrawPoolAlpha::render(S32 pass)
mAlphaDFactor = LLRender::BF_ZERO; // block (zero-out) glow where the alpha test succeeds
gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f);
if (mVertexShaderLevel > 0)
{
- if (!LLPipeline::sRenderDeferred)
+ if (!LLPipeline::sRenderDeferred || !deferred_render)
{
simple_shader->bind();
+ simple_shader->setAlphaRange(0.33f, 1.f);
+
pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
}
if (fullbright_shader)
{
fullbright_shader->bind();
+ fullbright_shader->setAlphaRange(0.33f, 1.f);
}
pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
- LLGLSLShader::bindNoShader();
+ //LLGLSLShader::bindNoShader();
}
else
{
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f); //OK
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask());
gPipeline.enableLightsDynamic();
pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask());
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
}
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
LLGLDepthTest depth(GL_TRUE, LLDrawPoolWater::sSkipScreenCopy ||
@@ -255,7 +258,6 @@ void LLDrawPoolAlpha::render(S32 pass)
if (deferred_render && pass == 1)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f);
gGL.blendFunc(LLRender::BF_SOURCE_ALPHA, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
}
else
@@ -266,13 +268,33 @@ void LLDrawPoolAlpha::render(S32 pass)
mAlphaDFactor = LLRender::BF_ONE_MINUS_SOURCE_ALPHA; // }
gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
- if (LLPipeline::sImpostorRender)
+ if (mVertexShaderLevel > 0)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
+ if (LLPipeline::sImpostorRender)
+ {
+ fullbright_shader->bind();
+ fullbright_shader->setAlphaRange(0.5f, 1.f);
+ simple_shader->bind();
+ simple_shader->setAlphaRange(0.5f, 1.f);
+ }
+ else
+ {
+ fullbright_shader->bind();
+ fullbright_shader->setAlphaRange(0.f, 1.f);
+ simple_shader->bind();
+ simple_shader->setAlphaRange(0.f, 1.f);
+ }
}
else
{
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ if (LLPipeline::sImpostorRender)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f); //OK
+ }
+ else
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
+ }
}
}
@@ -289,22 +311,29 @@ void LLDrawPoolAlpha::render(S32 pass)
if (deferred_render && pass == 1)
{
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
if (sShowDebugAlpha)
{
- if(gPipeline.canUseWindLightShaders())
+ BOOL shaders = gPipeline.canUseVertexShaders();
+ if(shaders)
+ {
+ gObjectFullbrightNonIndexedProgram.bind();
+ }
+ else
{
- LLGLSLShader::bindNoShader();
+ gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
}
- gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
glColor4f(1,0,0,1);
LLViewerFetchedTexture::sSmokeImagep->addTextureStats(1024.f*1024.f);
gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sSmokeImagep, TRUE) ;
renderAlphaHighlight(LLVertexBuffer::MAP_VERTEX |
LLVertexBuffer::MAP_TEXCOORD0);
+ if(shaders)
+ {
+ gObjectFullbrightNonIndexedProgram.unbind();
+ }
}
}
@@ -359,7 +388,6 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow.
// All particle systems seem to come off the wire with texture entries which claim that they glow. This is probably a bug in the data. Suppress.
group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_PARTICLE &&
- group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_CLOUD &&
group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD_PARTICLE;
LLSpatialGroup::drawmap_elem_t& draw_info = group->mDrawMap[LLRenderPass::PASS_ALPHA];
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
index 9f790d03fe..28e464b60d 100644
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -258,7 +258,6 @@ void LLDrawPoolAvatar::beginPostDeferredAlpha()
sSkipOpaque = TRUE;
sShaderLevel = mVertexShaderLevel;
sVertexProgram = &gDeferredAvatarAlphaProgram;
-
sRenderingSkinned = TRUE;
gPipeline.bindDeferredShader(*sVertexProgram);
@@ -361,7 +360,7 @@ void LLDrawPoolAvatar::beginShadowPass(S32 pass)
{
gAvatarMatrixParam = sVertexProgram->mUniform[LLViewerShaderMgr::AVATAR_MATRIX];
}
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
+ //gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
glColor4f(1,1,1,1);
@@ -590,12 +589,22 @@ void LLDrawPoolAvatar::beginImpostor()
LLVOAvatar::sNumVisibleAvatars = 0;
}
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gImpostorProgram.bind();
+ gImpostorProgram.setAlphaRange(0.01f, 1.f);
+ }
+
gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
sDiffuseChannel = 0;
}
void LLDrawPoolAvatar::endImpostor()
{
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gImpostorProgram.unbind();
+ }
gPipeline.enableLightsDynamic();
}
@@ -605,16 +614,17 @@ void LLDrawPoolAvatar::beginRigid()
{
if (LLPipeline::sUnderWaterRender)
{
- sVertexProgram = &gObjectSimpleNonIndexedWaterProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- sVertexProgram = &gObjectSimpleNonIndexedProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedProgram;
}
if (sVertexProgram != NULL)
{ //eyeballs render with the specular shader
sVertexProgram->bind();
+ sVertexProgram->setAlphaRange(0.2f, 1.f);
}
}
else
@@ -647,6 +657,7 @@ void LLDrawPoolAvatar::beginDeferredImpostor()
sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
sVertexProgram->bind();
+ sVertexProgram->setAlphaRange(0.01f, 1.f);
}
void LLDrawPoolAvatar::endDeferredImpostor()
@@ -692,11 +703,11 @@ void LLDrawPoolAvatar::beginSkinned()
{
if (LLPipeline::sUnderWaterRender)
{
- sVertexProgram = &gObjectSimpleNonIndexedWaterProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- sVertexProgram = &gObjectSimpleNonIndexedProgram;
+ sVertexProgram = &gObjectAlphaMaskNonIndexedProgram;
}
}
@@ -728,6 +739,11 @@ void LLDrawPoolAvatar::beginSkinned()
sVertexProgram->bind();
}
}
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ sVertexProgram->setAlphaRange(0.2f, 1.f);
+ }
}
void LLDrawPoolAvatar::endSkinned()
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index 813b3820ee..0742250b0b 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -155,6 +155,7 @@ void LLStandardBumpmap::addstandard()
LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id));
gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLViewerTexture::BOOST_BUMP) ;
gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL );
+ gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0) ;
LLStandardBumpmap::sStandardBumpmapCount++;
}
@@ -464,11 +465,15 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
}
}
}
- gGL.getTexUnit(diffuse_channel)->disable();
- gGL.getTexUnit(cube_channel)->disable();
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (!LLGLSLShader::sNoFixedFunction)
+ {
+ gGL.getTexUnit(diffuse_channel)->disable();
+ gGL.getTexUnit(cube_channel)->disable();
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
void LLDrawPoolBump::endShiny(bool invisible)
@@ -583,19 +588,19 @@ void LLDrawPoolBump::endFullbrightShiny()
cube_map->disable();
cube_map->restoreMatrix();
- if (diffuse_channel != 0)
+ /*if (diffuse_channel != 0)
{
shader->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
}
gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);*/
shader->unbind();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
}
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
diffuse_channel = -1;
cube_channel = 0;
@@ -706,36 +711,44 @@ void LLDrawPoolBump::beginBump(U32 pass)
// Optional second pass: emboss bump map
stop_glerror();
- // TEXTURE UNIT 0
- // Output.rgb = texture at texture coord 0
- gGL.getTexUnit(0)->activate();
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gObjectBumpProgram.bind();
+ }
+ else
+ {
+ // TEXTURE UNIT 0
+ // Output.rgb = texture at texture coord 0
+ gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
- gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
- // TEXTURE UNIT 1
- gGL.getTexUnit(1)->activate();
+ // TEXTURE UNIT 1
+ gGL.getTexUnit(1)->activate();
- gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
+ gGL.getTexUnit(1)->enable(LLTexUnit::TT_TEXTURE);
+
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
+ gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
- gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
- gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
+ // src = tex0 + (1 - tex1) - 0.5
+ // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
+ // = (1 + bump0 - bump1) / 2
- // src = tex0 + (1 - tex1) - 0.5
- // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
- // = (1 + bump0 - bump1) / 2
+ // Blend: src * dst + dst * src
+ // = 2 * src * dst
+ // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
+ // = (1 + bump0 - bump1) * dst.rgb
+ // = dst.rgb + dst.rgb * (bump0 - bump1)
+
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
+ }
- // Blend: src * dst + dst * src
- // = 2 * src * dst
- // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
- // = (1 + bump0 - bump1) * dst.rgb
- // = dst.rgb + dst.rgb * (bump0 - bump1)
gGL.setSceneBlendType(LLRender::BT_MULT_X2);
- gGL.getTexUnit(0)->activate();
stop_glerror();
-
- gGL.getTexUnit(1)->unbind(LLTexUnit::TT_TEXTURE);
}
//static
@@ -765,14 +778,21 @@ void LLDrawPoolBump::endBump(U32 pass)
return;
}
- // Disable texture unit 1
- gGL.getTexUnit(1)->activate();
- gGL.getTexUnit(1)->disable();
- gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gObjectBumpProgram.unbind();
+ }
+ else
+ {
+ // Disable texture blending on unit 1
+ gGL.getTexUnit(1)->activate();
+ //gGL.getTexUnit(1)->disable();
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
- // Disable texture unit 0
- gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ // Disable texture blending on unit 0
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
@@ -1054,11 +1074,12 @@ LLViewerTexture* LLBumpImageList::getBrightnessDarknessImage(LLViewerFetchedText
if (!src_image->hasCallbacks())
{ //if image has no callbacks but resolutions don't match, trigger raw image loaded callback again
if (src_image->getWidth() != bump->getWidth() ||
- src_image->getHeight() != bump->getHeight() ||
- (LLPipeline::sRenderDeferred && bump->getComponents() != 4))
+ src_image->getHeight() != bump->getHeight())// ||
+ //(LLPipeline::sRenderDeferred && bump->getComponents() != 4))
{
src_image->setBoostLevel(LLViewerTexture::BOOST_BUMP) ;
src_image->setLoadedCallback( callback_func, 0, TRUE, FALSE, new LLUUID(src_image->getID()), NULL );
+ src_image->forceToSaveRawImage(0) ;
}
}
}
@@ -1407,6 +1428,11 @@ void LLDrawPoolInvisible::render(S32 pass)
{ //render invisiprims
LLFastTimer t(FTM_RENDER_INVISIBLE);
+ if (gPipeline.canUseVertexShaders())
+ {
+ gOcclusionProgram.bind();
+ }
+
U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
glStencilMask(0);
gGL.setColorMask(false, false);
@@ -1414,6 +1440,11 @@ void LLDrawPoolInvisible::render(S32 pass)
gGL.setColorMask(true, false);
glStencilMask(0xFFFFFFFF);
+ if (gPipeline.canUseVertexShaders())
+ {
+ gOcclusionProgram.unbind();
+ }
+
if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
{
beginShiny(true);
diff --git a/indra/newview/lldrawpoolclouds.cpp b/indra/newview/lldrawpoolclouds.cpp
deleted file mode 100644
index 5db1d8cfed..0000000000
--- a/indra/newview/lldrawpoolclouds.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * @file lldrawpoolclouds.cpp
- * @brief LLDrawPoolClouds class implementation
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "lldrawpoolclouds.h"
-
-#include "llface.h"
-#include "llsky.h"
-#include "llviewercamera.h"
-#include "llvoclouds.h"
-#include "pipeline.h"
-
-LLDrawPoolClouds::LLDrawPoolClouds() :
- LLDrawPool(POOL_CLOUDS)
-{
-}
-
-LLDrawPool *LLDrawPoolClouds::instancePool()
-{
- return new LLDrawPoolClouds();
-}
-
-BOOL LLDrawPoolClouds::addFace(LLFace* face)
-{
- llerrs << "WTF?" << llendl;
- return FALSE;
-}
-
-void LLDrawPoolClouds::enqueue(LLFace *facep)
-{
- mDrawFace.push_back(facep);
- facep->mDistance = (facep->mCenterAgent - gCamera->getOrigin()) * gCamera->getAtAxis();
-}
-
-void LLDrawPoolClouds::beginRenderPass(S32 pass)
-{
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
-}
-
-void LLDrawPoolClouds::prerender()
-{
- mVertexShaderLevel = gPipeline.getVertexShaderLevel(LLPipeline::SHADER_ENVIRONMENT);
-}
-
-void LLDrawPoolClouds::render(S32 pass)
-{
- LLFastTimer ftm(LLFastTimer::FTM_RENDER_CLOUDS);
- if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
- {
- return;
- }
-
- if (mDrawFace.empty())
- {
- return;
- }
-
- LLGLSPipelineAlpha gls_pipeline_alpha;
- LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
- glAlphaFunc(GL_GREATER,0.01f);
-
- gPipeline.enableLightsFullbright(LLColor4(1.f,1.f,1.f));
-
- mDrawFace[0]->bindTexture();
-
- std::sort(mDrawFace.begin(), mDrawFace.end(), LLFace::CompareDistanceGreater());
-
- drawLoop();
-}
-
-
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
index 5dbb27cabb..eec4ee6bac 100644
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -49,6 +49,8 @@ void LLDrawPoolGlow::beginPostDeferredPass(S32 pass)
gDeferredFullbrightProgram.bind();
}
+static LLFastTimer::DeclareTimer FTM_RENDER_GLOW_PUSH("Glow Push");
+
void LLDrawPoolGlow::renderPostDeferred(S32 pass)
{
LLFastTimer t(FTM_RENDER_GLOW);
@@ -62,7 +64,11 @@ void LLDrawPoolGlow::renderPostDeferred(S32 pass)
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
gGL.setColorMask(false, true);
- pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+
+ {
+ LLFastTimer t(FTM_RENDER_GLOW_PUSH);
+ pushBatches(LLRenderPass::PASS_GLOW, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+ }
gGL.setColorMask(true, false);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
@@ -176,7 +182,6 @@ void LLDrawPoolSimple::endRenderPass(S32 pass)
void LLDrawPoolSimple::render(S32 pass)
{
LLGLDisable blend(GL_BLEND);
- LLGLDisable alpha_test(GL_ALPHA_TEST);
{ //render simple
LLFastTimer t(FTM_RENDER_SIMPLE);
@@ -196,6 +201,7 @@ void LLDrawPoolSimple::render(S32 pass)
}
else
{
+ LLGLDisable alpha_test(GL_ALPHA_TEST);
renderTexture(LLRenderPass::PASS_SIMPLE, getVertexDataMask());
}
@@ -250,19 +256,21 @@ void LLDrawPoolGrass::beginRenderPass(S32 pass)
if (LLPipeline::sUnderWaterRender)
{
- simple_shader = &gObjectSimpleNonIndexedWaterProgram;
+ simple_shader = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- simple_shader = &gObjectSimpleNonIndexedProgram;
+ simple_shader = &gObjectAlphaMaskNonIndexedProgram;
}
if (mVertexShaderLevel > 0)
{
simple_shader->bind();
+ simple_shader->setAlphaRange(0.5f, 1.f);
}
else
{
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
// don't use shaders!
if (gGLManager.mHasShaderObjects)
{
@@ -280,22 +288,23 @@ void LLDrawPoolGrass::endRenderPass(S32 pass)
{
simple_shader->unbind();
}
+ else
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
}
void LLDrawPoolGrass::render(S32 pass)
{
LLGLDisable blend(GL_BLEND);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
-
+
{
LLFastTimer t(FTM_RENDER_GRASS);
LLGLEnable test(GL_ALPHA_TEST);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
//render grass
LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
- }
-
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
}
void LLDrawPoolGrass::beginDeferredPass(S32 pass)
@@ -310,17 +319,13 @@ void LLDrawPoolGrass::endDeferredPass(S32 pass)
void LLDrawPoolGrass::renderDeferred(S32 pass)
{
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
-
{
LLFastTimer t(FTM_RENDER_GRASS_DEFERRED);
- gDeferredTreeProgram.bind();
- LLGLEnable test(GL_ALPHA_TEST);
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.bind();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.setAlphaRange(0.5f, 1.f);
//render grass
LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
}
-
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
@@ -374,10 +379,14 @@ void LLDrawPoolFullbright::endRenderPass(S32 pass)
LLFastTimer t(FTM_RENDER_FULLBRIGHT);
LLRenderPass::endRenderPass(pass);
+ stop_glerror();
+
if (mVertexShaderLevel > 0)
{
fullbright_shader->unbind();
}
+
+ stop_glerror();
}
void LLDrawPoolFullbright::render(S32 pass)
@@ -385,6 +394,8 @@ void LLDrawPoolFullbright::render(S32 pass)
LLFastTimer t(FTM_RENDER_FULLBRIGHT);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
+ stop_glerror();
+
if (mVertexShaderLevel > 0)
{
fullbright_shader->bind();
@@ -398,6 +409,8 @@ void LLDrawPoolFullbright::render(S32 pass)
U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR;
renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
}
+
+ stop_glerror();
}
S32 LLDrawPoolFullbright::getNumPasses()
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 030d6e1110..efffb2df9e 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -82,6 +82,10 @@ void LLDrawPoolSky::render(S32 pass)
mShader = &gObjectFullbrightWaterProgram;
mShader->bind();
}
+ else if (LLGLSLShader::sNoFixedFunction)
+ { //just use the UI shader (generic single texture no lighting)
+ gUIProgram.bind();
+ }
else
{
// don't use shaders!
@@ -139,6 +143,7 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
if (LLSkyTex::doInterpolate())
{
+
LLGLEnable blend(GL_BLEND);
mSkyTex[side].bindTexture(FALSE);
glColor4f(1, 1, 1, LLSkyTex::getInterpVal()); // lighting is disabled
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
index 84eeace9c6..3daa0f8261 100644
--- a/indra/newview/lldrawpoolterrain.cpp
+++ b/indra/newview/lldrawpoolterrain.cpp
@@ -143,7 +143,7 @@ void LLDrawPoolTerrain::beginRenderPass( S32 pass )
void LLDrawPoolTerrain::endRenderPass( S32 pass )
{
LLFastTimer t(FTM_RENDER_TERRAIN);
- LLFacePool::endRenderPass(pass);
+ //LLFacePool::endRenderPass(pass);
if (mVertexShaderLevel > 1 && sShader->mShaderLevel > 0) {
sShader->unbind();
@@ -215,8 +215,10 @@ void LLDrawPoolTerrain::render(S32 pass)
{ //use fullbright shader for highlighting
LLGLSLShader* old_shader = sShader;
sShader->unbind();
- sShader = &gObjectFullbrightProgram;
+ sShader = &gObjectFullbrightNonIndexedProgram;
sShader->bind();
+ LLGLEnable polyOffset(GL_POLYGON_OFFSET_FILL);
+ glPolygonOffset(-1.0f, -1.0f);
renderOwnership();
sShader = old_shader;
sShader->bind();
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
index 81c796b146..a6e0151114 100644
--- a/indra/newview/lldrawpooltree.cpp
+++ b/indra/newview/lldrawpooltree.cpp
@@ -62,24 +62,25 @@ void LLDrawPoolTree::prerender()
void LLDrawPoolTree::beginRenderPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
-
+
if (LLPipeline::sUnderWaterRender)
{
- shader = &gObjectSimpleNonIndexedWaterProgram;
+ shader = &gObjectAlphaMaskNonIndexedWaterProgram;
}
else
{
- shader = &gObjectSimpleNonIndexedProgram;
+ shader = &gObjectAlphaMaskNonIndexedProgram;
}
- if (gPipeline.canUseWindLightShadersOnObjects())
+ if (gPipeline.canUseVertexShaders())
{
shader->bind();
+ shader->setAlphaRange(0.5f, 1.f);
}
else
{
gPipeline.enableLightsDynamic();
+ gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
}
@@ -92,7 +93,7 @@ void LLDrawPoolTree::render(S32 pass)
return;
}
- LLGLEnable test(GL_ALPHA_TEST);
+ LLGLState test(GL_ALPHA_TEST, LLGLSLShader::sNoFixedFunction ? 0 : 1);
LLOverrideFaceColor color(this, 1.f, 1.f, 1.f, 1.f);
if (gSavedSettings.getBOOL("RenderAnimateTrees"))
@@ -121,12 +122,16 @@ void LLDrawPoolTree::render(S32 pass)
void LLDrawPoolTree::endRenderPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
if (gPipeline.canUseWindLightShadersOnObjects())
{
shader->unbind();
}
+
+ if (mVertexShaderLevel <= 0)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
}
//============================================
@@ -135,10 +140,10 @@ void LLDrawPoolTree::endRenderPass(S32 pass)
void LLDrawPoolTree::beginDeferredPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
- shader = &gDeferredTreeProgram;
+ shader = &gDeferredNonIndexedDiffuseAlphaMaskProgram;
shader->bind();
+ shader->setAlphaRange(0.5f, 1.f);
}
void LLDrawPoolTree::renderDeferred(S32 pass)
@@ -149,8 +154,7 @@ void LLDrawPoolTree::renderDeferred(S32 pass)
void LLDrawPoolTree::endDeferredPass(S32 pass)
{
LLFastTimer t(FTM_RENDER_TREES);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
shader->unbind();
}
@@ -160,11 +164,12 @@ void LLDrawPoolTree::endDeferredPass(S32 pass)
void LLDrawPoolTree::beginShadowPass(S32 pass)
{
LLFastTimer t(FTM_SHADOW_TREE);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
+
glPolygonOffset(gSavedSettings.getF32("RenderDeferredTreeShadowOffset"),
gSavedSettings.getF32("RenderDeferredTreeShadowBias"));
- gDeferredShadowProgram.bind();
+ gDeferredShadowAlphaMaskProgram.bind();
+ gDeferredShadowAlphaMaskProgram.setAlphaRange(0.5f, 1.f);
}
void LLDrawPoolTree::renderShadow(S32 pass)
@@ -175,12 +180,9 @@ void LLDrawPoolTree::renderShadow(S32 pass)
void LLDrawPoolTree::endShadowPass(S32 pass)
{
LLFastTimer t(FTM_SHADOW_TREE);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
glPolygonOffset(gSavedSettings.getF32("RenderDeferredSpotShadowOffset"),
gSavedSettings.getF32("RenderDeferredSpotShadowBias"));
-
- //gDeferredShadowProgram.unbind();
}
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index dc94924da4..31c14361b5 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -108,7 +108,7 @@ void LLDrawPoolWater::prerender()
// got rid of modulation by light color since it got a little too
// green at sunset and sl-57047 (underwater turns black at 8:00)
- sWaterFogColor = LLWaterParamManager::instance()->getFogColor();
+ sWaterFogColor = LLWaterParamManager::instance().getFogColor();
sWaterFogColor.mV[3] = 0;
}
@@ -527,7 +527,7 @@ void LLDrawPoolWater::shade()
//bind normal map
S32 bumpTex = shader->enableTexture(LLViewerShaderMgr::BUMP_MAP);
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
+ LLWaterParamManager * param_mgr = &LLWaterParamManager::instance();
// change mWaterNormp if needed
if (mWaterNormp->getID() != param_mgr->getNormalMapID())
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
index 409b18d522..79a835fd14 100644
--- a/indra/newview/lldrawpoolwlsky.cpp
+++ b/indra/newview/lldrawpoolwlsky.cpp
@@ -34,6 +34,8 @@
#include "llviewercamera.h"
#include "llimage.h"
#include "llwlparammanager.h"
+#include "llviewershadermgr.h"
+#include "llglslshader.h"
#include "llsky.h"
#include "llvowlsky.h"
#include "llviewerregion.h"
@@ -60,15 +62,26 @@ LLDrawPoolWLSky::LLDrawPoolWLSky(void) :
llerrs << "Error: Failed to load cloud noise image " << cloudNoiseFilename << llendl;
}
- cloudNoiseFile->load(cloudNoiseFilename);
-
- sCloudNoiseRawImage = new LLImageRaw();
+ if(cloudNoiseFile->load(cloudNoiseFilename))
+ {
+ sCloudNoiseRawImage = new LLImageRaw();
- cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f);
+ if(cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f))
+ {
+ //debug use
+ lldebugs << "cloud noise raw image width: " << sCloudNoiseRawImage->getWidth() << " : height: " << sCloudNoiseRawImage->getHeight() << " : components: " <<
+ (S32)sCloudNoiseRawImage->getComponents() << " : data size: " << sCloudNoiseRawImage->getDataSize() << llendl ;
+ llassert_always(sCloudNoiseRawImage->getData()) ;
- sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ }
+ else
+ {
+ sCloudNoiseRawImage = NULL ;
+ }
+ }
- LLWLParamManager::instance()->propagateParameters();
+ LLWLParamManager::getInstance()->propagateParameters();
}
LLDrawPoolWLSky::~LLDrawPoolWLSky()
@@ -178,7 +191,7 @@ void LLDrawPoolWLSky::renderStars(void) const
// clamping and allow the star_alpha param to brighten the stars.
bool error;
LLColor4 star_alpha(LLColor4::black);
- star_alpha.mV[3] = LLWLParamManager::instance()->mCurParams.getFloat("star_brightness", error) / 2.f;
+ star_alpha.mV[3] = LLWLParamManager::getInstance()->mCurParams.getFloat("star_brightness", error) / 2.f;
llassert_always(!error);
gGL.getTexUnit(0)->bind(gSky.mVOSkyp->getBloomTex());
@@ -187,26 +200,40 @@ void LLDrawPoolWLSky::renderStars(void) const
glRotatef(gFrameTimeSeconds*0.01f, 0.f, 0.f, 1.f);
// gl_FragColor.rgb = gl_Color.rgb;
// gl_FragColor.a = gl_Color.a * star_alpha.a;
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
- gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_CONST_ALPHA, LLTexUnit::TBS_TEX_ALPHA);
- glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gCustomAlphaProgram.bind();
+ gCustomAlphaProgram.uniform1f("custom_alpha", star_alpha.mV[3]);
+ }
+ else
+ {
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
+ gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_CONST_ALPHA, LLTexUnit::TBS_TEX_ALPHA);
+ glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
+ }
gSky.mVOWLSkyp->drawStars();
gGL.popMatrix();
-
- // and disable the combiner states
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gCustomAlphaProgram.unbind();
+ }
+ else
+ {
+ // and disable the combiner states
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
}
void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
{
- if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS))
+ if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && sCloudNoiseTexture.notNull())
{
LLGLEnable blend(GL_BLEND);
gGL.setSceneBlendType(LLRender::BT_ALPHA);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
-
+
gGL.getTexUnit(0)->bind(sCloudNoiseTexture);
cloud_shader->bind();
@@ -240,6 +267,10 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
if (gSky.mVOSkyp->getMoon().getDraw() && face->getGeomCount())
{
+ if (gPipeline.canUseVertexShaders())
+ {
+ gUIProgram.bind();
+ }
// *NOTE: even though we already bound this texture above for the
// stars register combiners, we bind again here for defensive reasons,
// since LLImageGL::bind detects that it's a noop, and optimizes it out.
@@ -255,6 +286,11 @@ void LLDrawPoolWLSky::renderHeavenlyBodies()
LLFacePool::LLOverrideFaceColor color_override(this, color);
face->renderIndexed();
+
+ if (gPipeline.canUseVertexShaders())
+ {
+ gUIProgram.unbind();
+ }
}
}
@@ -266,7 +302,7 @@ void LLDrawPoolWLSky::renderDeferred(S32 pass)
}
LLFastTimer ftm(FTM_RENDER_WL_SKY);
- const F32 camHeightLocal = LLWLParamManager::instance()->getDomeOffset() * LLWLParamManager::instance()->getDomeRadius();
+ const F32 camHeightLocal = LLWLParamManager::getInstance()->getDomeOffset() * LLWLParamManager::getInstance()->getDomeRadius();
LLGLSNoFog disableFog;
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
@@ -313,7 +349,7 @@ void LLDrawPoolWLSky::render(S32 pass)
}
LLFastTimer ftm(FTM_RENDER_WL_SKY);
- const F32 camHeightLocal = LLWLParamManager::instance()->getDomeOffset() * LLWLParamManager::instance()->getDomeRadius();
+ const F32 camHeightLocal = LLWLParamManager::getInstance()->getDomeOffset() * LLWLParamManager::getInstance()->getDomeRadius();
LLGLSNoFog disableFog;
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
@@ -373,5 +409,8 @@ void LLDrawPoolWLSky::cleanupGL()
//static
void LLDrawPoolWLSky::restoreGL()
{
- sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ if(sCloudNoiseRawImage.notNull())
+ {
+ sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE);
+ }
}
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index f781d5f3ff..fb9958ee9d 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -40,6 +40,7 @@
#include "llvertexbuffer.h"
#include "llviewerdisplay.h"
#include "llrender.h"
+#include "pipeline.h"
// static
LLViewerDynamicTexture::instance_list_t LLViewerDynamicTexture::sInstances[ LLViewerDynamicTexture::ORDER_COUNT ];
@@ -201,7 +202,7 @@ void LLViewerDynamicTexture::postRender(BOOL success)
BOOL LLViewerDynamicTexture::updateAllInstances()
{
sNumRenders = 0;
- if (gGLManager.mIsDisabled)
+ if (gGLManager.mIsDisabled || LLPipeline::sMemAllocationThrottled)
{
return TRUE;
}
diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
new file mode 100644
index 0000000000..86fe6754dc
--- /dev/null
+++ b/indra/newview/llenvmanager.cpp
@@ -0,0 +1,678 @@
+/**
+ * @file llenvmanager.cpp
+ * @brief Implementation of classes managing WindLight and water settings.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llenvmanager.h"
+
+#include "llagent.h"
+#include "lldaycyclemanager.h"
+#include "llviewercontrol.h" // for gSavedSettings
+#include "llviewerregion.h"
+#include "llwaterparammanager.h"
+#include "llwlhandlers.h"
+#include "llwlparammanager.h"
+
+std::string LLEnvPrefs::getWaterPresetName() const
+{
+ if (mWaterPresetName.empty())
+ {
+ llwarns << "Water preset name is empty" << llendl;
+ }
+
+ return mWaterPresetName;
+}
+
+std::string LLEnvPrefs::getSkyPresetName() const
+{
+ if (mSkyPresetName.empty())
+ {
+ llwarns << "Sky preset name is empty" << llendl;
+ }
+
+ return mSkyPresetName;
+}
+
+std::string LLEnvPrefs::getDayCycleName() const
+{
+ if (mDayCycleName.empty())
+ {
+ llwarns << "Day cycle name is empty" << llendl;
+ }
+
+ return mDayCycleName;
+}
+
+void LLEnvPrefs::setUseRegionSettings(bool val)
+{
+ mUseRegionSettings = val;
+}
+
+void LLEnvPrefs::setUseWaterPreset(const std::string& name)
+{
+ mUseRegionSettings = false;
+ mWaterPresetName = name;
+}
+
+void LLEnvPrefs::setUseSkyPreset(const std::string& name)
+{
+ mUseRegionSettings = false;
+ mUseDayCycle = false;
+ mSkyPresetName = name;
+}
+
+void LLEnvPrefs::setUseDayCycle(const std::string& name)
+{
+ mUseRegionSettings = false;
+ mUseDayCycle = true;
+ mDayCycleName = name;
+}
+
+//=============================================================================
+LLEnvManagerNew::LLEnvManagerNew()
+{
+ mInterpNextChangeMessage = true;
+
+ // Set default environment settings.
+ mUserPrefs.mUseRegionSettings = true;
+ mUserPrefs.mUseDayCycle = true;
+ mUserPrefs.mWaterPresetName = "Default";
+ mUserPrefs.mSkyPresetName = "Default";
+ mUserPrefs.mDayCycleName = "Default";
+}
+
+bool LLEnvManagerNew::getUseRegionSettings() const
+{
+ return mUserPrefs.getUseRegionSettings();
+}
+
+bool LLEnvManagerNew::getUseDayCycle() const
+{
+ return mUserPrefs.getUseDayCycle();
+}
+
+bool LLEnvManagerNew::getUseFixedSky() const
+{
+ return mUserPrefs.getUseFixedSky();
+}
+
+std::string LLEnvManagerNew::getWaterPresetName() const
+{
+ return mUserPrefs.getWaterPresetName();
+}
+
+std::string LLEnvManagerNew::getSkyPresetName() const
+{
+ return mUserPrefs.getSkyPresetName();
+}
+
+std::string LLEnvManagerNew::getDayCycleName() const
+{
+ return mUserPrefs.getDayCycleName();
+}
+
+const LLEnvironmentSettings& LLEnvManagerNew::getRegionSettings() const
+{
+ return !mNewRegionPrefs.isEmpty() ? mNewRegionPrefs : mCachedRegionPrefs;
+}
+
+void LLEnvManagerNew::setRegionSettings(const LLEnvironmentSettings& new_settings)
+{
+ // Set region settings override that will be used locally
+ // until user either uploads the changes or goes to another region.
+ mNewRegionPrefs = new_settings;
+}
+
+bool LLEnvManagerNew::usePrefs()
+{
+ LL_DEBUGS("Windlight") << "Displaying preferred environment" << LL_ENDL;
+ updateManagersFromPrefs(false);
+ return true;
+}
+
+bool LLEnvManagerNew::useDefaults()
+{
+ bool rslt;
+
+ rslt = useDefaultWater();
+ rslt &= useDefaultSky();
+
+ return rslt;
+}
+
+bool LLEnvManagerNew::useRegionSettings()
+{
+ bool rslt;
+
+ rslt = useRegionSky();
+ rslt &= useRegionWater();
+
+ return rslt;
+}
+
+bool LLEnvManagerNew::useWaterPreset(const std::string& name)
+{
+ LL_DEBUGS("Windlight") << "Displaying water preset " << name << LL_ENDL;
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ bool rslt = water_mgr.getParamSet(name, water_mgr.mCurParams);
+ llassert(rslt == true);
+ return rslt;
+}
+
+bool LLEnvManagerNew::useWaterParams(const LLSD& params)
+{
+ LL_DEBUGS("Windlight") << "Displaying water params" << LL_ENDL;
+ LLWaterParamManager::instance().mCurParams.setAll(params);
+ return true;
+}
+
+bool LLEnvManagerNew::useSkyPreset(const std::string& name)
+{
+ LLWLParamManager& sky_mgr = LLWLParamManager::instance();
+ LLWLParamSet param_set;
+
+ if (!sky_mgr.getParamSet(LLWLParamKey(name, LLEnvKey::SCOPE_LOCAL), param_set))
+ {
+ llwarns << "No sky preset named " << name << llendl;
+ return false;
+ }
+
+ LL_DEBUGS("Windlight") << "Displaying sky preset " << name << LL_ENDL;
+ sky_mgr.applySkyParams(param_set.getAll());
+ return true;
+}
+
+bool LLEnvManagerNew::useSkyParams(const LLSD& params)
+{
+ LL_DEBUGS("Windlight") << "Displaying sky params" << LL_ENDL;
+ LLWLParamManager::instance().applySkyParams(params);
+ return true;
+}
+
+bool LLEnvManagerNew::useDayCycle(const std::string& name, LLEnvKey::EScope scope)
+{
+ LLSD params;
+
+ if (scope == LLEnvKey::SCOPE_REGION)
+ {
+ LL_DEBUGS("Windlight") << "Displaying region day cycle " << name << LL_ENDL;
+ params = getRegionSettings().getWLDayCycle();
+ }
+ else
+ {
+ LL_DEBUGS("Windlight") << "Displaying local day cycle " << name << LL_ENDL;
+
+ if (!LLDayCycleManager::instance().getPreset(name, params))
+ {
+ llwarns << "No day cycle named " << name << llendl;
+ return false;
+ }
+ }
+
+ bool rslt = LLWLParamManager::instance().applyDayCycleParams(params, scope);
+ llassert(rslt == true);
+ return rslt;
+}
+
+bool LLEnvManagerNew::useDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time /* = 0.5*/)
+{
+ LL_DEBUGS("Windlight") << "Displaying day cycle params" << LL_ENDL;
+ return LLWLParamManager::instance().applyDayCycleParams(params, scope);
+}
+
+void LLEnvManagerNew::setUseRegionSettings(bool val)
+{
+ mUserPrefs.setUseRegionSettings(val);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::setUseWaterPreset(const std::string& name)
+{
+ // *TODO: make sure the preset exists.
+ if (name.empty())
+ {
+ llwarns << "Empty water preset name passed" << llendl;
+ return;
+ }
+
+ mUserPrefs.setUseWaterPreset(name);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::setUseSkyPreset(const std::string& name)
+{
+ // *TODO: make sure the preset exists.
+ if (name.empty())
+ {
+ llwarns << "Empty sky preset name passed" << llendl;
+ return;
+ }
+
+ mUserPrefs.setUseSkyPreset(name);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::setUseDayCycle(const std::string& name)
+{
+ if (!LLDayCycleManager::instance().presetExists(name))
+ {
+ llwarns << "Invalid day cycle name passed" << llendl;
+ return;
+ }
+
+ mUserPrefs.setUseDayCycle(name);
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::loadUserPrefs()
+{
+ // operate on members directly to avoid side effects
+ mUserPrefs.mWaterPresetName = gSavedSettings.getString("WaterPresetName");
+ mUserPrefs.mSkyPresetName = gSavedSettings.getString("SkyPresetName");
+ mUserPrefs.mDayCycleName = gSavedSettings.getString("DayCycleName");
+
+ mUserPrefs.mUseRegionSettings = gSavedSettings.getBOOL("UseEnvironmentFromRegion");
+ mUserPrefs.mUseDayCycle = gSavedSettings.getBOOL("UseDayCycle");
+}
+
+void LLEnvManagerNew::saveUserPrefs()
+{
+ gSavedSettings.setString("WaterPresetName", getWaterPresetName());
+ gSavedSettings.setString("SkyPresetName", getSkyPresetName());
+ gSavedSettings.setString("DayCycleName", getDayCycleName());
+
+ gSavedSettings.setBOOL("UseEnvironmentFromRegion", getUseRegionSettings());
+ gSavedSettings.setBOOL("UseDayCycle", getUseDayCycle());
+
+ mUsePrefsChangeSignal();
+}
+
+void LLEnvManagerNew::setUserPrefs(
+ const std::string& water_preset,
+ const std::string& sky_preset,
+ const std::string& day_cycle_preset,
+ bool use_fixed_sky,
+ bool use_region_settings)
+{
+ // operate on members directly to avoid side effects
+ mUserPrefs.mWaterPresetName = water_preset;
+ mUserPrefs.mSkyPresetName = sky_preset;
+ mUserPrefs.mDayCycleName = day_cycle_preset;
+
+ mUserPrefs.mUseRegionSettings = use_region_settings;
+ mUserPrefs.mUseDayCycle = !use_fixed_sky;
+
+ saveUserPrefs();
+ updateManagersFromPrefs(false);
+}
+
+void LLEnvManagerNew::dumpUserPrefs()
+{
+ LL_DEBUGS("Windlight") << "WaterPresetName: " << gSavedSettings.getString("WaterPresetName") << LL_ENDL;
+ LL_DEBUGS("Windlight") << "SkyPresetName: " << gSavedSettings.getString("SkyPresetName") << LL_ENDL;
+ LL_DEBUGS("Windlight") << "DayCycleName: " << gSavedSettings.getString("DayCycleName") << LL_ENDL;
+
+ LL_DEBUGS("Windlight") << "UseEnvironmentFromRegion: " << gSavedSettings.getBOOL("UseEnvironmentFromRegion") << LL_ENDL;
+ LL_DEBUGS("Windlight") << "UseDayCycle: " << gSavedSettings.getBOOL("UseDayCycle") << LL_ENDL;
+}
+
+void LLEnvManagerNew::dumpPresets()
+{
+ const LLEnvironmentSettings& region_settings = getRegionSettings();
+ std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : "Unknown region";
+
+ // Dump water presets.
+ LL_DEBUGS("Windlight") << "Waters:" << LL_ENDL;
+ if (region_settings.getWaterParams().size() != 0)
+ {
+ LL_DEBUGS("Windlight") << " - " << region_name << LL_ENDL;
+ }
+ LLWaterParamManager::preset_name_list_t water_presets;
+ LLWaterParamManager::instance().getPresetNames(water_presets);
+ for (LLWaterParamManager::preset_name_list_t::const_iterator it = water_presets.begin(); it != water_presets.end(); ++it)
+ {
+ LL_DEBUGS("Windlight") << " - " << *it << LL_ENDL;
+ }
+
+ // Dump sky presets.
+ LL_DEBUGS("Windlight") << "Skies:" << LL_ENDL;
+ LLWLParamManager::preset_key_list_t sky_preset_keys;
+ LLWLParamManager::instance().getPresetKeys(sky_preset_keys);
+ for (LLWLParamManager::preset_key_list_t::const_iterator it = sky_preset_keys.begin(); it != sky_preset_keys.end(); ++it)
+ {
+ std::string preset_name = it->name;
+ std::string item_title;
+
+ if (it->scope == LLEnvKey::SCOPE_LOCAL) // local preset
+ {
+ item_title = preset_name;
+ }
+ else // region preset
+ {
+ item_title = preset_name + " (" + region_name + ")";
+ }
+ LL_DEBUGS("Windlight") << " - " << item_title << LL_ENDL;
+ }
+
+ // Dump day cycles.
+ LL_DEBUGS("Windlight") << "Days:" << LL_ENDL;
+ const LLSD& cur_region_dc = region_settings.getWLDayCycle();
+ if (cur_region_dc.size() != 0)
+ {
+ LL_DEBUGS("Windlight") << " - " << region_name << LL_ENDL;
+ }
+ LLDayCycleManager::preset_name_list_t days;
+ LLDayCycleManager::instance().getPresetNames(days);
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = days.begin(); it != days.end(); ++it)
+ {
+ LL_DEBUGS("Windlight") << " - " << *it << LL_ENDL;
+ }
+}
+
+void LLEnvManagerNew::requestRegionSettings()
+{
+ LLEnvironmentRequest::initiate();
+}
+
+bool LLEnvManagerNew::sendRegionSettings(const LLEnvironmentSettings& new_settings)
+{
+ LLSD metadata;
+
+ metadata["regionID"] = gAgent.getRegion()->getRegionID();
+ // add last received update ID to outbound message so simulator can handle concurrent updates
+ metadata["messageID"] = mLastReceivedID;
+
+ return LLEnvironmentApply::initiateRequest(new_settings.makePacket(metadata));
+}
+
+boost::signals2::connection LLEnvManagerNew::setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb)
+{
+ return mUsePrefsChangeSignal.connect(cb);
+}
+
+boost::signals2::connection LLEnvManagerNew::setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb)
+{
+ return mRegionSettingsChangeSignal.connect(cb);
+}
+
+boost::signals2::connection LLEnvManagerNew::setRegionChangeCallback(const region_change_signal_t::slot_type& cb)
+{
+ return mRegionChangeSignal.connect(cb);
+}
+
+boost::signals2::connection LLEnvManagerNew::setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb)
+{
+ return mRegionSettingsAppliedSignal.connect(cb);
+}
+
+// static
+bool LLEnvManagerNew::canEditRegionSettings()
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ BOOL owner_or_god = gAgent.isGodlike() || (region && region->getOwner() == gAgent.getID());
+ BOOL owner_or_god_or_manager = owner_or_god || (region && region->isEstateManager());
+
+ LL_DEBUGS("Windlight") << "Can edit region settings: " << (bool) owner_or_god_or_manager << LL_ENDL;
+ return owner_or_god_or_manager;
+}
+
+// static
+const std::string LLEnvManagerNew::getScopeString(LLEnvKey::EScope scope)
+{
+ switch(scope)
+ {
+ case LLEnvKey::SCOPE_LOCAL:
+ return LLTrans::getString("LocalSettings");
+ case LLEnvKey::SCOPE_REGION:
+ return LLTrans::getString("RegionSettings");
+ default:
+ return " (?)";
+ }
+}
+
+void LLEnvManagerNew::onRegionCrossing()
+{
+ LL_DEBUGS("Windlight") << "Crossed region" << LL_ENDL;
+ onRegionChange(true);
+}
+
+void LLEnvManagerNew::onTeleport()
+{
+ LL_DEBUGS("Windlight") << "Teleported" << LL_ENDL;
+ onRegionChange(false);
+}
+
+void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
+{
+ // If the message was valid, grab the UUID from it and save it for next outbound update message.
+ mLastReceivedID = content[0]["messageID"].asUUID();
+
+ // Refresh cached region settings.
+ LL_DEBUGS("Windlight") << "Caching region environment settings: " << content << LL_ENDL;
+ F32 sun_hour = 0; // *TODO
+ LLEnvironmentSettings new_settings(content[1], content[2], content[3], sun_hour);
+ mCachedRegionPrefs = new_settings;
+
+ // Load region sky presets.
+ LLWLParamManager::instance().refreshRegionPresets();
+
+ // If using server settings, update managers.
+ if (getUseRegionSettings())
+ {
+ updateManagersFromPrefs(mInterpNextChangeMessage);
+ }
+
+ // Let interested parties know about the region settings update.
+ mRegionSettingsChangeSignal();
+
+ // reset
+ mInterpNextChangeMessage = false;
+}
+
+void LLEnvManagerNew::onRegionSettingsApplyResponse(bool ok)
+{
+ LL_DEBUGS("Windlight") << "Applying region settings " << (ok ? "succeeded" : "failed") << LL_ENDL;
+
+ // Clear locally modified region settings because they have just been uploaded.
+ mNewRegionPrefs.clear();
+
+ mRegionSettingsAppliedSignal(ok);
+}
+
+//-- private methods ----------------------------------------------------------
+
+// virtual
+void LLEnvManagerNew::initSingleton()
+{
+ LL_DEBUGS("Windlight") << "Initializing LLEnvManagerNew" << LL_ENDL;
+
+ loadUserPrefs();
+}
+
+void LLEnvManagerNew::updateSkyFromPrefs()
+{
+ bool success = true;
+
+ // Sync sky with user prefs.
+ if (getUseRegionSettings()) // apply region-wide settings
+ {
+ success = useRegionSky();
+ }
+ else // apply user-specified settings
+ {
+ if (getUseDayCycle())
+ {
+ success = useDayCycle(getDayCycleName(), LLEnvKey::SCOPE_LOCAL);
+ }
+ else
+ {
+ success = useSkyPreset(getSkyPresetName());
+ }
+ }
+
+ // If something went wrong, fall back to defaults.
+ if (!success)
+ {
+ // *TODO: fix user prefs
+ useDefaultSky();
+ }
+}
+
+void LLEnvManagerNew::updateWaterFromPrefs(bool interpolate)
+{
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ LLSD target_water_params;
+
+ // Determine new water settings based on user prefs.
+
+ {
+ // Fall back to default water.
+ LLWaterParamSet default_water;
+ water_mgr.getParamSet("Default", default_water);
+ target_water_params = default_water.getAll();
+ }
+
+ if (getUseRegionSettings())
+ {
+ // *TODO: make sure whether region settings belong to the current region?
+ const LLSD& region_water_params = getRegionSettings().getWaterParams();
+ if (region_water_params.size() != 0) // region has no water settings
+ {
+ LL_DEBUGS("Windlight") << "Applying region water" << LL_ENDL;
+ target_water_params = region_water_params;
+ }
+ else
+ {
+ LL_DEBUGS("Windlight") << "Applying default water" << LL_ENDL;
+ }
+ }
+ else
+ {
+ std::string water = getWaterPresetName();
+ LL_DEBUGS("Windlight") << "Applying water preset [" << water << "]" << LL_ENDL;
+ LLWaterParamSet params;
+ if (!water_mgr.getParamSet(water, params))
+ {
+ llwarns << "No water preset named " << water << ", falling back to defaults" << llendl;
+ water_mgr.getParamSet("Default", params);
+
+ // *TODO: Fix user preferences accordingly.
+ }
+ target_water_params = params.getAll();
+ }
+
+ // Sync water with user prefs.
+ water_mgr.applyParams(target_water_params, interpolate);
+}
+
+void LLEnvManagerNew::updateManagersFromPrefs(bool interpolate)
+{
+ // Apply water settings.
+ updateWaterFromPrefs(interpolate);
+
+ // Apply sky settings.
+ updateSkyFromPrefs();
+}
+
+bool LLEnvManagerNew::useRegionSky()
+{
+ const LLEnvironmentSettings& region_settings = getRegionSettings();
+
+ // If region is set to defaults,
+ if (region_settings.getSkyMap().size() == 0)
+ {
+ // well... apply the default sky settings.
+ useDefaultSky();
+ return true;
+ }
+
+ // *TODO: Support fixed sky from region.
+
+ // Otherwise apply region day cycle.
+ LL_DEBUGS("Windlight") << "Applying region sky" << LL_ENDL;
+ return useDayCycleParams(
+ region_settings.getWLDayCycle(),
+ LLEnvKey::SCOPE_REGION,
+ region_settings.getDayTime());
+}
+
+bool LLEnvManagerNew::useRegionWater()
+{
+ const LLEnvironmentSettings& region_settings = getRegionSettings();
+ const LLSD& region_water = region_settings.getWaterParams();
+
+ // If region is set to defaults,
+ if (region_water.size() == 0)
+ {
+ // well... apply the default water settings.
+ return useDefaultWater();
+ }
+
+ // Otherwise apply region water.
+ LL_DEBUGS("Windlight") << "Applying region sky" << LL_ENDL;
+ return useWaterParams(region_water);
+}
+
+bool LLEnvManagerNew::useDefaultSky()
+{
+ return useDayCycle("Default", LLEnvKey::SCOPE_LOCAL);
+}
+
+bool LLEnvManagerNew::useDefaultWater()
+{
+ return useWaterPreset("Default");
+}
+
+
+void LLEnvManagerNew::onRegionChange(bool interpolate)
+{
+ // Avoid duplicating region setting requests
+ // by checking whether the region is actually changing.
+ LLViewerRegion* regionp = gAgent.getRegion();
+ LLUUID region_uuid = regionp ? regionp->getRegionID() : LLUUID::null;
+ if (region_uuid == mCurRegionUUID)
+ {
+ return;
+ }
+
+ // Clear locally modified region settings.
+ mNewRegionPrefs.clear();
+
+ // *TODO: clear environment settings of the previous region?
+
+ // Request environment settings of the new region.
+ LL_DEBUGS("Windlight") << "New viewer region: " << region_uuid << LL_ENDL;
+ mCurRegionUUID = region_uuid;
+ mInterpNextChangeMessage = interpolate;
+ requestRegionSettings();
+
+ // Let interested parties know agent region has been changed.
+ mRegionChangeSignal();
+}
diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h
new file mode 100644
index 0000000000..ad56761bc7
--- /dev/null
+++ b/indra/newview/llenvmanager.h
@@ -0,0 +1,277 @@
+/**
+ * @file llenvmanager.h
+ * @brief Declaration of classes managing WindLight and water settings.
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLENVMANAGER_H
+#define LL_LLENVMANAGER_H
+
+#include "llmemory.h"
+#include "llsd.h"
+
+class LLWLParamManager;
+class LLWaterParamManager;
+class LLWLAnimator;
+
+// generic key
+struct LLEnvKey
+{
+public:
+ // Note: enum ordering is important; for example, a region-level floater (1) will see local and region (all values that are <=)
+ typedef enum e_scope
+ {
+ SCOPE_LOCAL, // 0
+ SCOPE_REGION//, // 1
+ // SCOPE_ESTATE, // 2
+ // etc.
+ } EScope;
+};
+
+class LLEnvironmentSettings
+{
+public:
+ LLEnvironmentSettings() :
+ mWLDayCycle(LLSD::emptyMap()),
+ mSkyMap(LLSD::emptyMap()),
+ mWaterParams(LLSD::emptyMap()),
+ mDayTime(0.f)
+ {}
+ LLEnvironmentSettings(const LLSD& dayCycle, const LLSD& skyMap, const LLSD& waterParams, F64 dayTime) :
+ mWLDayCycle(dayCycle),
+ mSkyMap(skyMap),
+ mWaterParams(waterParams),
+ mDayTime(dayTime)
+ {}
+ ~LLEnvironmentSettings() {}
+
+ void saveParams(const LLSD& dayCycle, const LLSD& skyMap, const LLSD& waterParams, F64 dayTime)
+ {
+ mWLDayCycle = dayCycle;
+ mSkyMap = skyMap;
+ mWaterParams = waterParams;
+ mDayTime = dayTime;
+ }
+
+ const LLSD& getWLDayCycle() const
+ {
+ return mWLDayCycle;
+ }
+
+ const LLSD& getWaterParams() const
+ {
+ return mWaterParams;
+ }
+
+ const LLSD& getSkyMap() const
+ {
+ return mSkyMap;
+ }
+
+ F64 getDayTime() const
+ {
+ return mDayTime;
+ }
+
+ bool isEmpty() const
+ {
+ return mWLDayCycle.size() == 0;
+ }
+
+ void clear()
+ {
+ *this = LLEnvironmentSettings();
+ }
+
+ LLSD makePacket(const LLSD& metadata) const
+ {
+ LLSD full_packet = LLSD::emptyArray();
+
+ // 0: metadata
+ full_packet.append(metadata);
+
+ // 1: day cycle
+ full_packet.append(mWLDayCycle);
+
+ // 2: map of sky setting names to sky settings (as LLSD)
+ full_packet.append(mSkyMap);
+
+ // 3: water params
+ full_packet.append(mWaterParams);
+
+ return full_packet;
+ }
+
+private:
+ LLSD mWLDayCycle, mWaterParams, mSkyMap;
+ F64 mDayTime;
+};
+
+/**
+ * User environment preferences.
+ */
+class LLEnvPrefs
+{
+public:
+ LLEnvPrefs() : mUseRegionSettings(true), mUseDayCycle(true) {}
+
+ bool getUseRegionSettings() const { return mUseRegionSettings; }
+ bool getUseDayCycle() const { return mUseDayCycle; }
+ bool getUseFixedSky() const { return !getUseDayCycle(); }
+
+ std::string getWaterPresetName() const;
+ std::string getSkyPresetName() const;
+ std::string getDayCycleName() const;
+
+ void setUseRegionSettings(bool val);
+ void setUseWaterPreset(const std::string& name);
+ void setUseSkyPreset(const std::string& name);
+ void setUseDayCycle(const std::string& name);
+
+ bool mUseRegionSettings;
+ bool mUseDayCycle;
+ std::string mWaterPresetName;
+ std::string mSkyPresetName;
+ std::string mDayCycleName;
+};
+
+/**
+ * Setting:
+ * 1. Use region settings.
+ * 2. Use my setting: <water preset> + <fixed_sky>|<day_cycle>
+ */
+class LLEnvManagerNew : public LLSingleton<LLEnvManagerNew>
+{
+ LOG_CLASS(LLEnvManagerNew);
+public:
+ typedef boost::signals2::signal<void()> prefs_change_signal_t;
+ typedef boost::signals2::signal<void()> region_settings_change_signal_t;
+ typedef boost::signals2::signal<void()> region_change_signal_t;
+ typedef boost::signals2::signal<void(bool)> region_settings_applied_signal_t;
+
+ LLEnvManagerNew();
+
+ // getters to access user env. preferences
+ bool getUseRegionSettings() const;
+ bool getUseDayCycle() const;
+ bool getUseFixedSky() const;
+ std::string getWaterPresetName() const;
+ std::string getSkyPresetName() const;
+ std::string getDayCycleName() const;
+
+ /// @return cached env. settings of the current region.
+ const LLEnvironmentSettings& getRegionSettings() const;
+
+ /**
+ * Set new region settings without uploading them to the region.
+ *
+ * The override will be reset when the changes are applied to the region (=uploaded)
+ * or user teleports to another region.
+ */
+ void setRegionSettings(const LLEnvironmentSettings& new_settings);
+
+ // Change environment w/o changing user preferences.
+ bool usePrefs();
+ bool useDefaults();
+ bool useRegionSettings();
+ bool useWaterPreset(const std::string& name);
+ bool useWaterParams(const LLSD& params);
+ bool useSkyPreset(const std::string& name);
+ bool useSkyParams(const LLSD& params);
+ bool useDayCycle(const std::string& name, LLEnvKey::EScope scope);
+ bool useDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time = 0.5);
+
+ // setters for user env. preferences
+ void setUseRegionSettings(bool val);
+ void setUseWaterPreset(const std::string& name);
+ void setUseSkyPreset(const std::string& name);
+ void setUseDayCycle(const std::string& name);
+ void setUserPrefs(
+ const std::string& water_preset,
+ const std::string& sky_preset,
+ const std::string& day_cycle_preset,
+ bool use_fixed_sky,
+ bool use_region_settings);
+
+ // debugging methods
+ void dumpUserPrefs();
+ void dumpPresets();
+
+ // Misc.
+ void requestRegionSettings();
+ bool sendRegionSettings(const LLEnvironmentSettings& new_settings);
+ boost::signals2::connection setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb);
+ boost::signals2::connection setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb);
+ boost::signals2::connection setRegionChangeCallback(const region_change_signal_t::slot_type& cb);
+ boost::signals2::connection setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb);
+
+ static bool canEditRegionSettings(); /// @return true if we have access to editing region environment
+ static const std::string getScopeString(LLEnvKey::EScope scope);
+
+ // Public callbacks.
+ void onRegionCrossing();
+ void onTeleport();
+ void onRegionSettingsResponse(const LLSD& content);
+ void onRegionSettingsApplyResponse(bool ok);
+
+private:
+ friend class LLSingleton<LLEnvManagerNew>;
+ /*virtual*/ void initSingleton();
+
+ void loadUserPrefs();
+ void saveUserPrefs();
+
+ void updateSkyFromPrefs();
+ void updateWaterFromPrefs(bool interpolate);
+ void updateManagersFromPrefs(bool interpolate);
+
+ bool useRegionSky();
+ bool useRegionWater();
+
+ bool useDefaultSky();
+ bool useDefaultWater();
+
+ void onRegionChange(bool interpolate);
+
+ /// Emitted when user environment preferences change.
+ prefs_change_signal_t mUsePrefsChangeSignal;
+
+ /// Emitted when region environment settings update comes.
+ region_settings_change_signal_t mRegionSettingsChangeSignal;
+
+ /// Emitted when agent region changes. Move to LLAgent?
+ region_change_signal_t mRegionChangeSignal;
+
+ /// Emitted when agent region changes. Move to LLAgent?
+ region_settings_applied_signal_t mRegionSettingsAppliedSignal;
+
+ LLEnvPrefs mUserPrefs; /// User environment preferences.
+ LLEnvironmentSettings mCachedRegionPrefs; /// Cached region environment settings.
+ LLEnvironmentSettings mNewRegionPrefs; /// Not-yet-uploaded modified region env. settings.
+ bool mInterpNextChangeMessage; /// Interpolate env. settings on next region change.
+ LLUUID mCurRegionUUID; /// To avoid duplicated region env. settings requests.
+ LLUUID mLastReceivedID; /// Id of last received region env. settings.
+};
+
+#endif // LL_LLENVMANAGER_H
+
diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp
new file mode 100644
index 0000000000..7ed22d68f6
--- /dev/null
+++ b/indra/newview/llestateinfomodel.cpp
@@ -0,0 +1,230 @@
+/**
+ * @file llestateinfomodel.cpp
+ * @brief Estate info model
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llestateinfomodel.h"
+
+// libs
+#include "llhttpclient.h"
+#include "llregionflags.h"
+#include "message.h"
+
+// viewer
+#include "llagent.h"
+#include "llfloaterregioninfo.h" // for invoice id
+#include "llviewerregion.h"
+
+LLEstateInfoModel::LLEstateInfoModel()
+: mID(0)
+, mFlags(0)
+, mSunHour(0)
+{
+}
+
+boost::signals2::connection LLEstateInfoModel::setUpdateCallback(const update_signal_t::slot_type& cb)
+{
+ return mUpdateSignal.connect(cb);
+}
+
+boost::signals2::connection LLEstateInfoModel::setCommitCallback(const update_signal_t::slot_type& cb)
+{
+ return mCommitSignal.connect(cb);
+}
+
+void LLEstateInfoModel::sendEstateInfo()
+{
+ if (!commitEstateInfoCaps())
+ {
+ // the caps method failed, try the old way
+ LLFloaterRegionInfo::nextInvoice();
+ commitEstateInfoDataserver();
+ }
+}
+
+bool LLEstateInfoModel::getUseFixedSun() const { return mFlags & REGION_FLAGS_SUN_FIXED; }
+bool LLEstateInfoModel::getIsExternallyVisible() const { return mFlags & REGION_FLAGS_EXTERNALLY_VISIBLE; }
+bool LLEstateInfoModel::getAllowDirectTeleport() const { return mFlags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT; }
+bool LLEstateInfoModel::getDenyAnonymous() const { return mFlags & REGION_FLAGS_DENY_ANONYMOUS; }
+bool LLEstateInfoModel::getDenyAgeUnverified() const { return mFlags & REGION_FLAGS_DENY_AGEUNVERIFIED; }
+bool LLEstateInfoModel::getAllowVoiceChat() const { return mFlags & REGION_FLAGS_ALLOW_VOICE; }
+
+void LLEstateInfoModel::setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); }
+void LLEstateInfoModel::setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); }
+void LLEstateInfoModel::setAllowDirectTeleport(bool val) { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); }
+void LLEstateInfoModel::setDenyAnonymous(bool val) { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); }
+void LLEstateInfoModel::setDenyAgeUnverified(bool val) { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); }
+void LLEstateInfoModel::setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); }
+
+void LLEstateInfoModel::update(const strings_t& strings)
+{
+ // NOTE: LLDispatcher extracts strings with an extra \0 at the
+ // end. If we pass the std::string direct to the UI/renderer
+ // it draws with a weird character at the end of the string.
+ mName = strings[0].c_str();
+ mOwnerID = LLUUID(strings[1].c_str());
+ mID = strtoul(strings[2].c_str(), NULL, 10);
+ mFlags = strtoul(strings[3].c_str(), NULL, 10);
+ mSunHour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
+
+ LL_DEBUGS("Windlight Sync") << "Received estate info: "
+ << "is_sun_fixed = " << getUseFixedSun()
+ << ", sun_hour = " << getSunHour() << LL_ENDL;
+ lldebugs << getInfoDump() << llendl;
+
+ // Update region owner.
+ LLViewerRegion* regionp = gAgent.getRegion();
+ regionp->setOwner(mOwnerID);
+
+ // Let interested parties know that estate info has been updated.
+ mUpdateSignal();
+}
+
+void LLEstateInfoModel::notifyCommit()
+{
+ mCommitSignal();
+}
+
+//== PRIVATE STUFF ============================================================
+
+class LLEstateChangeInfoResponder : public LLHTTPClient::Responder
+{
+public:
+
+ // if we get a normal response, handle it here
+ virtual void result(const LLSD& content)
+ {
+ llinfos << "Committed estate info" << llendl;
+ LLEstateInfoModel::instance().notifyCommit();
+ }
+
+ // if we get an error response
+ virtual void error(U32 status, const std::string& reason)
+ {
+ llwarns << "Failed to commit estate info (" << status << "): " << reason << llendl;
+ }
+};
+
+// tries to send estate info using a cap; returns true if it succeeded
+bool LLEstateInfoModel::commitEstateInfoCaps()
+{
+ std::string url = gAgent.getRegion()->getCapability("EstateChangeInfo");
+
+ if (url.empty())
+ {
+ // whoops, couldn't find the cap, so bail out
+ return false;
+ }
+
+ LLSD body;
+ body["estate_name" ] = getName();
+ body["sun_hour" ] = getSunHour();
+
+ body["is_sun_fixed" ] = getUseFixedSun();
+ body["is_externally_visible"] = getIsExternallyVisible();
+ body["allow_direct_teleport"] = getAllowDirectTeleport();
+ body["deny_anonymous" ] = getDenyAnonymous();
+ body["deny_age_unverified" ] = getDenyAgeUnverified();
+ body["allow_voice_chat" ] = getAllowVoiceChat();
+
+ body["invoice" ] = LLFloaterRegionInfo::getLastInvoice();
+
+ LL_DEBUGS("Windlight Sync") << "Sending estate caps: "
+ << "is_sun_fixed = " << getUseFixedSun()
+ << ", sun_hour = " << getSunHour() << LL_ENDL;
+ lldebugs << body << LL_ENDL;
+
+ // we use a responder so that we can re-get the data after committing to the database
+ LLHTTPClient::post(url, body, new LLEstateChangeInfoResponder);
+ return true;
+}
+
+/* This is the old way of doing things, is deprecated, and should be
+ deleted when the dataserver model can be removed */
+// key = "estatechangeinfo"
+// strings[0] = str(estate_id) (added by simulator before relay - not here)
+// strings[1] = estate_name
+// strings[2] = str(estate_flags)
+// strings[3] = str((S32)(sun_hour * 1024.f))
+void LLEstateInfoModel::commitEstateInfoDataserver()
+{
+ LL_DEBUGS("Windlight Sync") << "Sending estate info: "
+ << "is_sun_fixed = " << getUseFixedSun()
+ << ", sun_hour = " << getSunHour() << LL_ENDL;
+ lldebugs << getInfoDump() << LL_ENDL;
+
+ LLMessageSystem* msg = gMessageSystem;
+ msg->newMessage("EstateOwnerMessage");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+
+ msg->nextBlock("MethodData");
+ msg->addString("Method", "estatechangeinfo");
+ msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
+
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", getName());
+
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", llformat("%u", getFlags()));
+
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", llformat("%d", (S32) (getSunHour() * 1024.0f)));
+
+ gAgent.sendMessage();
+}
+
+void LLEstateInfoModel::setFlag(U32 flag, bool val)
+{
+ if (val)
+ {
+ mFlags |= flag;
+ }
+ else
+ {
+ mFlags &= ~flag;
+ }
+}
+
+std::string LLEstateInfoModel::getInfoDump()
+{
+ LLSD dump;
+ dump["estate_name" ] = getName();
+ dump["sun_hour" ] = getSunHour();
+
+ dump["is_sun_fixed" ] = getUseFixedSun();
+ dump["is_externally_visible"] = getIsExternallyVisible();
+ dump["allow_direct_teleport"] = getAllowDirectTeleport();
+ dump["deny_anonymous" ] = getDenyAnonymous();
+ dump["deny_age_unverified" ] = getDenyAgeUnverified();
+ dump["allow_voice_chat" ] = getAllowVoiceChat();
+
+ std::stringstream dump_str;
+ dump_str << dump;
+ return dump_str.str();
+}
diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h
new file mode 100644
index 0000000000..56391eda91
--- /dev/null
+++ b/indra/newview/llestateinfomodel.h
@@ -0,0 +1,103 @@
+/**
+ * @file llestateinfomodel.h
+ * @brief Estate info model
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLESTATEINFOMODEL_H
+#define LL_LLESTATEINFOMODEL_H
+
+class LLMessageSystem;
+
+#include "llsingleton.h"
+
+/**
+ * Contains estate info, notifies interested parties of its changes.
+ */
+class LLEstateInfoModel : public LLSingleton<LLEstateInfoModel>
+{
+ LOG_CLASS(LLEstateInfoModel);
+
+public:
+ typedef boost::signals2::signal<void()> update_signal_t;
+ boost::signals2::connection setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
+ boost::signals2::connection setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
+
+ void sendEstateInfo(); /// send estate info to the simulator
+
+ // getters
+ bool getUseFixedSun() const;
+ bool getIsExternallyVisible() const;
+ bool getAllowDirectTeleport() const;
+ bool getDenyAnonymous() const;
+ bool getDenyAgeUnverified() const;
+ bool getAllowVoiceChat() const;
+
+ const std::string& getName() const { return mName; }
+ const LLUUID& getOwnerID() const { return mOwnerID; }
+ U32 getID() const { return mID; }
+ F32 getSunHour() const { return getUseFixedSun() ? mSunHour : 0.f; }
+
+ // setters
+ void setUseFixedSun(bool val);
+ void setIsExternallyVisible(bool val);
+ void setAllowDirectTeleport(bool val);
+ void setDenyAnonymous(bool val);
+ void setDenyAgeUnverified(bool val);
+ void setAllowVoiceChat(bool val);
+
+ void setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
+
+protected:
+ typedef std::vector<std::string> strings_t;
+
+ friend class LLSingleton<LLEstateInfoModel>;
+ friend class LLDispatchEstateUpdateInfo;
+ friend class LLEstateChangeInfoResponder;
+
+ LLEstateInfoModel();
+
+ /// refresh model with data from the incoming server message
+ void update(const strings_t& strings);
+
+ void notifyCommit();
+
+private:
+ bool commitEstateInfoCaps();
+ void commitEstateInfoDataserver();
+ U32 getFlags() const { return mFlags; }
+ void setFlag(U32 flag, bool val);
+ std::string getInfoDump();
+
+ // estate info
+ std::string mName; /// estate name
+ LLUUID mOwnerID; /// estate owner id
+ U32 mID; /// estate id
+ U32 mFlags; /// estate flags
+ F32 mSunHour; /// estate sun hour
+
+ update_signal_t mUpdateSignal; /// emitted when we receive update from sim
+ update_signal_t mCommitSignal; /// emitted when our update gets applied to sim
+};
+
+#endif // LL_LLESTATEINFOMODEL_H
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 5501b8c2ac..2abfbf37ca 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -415,6 +415,15 @@ void LLExpandableTextBox::onTopLost()
LLUICtrl::onTopLost();
}
+void LLExpandableTextBox::updateTextShape()
+{
+ // I guess this should be done on every reshape(),
+ // but adding this code to reshape() currently triggers bug VWR-26455,
+ // which makes the text virtually unreadable.
+ llassert(!mExpanded);
+ updateTextBoxRect();
+}
+
void LLExpandableTextBox::setValue(const LLSD& value)
{
collapseTextBox();
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index f75ef954ff..399e48bea2 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -143,6 +143,10 @@ public:
*/
/*virtual*/ void onTopLost();
+ /**
+ * *HACK: Update the inner textbox shape.
+ */
+ void updateTextShape();
/**
* Draws text box, collapses text box if its expanded and its parent's position changed
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index b6566fcbd0..432e61f6d8 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -1051,6 +1051,13 @@ bool LLFace::canRenderAsMask()
static LLFastTimer::DeclareTimer FTM_FACE_GET_GEOM("Face Geom");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_POSITION("Position");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_NORMAL("Normal");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_TEXTURE("Texture");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_COLOR("Color");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_WEIGHTS("Weights");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_BINORMAL("Binormal");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX("Index");
BOOL LLFace::getGeometryVolume(const LLVolume& volume,
const S32 &f,
@@ -1064,6 +1071,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
S32 num_vertices = (S32)vf.mNumVertices;
S32 num_indices = (S32) vf.mNumIndices;
+ bool map_range = gGLManager.mHasMapBufferRange || gGLManager.mHasFlushBufferRange;
+
if (mVertexBuffer.notNull())
{
if (num_indices + (S32) mIndicesIndex > mVertexBuffer->getNumIndices())
@@ -1182,7 +1191,8 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
// INDICES
if (full_rebuild)
{
- mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_INDEX);
+ mVertexBuffer->getIndexStrider(indicesp, mIndicesIndex, mIndicesCount, map_range);
__m128i* dst = (__m128i*) indicesp.get();
__m128i* src = (__m128i*) vf.mIndices;
@@ -1201,7 +1211,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
indicesp[i] = vf.mIndices[i]+index_offset;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
LLMatrix4a mat_normal;
@@ -1215,6 +1228,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
if (rebuild_tcoord)
{
+ LLFastTimer t(FTM_FACE_GEOM_TEXTURE);
bool do_xform;
if (tep)
@@ -1422,11 +1436,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
}
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
else
{ //either bump mapped or in atlas, just do the whole expensive loop
- mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, true);
+ mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, map_range);
std::vector<LLVector2> bump_tc;
@@ -1566,12 +1583,14 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
}
}
- mVertexBuffer->setBuffer(0);
-
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
if (do_bump)
{
- mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, true);
+ mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, map_range);
for (S32 i = 0; i < num_vertices; i++)
{
@@ -1601,14 +1620,20 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
*tex_coords2++ = tc;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
}
}
if (rebuild_pos)
{
- mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_POSITION);
+ llassert(num_vertices > 0);
+
+ mVertexBuffer->getVertexStrider(vert, mGeomIndex, mGeomCount, map_range);
vertices = (LLVector4a*) vert.get();
LLMatrix4a mat_vert;
@@ -1636,13 +1661,25 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
index_dst += 4;
}
while (index_dst < index_end);
-
- mVertexBuffer->setBuffer(0);
+
+ S32 aligned_pad_vertices = mGeomCount - num_vertices;
+ LLVector4a* last_vec = end - 1;
+ while (aligned_pad_vertices > 0)
+ {
+ --aligned_pad_vertices;
+ *dst++ = *last_vec;
+ }
+
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_normal)
{
- mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_NORMAL);
+ mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, map_range);
normals = (LLVector4a*) norm.get();
for (S32 i = 0; i < num_vertices; i++)
@@ -1653,12 +1690,16 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
normals[i] = normal;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_binormal)
{
- mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_BINORMAL);
+ mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, map_range);
binormals = (LLVector4a*) binorm.get();
for (S32 i = 0; i < num_vertices; i++)
@@ -1669,20 +1710,28 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
binormals[i] = binormal;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_weights && vf.mWeights)
{
- mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_WEIGHTS);
+ mVertexBuffer->getWeight4Strider(wght, mGeomIndex, mGeomCount, map_range);
weights = (LLVector4a*) wght.get();
LLVector4a::memcpyNonAliased16((F32*) weights, (F32*) vf.mWeights, num_vertices*4*sizeof(F32));
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_color)
{
- mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, true);
+ LLFastTimer t(FTM_FACE_GEOM_COLOR);
+ mVertexBuffer->getColorStrider(colors, mGeomIndex, mGeomCount, map_range);
LLVector4a src;
@@ -1703,7 +1752,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
dst[i] = src;
}
- mVertexBuffer->setBuffer(0);
+ if (map_range)
+ {
+ mVertexBuffer->setBuffer(0);
+ }
}
if (rebuild_tcoord)
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 35712163eb..366154302c 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -252,7 +252,15 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask)
x < mBarEnd[mHoverBarIndex][i])
{
mHoverID = (*it);
- mHoverTimer = (*it);
+ if (mHoverTimer != *it)
+ {
+ // could be that existing tooltip is for a parent and is thus
+ // covering region for this new timer, go ahead and unblock
+ // so we can create a new tooltip
+ LLToolTipMgr::instance().unblockToolTips();
+ mHoverTimer = (*it);
+ }
+
mToolTipRect.set(mBarStart[mHoverBarIndex][i],
mBarRect.mBottom + llround(((F32)(MAX_VISIBLE_HISTORY - mHoverBarIndex + 1)) * ((F32)mBarRect.getHeight() / ((F32)MAX_VISIBLE_HISTORY + 2.f))),
mBarEnd[mHoverBarIndex][i],
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
index 83844048d1..db9a0424c0 100644
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -106,7 +106,7 @@ BOOL LLFeatureList::isFeatureAvailable(const std::string& name)
return mFeatures[name].mAvailable;
}
- LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
+ LL_WARNS_ONCE("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
// changing this to TRUE so you have to explicitly disable
// something for it to be disabled
@@ -120,7 +120,7 @@ F32 LLFeatureList::getRecommendedValue(const std::string& name)
return mFeatures[name].mRecommendedLevel;
}
- LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
+ LL_WARNS_ONCE("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
return 0;
}
@@ -769,6 +769,10 @@ void LLFeatureManager::applyBaseMasks()
{
maskFeatures("TexUnit8orLess");
}
+ if (gGLManager.mHasMapBufferRange)
+ {
+ maskFeatures("MapBufferRange");
+ }
// now mask by gpu string
// Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces
diff --git a/indra/newview/llfilteredwearablelist.cpp b/indra/newview/llfilteredwearablelist.cpp
index cd5e779c4d..a29ccf2b6d 100644
--- a/indra/newview/llfilteredwearablelist.cpp
+++ b/indra/newview/llfilteredwearablelist.cpp
@@ -31,6 +31,7 @@
#include "llinventoryfunctions.h"
#include "llinventoryitemslist.h"
#include "llinventorymodel.h"
+#include "llviewerinventory.h"
LLFilteredWearableListManager::LLFilteredWearableListManager(LLInventoryItemsList* list, LLInventoryCollectFunctor* collector)
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 2873bc0059..849826bb6b 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -26,6 +26,8 @@
*/
#include "llviewerprecompiledheaders.h"
+#include <iostream>
+#include <fstream>
#include "llfloaterabout.h"
@@ -108,8 +110,14 @@ BOOL LLFloaterAbout::postBuild()
LLViewerTextEditor *support_widget =
getChild<LLViewerTextEditor>("support_editor", true);
- LLViewerTextEditor *credits_widget =
- getChild<LLViewerTextEditor>("credits_editor", true);
+ LLViewerTextEditor *linden_names_widget =
+ getChild<LLViewerTextEditor>("linden_names", true);
+
+ LLViewerTextEditor *contrib_names_widget =
+ getChild<LLViewerTextEditor>("contrib_names", true);
+
+ LLViewerTextEditor *trans_names_widget =
+ getChild<LLViewerTextEditor>("trans_names", true);
getChild<LLUICtrl>("copy_btn")->setCommitCallback(
boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this));
@@ -190,8 +198,59 @@ BOOL LLFloaterAbout::postBuild()
support_widget->setEnabled(FALSE);
support_widget->startOfDoc();
- credits_widget->setEnabled(FALSE);
- credits_widget->startOfDoc();
+ // Get the names of Lindens, added by viewer_manifest.py at build time
+ std::string lindens_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"lindens.txt");
+ llifstream linden_file;
+ std::string lindens;
+ linden_file.open(lindens_path); /* Flawfinder: ignore */
+ if (linden_file.is_open())
+ {
+ std::getline(linden_file, lindens); // all names are on a single line
+ linden_file.close();
+ linden_names_widget->setText(lindens);
+ }
+ else
+ {
+ LL_INFOS("AboutInit") << "Could not read lindens file at " << lindens_path << LL_ENDL;
+ }
+ linden_names_widget->setEnabled(FALSE);
+ linden_names_widget->startOfDoc();
+
+ // Get the names of contributors, extracted from .../doc/contributions.txt by viewer_manifest.py at build time
+ std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt");
+ llifstream contrib_file;
+ std::string contributors;
+ contrib_file.open(contributors_path); /* Flawfinder: ignore */
+ if (contrib_file.is_open())
+ {
+ std::getline(contrib_file, contributors); // all names are on a single line
+ contrib_file.close();
+ }
+ else
+ {
+ LL_WARNS("AboutInit") << "Could not read contributors file at " << contributors_path << LL_ENDL;
+ }
+ contrib_names_widget->setText(contributors);
+ contrib_names_widget->setEnabled(FALSE);
+ contrib_names_widget->startOfDoc();
+
+ // Get the names of translators, extracted from .../doc/tranlations.txt by viewer_manifest.py at build time
+ std::string translators_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"translators.txt");
+ llifstream trans_file;
+ std::string translators;
+ trans_file.open(translators_path); /* Flawfinder: ignore */
+ if (trans_file.is_open())
+ {
+ std::getline(trans_file, translators); // all names are on a single line
+ trans_file.close();
+ }
+ else
+ {
+ LL_WARNS("AboutInit") << "Could not read translators file at " << translators_path << LL_ENDL;
+ }
+ trans_names_widget->setText(translators);
+ trans_names_widget->setEnabled(FALSE);
+ trans_names_widget->startOfDoc();
return TRUE;
}
diff --git a/indra/newview/llfloateranimpreview.cpp b/indra/newview/llfloateranimpreview.cpp
index 1f334815d6..9f0218a95e 100644
--- a/indra/newview/llfloateranimpreview.cpp
+++ b/indra/newview/llfloateranimpreview.cpp
@@ -223,8 +223,7 @@ BOOL LLFloaterAnimPreview::postBuild()
// now load bvh file
S32 file_size;
- LLAPRFile infile ;
- infile.open(mFilenameAndPath, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(mFilenameAndPath, LL_APR_RB, &file_size);
if (!infile.getFileHandle())
{
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
index c95b046707..2939d31087 100644
--- a/indra/newview/llfloaterauction.cpp
+++ b/indra/newview/llfloaterauction.cpp
@@ -27,7 +27,6 @@
#include "llviewerprecompiledheaders.h"
#include "llfloaterauction.h"
-#include "llfloaterregioninfo.h"
#include "llgl.h"
#include "llimagej2c.h"
@@ -40,6 +39,7 @@
#include "llagent.h"
#include "llcombobox.h"
+#include "llestateinfomodel.h"
#include "llmimetypes.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
@@ -55,6 +55,7 @@
#include "llrender.h"
#include "llsdutil.h"
#include "llsdutil_math.h"
+#include "lltrans.h"
///----------------------------------------------------------------------------
/// Local function declarations, constants, enums, and typedefs
@@ -113,16 +114,9 @@ void LLFloaterAuction::initialize()
getChildView("reset_parcel_btn")->setEnabled(TRUE);
getChildView("start_auction_btn")->setEnabled(TRUE);
- 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();
- getChildView("sell_to_anyone_btn")->setEnabled((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
- getChildView("sell_to_anyone_btn")->setEnabled(TRUE);
- }
+ U32 estate_id = LLEstateInfoModel::instance().getID();
+ // Only enable "Sell to Anyone" on Teen grid or if we don't know the ID yet
+ getChildView("sell_to_anyone_btn")->setEnabled(estate_id == ESTATE_TEEN || estate_id == 0);
}
else
{
@@ -457,7 +451,7 @@ void LLFloaterAuction::onClickSellToAnyone(void* data)
LLSD args;
args["LAND_SIZE"] = llformat("%d", area);
args["SALE_PRICE"] = llformat("%d", sale_price);
- args["NAME"] = "Anyone";
+ args["NAME"] = LLTrans::getString("Anyone");
LLNotification::Params params("ConfirmLandSaleChange"); // Re-use existing dialog
params.substitutions(args)
diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp
index 4b6fe4a115..86c1bf0534 100644
--- a/indra/newview/llfloaterbuildoptions.cpp
+++ b/indra/newview/llfloaterbuildoptions.cpp
@@ -34,15 +34,81 @@
#include "llfloaterbuildoptions.h"
#include "lluictrlfactory.h"
+#include "llcombobox.h"
+#include "llselectmgr.h"
+
//
// Methods
//
+
+void commit_grid_mode(LLUICtrl *);
+
LLFloaterBuildOptions::LLFloaterBuildOptions(const LLSD& key)
- : LLFloater(key)
+ : LLFloater(key),
+ mComboGridMode(NULL)
{
+ mCommitCallbackRegistrar.add("GridOptions.gridMode", boost::bind(&commit_grid_mode,_1));
}
LLFloaterBuildOptions::~LLFloaterBuildOptions()
+{}
+
+BOOL LLFloaterBuildOptions::postBuild()
+{
+ mComboGridMode = getChild<LLComboBox>("combobox grid mode");
+
+ return TRUE;
+}
+
+void LLFloaterBuildOptions::setGridMode(EGridMode mode)
+{
+ mComboGridMode->setCurrentByIndex((S32)mode);
+}
+
+void LLFloaterBuildOptions::updateGridMode()
{
+ if (mComboGridMode)
+ {
+ S32 index = mComboGridMode->getCurrentIndex();
+ mComboGridMode->removeall();
+
+ switch (mObjectSelection->getSelectType())
+ {
+ case SELECT_TYPE_HUD:
+ mComboGridMode->add(getString("grid_screen_text"));
+ mComboGridMode->add(getString("grid_local_text"));
+ break;
+ case SELECT_TYPE_WORLD:
+ mComboGridMode->add(getString("grid_world_text"));
+ mComboGridMode->add(getString("grid_local_text"));
+ mComboGridMode->add(getString("grid_reference_text"));
+ break;
+ case SELECT_TYPE_ATTACHMENT:
+ mComboGridMode->add(getString("grid_attachment_text"));
+ mComboGridMode->add(getString("grid_local_text"));
+ mComboGridMode->add(getString("grid_reference_text"));
+ break;
+ }
+
+ mComboGridMode->setCurrentByIndex(index);
+ }
+}
+
+// virtual
+void LLFloaterBuildOptions::onOpen(const LLSD& key)
+{
+ mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
}
+// virtual
+void LLFloaterBuildOptions::onClose(bool app_quitting)
+{
+ mObjectSelection = NULL;
+}
+
+void commit_grid_mode(LLUICtrl *ctrl)
+{
+ LLComboBox* combo = (LLComboBox*)ctrl;
+
+ LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex());
+}
diff --git a/indra/newview/llfloaterbuildoptions.h b/indra/newview/llfloaterbuildoptions.h
index 164944d7bc..7f3811bf1c 100644
--- a/indra/newview/llfloaterbuildoptions.h
+++ b/indra/newview/llfloaterbuildoptions.h
@@ -33,15 +33,34 @@
#define LL_LLFLOATERBUILDOPTIONS_H
#include "llfloater.h"
+#include "llselectmgr.h"
+class LLComboBox;
+class LLObjectSelection;
+
+typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
class LLFloaterBuildOptions
: public LLFloater
{
- friend class LLFloaterReg;
+public:
+
+ virtual BOOL postBuild();
+
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+
+ void setGridMode(EGridMode mode);
+ void updateGridMode();
+
private:
+
+ friend class LLFloaterReg;
+
LLFloaterBuildOptions(const LLSD& key);
~LLFloaterBuildOptions();
-};
+ LLComboBox* mComboGridMode;
+ LLObjectSelectionHandle mObjectSelection;
+};
#endif
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 610142b5a9..8223e89b64 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -508,7 +508,9 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
LLIconCtrl* rating_icon = getChild<LLIconCtrl>("rating_icon");
LLRect rect = rating_icon->getRect();
- S32 icon_left_pad = region_name->getRect().mLeft + region_name->getTextBoundingRect().getWidth() + ICON_PAD;
+ S32 region_name_width = llmin(region_name->getRect().getWidth(), region_name->getTextBoundingRect().getWidth());
+ S32 icon_left_pad = region_name->getRect().mLeft + region_name_width + ICON_PAD;
+ region_name->setToolTip(region_name->getText());
rating_icon->setRect(rect.setOriginAndSize(icon_left_pad, rect.mBottom, rect.getWidth(), rect.getHeight()));
switch(sim_access)
@@ -529,7 +531,8 @@ void LLFloaterBuyLandUI::updateCovenantInfo()
LLTextBox* region_type = getChild<LLTextBox>("region_type_text");
if (region_type)
{
- region_type->setText(region->getSimProductName());
+ region_type->setText(region->getLocalizedSimProductName());
+ region_type->setToolTip(region->getLocalizedSimProductName());
}
LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause");
@@ -619,7 +622,8 @@ void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, co
void LLFloaterBuyLandUI::updateFloaterEstateName(const std::string& name)
{
LLTextBox* box = getChild<LLTextBox>("estate_name_text");
- if (box) box->setText(name);
+ box->setText(name);
+ box->setToolTip(name);
}
void LLFloaterBuyLandUI::updateFloaterLastModified(const std::string& text)
diff --git a/indra/newview/llfloaterdaycycle.cpp b/indra/newview/llfloaterdaycycle.cpp
deleted file mode 100644
index 22816ee802..0000000000
--- a/indra/newview/llfloaterdaycycle.cpp
+++ /dev/null
@@ -1,531 +0,0 @@
-/**
- * @file llfloaterdaycycle.cpp
- * @brief LLFloaterDayCycle class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterdaycycle.h"
-
-#include "pipeline.h"
-#include "llsky.h"
-
-#include "llsliderctrl.h"
-#include "llmultislider.h"
-#include "llmultisliderctrl.h"
-#include "llspinctrl.h"
-#include "llcheckboxctrl.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
-#include "llcombobox.h"
-#include "lllineeditor.h"
-#include "llwlanimator.h"
-
-#include "v4math.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-
-#include "llwlparamset.h"
-#include "llwlparammanager.h"
-#include "llpostprocess.h"
-#include "llfloaterwindlight.h"
-
-
-std::map<std::string, LLWLSkyKey> LLFloaterDayCycle::sSliderToKey;
-const F32 LLFloaterDayCycle::sHoursPerDay = 24.0f;
-
-LLFloaterDayCycle::LLFloaterDayCycle(const LLSD& key)
-: LLFloater(key)
-{
-}
-
-BOOL LLFloaterDayCycle::postBuild()
-{
- // add the combo boxes
- LLComboBox* keyCombo = getChild<LLComboBox>("WLKeyPresets");
-
- if(keyCombo != NULL)
- {
- keyCombo->removeall();
- std::map<std::string, LLWLParamSet>::iterator mIt =
- LLWLParamManager::instance()->mParamList.begin();
- for(; mIt != LLWLParamManager::instance()->mParamList.end(); mIt++)
- {
- keyCombo->add(std::string(mIt->first));
- }
-
- // set defaults on combo boxes
- keyCombo->selectFirstItem();
- }
-
- // add the time slider
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
-
- sldr->addSlider();
-
- // load it up
- initCallbacks();
-
- syncMenu();
- syncSliderTrack();
-
- return TRUE;
-}
-
-LLFloaterDayCycle::~LLFloaterDayCycle()
-{
-}
-
-void LLFloaterDayCycle::initCallbacks(void)
-{
- // WL Day Cycle
- getChild<LLUICtrl>("WLTimeSlider")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeSliderMoved, this, _1));
- getChild<LLUICtrl>("WLDayCycleKeys")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeMoved, this, _1));
- getChild<LLUICtrl>("WLCurKeyHour")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeChanged, this, _1));
- getChild<LLUICtrl>("WLCurKeyMin")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyTimeChanged, this, _1));
- getChild<LLUICtrl>("WLKeyPresets")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onKeyPresetChanged, this, _1));
-
- getChild<LLUICtrl>("WLLengthOfDayHour")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeRateChanged, this, _1));
- getChild<LLUICtrl>("WLLengthOfDayMin")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeRateChanged, this, _1));
- getChild<LLUICtrl>("WLLengthOfDaySec")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onTimeRateChanged, this, _1));
- getChild<LLUICtrl>("WLUseLindenTime")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onUseLindenTime, this, _1));
- getChild<LLUICtrl>("WLAnimSky")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onRunAnimSky, this, _1));
- getChild<LLUICtrl>("WLStopAnimSky")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onStopAnimSky, this, _1));
-
- getChild<LLUICtrl>("WLLoadDayCycle")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onLoadDayCycle, this, _1));
- getChild<LLUICtrl>("WLSaveDayCycle")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onSaveDayCycle, this, _1));
-
- getChild<LLUICtrl>("WLAddKey")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onAddKey, this, _1));
- getChild<LLUICtrl>("WLDeleteKey")->setCommitCallback(boost::bind(&LLFloaterDayCycle::onDeleteKey, this, _1));
-}
-
-void LLFloaterDayCycle::syncMenu()
-{
-// std::map<std::string, LLVector4> & currentParams = LLWLParamManager::instance()->mCurParams.mParamValues;
-
- // set time
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
- sldr->setCurSliderValue((F32)LLWLParamManager::instance()->mAnimator.getDayTime() * sHoursPerDay);
-
- LLSpinCtrl* secSpin = getChild<LLSpinCtrl>("WLLengthOfDaySec");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>("WLLengthOfDayMin");
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>("WLLengthOfDayHour");
-
- F32 curRate;
- F32 hours, min, sec;
-
- // get the current rate
- curRate = LLWLParamManager::instance()->mDay.mDayRate;
- hours = (F32)((int)(curRate / 60 / 60));
- curRate -= (hours * 60 * 60);
- min = (F32)((int)(curRate / 60));
- curRate -= (min * 60);
- sec = curRate;
-
- hourSpin->setValue(hours);
- minSpin->setValue(min);
- secSpin->setValue(sec);
-
- // turn off Use Estate Time button if it's already being used
- if( LLWLParamManager::instance()->mAnimator.mUseLindenTime == true)
- {
- getChildView("WLUseLindenTime")->setEnabled(FALSE);
- }
- else
- {
- getChildView("WLUseLindenTime")->setEnabled(TRUE);
- }
-}
-
-void LLFloaterDayCycle::syncSliderTrack()
-{
- // clear the slider
- LLMultiSliderCtrl* kSldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
-
- kSldr->clear();
- sSliderToKey.clear();
-
- // add sliders
- std::map<F32, std::string>::iterator mIt =
- LLWLParamManager::instance()->mDay.mTimeMap.begin();
- for(; mIt != LLWLParamManager::instance()->mDay.mTimeMap.end(); mIt++)
- {
- addSliderKey(mIt->first * sHoursPerDay, mIt->second);
- }
-}
-
-void LLFloaterDayCycle::syncTrack()
-{
- // if no keys, do nothing
- if(sSliderToKey.size() == 0)
- {
- return;
- }
-
- LLMultiSliderCtrl* sldr;
- sldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
- llassert_always(sSliderToKey.size() == sldr->getValue().size());
-
- LLMultiSliderCtrl* tSldr;
- tSldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
-
- // create a new animation track
- LLWLParamManager::instance()->mDay.clearKeys();
-
- // add the keys one by one
- std::map<std::string, LLWLSkyKey>::iterator mIt = sSliderToKey.begin();
- for(; mIt != sSliderToKey.end(); mIt++)
- {
- LLWLParamManager::instance()->mDay.addKey(mIt->second.time / sHoursPerDay,
- mIt->second.presetName);
- }
-
- // set the param manager's track to the new one
- LLWLParamManager::instance()->resetAnimator(
- tSldr->getCurSliderValue() / sHoursPerDay, false);
-
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterDayCycle::onRunAnimSky(LLUICtrl* ctrl)
-{
- // if no keys, do nothing
- if(sSliderToKey.size() == 0)
- {
- return;
- }
-
- LLMultiSliderCtrl* sldr;
- sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
- llassert_always(sSliderToKey.size() == sldr->getValue().size());
-
- LLMultiSliderCtrl* tSldr;
- tSldr = getChild<LLMultiSliderCtrl>("WLTimeSlider");
-
- // turn off linden time
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // set the param manager's track to the new one
- LLWLParamManager::instance()->resetAnimator(
- tSldr->getCurSliderValue() / sHoursPerDay, true);
-
- llassert_always(LLWLParamManager::instance()->mAnimator.mTimeTrack.size() == sldr->getValue().size());
-}
-
-void LLFloaterDayCycle::onStopAnimSky(LLUICtrl* ctrl)
-{
- // if no keys, do nothing
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- // turn off animation and using linden time
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-}
-
-void LLFloaterDayCycle::onUseLindenTime(LLUICtrl* ctrl)
-{
- LLComboBox* box = getChild<LLComboBox>("WLPresetsCombo");
- box->selectByValue("");
-
- LLWLParamManager::instance()->mAnimator.mIsRunning = true;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
-}
-
-void LLFloaterDayCycle::onLoadDayCycle(LLUICtrl* ctrl)
-{
- LLWLParamManager::instance()->mDay.loadDayCycle("Default.xml");
-
- // sync it all up
- syncSliderTrack();
- syncMenu();
-
- // set the param manager's track to the new one
- LLMultiSliderCtrl* tSldr;
- tSldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
- LLWLParamManager::instance()->resetAnimator(
- tSldr->getCurSliderValue() / sHoursPerDay, false);
-
- // and draw it
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterDayCycle::onSaveDayCycle(LLUICtrl* ctrl)
-{
- LLWLParamManager::instance()->mDay.saveDayCycle("Default.xml");
-}
-
-
-void LLFloaterDayCycle::onTimeSliderMoved(LLUICtrl* ctrl)
-{
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
-
- /// get the slider value
- F32 val = sldr->getCurSliderValue() / sHoursPerDay;
-
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime((F64)val);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterDayCycle::onKeyTimeMoved(LLUICtrl* ctrl)
-{
- LLComboBox* comboBox = getChild<LLComboBox>("WLKeyPresets");
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>("WLCurKeyHour");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>("WLCurKeyMin");
-
- if(sldr->getValue().size() == 0) {
- return;
- }
-
- // make sure we have a slider
- const std::string& curSldr = sldr->getCurSlider();
- if(curSldr == "") {
- return;
- }
-
- F32 time = sldr->getCurSliderValue();
-
- // check to see if a key exists
- std::string presetName = sSliderToKey[curSldr].presetName;
- sSliderToKey[curSldr].time = time;
-
- // if it exists, turn on check box
- comboBox->selectByValue(presetName);
-
- // now set the spinners
- F32 hour = (F32)((S32)time);
- F32 min = (time - hour) * 60;
-
- // handle imprecision
- if(min >= 59) {
- min = 0;
- hour += 1;
- }
-
- hourSpin->set(hour);
- minSpin->set(min);
-
- syncTrack();
-
-}
-
-void LLFloaterDayCycle::onKeyTimeChanged(LLUICtrl* ctrl)
-{
- // if no keys, skipped
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>(
- "WLCurKeyHour");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>(
- "WLCurKeyMin");
-
- F32 hour = hourSpin->get();
- F32 min = minSpin->get();
- F32 val = hour + min / 60.0f;
-
- const std::string& curSldr = sldr->getCurSlider();
- sldr->setCurSliderValue(val, TRUE);
- F32 time = sldr->getCurSliderValue() / sHoursPerDay;
-
- // now set the key's time in the sliderToKey map
- std::string presetName = sSliderToKey[curSldr].presetName;
- sSliderToKey[curSldr].time = time;
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::onKeyPresetChanged(LLUICtrl* ctrl)
-{
- // get the time
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLKeyPresets");
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
-
- // do nothing if no sliders
- if(sldr->getValue().size() == 0) {
- return;
- }
-
- // change the map
- std::string newPreset(comboBox->getSelectedValue().asString());
- const std::string& curSldr = sldr->getCurSlider();
-
- // if null, don't use
- if(curSldr == "") {
- return;
- }
-
- sSliderToKey[curSldr].presetName = newPreset;
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::onTimeRateChanged(LLUICtrl* ctrl)
-{
- // get the time
- LLSpinCtrl* secSpin = getChild<LLSpinCtrl>(
- "WLLengthOfDaySec");
-
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>(
- "WLLengthOfDayMin");
-
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>(
- "WLLengthOfDayHour");
-
- F32 hour;
- hour = (F32)hourSpin->getValue().asReal();
- F32 min;
- min = (F32)minSpin->getValue().asReal();
- F32 sec;
- sec = (F32)secSpin->getValue().asReal();
-
- F32 time = 60.0f * 60.0f * hour + 60.0f * min + sec;
- if(time <= 0) {
- time = 1;
- }
- LLWLParamManager::instance()->mDay.mDayRate = time;
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::onAddKey(LLUICtrl* ctrl)
-{
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLKeyPresets");
- LLMultiSliderCtrl* kSldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
- LLMultiSliderCtrl* tSldr = getChild<LLMultiSliderCtrl>(
- "WLTimeSlider");
-
- llassert_always(sSliderToKey.size() == kSldr->getValue().size());
-
- // get the values
- std::string newPreset(comboBox->getSelectedValue().asString());
-
- // add the slider key
- addSliderKey(tSldr->getCurSliderValue(), newPreset);
-
- syncTrack();
-}
-
-void LLFloaterDayCycle::addSliderKey(F32 time, const std::string & presetName)
-{
- LLMultiSliderCtrl* kSldr = getChild<LLMultiSliderCtrl>(
- "WLDayCycleKeys");
-
- // make a slider
- const std::string& sldrName = kSldr->addSlider(time);
- if(sldrName == "") {
- return;
- }
-
- // set the key
- LLWLSkyKey newKey;
- newKey.presetName = presetName;
- newKey.time = kSldr->getCurSliderValue();
-
- llassert_always(sldrName != LLStringUtil::null);
-
- // add to map
- sSliderToKey.insert(std::pair<std::string, LLWLSkyKey>(sldrName, newKey));
-
- llassert_always(sSliderToKey.size() == kSldr->getValue().size());
-
-}
-
-void LLFloaterDayCycle::deletePreset(std::string& presetName)
-{
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
-
- /// delete any reference
- std::map<std::string, LLWLSkyKey>::iterator curr_preset, next_preset;
- for(curr_preset = sSliderToKey.begin(); curr_preset != sSliderToKey.end(); curr_preset = next_preset)
- {
- next_preset = curr_preset;
- ++next_preset;
- if (curr_preset->second.presetName == presetName)
- {
- sldr->deleteSlider(curr_preset->first);
- sSliderToKey.erase(curr_preset);
- }
- }
-}
-
-void LLFloaterDayCycle::onDeleteKey(LLUICtrl* ctrl)
-{
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLKeyPresets");
- LLMultiSliderCtrl* sldr = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
-
- // delete from map
- const std::string& sldrName = sldr->getCurSlider();
- std::map<std::string, LLWLSkyKey>::iterator mIt = sSliderToKey.find(sldrName);
- sSliderToKey.erase(mIt);
-
- sldr->deleteCurSlider();
-
- if(sSliderToKey.size() == 0) {
- return;
- }
-
- const std::string& name = sldr->getCurSlider();
- comboBox->selectByValue(sSliderToKey[name].presetName);
- F32 time = sSliderToKey[name].time;
-
- LLSpinCtrl* hourSpin = getChild<LLSpinCtrl>("WLCurKeyHour");
- LLSpinCtrl* minSpin = getChild<LLSpinCtrl>("WLCurKeyMin");
-
- // now set the spinners
- F32 hour = (F32)((S32)time);
- F32 min = (time - hour) / 60;
- hourSpin->set(hour);
- minSpin->set(min);
-
- syncTrack();
-
-}
diff --git a/indra/newview/llfloaterdaycycle.h b/indra/newview/llfloaterdaycycle.h
deleted file mode 100644
index 993ddb8f07..0000000000
--- a/indra/newview/llfloaterdaycycle.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * @file llfloaterdaycycle.h
- * @brief LLFloaterDayCycle class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLFLOATERDAYCYCLE_H
-#define LL_LLFLOATERDAYCYCLE_H
-
-#include "llfloater.h"
-
-#include <vector>
-#include "llwlparamset.h"
-#include "llwlanimator.h"
-
-struct WLColorControl;
-struct WLFloatControl;
-
-/// convenience class for holding keys mapped to sliders
-struct LLWLSkyKey
-{
-public:
- std::string presetName;
- F32 time;
-};
-
-/// Menu for all of windlight's functionality.
-/// Menuing system for adjusting the atmospheric settings of the world.
-class LLFloaterDayCycle : public LLFloater
-{
-public:
-
- LLFloaterDayCycle(const LLSD& key);
- virtual ~LLFloaterDayCycle();
- /*virtual*/ BOOL postBuild();
-
- /// initialize all
- void initCallbacks(void);
-
- /// on time slider moved
- void onTimeSliderMoved(LLUICtrl* ctrl);
-
- /// what happens when you move the key frame
- void onKeyTimeMoved(LLUICtrl* ctrl);
-
- /// what happens when you change the key frame's time
- void onKeyTimeChanged(LLUICtrl* ctrl);
-
- /// if you change the combo box, change the frame
- void onKeyPresetChanged(LLUICtrl* ctrl);
-
- /// run this when user says to run the sky animation
- void onRunAnimSky(LLUICtrl* ctrl);
-
- /// run this when user says to stop the sky animation
- void onStopAnimSky(LLUICtrl* ctrl);
-
- /// if you change the combo box, change the frame
- void onTimeRateChanged(LLUICtrl* ctrl);
-
- /// add a new key on slider
- void onAddKey(LLUICtrl* ctrl);
-
- /// delete any and all reference to a preset
- void deletePreset(std::string& presetName);
-
- /// delete a key frame
- void onDeleteKey(LLUICtrl* ctrl);
-
- /// button to load day
- void onLoadDayCycle(LLUICtrl* ctrl);
-
- /// button to save day
- void onSaveDayCycle(LLUICtrl* ctrl);
-
- /// toggle for Linden time
- void onUseLindenTime(LLUICtrl* ctrl);
-
- /// sync up sliders with day cycle structure
- void syncMenu();
-
- // makes sure key slider has what's in day cycle
- void syncSliderTrack();
-
- /// makes sure day cycle data structure has what's in menu
- void syncTrack();
-
- /// add a slider to the track
- void addSliderKey(F32 time, const std::string& presetName);
-
-private:
-
- // map of sliders to parameters
- static std::map<std::string, LLWLSkyKey> sSliderToKey;
-
- static const F32 sHoursPerDay;
-};
-
-
-#endif
diff --git a/indra/newview/llfloaterdeleteenvpreset.cpp b/indra/newview/llfloaterdeleteenvpreset.cpp
new file mode 100644
index 0000000000..d08aa81cfe
--- /dev/null
+++ b/indra/newview/llfloaterdeleteenvpreset.cpp
@@ -0,0 +1,285 @@
+/**
+ * @file llfloaterdeleteenvpreset.cpp
+ * @brief Floater to delete a water / sky / day cycle preset.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterdeleteenvpreset.h"
+
+// libs
+#include "llbutton.h"
+#include "llcombobox.h"
+#include "llnotificationsutil.h"
+
+// newview
+#include "lldaycyclemanager.h"
+#include "llwaterparammanager.h"
+
+static bool confirmation_callback(const LLSD& notification, const LLSD& response, boost::function<void()> cb)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option == 0)
+ {
+ cb();
+ }
+ return false;
+
+}
+
+LLFloaterDeleteEnvPreset::LLFloaterDeleteEnvPreset(const LLSD &key)
+: LLFloater(key)
+, mPresetCombo(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterDeleteEnvPreset::postBuild()
+{
+ mPresetCombo = getChild<LLComboBox>("preset_combo");
+ mPresetCombo->setCommitCallback(boost::bind(&LLFloaterDeleteEnvPreset::postPopulate, this));
+
+ getChild<LLButton>("delete")->setCommitCallback(boost::bind(&LLFloaterDeleteEnvPreset::onBtnDelete, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeleteEnvPreset::onBtnCancel, this));
+
+ // Listen to user preferences change, in which case we need to rebuild the presets list
+ // to disable the [new] current preset.
+ LLEnvManagerNew::instance().setPreferencesChangeCallback(boost::bind(&LLFloaterDeleteEnvPreset::populatePresetsList, this));
+
+ // Listen to presets addition/removal.
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterDeleteEnvPreset::populateDayCyclesList, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeleteEnvPreset::populateSkyPresetsList, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeleteEnvPreset::populateWaterPresetsList, this));
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterDeleteEnvPreset::onOpen(const LLSD& key)
+{
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string combo_label = getString(std::string("label_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the combobox label.
+ getChild<LLUICtrl>("label")->setValue(combo_label);
+
+ // Populate the combobox.
+ populatePresetsList();
+}
+
+void LLFloaterDeleteEnvPreset::onBtnDelete()
+{
+ std::string param = mKey.asString();
+ std::string preset_name = mPresetCombo->getValue().asString();
+ boost::function<void()> confirm_cb;
+
+ if (param == "water")
+ {
+ // Don't allow deleting system presets.
+ if (LLWaterParamManager::instance().isSystemPreset(preset_name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ confirm_cb = boost::bind(&LLFloaterDeleteEnvPreset::onDeleteWaterPresetConfirmation, this);
+ }
+ else if (param == "sky")
+ {
+ // Don't allow deleting presets referenced by local day cycles.
+ if (LLDayCycleManager::instance().isSkyPresetReferenced(preset_name))
+ {
+ LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", getString("msg_sky_is_referenced")));
+ return;
+ }
+
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+
+ // Don't allow deleting system presets.
+ if (wl_mgr.isSystemPreset(preset_name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ confirm_cb = boost::bind(&LLFloaterDeleteEnvPreset::onDeleteSkyPresetConfirmation, this);
+ }
+ else if (param == "day_cycle")
+ {
+ LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
+
+ // Don't allow deleting system presets.
+ if (day_mgr.isSystemPreset(preset_name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ confirm_cb = boost::bind(&LLFloaterDeleteEnvPreset::onDeleteDayCycleConfirmation, this);
+ }
+ else
+ {
+ llwarns << "Unrecognized key" << llendl;
+ }
+
+ LLSD args;
+ args["MESSAGE"] = getString("msg_confirm_deletion");
+ LLNotificationsUtil::add("GenericAlertYesCancel", args, LLSD(),
+ boost::bind(&confirmation_callback, _1, _2, confirm_cb));
+}
+
+void LLFloaterDeleteEnvPreset::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterDeleteEnvPreset::populatePresetsList()
+{
+ std::string param = mKey.asString();
+
+ if (param == "water")
+ {
+ populateWaterPresetsList();
+ }
+ else if (param == "sky")
+ {
+ populateSkyPresetsList();
+ }
+ else if (param == "day_cycle")
+ {
+ populateDayCyclesList();
+ }
+ else
+ {
+ llwarns << "Unrecognized key" << llendl;
+ }
+}
+
+void LLFloaterDeleteEnvPreset::populateWaterPresetsList()
+{
+ if (mKey.asString() != "water") return;
+
+ mPresetCombo->removeall();
+
+ std::string cur_preset;
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (!env_mgr.getUseRegionSettings())
+ {
+ cur_preset = env_mgr.getWaterPresetName();
+ }
+
+ LLWaterParamManager::preset_name_list_t presets;
+ LLWaterParamManager::instance().getUserPresetNames(presets); // list only user presets
+ for (LLWaterParamManager::preset_name_list_t::const_iterator it = presets.begin(); it != presets.end(); ++it)
+ {
+ std::string name = *it;
+
+ bool enabled = (name != cur_preset); // don't allow deleting current preset
+ mPresetCombo->add(name, ADD_BOTTOM, enabled);
+ }
+
+ postPopulate();
+}
+
+void LLFloaterDeleteEnvPreset::populateSkyPresetsList()
+{
+ if (mKey.asString() != "sky") return;
+
+ mPresetCombo->removeall();
+
+ std::string cur_preset;
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (!env_mgr.getUseRegionSettings() && env_mgr.getUseFixedSky())
+ {
+ cur_preset = env_mgr.getSkyPresetName();
+ }
+
+ LLWLParamManager::preset_name_list_t user_presets;
+ LLWLParamManager::instance().getUserPresetNames(user_presets);
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ const std::string& name = *it;
+ mPresetCombo->add(name, ADD_BOTTOM, /*enabled = */ name != cur_preset);
+ }
+
+ postPopulate();
+}
+
+void LLFloaterDeleteEnvPreset::populateDayCyclesList()
+{
+ if (mKey.asString() != "day_cycle") return;
+
+ mPresetCombo->removeall();
+
+ std::string cur_day;
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (!env_mgr.getUseRegionSettings() && env_mgr.getUseDayCycle())
+ {
+ cur_day = env_mgr.getDayCycleName();
+ }
+
+ LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
+ LLDayCycleManager::preset_name_list_t user_days;
+ day_mgr.getUserPresetNames(user_days); // list only user presets
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ const std::string& name = *it;
+ mPresetCombo->add(name, ADD_BOTTOM, name != cur_day);
+ }
+
+ postPopulate();
+}
+
+void LLFloaterDeleteEnvPreset::postPopulate()
+{
+ // Handle empty list and empty selection.
+ bool has_selection = mPresetCombo->getItemCount() > 0 && mPresetCombo->getSelectedValue().isDefined();
+
+ if (!has_selection)
+ {
+ mPresetCombo->setLabel(getString("combo_label"));
+ }
+
+ getChild<LLButton>("delete")->setEnabled(has_selection);
+}
+
+void LLFloaterDeleteEnvPreset::onDeleteDayCycleConfirmation()
+{
+ LLDayCycleManager::instance().deletePreset(mPresetCombo->getValue().asString());
+}
+
+void LLFloaterDeleteEnvPreset::onDeleteSkyPresetConfirmation()
+{
+ LLWLParamKey key(mPresetCombo->getValue().asString(), LLEnvKey::SCOPE_LOCAL);
+ LLWLParamManager::instance().removeParamSet(key, true);
+}
+
+void LLFloaterDeleteEnvPreset::onDeleteWaterPresetConfirmation()
+{
+ LLWaterParamManager::instance().removeParamSet(mPresetCombo->getValue().asString(), true);
+}
diff --git a/indra/newview/llfloaterdeleteenvpreset.h b/indra/newview/llfloaterdeleteenvpreset.h
new file mode 100644
index 0000000000..1211505273
--- /dev/null
+++ b/indra/newview/llfloaterdeleteenvpreset.h
@@ -0,0 +1,62 @@
+/**
+ * @file llfloaterdeleteenvpreset.h
+ * @brief Floater to delete a water / sky / day cycle preset.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERDELETEENVPRESET_H
+#define LL_LLFLOATERDELETEENVPRESET_H
+
+#include "llfloater.h"
+
+class LLComboBox;
+
+class LLFloaterDeleteEnvPreset : public LLFloater
+{
+ LOG_CLASS(LLFloaterDeleteEnvPreset);
+
+public:
+ LLFloaterDeleteEnvPreset(const LLSD &key);
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ void onBtnDelete();
+ void onBtnCancel();
+
+private:
+ void populatePresetsList();
+ void populateWaterPresetsList();
+ void populateSkyPresetsList();
+ void populateDayCyclesList();
+
+ void postPopulate();
+
+ void onDeleteDayCycleConfirmation();
+ void onDeleteSkyPresetConfirmation();
+ void onDeleteWaterPresetConfirmation();
+
+ LLComboBox* mPresetCombo;
+};
+
+#endif // LL_LLFLOATERDELETEENVPRESET_H
diff --git a/indra/newview/llfloatereditdaycycle.cpp b/indra/newview/llfloatereditdaycycle.cpp
new file mode 100644
index 0000000000..b63677b258
--- /dev/null
+++ b/indra/newview/llfloatereditdaycycle.cpp
@@ -0,0 +1,825 @@
+/**
+ * @file llfloatereditdaycycle.cpp
+ * @brief Floater to create or edit a day cycle
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloatereditdaycycle.h"
+
+// libs
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llloadingindicator.h"
+#include "llmultisliderctrl.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llspinctrl.h"
+#include "lltimectrl.h"
+
+// newview
+#include "llagent.h"
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
+#include "llregioninfomodel.h"
+#include "llviewerregion.h"
+#include "llwlparammanager.h"
+
+const F32 LLFloaterEditDayCycle::sHoursPerDay = 24.0f;
+
+LLFloaterEditDayCycle::LLFloaterEditDayCycle(const LLSD &key)
+: LLFloater(key)
+, mDayCycleNameEditor(NULL)
+, mDayCyclesCombo(NULL)
+, mTimeSlider(NULL)
+, mKeysSlider(NULL)
+, mSkyPresetsCombo(NULL)
+, mTimeCtrl(NULL)
+, mMakeDefaultCheckBox(NULL)
+, mSaveButton(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEditDayCycle::postBuild()
+{
+ mDayCycleNameEditor = getChild<LLLineEditor>("day_cycle_name");
+ mDayCyclesCombo = getChild<LLComboBox>("day_cycle_combo");
+
+ mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
+ mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
+ mSkyPresetsCombo = getChild<LLComboBox>("WLSkyPresets");
+ mTimeCtrl = getChild<LLTimeCtrl>("time");
+ mSaveButton = getChild<LLButton>("save");
+ mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+
+ initCallbacks();
+
+ // add the time slider
+ mTimeSlider->addSlider();
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEditDayCycle::onOpen(const LLSD& key)
+{
+ bool new_day = isNewDay();
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string hint = getString(std::string("hint_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the hint at the top.
+ getChild<LLUICtrl>("hint")->setValue(hint);
+
+ // Hide the hint to the right of the combo if we're invoked to create a new preset.
+ getChildView("note")->setVisible(!new_day);
+
+ // Switch between the day cycle presets combobox and day cycle name input field.
+ mDayCyclesCombo->setVisible(!new_day);
+ mDayCycleNameEditor->setVisible(new_day);
+
+ // TODO: Make sure only one instance of the floater exists?
+
+ reset();
+}
+
+// virtual
+void LLFloaterEditDayCycle::onClose(bool app_quitting)
+{
+ if (!app_quitting) // there's no point to change environment if we're quitting
+ {
+ LLEnvManagerNew::instance().usePrefs(); // revert changes made to current day cycle
+ }
+}
+
+// virtual
+void LLFloaterEditDayCycle::draw()
+{
+ syncTimeSlider();
+ LLFloater::draw();
+}
+
+void LLFloaterEditDayCycle::initCallbacks(void)
+{
+ mDayCycleNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleNameEdited, this), NULL);
+ mDayCyclesCombo->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleSelected, this));
+ mDayCyclesCombo->setTextEntryCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleNameEdited, this));
+ mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onTimeSliderMoved, this));
+ mKeysSlider->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onKeyTimeMoved, this));
+ mTimeCtrl->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onKeyTimeChanged, this));
+ mSkyPresetsCombo->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onKeyPresetChanged, this));
+
+ getChild<LLButton>("WLAddKey")->setClickedCallback(boost::bind(&LLFloaterEditDayCycle::onAddKey, this));
+ getChild<LLButton>("WLDeleteKey")->setClickedCallback(boost::bind(&LLFloaterEditDayCycle::onDeleteKey, this));
+
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onBtnSave, this));
+ mSaveButton->setRightMouseDownCallback(boost::bind(&LLFloaterEditDayCycle::dumpTrack, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditDayCycle::onBtnCancel, this));
+
+ // Connect to env manager events.
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ env_mgr.setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsChange, this));
+ env_mgr.setRegionChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionChange, this));
+ env_mgr.setRegionSettingsAppliedCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsApplied, this, _1));
+
+ // Connect to day cycle manager events.
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterEditDayCycle::onDayCycleListChange, this));
+
+ // Connect to sky preset list changes.
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditDayCycle::onSkyPresetListChange, this));
+
+ // Connect to region info updates.
+ LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditDayCycle::onRegionInfoUpdate, this));
+}
+
+void LLFloaterEditDayCycle::syncTimeSlider()
+{
+ // set time
+ mTimeSlider->setCurSliderValue((F32)LLWLParamManager::getInstance()->mAnimator.getDayTime() * sHoursPerDay);
+}
+
+void LLFloaterEditDayCycle::loadTrack()
+{
+ // clear the slider
+ mKeysSlider->clear();
+ mSliderToKey.clear();
+
+ // add sliders
+
+ lldebugs << "Adding " << LLWLParamManager::getInstance()->mDay.mTimeMap.size() << " keys to slider" << llendl;
+
+ LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay;
+ for (std::map<F32, LLWLParamKey>::iterator it = cur_dayp.mTimeMap.begin(); it != cur_dayp.mTimeMap.end(); ++it)
+ {
+ addSliderKey(it->first * sHoursPerDay, it->second);
+ }
+
+ // set drop-down menu to match preset of currently-selected keyframe (one is automatically selected initially)
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+ if (strlen(cur_sldr.c_str()) > 0) // only do this if there is a curSldr, otherwise we put an invalid entry into the map
+ {
+ mSkyPresetsCombo->selectByValue(mSliderToKey[cur_sldr].keyframe.toStringVal());
+ }
+
+ syncTimeSlider();
+}
+
+void LLFloaterEditDayCycle::applyTrack()
+{
+ lldebugs << "Applying track (" << mSliderToKey.size() << ")" << llendl;
+
+ // if no keys, do nothing
+ if (mSliderToKey.size() == 0)
+ {
+ lldebugs << "No keys, not syncing" << llendl;
+ return;
+ }
+
+ llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+
+ // create a new animation track
+ LLWLParamManager::getInstance()->mDay.clearKeyframes();
+
+ // add the keys one by one
+ for (std::map<std::string, SliderKey>::iterator it = mSliderToKey.begin();
+ it != mSliderToKey.end(); ++it)
+ {
+ LLWLParamManager::getInstance()->mDay.addKeyframe(it->second.time / sHoursPerDay,
+ it->second.keyframe);
+ }
+
+ // set the param manager's track to the new one
+ LLWLParamManager::getInstance()->resetAnimator(
+ mTimeSlider->getCurSliderValue() / sHoursPerDay, false);
+
+ LLWLParamManager::getInstance()->mAnimator.update(
+ LLWLParamManager::getInstance()->mCurParams);
+}
+
+void LLFloaterEditDayCycle::refreshSkyPresetsList()
+{
+ // Don't allow selecting region skies for a local day cycle,
+ // because thus we may end up with invalid day cycle.
+ bool include_region_skies = getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION;
+
+ mSkyPresetsCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets;
+ LLWLParamManager::preset_name_list_t user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+ if (include_region_skies)
+ {
+ // Add region presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
+ {
+ std::string preset_name = *it;
+ std::string item_title = preset_name + " (" + getRegionName() + ")";
+ mSkyPresetsCombo->add(preset_name, LLWLParamKey(*it, LLEnvKey::SCOPE_REGION).toStringVal());
+ }
+
+ if (!region_presets.empty())
+ {
+ mSkyPresetsCombo->addSeparator();
+ }
+ }
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetsCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ if (!user_presets.empty())
+ {
+ mSkyPresetsCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetsCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ // set defaults on combo boxes
+ mSkyPresetsCombo->selectFirstItem();
+}
+
+void LLFloaterEditDayCycle::refreshDayCyclesList()
+{
+ llassert(isNewDay() == false);
+
+ mDayCyclesCombo->removeall();
+
+#if 0 // Disable editing existing day cycle until the workflow is clear enough.
+ const LLSD& region_day = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+ if (region_day.size() > 0)
+ {
+ LLWLParamKey key(getRegionName(), LLEnvKey::SCOPE_REGION);
+ mDayCyclesCombo->add(key.name, key.toLLSD());
+ mDayCyclesCombo->addSeparator();
+ }
+#endif
+
+ LLDayCycleManager::preset_name_list_t user_days, sys_days;
+ LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+
+ // Add user days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ if (user_days.size() > 0)
+ {
+ mDayCyclesCombo->addSeparator();
+ }
+
+ // Add system days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+ {
+ mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ mDayCyclesCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditDayCycle::onTimeSliderMoved()
+{
+ /// get the slider value
+ F32 val = mTimeSlider->getCurSliderValue() / sHoursPerDay;
+
+ // set the value, turn off animation
+ LLWLParamManager::getInstance()->mAnimator.setDayTime((F64)val);
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ // then call update once
+ LLWLParamManager::getInstance()->mAnimator.update(
+ LLWLParamManager::getInstance()->mCurParams);
+}
+
+void LLFloaterEditDayCycle::onKeyTimeMoved()
+{
+ if (mKeysSlider->getValue().size() == 0)
+ {
+ return;
+ }
+
+ // make sure we have a slider
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+ if (cur_sldr == "")
+ {
+ return;
+ }
+
+ F32 time24 = mKeysSlider->getCurSliderValue();
+
+ // check to see if a key exists
+ LLWLParamKey key = mSliderToKey[cur_sldr].keyframe;
+ lldebugs << "Setting key time: " << time24 << LL_ENDL;
+ mSliderToKey[cur_sldr].time = time24;
+
+ // if it exists, turn on check box
+ mSkyPresetsCombo->selectByValue(key.toStringVal());
+
+ mTimeCtrl->setTime24(time24);
+
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onKeyTimeChanged()
+{
+ // if no keys, skipped
+ if (mSliderToKey.size() == 0)
+ {
+ return;
+ }
+
+ F32 time24 = mTimeCtrl->getTime24();
+
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+ mKeysSlider->setCurSliderValue(time24, TRUE);
+ F32 time = mKeysSlider->getCurSliderValue() / sHoursPerDay;
+
+ // now set the key's time in the sliderToKey map
+ lldebugs << "Setting key time: " << time << LL_ENDL;
+ mSliderToKey[cur_sldr].time = time;
+
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onKeyPresetChanged()
+{
+ // do nothing if no sliders
+ if (mKeysSlider->getValue().size() == 0)
+ {
+ return;
+ }
+
+ // change the map
+
+ std::string stringVal = mSkyPresetsCombo->getSelectedValue().asString();
+ LLWLParamKey new_key(stringVal);
+ llassert(!new_key.name.empty());
+ const std::string& cur_sldr = mKeysSlider->getCurSlider();
+
+ // if null, don't use
+ if (cur_sldr == "")
+ {
+ return;
+ }
+
+ mSliderToKey[cur_sldr].keyframe = new_key;
+
+ // Apply changes to current day cycle.
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onAddKey()
+{
+ llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+
+ S32 max_sliders;
+ LLEnvKey::EScope scope = LLEnvKey::SCOPE_LOCAL; // *TODO: editing region day cycle
+ switch (scope)
+ {
+ case LLEnvKey::SCOPE_LOCAL:
+ max_sliders = 20; // *HACK this should be LLWLPacketScrubber::MAX_LOCAL_KEY_FRAMES;
+ break;
+ case LLEnvKey::SCOPE_REGION:
+ max_sliders = 12; // *HACK this should be LLWLPacketScrubber::MAX_REGION_KEY_FRAMES;
+ break;
+ default:
+ max_sliders = (S32) mKeysSlider->getMaxValue();
+ break;
+ }
+
+ if ((S32)mSliderToKey.size() >= max_sliders)
+ {
+ LLSD args;
+ args["SCOPE"] = LLEnvManagerNew::getScopeString(scope);
+ args["MAX"] = max_sliders;
+ LLNotificationsUtil::add("DayCycleTooManyKeyframes", args, LLSD(), LLNotificationFunctorRegistry::instance().DONOTHING);
+ return;
+ }
+
+ // add the slider key
+ std::string key_val = mSkyPresetsCombo->getSelectedValue().asString();
+ LLWLParamKey sky_params(key_val);
+ llassert(!sky_params.name.empty());
+
+ F32 time = mTimeSlider->getCurSliderValue();
+ addSliderKey(time, sky_params);
+
+ // apply the change to current day cycles
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::addSliderKey(F32 time, LLWLParamKey keyframe)
+{
+ // make a slider
+ const std::string& sldr_name = mKeysSlider->addSlider(time);
+ if (sldr_name.empty())
+ {
+ return;
+ }
+
+ // set the key
+ SliderKey newKey(keyframe, mKeysSlider->getCurSliderValue());
+
+ llassert_always(sldr_name != LLStringUtil::null);
+
+ // add to map
+ mSliderToKey.insert(std::pair<std::string, SliderKey>(sldr_name, newKey));
+
+ llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+}
+
+LLWLParamKey LLFloaterEditDayCycle::getSelectedDayCycle()
+{
+ LLWLParamKey dc_key;
+
+ if (mDayCycleNameEditor->getVisible())
+ {
+ dc_key.name = mDayCycleNameEditor->getText();
+ dc_key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ LLSD combo_val = mDayCyclesCombo->getValue();
+
+ if (!combo_val.isArray()) // manually typed text
+ {
+ dc_key.name = combo_val.asString();
+ dc_key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ dc_key.fromLLSD(combo_val);
+ }
+ }
+
+ return dc_key;
+}
+
+bool LLFloaterEditDayCycle::isNewDay() const
+{
+ return mKey.asString() == "new";
+}
+
+void LLFloaterEditDayCycle::dumpTrack()
+{
+ LL_DEBUGS("Windlight") << "Dumping day cycle" << LL_ENDL;
+
+ LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay;
+ for (std::map<F32, LLWLParamKey>::iterator it = cur_dayp.mTimeMap.begin(); it != cur_dayp.mTimeMap.end(); ++it)
+ {
+ F32 time = it->first * 24.0f;
+ S32 h = (S32) time;
+ S32 m = (S32) ((time - h) * 60.0f);
+ LL_DEBUGS("Windlight") << llformat("(%.3f) %02d:%02d", time, h, m) << " => " << it->second.name << LL_ENDL;
+ }
+}
+
+void LLFloaterEditDayCycle::enableEditing(bool enable)
+{
+ mSkyPresetsCombo->setEnabled(enable);
+ mTimeCtrl->setEnabled(enable);
+ getChild<LLPanel>("day_cycle_slider_panel")->setCtrlsEnabled(enable);
+ mSaveButton->setEnabled(enable);
+ mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditDayCycle::reset()
+{
+ // clear the slider
+ mKeysSlider->clear();
+ mSliderToKey.clear();
+
+ refreshSkyPresetsList();
+
+ if (isNewDay())
+ {
+ mDayCycleNameEditor->setValue(LLSD());
+ F32 time = 0.5f * sHoursPerDay;
+ mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+ mTimeSlider->setCurSliderValue(time);
+
+ addSliderKey(time, LLWLParamKey("Default", LLEnvKey::SCOPE_LOCAL));
+ onKeyTimeMoved(); // update the time control and sky sky combo
+
+ applyTrack();
+ }
+ else
+ {
+ refreshDayCyclesList();
+
+ // Disable controls until a day cycle to edit is selected.
+ enableEditing(false);
+ }
+}
+
+void LLFloaterEditDayCycle::saveRegionDayCycle()
+{
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay; // the day cycle being edited
+
+ // Get current day cycle and the sky preset it references.
+ LLSD day_cycle = cur_dayp.asLLSD();
+ LLSD sky_map;
+ cur_dayp.getSkyMap(sky_map);
+
+ // Apply it to the region.
+ LLEnvironmentSettings new_region_settings;
+ new_region_settings.saveParams(day_cycle, sky_map, env_mgr.getRegionSettings().getWaterParams(), 0.0f);
+
+#if 1
+ LLEnvManagerNew::instance().setRegionSettings(new_region_settings);
+#else // Temporary disabled ability to upload new region settings from the Day Cycle Editor.
+ if (!LLEnvManagerNew::instance().sendRegionSettings(new_region_settings))
+ {
+ llwarns << "Error applying region environment settings" << llendl;
+ return;
+ }
+
+ setApplyProgress(true);
+#endif
+}
+
+void LLFloaterEditDayCycle::setApplyProgress(bool started)
+{
+ LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
+
+ indicator->setVisible(started);
+
+ if (started)
+ {
+ indicator->start();
+ }
+ else
+ {
+ indicator->stop();
+ }
+}
+
+bool LLFloaterEditDayCycle::getApplyProgress() const
+{
+ return getChild<LLLoadingIndicator>("progress_indicator")->getVisible();
+}
+
+void LLFloaterEditDayCycle::onDeleteKey()
+{
+ if (mSliderToKey.size() == 0)
+ {
+ return;
+ }
+ else if (mSliderToKey.size() == 1)
+ {
+ LLNotifications::instance().add("EnvCannotDeleteLastDayCycleKey", LLSD(), LLSD());
+ return;
+ }
+
+ // delete from map
+ const std::string& sldr_name = mKeysSlider->getCurSlider();
+ std::map<std::string, SliderKey>::iterator mIt = mSliderToKey.find(sldr_name);
+ mSliderToKey.erase(mIt);
+
+ mKeysSlider->deleteCurSlider();
+
+ if (mSliderToKey.size() == 0)
+ {
+ return;
+ }
+
+ const std::string& name = mKeysSlider->getCurSlider();
+ mSkyPresetsCombo->selectByValue(mSliderToKey[name].keyframe.toStringVal());
+ F32 time24 = mSliderToKey[name].time;
+
+ mTimeCtrl->setTime24(time24);
+
+ applyTrack();
+}
+
+void LLFloaterEditDayCycle::onRegionSettingsChange()
+{
+ LL_DEBUGS("Windlight") << "Region settings changed" << LL_ENDL;
+
+ if (getApplyProgress()) // our region settings have being applied
+ {
+ setApplyProgress(false);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << "Changed environment preference to region settings" << llendl;
+ LLEnvManagerNew::instance().setUseRegionSettings(true);
+ }
+
+ closeFloater();
+ }
+}
+
+void LLFloaterEditDayCycle::onRegionChange()
+{
+ LL_DEBUGS("Windlight") << "Region changed" << LL_ENDL;
+
+ // If we're editing the region day cycle
+ if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
+ {
+ reset(); // undoes all unsaved changes
+ }
+}
+
+void LLFloaterEditDayCycle::onRegionSettingsApplied(bool success)
+{
+ LL_DEBUGS("Windlight") << "Region settings applied: " << success << LL_ENDL;
+
+ if (!success)
+ {
+ // stop progress indicator
+ setApplyProgress(false);
+ }
+}
+
+void LLFloaterEditDayCycle::onRegionInfoUpdate()
+{
+ LL_DEBUGS("Windlight") << "Region info updated" << LL_ENDL;
+ bool can_edit = true;
+
+ // If we've selected the region day cycle for editing.
+ if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
+ {
+ // check whether we have the access
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ enableEditing(can_edit);
+}
+
+void LLFloaterEditDayCycle::onDayCycleNameEdited()
+{
+ // Disable saving a day cycle having empty name.
+ LLWLParamKey key = getSelectedDayCycle();
+ mSaveButton->setEnabled(!key.name.empty());
+}
+
+void LLFloaterEditDayCycle::onDayCycleSelected()
+{
+ LLSD day_data;
+ LLWLParamKey dc_key = getSelectedDayCycle();
+ bool can_edit = true;
+
+ if (dc_key.scope == LLEnvKey::SCOPE_LOCAL)
+ {
+ if (!LLDayCycleManager::instance().getPreset(dc_key.name, day_data))
+ {
+ llwarns << "No day cycle named " << dc_key.name << llendl;
+ return;
+ }
+ }
+ else
+ {
+ day_data = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+ if (day_data.size() == 0)
+ {
+ llwarns << "Empty region day cycle" << llendl;
+ llassert(day_data.size() > 0);
+ return;
+ }
+
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ // We may need to add or remove region skies from the list.
+ refreshSkyPresetsList();
+
+ F32 slider_time = mTimeSlider->getCurSliderValue() / sHoursPerDay;
+ LLWLParamManager::instance().applyDayCycleParams(day_data, dc_key.scope, slider_time);
+ loadTrack();
+
+ enableEditing(can_edit);
+}
+
+void LLFloaterEditDayCycle::onBtnSave()
+{
+ LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
+ LLWLParamKey selected_day = getSelectedDayCycle();
+
+ if (selected_day.scope == LLEnvKey::SCOPE_REGION)
+ {
+ saveRegionDayCycle();
+ closeFloater();
+ return;
+ }
+
+ std::string name = selected_day.name;
+ if (name.empty())
+ {
+ // *TODO: show an alert
+ llwarns << "Empty day cycle name" << llendl;
+ return;
+ }
+
+ // Don't allow overwriting system presets.
+ if (day_mgr.isSystemPreset(name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ // Save, ask for confirmation for overwriting an existing preset.
+ if (day_mgr.presetExists(name))
+ {
+ LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditDayCycle::onSaveAnswer, this, _1, _2));
+ }
+ else
+ {
+ // new preset, hence no confirmation needed
+ onSaveConfirmed();
+ }
+}
+
+void LLFloaterEditDayCycle::onBtnCancel()
+{
+ closeFloater();
+}
+
+bool LLFloaterEditDayCycle::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ // If they choose save, do it. Otherwise, don't do anything
+ if (option == 0)
+ {
+ onSaveConfirmed();
+ }
+
+ return false;
+}
+
+void LLFloaterEditDayCycle::onSaveConfirmed()
+{
+ std::string name = getSelectedDayCycle().name;
+
+ // Save preset.
+ LLSD data = LLWLParamManager::instance().mDay.asLLSD();
+ LL_DEBUGS("Windlight") << "Saving day cycle " << name << ": " << data << LL_ENDL;
+ LLDayCycleManager::instance().savePreset(name, data);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << name << " is now the new preferred day cycle" << llendl;
+ LLEnvManagerNew::instance().setUseDayCycle(name);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterEditDayCycle::onDayCycleListChange()
+{
+ if (!isNewDay())
+ {
+ refreshDayCyclesList();
+ }
+}
+
+void LLFloaterEditDayCycle::onSkyPresetListChange()
+{
+ refreshSkyPresetsList();
+
+ // Refresh sliders from the currently visible day cycle.
+ loadTrack();
+}
+
+// static
+std::string LLFloaterEditDayCycle::getRegionName()
+{
+ return gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+}
diff --git a/indra/newview/llfloatereditdaycycle.h b/indra/newview/llfloatereditdaycycle.h
new file mode 100644
index 0000000000..e6e4fe39c1
--- /dev/null
+++ b/indra/newview/llfloatereditdaycycle.h
@@ -0,0 +1,137 @@
+/**
+ * @file llfloatereditdaycycle.h
+ * @brief Floater to create or edit a day cycle
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATEREDITDAYCYCLE_H
+#define LL_LLFLOATEREDITDAYCYCLE_H
+
+#include "llfloater.h"
+
+#include "llwlparammanager.h" // for LLWLParamKey
+
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
+class LLMultiSliderCtrl;
+class LLTimeCtrl;
+
+/**
+ * Floater for creating or editing a day cycle.
+ */
+class LLFloaterEditDayCycle : public LLFloater
+{
+ LOG_CLASS(LLFloaterEditDayCycle);
+
+public:
+ LLFloaterEditDayCycle(const LLSD &key);
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void draw();
+
+private:
+
+ /// sync the time slider with day cycle structure
+ void syncTimeSlider();
+
+ // makes sure key slider has what's in day cycle
+ void loadTrack();
+
+ /// makes sure day cycle data structure has what's in menu
+ void applyTrack();
+
+ /// refresh the sky presets combobox
+ void refreshSkyPresetsList();
+
+ /// refresh the day cycle combobox
+ void refreshDayCyclesList();
+
+ /// add a slider to the track
+ void addSliderKey(F32 time, LLWLParamKey keyframe);
+
+ void initCallbacks();
+ LLWLParamKey getSelectedDayCycle();
+ bool isNewDay() const;
+ void dumpTrack();
+ void enableEditing(bool enable);
+ void reset();
+ void saveRegionDayCycle();
+
+ void setApplyProgress(bool started);
+ bool getApplyProgress() const;
+
+ void onTimeSliderMoved(); /// time slider moved
+ void onKeyTimeMoved(); /// a key frame moved
+ void onKeyTimeChanged(); /// a key frame's time changed
+ void onKeyPresetChanged(); /// sky preset selected
+ void onAddKey(); /// new key added on slider
+ void onDeleteKey(); /// a key frame deleted
+
+ void onRegionSettingsChange();
+ void onRegionChange();
+ void onRegionSettingsApplied(bool success);
+ void onRegionInfoUpdate();
+
+ void onDayCycleNameEdited();
+ void onDayCycleSelected();
+ void onBtnSave();
+ void onBtnCancel();
+
+ bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+ void onSaveConfirmed();
+
+ void onDayCycleListChange();
+ void onSkyPresetListChange();
+
+ static std::string getRegionName();
+
+ /// convenience class for holding keyframes mapped to sliders
+ struct SliderKey
+ {
+ public:
+ SliderKey(LLWLParamKey kf, F32 t) : keyframe(kf), time(t) {}
+ SliderKey() : keyframe(), time(0.f) {} // Don't use this default constructor
+
+ LLWLParamKey keyframe;
+ F32 time;
+ };
+
+ static const F32 sHoursPerDay;
+
+ LLLineEditor* mDayCycleNameEditor;
+ LLComboBox* mDayCyclesCombo;
+ LLMultiSliderCtrl* mTimeSlider;
+ LLMultiSliderCtrl* mKeysSlider;
+ LLComboBox* mSkyPresetsCombo;
+ LLTimeCtrl* mTimeCtrl;
+ LLCheckBoxCtrl* mMakeDefaultCheckBox;
+ LLButton* mSaveButton;
+
+ // map of sliders to parameters
+ std::map<std::string, SliderKey> mSliderToKey;
+};
+
+#endif // LL_LLFLOATEREDITDAYCYCLE_H
diff --git a/indra/newview/llfloatereditsky.cpp b/indra/newview/llfloatereditsky.cpp
new file mode 100644
index 0000000000..abee7b5dc9
--- /dev/null
+++ b/indra/newview/llfloatereditsky.cpp
@@ -0,0 +1,923 @@
+/**
+ * @file llfloatereditsky.cpp
+ * @brief Floater to create or edit a sky preset
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloatereditsky.h"
+
+// libs
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llmultisliderctrl.h"
+#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llsliderctrl.h"
+#include "lltabcontainer.h"
+#include "lltimectrl.h"
+
+// newview
+#include "llagent.h"
+#include "llcolorswatch.h"
+#include "llregioninfomodel.h"
+#include "llviewerregion.h"
+
+static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
+static const F32 WL_BLUE_HORIZON_DENSITY_SCALE = 2.0f;
+static const F32 WL_CLOUD_SLIDER_SCALE = 1.0f;
+
+static F32 sun_pos_to_time24(F32 sun_pos)
+{
+ return fmodf(sun_pos * 24.0f + 6, 24.0f);
+}
+
+static F32 time24_to_sun_pos(F32 time24)
+{
+ F32 sun_pos = fmodf((time24 - 6) / 24.0f, 1.0f);
+ if (sun_pos < 0) ++sun_pos;
+ return sun_pos;
+}
+
+LLFloaterEditSky::LLFloaterEditSky(const LLSD &key)
+: LLFloater(key)
+, mSkyPresetNameEditor(NULL)
+, mSkyPresetCombo(NULL)
+, mMakeDefaultCheckBox(NULL)
+, mSaveButton(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEditSky::postBuild()
+{
+ mSkyPresetNameEditor = getChild<LLLineEditor>("sky_preset_name");
+ mSkyPresetCombo = getChild<LLComboBox>("sky_preset_combo");
+ mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+ mSaveButton = getChild<LLButton>("save");
+
+ initCallbacks();
+
+ // Create the sun position scrubber on the slider.
+ getChild<LLMultiSliderCtrl>("WLSunPos")->addSlider(12.f);
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEditSky::onOpen(const LLSD& key)
+{
+ bool new_preset = isNewPreset();
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string hint = getString(std::string("hint_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the hint at the top.
+ getChild<LLUICtrl>("hint")->setValue(hint);
+
+ // Hide the hint to the right of the combo if we're invoked to create a new preset.
+ getChildView("note")->setVisible(!new_preset);
+
+ // Switch between the sky presets combobox and preset name input field.
+ mSkyPresetCombo->setVisible(!new_preset);
+ mSkyPresetNameEditor->setVisible(new_preset);
+
+ reset();
+}
+
+// virtual
+void LLFloaterEditSky::onClose(bool app_quitting)
+{
+ if (!app_quitting) // there's no point to change environment if we're quitting
+ {
+ LLEnvManagerNew::instance().usePrefs(); // revert changes made to current environment
+ }
+}
+
+// virtual
+void LLFloaterEditSky::draw()
+{
+ syncControls();
+ LLFloater::draw();
+}
+
+void LLFloaterEditSky::initCallbacks(void)
+{
+ // *TODO: warn user if a region environment update comes while we're editing a region sky preset.
+
+ mSkyPresetNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditSky::onSkyPresetNameEdited, this), NULL);
+ mSkyPresetCombo->setCommitCallback(boost::bind(&LLFloaterEditSky::onSkyPresetSelected, this));
+ mSkyPresetCombo->setTextEntryCallback(boost::bind(&LLFloaterEditSky::onSkyPresetNameEdited, this));
+
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditSky::onBtnSave, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditSky::onBtnCancel, this));
+
+ LLEnvManagerNew::instance().setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditSky::onRegionSettingsChange, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditSky::onSkyPresetListChange, this));
+
+ // Connect to region info updates.
+ LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditSky::onRegionInfoUpdate, this));
+
+ //-------------------------------------------------------------------------
+
+ LLWLParamManager& param_mgr = LLWLParamManager::instance();
+
+ // blue horizon
+ getChild<LLUICtrl>("WLBlueHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mBlueHorizon));
+
+ // haze density, horizon, mult, and altitude
+ getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mHazeDensity));
+ getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mHazeHorizon));
+ getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mDensityMult));
+ getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mMaxAlt));
+
+ // blue density
+ getChild<LLUICtrl>("WLBlueDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mBlueDensity));
+
+ // Lighting
+
+ // sunlight
+ getChild<LLUICtrl>("WLSunlight")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mSunlight));
+
+ // glow
+ getChild<LLUICtrl>("WLGlowR")->setCommitCallback(boost::bind(&LLFloaterEditSky::onGlowRMoved, this, _1, &param_mgr.mGlow));
+ getChild<LLUICtrl>("WLGlowB")->setCommitCallback(boost::bind(&LLFloaterEditSky::onGlowBMoved, this, _1, &param_mgr.mGlow));
+
+ // ambient
+ getChild<LLUICtrl>("WLAmbient")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mAmbient));
+
+ // time of day
+ getChild<LLUICtrl>("WLSunPos")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunMoved, this, _1, &param_mgr.mLightnorm)); // multi-slider
+ getChild<LLTimeCtrl>("WLDayTime")->setCommitCallback(boost::bind(&LLFloaterEditSky::onTimeChanged, this)); // time ctrl
+ getChild<LLUICtrl>("WLEastAngle")->setCommitCallback(boost::bind(&LLFloaterEditSky::onSunMoved, this, _1, &param_mgr.mLightnorm));
+
+ // Clouds
+
+ // Cloud Color
+ getChild<LLUICtrl>("WLCloudColor")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, &param_mgr.mCloudColor));
+
+ // Cloud
+ getChild<LLUICtrl>("WLCloudX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mCloudMain));
+ getChild<LLUICtrl>("WLCloudY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlGMoved, this, _1, &param_mgr.mCloudMain));
+ getChild<LLUICtrl>("WLCloudDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlBMoved, this, _1, &param_mgr.mCloudMain));
+
+ // Cloud Detail
+ getChild<LLUICtrl>("WLCloudDetailX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, &param_mgr.mCloudDetail));
+ getChild<LLUICtrl>("WLCloudDetailY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlGMoved, this, _1, &param_mgr.mCloudDetail));
+ getChild<LLUICtrl>("WLCloudDetailDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlBMoved, this, _1, &param_mgr.mCloudDetail));
+
+ // Cloud extras
+ getChild<LLUICtrl>("WLCloudCoverage")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mCloudCoverage));
+ getChild<LLUICtrl>("WLCloudScale")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mCloudScale));
+ getChild<LLUICtrl>("WLCloudLockX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollXToggled, this, _1));
+ getChild<LLUICtrl>("WLCloudLockY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollYToggled, this, _1));
+ getChild<LLUICtrl>("WLCloudScrollX")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollXMoved, this, _1));
+ getChild<LLUICtrl>("WLCloudScrollY")->setCommitCallback(boost::bind(&LLFloaterEditSky::onCloudScrollYMoved, this, _1));
+ getChild<LLUICtrl>("WLDistanceMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mDistanceMult));
+
+ // Dome
+ getChild<LLUICtrl>("WLGamma")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, &param_mgr.mWLGamma));
+ getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterEditSky::onStarAlphaMoved, this, _1));
+}
+
+//=================================================================================================
+
+void LLFloaterEditSky::syncControls()
+{
+ bool err;
+
+ LLWLParamManager * param_mgr = LLWLParamManager::getInstance();
+
+ LLWLParamSet& cur_params = param_mgr->mCurParams;
+
+ // blue horizon
+ param_mgr->mBlueHorizon = cur_params.getVector(param_mgr->mBlueHorizon.mName, err);
+ setColorSwatch("WLBlueHorizon", param_mgr->mBlueHorizon, WL_BLUE_HORIZON_DENSITY_SCALE);
+
+ // haze density, horizon, mult, and altitude
+ param_mgr->mHazeDensity = cur_params.getVector(param_mgr->mHazeDensity.mName, err);
+ childSetValue("WLHazeDensity", param_mgr->mHazeDensity.r);
+ param_mgr->mHazeHorizon = cur_params.getVector(param_mgr->mHazeHorizon.mName, err);
+ childSetValue("WLHazeHorizon", param_mgr->mHazeHorizon.r);
+ param_mgr->mDensityMult = cur_params.getVector(param_mgr->mDensityMult.mName, err);
+ childSetValue("WLDensityMult", param_mgr->mDensityMult.x *
+ param_mgr->mDensityMult.mult);
+ param_mgr->mMaxAlt = cur_params.getVector(param_mgr->mMaxAlt.mName, err);
+ childSetValue("WLMaxAltitude", param_mgr->mMaxAlt.x);
+
+ // blue density
+ param_mgr->mBlueDensity = cur_params.getVector(param_mgr->mBlueDensity.mName, err);
+ setColorSwatch("WLBlueDensity", param_mgr->mBlueDensity, WL_BLUE_HORIZON_DENSITY_SCALE);
+
+ // Lighting
+
+ // sunlight
+ param_mgr->mSunlight = cur_params.getVector(param_mgr->mSunlight.mName, err);
+ setColorSwatch("WLSunlight", param_mgr->mSunlight, WL_SUN_AMBIENT_SLIDER_SCALE);
+
+ // glow
+ param_mgr->mGlow = cur_params.getVector(param_mgr->mGlow.mName, err);
+ childSetValue("WLGlowR", 2 - param_mgr->mGlow.r / 20.0f);
+ childSetValue("WLGlowB", -param_mgr->mGlow.b / 5.0f);
+
+ // ambient
+ param_mgr->mAmbient = cur_params.getVector(param_mgr->mAmbient.mName, err);
+ setColorSwatch("WLAmbient", param_mgr->mAmbient, WL_SUN_AMBIENT_SLIDER_SCALE);
+
+ F32 time24 = sun_pos_to_time24(param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI);
+ getChild<LLMultiSliderCtrl>("WLSunPos")->setCurSliderValue(time24, TRUE);
+ getChild<LLTimeCtrl>("WLDayTime")->setTime24(time24);
+ childSetValue("WLEastAngle", param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI);
+
+ // Clouds
+
+ // Cloud Color
+ param_mgr->mCloudColor = cur_params.getVector(param_mgr->mCloudColor.mName, err);
+ setColorSwatch("WLCloudColor", param_mgr->mCloudColor, WL_CLOUD_SLIDER_SCALE);
+
+ // Cloud
+ param_mgr->mCloudMain = cur_params.getVector(param_mgr->mCloudMain.mName, err);
+ childSetValue("WLCloudX", param_mgr->mCloudMain.r);
+ childSetValue("WLCloudY", param_mgr->mCloudMain.g);
+ childSetValue("WLCloudDensity", param_mgr->mCloudMain.b);
+
+ // Cloud Detail
+ param_mgr->mCloudDetail = cur_params.getVector(param_mgr->mCloudDetail.mName, err);
+ childSetValue("WLCloudDetailX", param_mgr->mCloudDetail.r);
+ childSetValue("WLCloudDetailY", param_mgr->mCloudDetail.g);
+ childSetValue("WLCloudDetailDensity", param_mgr->mCloudDetail.b);
+
+ // Cloud extras
+ param_mgr->mCloudCoverage = cur_params.getVector(param_mgr->mCloudCoverage.mName, err);
+ param_mgr->mCloudScale = cur_params.getVector(param_mgr->mCloudScale.mName, err);
+ childSetValue("WLCloudCoverage", param_mgr->mCloudCoverage.x);
+ childSetValue("WLCloudScale", param_mgr->mCloudScale.x);
+
+ // cloud scrolling
+ bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX();
+ bool lockY = !param_mgr->mCurParams.getEnableCloudScrollY();
+ childSetValue("WLCloudLockX", lockX);
+ childSetValue("WLCloudLockY", lockY);
+
+ // disable if locked, enable if not
+ if (lockX)
+ {
+ childDisable("WLCloudScrollX");
+ }
+ else
+ {
+ childEnable("WLCloudScrollX");
+ }
+ if (lockY)
+ {
+ childDisable("WLCloudScrollY");
+ }
+ else
+ {
+ childEnable("WLCloudScrollY");
+ }
+
+ // *HACK cloud scrolling is off my an additive of 10
+ childSetValue("WLCloudScrollX", param_mgr->mCurParams.getCloudScrollX() - 10.0f);
+ childSetValue("WLCloudScrollY", param_mgr->mCurParams.getCloudScrollY() - 10.0f);
+
+ param_mgr->mDistanceMult = cur_params.getVector(param_mgr->mDistanceMult.mName, err);
+ childSetValue("WLDistanceMult", param_mgr->mDistanceMult.x);
+
+ // Tweak extras
+
+ param_mgr->mWLGamma = cur_params.getVector(param_mgr->mWLGamma.mName, err);
+ childSetValue("WLGamma", param_mgr->mWLGamma.x);
+
+ childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness());
+}
+
+void LLFloaterEditSky::setColorSwatch(const std::string& name, const WLColorControl& from_ctrl, F32 k)
+{
+ // Set the value, dividing it by <k> first.
+ LLVector4 color_vec = from_ctrl;
+ getChild<LLColorSwatchCtrl>(name)->set(LLColor4(color_vec / k));
+}
+
+// color control callbacks
+void LLFloaterEditSky::onColorControlMoved(LLUICtrl* ctrl, WLColorControl* color_ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
+ LLVector4 color_vec(swatch->get().mV);
+
+ // Set intensity to maximum of the RGB values.
+ color_vec.mV[3] = llmax(color_vec.mV[0], llmax(color_vec.mV[1], color_vec.mV[2]));
+
+ // Multiply RGB values by the appropriate factor.
+ F32 k = WL_CLOUD_SLIDER_SCALE;
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ k = WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ k = WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ color_vec *= k; // intensity isn't affected by the multiplication
+
+ // Apply the new RGBI value.
+ *color_ctrl = color_vec;
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onColorControlRMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ color_ctrl->r = sldr_ctrl->getValueF32();
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ color_ctrl->r *= WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ color_ctrl->r *= WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ // move i if it's the max
+ if (color_ctrl->r >= color_ctrl->g && color_ctrl->r >= color_ctrl->b && color_ctrl->hasSliderName)
+ {
+ color_ctrl->i = color_ctrl->r;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ childSetValue(name, color_ctrl->r / WL_SUN_AMBIENT_SLIDER_SCALE);
+ }
+ else if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ childSetValue(name, color_ctrl->r / WL_BLUE_HORIZON_DENSITY_SCALE);
+ }
+ else
+ {
+ childSetValue(name, color_ctrl->r);
+ }
+ }
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onColorControlGMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ color_ctrl->g = sldr_ctrl->getValueF32();
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ color_ctrl->g *= WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ color_ctrl->g *= WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ // move i if it's the max
+ if (color_ctrl->g >= color_ctrl->r && color_ctrl->g >= color_ctrl->b && color_ctrl->hasSliderName)
+ {
+ color_ctrl->i = color_ctrl->g;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ childSetValue(name, color_ctrl->g / WL_SUN_AMBIENT_SLIDER_SCALE);
+ }
+ else if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ childSetValue(name, color_ctrl->g / WL_BLUE_HORIZON_DENSITY_SCALE);
+ }
+ else
+ {
+ childSetValue(name, color_ctrl->g);
+ }
+ }
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onColorControlBMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ color_ctrl->b = sldr_ctrl->getValueF32();
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ color_ctrl->b *= WL_SUN_AMBIENT_SLIDER_SCALE;
+ }
+ if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ color_ctrl->b *= WL_BLUE_HORIZON_DENSITY_SCALE;
+ }
+
+ // move i if it's the max
+ if (color_ctrl->b >= color_ctrl->r && color_ctrl->b >= color_ctrl->g && color_ctrl->hasSliderName)
+ {
+ color_ctrl->i = color_ctrl->b;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ if (color_ctrl->isSunOrAmbientColor)
+ {
+ childSetValue(name, color_ctrl->b / WL_SUN_AMBIENT_SLIDER_SCALE);
+ }
+ else if (color_ctrl->isBlueHorizonOrDensity)
+ {
+ childSetValue(name, color_ctrl->b / WL_BLUE_HORIZON_DENSITY_SCALE);
+ }
+ else
+ {
+ childSetValue(name, color_ctrl->b);
+ }
+ }
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+/// GLOW SPECIFIC CODE
+void LLFloaterEditSky::onGlowRMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ // scaled by 20
+ color_ctrl->r = (2 - sldr_ctrl->getValueF32()) * 20;
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+/// \NOTE that we want NEGATIVE (-) B
+void LLFloaterEditSky::onGlowBMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ /// \NOTE that we want NEGATIVE (-) B and NOT by 20 as 20 is too big
+ color_ctrl->b = -sldr_ctrl->getValueF32() * 5;
+
+ color_ctrl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditSky::onFloatControlMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ WLFloatControl * floatControl = static_cast<WLFloatControl *>(userdata);
+
+ floatControl->x = sldr_ctrl->getValueF32() / floatControl->mult;
+
+ floatControl->update(LLWLParamManager::getInstance()->mCurParams);
+ LLWLParamManager::getInstance()->propagateParameters();
+}
+
+
+// Lighting callbacks
+
+// time of day
+void LLFloaterEditSky::onSunMoved(LLUICtrl* ctrl, void* userdata)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLMultiSliderCtrl* sun_msldr = getChild<LLMultiSliderCtrl>("WLSunPos");
+ LLSliderCtrl* east_sldr = getChild<LLSliderCtrl>("WLEastAngle");
+ LLTimeCtrl* time_ctrl = getChild<LLTimeCtrl>("WLDayTime");
+ WLColorControl* color_ctrl = static_cast<WLColorControl *>(userdata);
+
+ F32 time24 = sun_msldr->getCurSliderValue();
+ time_ctrl->setTime24(time24); // sync the time ctrl with the new sun position
+
+ // get the two angles
+ LLWLParamManager * param_mgr = LLWLParamManager::getInstance();
+
+ param_mgr->mCurParams.setSunAngle(F_TWO_PI * time24_to_sun_pos(time24));
+ param_mgr->mCurParams.setEastAngle(F_TWO_PI * east_sldr->getValueF32());
+
+ // set the sun vector
+ color_ctrl->r = -sin(param_mgr->mCurParams.getEastAngle()) *
+ cos(param_mgr->mCurParams.getSunAngle());
+ color_ctrl->g = sin(param_mgr->mCurParams.getSunAngle());
+ color_ctrl->b = cos(param_mgr->mCurParams.getEastAngle()) *
+ cos(param_mgr->mCurParams.getSunAngle());
+ color_ctrl->i = 1.f;
+
+ color_ctrl->update(param_mgr->mCurParams);
+ param_mgr->propagateParameters();
+}
+
+void LLFloaterEditSky::onTimeChanged()
+{
+ F32 time24 = getChild<LLTimeCtrl>("WLDayTime")->getTime24();
+ getChild<LLMultiSliderCtrl>("WLSunPos")->setCurSliderValue(time24, TRUE);
+ onSunMoved(getChild<LLUICtrl>("WLSunPos"), &LLWLParamManager::instance().mLightnorm);
+}
+
+void LLFloaterEditSky::onStarAlphaMoved(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ LLWLParamManager::getInstance()->mCurParams.setStarBrightness(sldr_ctrl->getValueF32());
+}
+
+// Clouds
+void LLFloaterEditSky::onCloudScrollXMoved(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+ // *HACK all cloud scrolling is off by an additive of 10.
+ LLWLParamManager::getInstance()->mCurParams.setCloudScrollX(sldr_ctrl->getValueF32() + 10.0f);
+}
+
+void LLFloaterEditSky::onCloudScrollYMoved(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ // *HACK all cloud scrolling is off by an additive of 10.
+ LLWLParamManager::getInstance()->mCurParams.setCloudScrollY(sldr_ctrl->getValueF32() + 10.0f);
+}
+
+void LLFloaterEditSky::onCloudScrollXToggled(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLCheckBoxCtrl* cb_ctrl = static_cast<LLCheckBoxCtrl*>(ctrl);
+
+ bool lock = cb_ctrl->get();
+ LLWLParamManager::getInstance()->mCurParams.setEnableCloudScrollX(!lock);
+
+ LLSliderCtrl* sldr = getChild<LLSliderCtrl>("WLCloudScrollX");
+
+ if (cb_ctrl->get())
+ {
+ sldr->setEnabled(false);
+ }
+ else
+ {
+ sldr->setEnabled(true);
+ }
+
+}
+
+void LLFloaterEditSky::onCloudScrollYToggled(LLUICtrl* ctrl)
+{
+ LLWLParamManager::getInstance()->mAnimator.deactivate();
+
+ LLCheckBoxCtrl* cb_ctrl = static_cast<LLCheckBoxCtrl*>(ctrl);
+ bool lock = cb_ctrl->get();
+ LLWLParamManager::getInstance()->mCurParams.setEnableCloudScrollY(!lock);
+
+ LLSliderCtrl* sldr = getChild<LLSliderCtrl>("WLCloudScrollY");
+
+ if (cb_ctrl->get())
+ {
+ sldr->setEnabled(false);
+ }
+ else
+ {
+ sldr->setEnabled(true);
+ }
+}
+
+//=================================================================================================
+
+void LLFloaterEditSky::reset()
+{
+ if (isNewPreset())
+ {
+ mSkyPresetNameEditor->setValue(LLSD());
+ mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+ }
+ else
+ {
+ refreshSkyPresetsList();
+
+ // Disable controls until a sky preset to edit is selected.
+ enableEditing(false);
+ }
+}
+
+bool LLFloaterEditSky::isNewPreset() const
+{
+ return mKey.asString() == "new";
+}
+
+void LLFloaterEditSky::refreshSkyPresetsList()
+{
+ mSkyPresetCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets, user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+#if 0 // Disable editing region skies until the workflow is clear enough.
+ // Add region presets.
+ std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
+ {
+ std::string item_title = *it + " (" + region_name + ")";
+ mSkyPresetCombo->add(item_title, LLWLParamKey(*it, LLEnvKey::SCOPE_REGION).toLLSD());
+ }
+ if (region_presets.size() > 0)
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+#endif
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+ if (user_presets.size() > 0)
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ mSkyPresetCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditSky::enableEditing(bool enable)
+{
+ // Enable/disable the tab and their contents.
+ LLTabContainer* tab_container = getChild<LLTabContainer>("WindLight Tabs");
+ tab_container->setEnabled(enable);
+ for (S32 i = 0; i < tab_container->getTabCount(); ++i)
+ {
+ tab_container->enableTabButton(i, enable);
+ tab_container->getPanelByIndex(i)->setCtrlsEnabled(enable);
+ }
+
+ // Enable/disable saving.
+ mSaveButton->setEnabled(enable);
+ mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditSky::saveRegionSky()
+{
+ LLWLParamKey key(getSelectedSkyPreset());
+ llassert(key.scope == LLEnvKey::SCOPE_REGION);
+
+ LL_DEBUGS("Windlight") << "Saving region sky preset: " << key.name << llendl;
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+ wl_mgr.mCurParams.mName = key.name;
+ wl_mgr.setParamSet(key, wl_mgr.mCurParams);
+
+ // *TODO: save to cached region settings.
+ LL_WARNS("Windlight") << "Saving region sky is not fully implemented yet" << LL_ENDL;
+}
+
+LLWLParamKey LLFloaterEditSky::getSelectedSkyPreset()
+{
+ LLWLParamKey key;
+
+ if (mSkyPresetNameEditor->getVisible())
+ {
+ key.name = mSkyPresetNameEditor->getText();
+ key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ LLSD combo_val = mSkyPresetCombo->getValue();
+
+ if (!combo_val.isArray()) // manually typed text
+ {
+ key.name = combo_val.asString();
+ key.scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ key.fromLLSD(combo_val);
+ }
+ }
+
+ return key;
+}
+
+void LLFloaterEditSky::onSkyPresetNameEdited()
+{
+ // Disable saving a sky preset having empty name.
+ LLWLParamKey key = getSelectedSkyPreset();
+ mSaveButton->setEnabled(!key.name.empty());
+}
+
+void LLFloaterEditSky::onSkyPresetSelected()
+{
+ LLWLParamKey key = getSelectedSkyPreset();
+ LLWLParamSet sky_params;
+
+ if (!LLWLParamManager::instance().getParamSet(key, sky_params))
+ {
+ // Manually entered string?
+ LL_WARNS("Windlight") << "No sky preset named " << key.toString() << LL_ENDL;
+ return;
+ }
+
+ LLEnvManagerNew::instance().useSkyParams(sky_params.getAll());
+ //syncControls();
+
+ bool can_edit = (key.scope == LLEnvKey::SCOPE_LOCAL || LLEnvManagerNew::canEditRegionSettings());
+ enableEditing(can_edit);
+
+ mMakeDefaultCheckBox->setEnabled(key.scope == LLEnvKey::SCOPE_LOCAL);
+}
+
+bool LLFloaterEditSky::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ // If they choose save, do it. Otherwise, don't do anything
+ if (option == 0)
+ {
+ onSaveConfirmed();
+ }
+
+ return false;
+}
+
+void LLFloaterEditSky::onSaveConfirmed()
+{
+ // Save current params to the selected preset.
+ LLWLParamKey key(getSelectedSkyPreset());
+
+ LL_DEBUGS("Windlight") << "Saving sky preset " << key.name << LL_ENDL;
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+ if (wl_mgr.hasParamSet(key))
+ {
+ wl_mgr.setParamSet(key, wl_mgr.mCurParams);
+ }
+ else
+ {
+ wl_mgr.addParamSet(key, wl_mgr.mCurParams);
+ }
+
+ wl_mgr.savePreset(key);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << key.name << " is now the new preferred sky preset" << llendl;
+ LLEnvManagerNew::instance().setUseSkyPreset(key.name);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterEditSky::onBtnSave()
+{
+ LLWLParamKey selected_sky = getSelectedSkyPreset();
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+
+ if (selected_sky.scope == LLEnvKey::SCOPE_REGION)
+ {
+ saveRegionSky();
+ closeFloater();
+ return;
+ }
+
+ std::string name = selected_sky.name;
+ if (name.empty())
+ {
+ // *TODO: show an alert
+ llwarns << "Empty sky preset name" << llendl;
+ return;
+ }
+
+ // Don't allow overwriting system presets.
+ if (wl_mgr.isSystemPreset(name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ // Save, ask for confirmation for overwriting an existing preset.
+ if (wl_mgr.hasParamSet(selected_sky))
+ {
+ LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditSky::onSaveAnswer, this, _1, _2));
+ }
+ else
+ {
+ // new preset, hence no confirmation needed
+ onSaveConfirmed();
+ }
+}
+
+void LLFloaterEditSky::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterEditSky::onSkyPresetListChange()
+{
+ LLWLParamKey key = getSelectedSkyPreset(); // preset being edited
+ if (!LLWLParamManager::instance().hasParamSet(key))
+ {
+ // Preset we've been editing doesn't exist anymore. Close the floater.
+ closeFloater(false);
+ }
+ else
+ {
+ // A new preset has been added.
+ // Refresh the presets list, though it may not make sense as the floater is about to be closed.
+ refreshSkyPresetsList();
+ }
+}
+
+void LLFloaterEditSky::onRegionSettingsChange()
+{
+ // If creating a new sky, don't bother.
+ if (isNewPreset())
+ {
+ return;
+ }
+
+ if (getSelectedSkyPreset().scope == LLEnvKey::SCOPE_REGION) // if editing a region sky
+ {
+ // reset the floater to its initial state
+ reset();
+
+ // *TODO: Notify user?
+ }
+ else // editing a local sky
+ {
+ refreshSkyPresetsList();
+ }
+}
+
+void LLFloaterEditSky::onRegionInfoUpdate()
+{
+ bool can_edit = true;
+
+ // If we've selected a region sky preset for editing.
+ if (getSelectedSkyPreset().scope == LLEnvKey::SCOPE_REGION)
+ {
+ // check whether we have the access
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ enableEditing(can_edit);
+}
diff --git a/indra/newview/llfloatereditsky.h b/indra/newview/llfloatereditsky.h
new file mode 100644
index 0000000000..a06c4fc5fa
--- /dev/null
+++ b/indra/newview/llfloatereditsky.h
@@ -0,0 +1,113 @@
+/**
+ * @file llfloatereditsky.h
+ * @brief Floater to create or edit a sky preset
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATEREDITSKY_H
+#define LL_LLFLOATEREDITSKY_H
+
+#include "llfloater.h"
+#include "llwlparammanager.h"
+
+class LLButton;
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
+
+/**
+ * Floater for creating or editing a sky preset.
+ */
+class LLFloaterEditSky : public LLFloater
+{
+ LOG_CLASS(LLFloaterEditSky);
+
+public:
+ LLFloaterEditSky(const LLSD &key);
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void draw();
+
+private:
+ void initCallbacks(void);
+
+ //-- WL stuff begins ------------------------------------------------------
+
+ void syncControls(); /// sync up sliders with parameters
+
+ void setColorSwatch(const std::string& name, const WLColorControl& from_ctrl, F32 k);
+
+ // general purpose callbacks for dealing with color controllers
+ void onColorControlMoved(LLUICtrl* ctrl, WLColorControl* color_ctrl);
+ void onColorControlRMoved(LLUICtrl* ctrl, void* userdata);
+ void onColorControlGMoved(LLUICtrl* ctrl, void* userdata);
+ void onColorControlBMoved(LLUICtrl* ctrl, void* userdata);
+ void onFloatControlMoved(LLUICtrl* ctrl, void* userdata);
+
+ // lighting callbacks for glow
+ void onGlowRMoved(LLUICtrl* ctrl, void* userdata);
+ void onGlowBMoved(LLUICtrl* ctrl, void* userdata);
+
+ // lighting callbacks for sun
+ void onSunMoved(LLUICtrl* ctrl, void* userdata);
+ void onTimeChanged();
+
+ // for handling when the star slider is moved to adjust the alpha
+ void onStarAlphaMoved(LLUICtrl* ctrl);
+
+ // handle cloud scrolling
+ void onCloudScrollXMoved(LLUICtrl* ctrl);
+ void onCloudScrollYMoved(LLUICtrl* ctrl);
+ void onCloudScrollXToggled(LLUICtrl* ctrl);
+ void onCloudScrollYToggled(LLUICtrl* ctrl);
+
+ //-- WL stuff ends --------------------------------------------------------
+
+ void reset(); /// reset the floater to its initial state
+ bool isNewPreset() const;
+ void refreshSkyPresetsList();
+ void enableEditing(bool enable);
+ void saveRegionSky();
+ LLWLParamKey getSelectedSkyPreset();
+
+ void onSkyPresetNameEdited();
+ void onSkyPresetSelected();
+ bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+ void onSaveConfirmed();
+
+ void onBtnSave();
+ void onBtnCancel();
+
+ void onSkyPresetListChange();
+ void onRegionSettingsChange();
+ void onRegionInfoUpdate();
+
+ LLLineEditor* mSkyPresetNameEditor;
+ LLComboBox* mSkyPresetCombo;
+ LLCheckBoxCtrl* mMakeDefaultCheckBox;
+ LLButton* mSaveButton;
+};
+
+#endif // LL_LLFLOATEREDITSKY_H
diff --git a/indra/newview/llfloatereditwater.cpp b/indra/newview/llfloatereditwater.cpp
new file mode 100644
index 0000000000..64cfc4054f
--- /dev/null
+++ b/indra/newview/llfloatereditwater.cpp
@@ -0,0 +1,772 @@
+/**
+ * @file llfloatereditwater.cpp
+ * @brief Floater to create or edit a water preset
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloatereditwater.h"
+
+// libs
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcolorswatch.h"
+#include "llcombobox.h"
+//#include "llnotifications.h"
+#include "llnotificationsutil.h"
+#include "llsliderctrl.h"
+#include "lltexturectrl.h"
+
+// newview
+#include "llagent.h"
+#include "llregioninfomodel.h"
+#include "llviewerregion.h"
+#include "llwaterparammanager.h"
+
+#undef max // Fixes a Windows compiler error
+
+LLFloaterEditWater::LLFloaterEditWater(const LLSD &key)
+: LLFloater(key)
+, mWaterPresetNameEditor(NULL)
+, mWaterPresetCombo(NULL)
+, mMakeDefaultCheckBox(NULL)
+, mSaveButton(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEditWater::postBuild()
+{
+ mWaterPresetNameEditor = getChild<LLLineEditor>("water_preset_name");
+ mWaterPresetCombo = getChild<LLComboBox>("water_preset_combo");
+ mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
+ mSaveButton = getChild<LLButton>("save");
+
+ initCallbacks();
+ refreshWaterPresetsList();
+ syncControls();
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEditWater::onOpen(const LLSD& key)
+{
+ bool new_preset = isNewPreset();
+ std::string param = key.asString();
+ std::string floater_title = getString(std::string("title_") + param);
+ std::string hint = getString(std::string("hint_" + param));
+
+ // Update floater title.
+ setTitle(floater_title);
+
+ // Update the hint at the top.
+ getChild<LLUICtrl>("hint")->setValue(hint);
+
+ // Hide the hint to the right of the combo if we're invoked to create a new preset.
+ getChildView("note")->setVisible(!new_preset);
+
+ // Switch between the water presets combobox and preset name input field.
+ mWaterPresetCombo->setVisible(!new_preset);
+ mWaterPresetNameEditor->setVisible(new_preset);
+
+ reset();
+}
+
+// virtual
+void LLFloaterEditWater::onClose(bool app_quitting)
+{
+ if (!app_quitting) // there's no point to change environment if we're quitting
+ {
+ LLEnvManagerNew::instance().usePrefs(); // revert changes made to current environment
+ }
+}
+
+// virtual
+void LLFloaterEditWater::draw()
+{
+ syncControls();
+ LLFloater::draw();
+}
+
+void LLFloaterEditWater::initCallbacks(void)
+{
+ mWaterPresetNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditWater::onWaterPresetNameEdited, this), NULL);
+ mWaterPresetCombo->setCommitCallback(boost::bind(&LLFloaterEditWater::onWaterPresetSelected, this));
+ mWaterPresetCombo->setTextEntryCallback(boost::bind(&LLFloaterEditWater::onWaterPresetNameEdited, this));
+
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditWater::onBtnSave, this));
+ getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditWater::onBtnCancel, this));
+
+ LLEnvManagerNew::instance().setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditWater::onRegionSettingsChange, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditWater::onWaterPresetListChange, this));
+
+ // Connect to region info updates.
+ LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditWater::onRegionInfoUpdate, this));
+
+ //-------------------------------------------------------------------------
+
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+
+ getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterEditWater::onWaterFogColorMoved, this, _1, &water_mgr.mFogColor));
+ //getChild<LLUICtrl>("WaterGlow")->setCommitCallback(boost::bind(&LLFloaterEditWater::onColorControlAMoved, this, _1, &water_mgr.mFogColor));
+
+ // fog density
+ getChild<LLUICtrl>("WaterFogDensity")->setCommitCallback(boost::bind(&LLFloaterEditWater::onExpFloatControlMoved, this, _1, &water_mgr.mFogDensity));
+ getChild<LLUICtrl>("WaterUnderWaterFogMod")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mUnderWaterFogMod));
+
+ // blue density
+ getChild<LLUICtrl>("WaterNormalScaleX")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector3ControlXMoved, this, _1, &water_mgr.mNormalScale));
+ getChild<LLUICtrl>("WaterNormalScaleY")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector3ControlYMoved, this, _1, &water_mgr.mNormalScale));
+ getChild<LLUICtrl>("WaterNormalScaleZ")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector3ControlZMoved, this, _1, &water_mgr.mNormalScale));
+
+ // fresnel
+ getChild<LLUICtrl>("WaterFresnelScale")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mFresnelScale));
+ getChild<LLUICtrl>("WaterFresnelOffset")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mFresnelOffset));
+
+ // scale above/below
+ getChild<LLUICtrl>("WaterScaleAbove")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mScaleAbove));
+ getChild<LLUICtrl>("WaterScaleBelow")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mScaleBelow));
+
+ // blur mult
+ getChild<LLUICtrl>("WaterBlurMult")->setCommitCallback(boost::bind(&LLFloaterEditWater::onFloatControlMoved, this, _1, &water_mgr.mBlurMultiplier));
+
+ // wave direction
+ getChild<LLUICtrl>("WaterWave1DirX")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlXMoved, this, _1, &water_mgr.mWave1Dir));
+ getChild<LLUICtrl>("WaterWave1DirY")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlYMoved, this, _1, &water_mgr.mWave1Dir));
+ getChild<LLUICtrl>("WaterWave2DirX")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlXMoved, this, _1, &water_mgr.mWave2Dir));
+ getChild<LLUICtrl>("WaterWave2DirY")->setCommitCallback(boost::bind(&LLFloaterEditWater::onVector2ControlYMoved, this, _1, &water_mgr.mWave2Dir));
+
+ LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("WaterNormalMap");
+ texture_ctrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL);
+ texture_ctrl->setCommitCallback(boost::bind(&LLFloaterEditWater::onNormalMapPicked, this, _1));
+}
+
+//=============================================================================
+
+void LLFloaterEditWater::syncControls()
+{
+ // *TODO: Eliminate slow getChild() calls.
+
+ bool err;
+
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+
+ LLWaterParamSet& current_params = water_mgr.mCurParams;
+
+ // blue horizon
+ water_mgr.mFogColor = current_params.getVector4(water_mgr.mFogColor.mName, err);
+
+ LLColor4 col = water_mgr.getFogColor();
+ //getChild<LLUICtrl>("WaterGlow")->setValue(col.mV[3]);
+ col.mV[3] = 1.0f;
+ getChild<LLColorSwatchCtrl>("WaterFogColor")->set(col);
+
+ // fog and wavelets
+ water_mgr.mFogDensity.mExp =
+ log(current_params.getFloat(water_mgr.mFogDensity.mName, err)) /
+ log(water_mgr.mFogDensity.mBase);
+ water_mgr.setDensitySliderValue(water_mgr.mFogDensity.mExp);
+ getChild<LLUICtrl>("WaterFogDensity")->setValue(water_mgr.mFogDensity.mExp);
+
+ water_mgr.mUnderWaterFogMod.mX =
+ current_params.getFloat(water_mgr.mUnderWaterFogMod.mName, err);
+ getChild<LLUICtrl>("WaterUnderWaterFogMod")->setValue(water_mgr.mUnderWaterFogMod.mX);
+
+ water_mgr.mNormalScale = current_params.getVector3(water_mgr.mNormalScale.mName, err);
+ getChild<LLUICtrl>("WaterNormalScaleX")->setValue(water_mgr.mNormalScale.mX);
+ getChild<LLUICtrl>("WaterNormalScaleY")->setValue(water_mgr.mNormalScale.mY);
+ getChild<LLUICtrl>("WaterNormalScaleZ")->setValue(water_mgr.mNormalScale.mZ);
+
+ // Fresnel
+ water_mgr.mFresnelScale.mX = current_params.getFloat(water_mgr.mFresnelScale.mName, err);
+ getChild<LLUICtrl>("WaterFresnelScale")->setValue(water_mgr.mFresnelScale.mX);
+ water_mgr.mFresnelOffset.mX = current_params.getFloat(water_mgr.mFresnelOffset.mName, err);
+ getChild<LLUICtrl>("WaterFresnelOffset")->setValue(water_mgr.mFresnelOffset.mX);
+
+ // Scale Above/Below
+ water_mgr.mScaleAbove.mX = current_params.getFloat(water_mgr.mScaleAbove.mName, err);
+ getChild<LLUICtrl>("WaterScaleAbove")->setValue(water_mgr.mScaleAbove.mX);
+ water_mgr.mScaleBelow.mX = current_params.getFloat(water_mgr.mScaleBelow.mName, err);
+ getChild<LLUICtrl>("WaterScaleBelow")->setValue(water_mgr.mScaleBelow.mX);
+
+ // blur mult
+ water_mgr.mBlurMultiplier.mX = current_params.getFloat(water_mgr.mBlurMultiplier.mName, err);
+ getChild<LLUICtrl>("WaterBlurMult")->setValue(water_mgr.mBlurMultiplier.mX);
+
+ // wave directions
+ water_mgr.mWave1Dir = current_params.getVector2(water_mgr.mWave1Dir.mName, err);
+ getChild<LLUICtrl>("WaterWave1DirX")->setValue(water_mgr.mWave1Dir.mX);
+ getChild<LLUICtrl>("WaterWave1DirY")->setValue(water_mgr.mWave1Dir.mY);
+
+ water_mgr.mWave2Dir = current_params.getVector2(water_mgr.mWave2Dir.mName, err);
+ getChild<LLUICtrl>("WaterWave2DirX")->setValue(water_mgr.mWave2Dir.mX);
+ getChild<LLUICtrl>("WaterWave2DirY")->setValue(water_mgr.mWave2Dir.mY);
+
+ LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
+ textCtrl->setImageAssetID(water_mgr.getNormalMapID());
+}
+
+// color control callbacks
+void LLFloaterEditWater::onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mR = sldr_ctrl->getValueF32();
+
+ // move i if it's the max
+ if (color_ctrl->mR >= color_ctrl->mG
+ && color_ctrl->mR >= color_ctrl->mB
+ && color_ctrl->mHasSliderName)
+ {
+ color_ctrl->mI = color_ctrl->mR;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ getChild<LLUICtrl>(name)->setValue(color_ctrl->mR);
+ }
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mG = sldr_ctrl->getValueF32();
+
+ // move i if it's the max
+ if (color_ctrl->mG >= color_ctrl->mR
+ && color_ctrl->mG >= color_ctrl->mB
+ && color_ctrl->mHasSliderName)
+ {
+ color_ctrl->mI = color_ctrl->mG;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ getChild<LLUICtrl>(name)->setValue(color_ctrl->mG);
+
+ }
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mB = sldr_ctrl->getValueF32();
+
+ // move i if it's the max
+ if (color_ctrl->mB >= color_ctrl->mR
+ && color_ctrl->mB >= color_ctrl->mG
+ && color_ctrl->mHasSliderName)
+ {
+ color_ctrl->mI = color_ctrl->mB;
+ std::string name = color_ctrl->mSliderName;
+ name.append("I");
+
+ getChild<LLUICtrl>(name)->setValue(color_ctrl->mB);
+ }
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mA = sldr_ctrl->getValueF32();
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+
+void LLFloaterEditWater::onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ color_ctrl->mI = sldr_ctrl->getValueF32();
+
+ // only for sliders where we pass a name
+ if (color_ctrl->mHasSliderName)
+ {
+ // set it to the top
+ F32 maxVal = std::max(std::max(color_ctrl->mR, color_ctrl->mG), color_ctrl->mB);
+ F32 iVal;
+
+ iVal = color_ctrl->mI;
+
+ // get the names of the other sliders
+ std::string rName = color_ctrl->mSliderName;
+ rName.append("R");
+ std::string gName = color_ctrl->mSliderName;
+ gName.append("G");
+ std::string bName = color_ctrl->mSliderName;
+ bName.append("B");
+
+ // handle if at 0
+ if (iVal == 0)
+ {
+ color_ctrl->mR = 0;
+ color_ctrl->mG = 0;
+ color_ctrl->mB = 0;
+
+ // if all at the start
+ // set them all to the intensity
+ }
+ else if (maxVal == 0)
+ {
+ color_ctrl->mR = iVal;
+ color_ctrl->mG = iVal;
+ color_ctrl->mB = iVal;
+ }
+ else
+ {
+ // add delta amounts to each
+ F32 delta = (iVal - maxVal) / maxVal;
+ color_ctrl->mR *= (1.0f + delta);
+ color_ctrl->mG *= (1.0f + delta);
+ color_ctrl->mB *= (1.0f + delta);
+ }
+
+ // set the sliders to the new vals
+ getChild<LLUICtrl>(rName)->setValue(color_ctrl->mR);
+ getChild<LLUICtrl>(gName)->setValue(color_ctrl->mG);
+ getChild<LLUICtrl>(bName)->setValue(color_ctrl->mB);
+ }
+
+ // now update the current parameters and send them to shaders
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mX = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mY = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mZ = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+
+// vector control callbacks
+void LLFloaterEditWater::onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mX = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+// vector control callbacks
+void LLFloaterEditWater::onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ vector_ctrl->mY = sldr_ctrl->getValueF32();
+
+ vector_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onFloatControlMoved(LLUICtrl* ctrl, WaterFloatControl* floatControl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ floatControl->mX = sldr_ctrl->getValueF32() / floatControl->mMult;
+
+ floatControl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onExpFloatControlMoved(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl)
+{
+ LLSliderCtrl* sldr_ctrl = static_cast<LLSliderCtrl*>(ctrl);
+
+ F32 val = sldr_ctrl->getValueF32();
+ expFloatControl->mExp = val;
+ LLWaterParamManager::getInstance()->setDensitySliderValue(val);
+
+ expFloatControl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl)
+{
+ LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
+ *color_ctrl = swatch->get();
+
+ color_ctrl->update(LLWaterParamManager::getInstance()->mCurParams);
+ LLWaterParamManager::getInstance()->propagateParameters();
+}
+
+void LLFloaterEditWater::onNormalMapPicked(LLUICtrl* ctrl)
+{
+ LLTextureCtrl* textCtrl = static_cast<LLTextureCtrl*>(ctrl);
+ LLUUID textID = textCtrl->getImageAssetID();
+ LLWaterParamManager::getInstance()->setNormalMapID(textID);
+}
+
+//=============================================================================
+
+void LLFloaterEditWater::reset()
+{
+ if (isNewPreset())
+ {
+ mWaterPresetNameEditor->setValue(LLSD());
+ mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+ }
+ else
+ {
+ refreshWaterPresetsList();
+
+ // Disable controls until a water preset to edit is selected.
+ enableEditing(false);
+ }
+}
+
+bool LLFloaterEditWater::isNewPreset() const
+{
+ return mKey.asString() == "new";
+}
+
+void LLFloaterEditWater::refreshWaterPresetsList()
+{
+ mWaterPresetCombo->removeall();
+
+#if 0 // *TODO: enable when we have a clear workflow to edit existing region environment
+ // If the region already has water params, add them to the list.
+ const LLEnvironmentSettings& region_settings = LLEnvManagerNew::instance().getRegionSettings();
+ if (region_settings.getWaterParams().size() != 0)
+ {
+ const std::string& region_name = gAgent.getRegion()->getName();
+ mWaterPresetCombo->add(region_name, LLSD().with(0, region_name).with(1, LLEnvKey::SCOPE_REGION));
+ mWaterPresetCombo->addSeparator();
+ }
+#endif
+
+ std::list<std::string> user_presets, system_presets;
+ LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
+
+ // Add local user presets first.
+ for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ const std::string& name = *it;
+ mWaterPresetCombo->add(name, LLSD().with(0, name).with(1, LLEnvKey::SCOPE_LOCAL)); // [<name>, <scope>]
+ }
+
+ if (user_presets.size() > 0)
+ {
+ mWaterPresetCombo->addSeparator();
+ }
+
+ // Add local system presets.
+ for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
+ {
+ const std::string& name = *it;
+ mWaterPresetCombo->add(name, LLSD().with(0, name).with(1, LLEnvKey::SCOPE_LOCAL)); // [<name>, <scope>]
+ }
+
+ mWaterPresetCombo->setLabel(getString("combo_label"));
+}
+
+void LLFloaterEditWater::enableEditing(bool enable)
+{
+ // Enable/disable water controls.
+ getChild<LLPanel>("panel_water_preset")->setCtrlsEnabled(enable);
+
+ // Enable/disable saving.
+ mSaveButton->setEnabled(enable);
+ mMakeDefaultCheckBox->setEnabled(enable);
+}
+
+void LLFloaterEditWater::saveRegionWater()
+{
+ llassert(getCurrentScope() == LLEnvKey::SCOPE_REGION); // make sure we're editing region water
+
+ LL_DEBUGS("Windlight") << "Saving region water preset" << llendl;
+
+ //LLWaterParamSet region_water = water_mgr.mCurParams;
+
+ // *TODO: save to cached region settings.
+ LL_WARNS("Windlight") << "Saving region water is not fully implemented yet" << LL_ENDL;
+}
+
+std::string LLFloaterEditWater::getCurrentPresetName() const
+{
+ std::string name;
+ LLEnvKey::EScope scope;
+ getSelectedPreset(name, scope);
+ return name;
+}
+
+LLEnvKey::EScope LLFloaterEditWater::getCurrentScope() const
+{
+ std::string name;
+ LLEnvKey::EScope scope;
+ getSelectedPreset(name, scope);
+ return scope;
+}
+
+void LLFloaterEditWater::getSelectedPreset(std::string& name, LLEnvKey::EScope& scope) const
+{
+ if (mWaterPresetNameEditor->getVisible())
+ {
+ name = mWaterPresetNameEditor->getText();
+ scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ LLSD combo_val = mWaterPresetCombo->getValue();
+
+ if (!combo_val.isArray()) // manually typed text
+ {
+ name = combo_val.asString();
+ scope = LLEnvKey::SCOPE_LOCAL;
+ }
+ else
+ {
+ name = combo_val[0].asString();
+ scope = (LLEnvKey::EScope) combo_val[1].asInteger();
+ }
+ }
+}
+
+void LLFloaterEditWater::onWaterPresetNameEdited()
+{
+ // Disable saving a water preset having empty name.
+ mSaveButton->setEnabled(!getCurrentPresetName().empty());
+}
+
+void LLFloaterEditWater::onWaterPresetSelected()
+{
+ LLWaterParamSet water_params;
+ std::string name;
+ LLEnvKey::EScope scope;
+
+ getSelectedPreset(name, scope);
+
+ // Display selected preset.
+ if (scope == LLEnvKey::SCOPE_REGION)
+ {
+ water_params.setAll(LLEnvManagerNew::instance().getRegionSettings().getWaterParams());
+ }
+ else // local preset selected
+ {
+ if (!LLWaterParamManager::instance().getParamSet(name, water_params))
+ {
+ // Manually entered string?
+ LL_WARNS("Windlight") << "No water preset named " << name << LL_ENDL;
+ return;
+ }
+ }
+
+ LLEnvManagerNew::instance().useWaterParams(water_params.getAll());
+
+ bool can_edit = (scope == LLEnvKey::SCOPE_LOCAL || LLEnvManagerNew::canEditRegionSettings());
+ enableEditing(can_edit);
+
+ mMakeDefaultCheckBox->setEnabled(scope == LLEnvKey::SCOPE_LOCAL);
+}
+
+bool LLFloaterEditWater::onSaveAnswer(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+ // If they choose save, do it. Otherwise, don't do anything
+ if (option == 0)
+ {
+ onSaveConfirmed();
+ }
+
+ return false;
+}
+
+void LLFloaterEditWater::onSaveConfirmed()
+{
+ // Save currently displayed water params to the selected preset.
+ std::string name = getCurrentPresetName();
+
+ LL_DEBUGS("Windlight") << "Saving sky preset " << name << LL_ENDL;
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ if (water_mgr.hasParamSet(name))
+ {
+ water_mgr.setParamSet(name, water_mgr.mCurParams);
+ }
+ else
+ {
+ water_mgr.addParamSet(name, water_mgr.mCurParams);
+ }
+
+ water_mgr.savePreset(name);
+
+ // Change preference if requested.
+ if (mMakeDefaultCheckBox->getEnabled() && mMakeDefaultCheckBox->getValue())
+ {
+ LL_DEBUGS("Windlight") << name << " is now the new preferred water preset" << llendl;
+ LLEnvManagerNew::instance().setUseWaterPreset(name);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterEditWater::onBtnSave()
+{
+ LLEnvKey::EScope scope;
+ std::string name;
+ getSelectedPreset(name, scope);
+
+ if (scope == LLEnvKey::SCOPE_REGION)
+ {
+ saveRegionWater();
+ closeFloater();
+ return;
+ }
+
+ if (name.empty())
+ {
+ // *TODO: show an alert
+ llwarns << "Empty water preset name" << llendl;
+ return;
+ }
+
+ // Don't allow overwriting system presets.
+ LLWaterParamManager& water_mgr = LLWaterParamManager::instance();
+ if (water_mgr.isSystemPreset(name))
+ {
+ LLNotificationsUtil::add("WLNoEditDefault");
+ return;
+ }
+
+ // Save, ask for confirmation for overwriting an existing preset.
+ if (water_mgr.hasParamSet(name))
+ {
+ LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditWater::onSaveAnswer, this, _1, _2));
+ }
+ else
+ {
+ // new preset, hence no confirmation needed
+ onSaveConfirmed();
+ }
+}
+
+void LLFloaterEditWater::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterEditWater::onWaterPresetListChange()
+{
+ std::string name;
+ LLEnvKey::EScope scope;
+ getSelectedPreset(name, scope); // preset being edited
+
+ if (scope == LLEnvKey::SCOPE_LOCAL && !LLWaterParamManager::instance().hasParamSet(name))
+ {
+ // Preset we've been editing doesn't exist anymore. Close the floater.
+ closeFloater(false);
+ }
+ else
+ {
+ // A new preset has been added.
+ // Refresh the presets list, though it may not make sense as the floater is about to be closed.
+ refreshWaterPresetsList();
+ }
+}
+
+void LLFloaterEditWater::onRegionSettingsChange()
+{
+ // If creating a new preset, don't bother.
+ if (isNewPreset())
+ {
+ return;
+ }
+
+ if (getCurrentScope() == LLEnvKey::SCOPE_REGION) // if editing region water
+ {
+ // reset the floater to its initial state
+ reset();
+
+ // *TODO: Notify user?
+ }
+ else // editing a local preset
+ {
+ refreshWaterPresetsList();
+ }
+}
+
+void LLFloaterEditWater::onRegionInfoUpdate()
+{
+ bool can_edit = true;
+
+ // If we've selected the region water for editing.
+ if (getCurrentScope() == LLEnvKey::SCOPE_REGION)
+ {
+ // check whether we have the access
+ can_edit = LLEnvManagerNew::canEditRegionSettings();
+ }
+
+ enableEditing(can_edit);
+}
diff --git a/indra/newview/llfloaterwater.h b/indra/newview/llfloatereditwater.h
index e3db91e80d..2211bca59f 100644
--- a/indra/newview/llfloaterwater.h
+++ b/indra/newview/llfloatereditwater.h
@@ -1,10 +1,10 @@
/**
- * @file llfloaterwindlight.h
- * @brief LLFloaterWater class definition
+ * @file llfloatereditwater.h
+ * @brief Floater to create or edit a water preset
*
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -24,17 +24,16 @@
* $/LicenseInfo$
*/
-/*
- * Menu for adjusting the atmospheric settings of the world
- */
-
-#ifndef LL_LLFLOATER_WATER_H
-#define LL_LLFLOATER_WATER_H
+#ifndef LL_LLFLOATEREDITWATER_H
+#define LL_LLFLOATEREDITWATER_H
#include "llfloater.h"
+#include "llenvmanager.h" // for LLEnvKey
-#include <vector>
-#include "llwlparamset.h"
+class LLButton;
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
struct WaterVector2Control;
struct WaterVector3Control;
@@ -42,66 +41,75 @@ struct WaterColorControl;
struct WaterFloatControl;
struct WaterExpFloatControl;
-/// Menuing system for all of windlight's functionality
-class LLFloaterWater : public LLFloater
+class LLFloaterEditWater : public LLFloater
{
+ LOG_CLASS(LLFloaterEditWater);
+
public:
+ LLFloaterEditWater(const LLSD &key);
- LLFloaterWater(const LLSD& key);
- virtual ~LLFloaterWater();
/*virtual*/ BOOL postBuild();
- /// initialize all
+ /*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void draw();
+
+private:
void initCallbacks(void);
- bool newPromptCallback(const LLSD& notification, const LLSD& response);
+ //-- WL stuff begins ------------------------------------------------------
- /// general purpose callbacks for dealing with color controllers
- void onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
- void onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
+ void syncControls(); /// sync up sliders with parameters
- void onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl);
- void onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl);
- void onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl);
+ // general purpose callbacks for dealing with color controllers
+ void onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+ void onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
+
+ void onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl);
+ void onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl);
+ void onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vector_ctrl);
+
+ void onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl);
+ void onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vector_ctrl);
- void onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl);
- void onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl);
-
void onFloatControlMoved(LLUICtrl* ctrl, WaterFloatControl* floatControl);
void onExpFloatControlMoved(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl);
- void onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* colorControl);
-
- /// handle if they choose a new normal map
- void onNormalMapPicked(LLUICtrl* ctrl);
+ void onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* color_ctrl);
- /// when user hits the load preset button
- void onNewPreset();
+ void onNormalMapPicked(LLUICtrl* ctrl); /// handle if they choose a new normal map
- /// when user hits the save preset button
- void onSavePreset();
+ //-- WL stuff ends --------------------------------------------------------
- /// prompts a user when overwriting a preset
- bool saveAlertCallback(const LLSD& notification, const LLSD& response);
+ void reset();
+ bool isNewPreset() const;
+ void refreshWaterPresetsList();
+ void enableEditing(bool enable);
+ void saveRegionWater();
- /// when user hits the save preset button
- void onDeletePreset();
+ std::string getCurrentPresetName() const;
+ LLEnvKey::EScope getCurrentScope() const;
+ void getSelectedPreset(std::string& name, LLEnvKey::EScope& scope) const;
- /// prompts a user when overwriting a preset
- bool deleteAlertCallback(const LLSD& notification, const LLSD& response);
+ void onWaterPresetNameEdited();
+ void onWaterPresetSelected();
+ bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+ void onSaveConfirmed();
- /// what to do when you change the preset name
- void onChangePresetName(LLUICtrl* ctrl);
+ void onBtnSave();
+ void onBtnCancel();
- /// sync up sliders with parameters
- void syncMenu();
+ void onWaterPresetListChange();
+ void onRegionSettingsChange();
+ void onRegionInfoUpdate();
-private:
- static std::set<std::string> sDefaultPresets;
+ LLLineEditor* mWaterPresetNameEditor;
+ LLComboBox* mWaterPresetCombo;
+ LLCheckBoxCtrl* mMakeDefaultCheckBox;
+ LLButton* mSaveButton;
};
-
-#endif
+#endif // LL_LLFLOATEREDITWATER_H
diff --git a/indra/newview/llfloaterenvironmentsettings.cpp b/indra/newview/llfloaterenvironmentsettings.cpp
new file mode 100644
index 0000000000..4dbc8cdee0
--- /dev/null
+++ b/indra/newview/llfloaterenvironmentsettings.cpp
@@ -0,0 +1,282 @@
+/**
+ * @file llfloaterenvironmentsettings.cpp
+ * @brief LLFloaterEnvironmentSettings class definition
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterenvironmentsettings.h"
+
+#include "llcombobox.h"
+#include "llradiogroup.h"
+
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
+#include "llwaterparammanager.h"
+#include "llwlparamset.h"
+#include "llwlparammanager.h"
+
+LLFloaterEnvironmentSettings::LLFloaterEnvironmentSettings(const LLSD &key)
+: LLFloater(key)
+ ,mRegionSettingsRadioGroup(NULL)
+ ,mDayCycleSettingsRadioGroup(NULL)
+ ,mWaterPresetCombo(NULL)
+ ,mSkyPresetCombo(NULL)
+ ,mDayCyclePresetCombo(NULL)
+{
+}
+
+// virtual
+BOOL LLFloaterEnvironmentSettings::postBuild()
+{
+ mRegionSettingsRadioGroup = getChild<LLRadioGroup>("region_settings_radio_group");
+ mRegionSettingsRadioGroup->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSwitchRegionSettings, this));
+
+ mDayCycleSettingsRadioGroup = getChild<LLRadioGroup>("sky_dayc_settings_radio_group");
+ mDayCycleSettingsRadioGroup->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSwitchDayCycle, this));
+
+ mWaterPresetCombo = getChild<LLComboBox>("water_settings_preset_combo");
+ mWaterPresetCombo->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSelectWaterPreset, this));
+
+ mSkyPresetCombo = getChild<LLComboBox>("sky_settings_preset_combo");
+ mSkyPresetCombo->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSelectSkyPreset, this));
+
+ mDayCyclePresetCombo = getChild<LLComboBox>("dayc_settings_preset_combo");
+ mDayCyclePresetCombo->setCommitCallback(boost::bind(&LLFloaterEnvironmentSettings::onSelectDayCyclePreset, this));
+
+ childSetCommitCallback("ok_btn", boost::bind(&LLFloaterEnvironmentSettings::onBtnOK, this), NULL);
+ getChild<LLUICtrl>("ok_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpUserPrefs, LLEnvManagerNew::getInstance()));
+ childSetCommitCallback("cancel_btn", boost::bind(&LLFloaterEnvironmentSettings::onBtnCancel, this), NULL);
+ getChild<LLUICtrl>("cancel_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpPresets, LLEnvManagerNew::getInstance()));
+
+ setCloseCallback(boost::bind(&LLFloaterEnvironmentSettings::cancel, this));
+
+ LLEnvManagerNew::instance().setPreferencesChangeCallback(boost::bind(&LLFloaterEnvironmentSettings::refresh, this));
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterEnvironmentSettings::populateDayCyclePresetsList, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEnvironmentSettings::populateSkyPresetsList, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEnvironmentSettings::populateWaterPresetsList, this));
+
+ return TRUE;
+}
+
+// virtual
+void LLFloaterEnvironmentSettings::onOpen(const LLSD& key)
+{
+ refresh();
+}
+
+void LLFloaterEnvironmentSettings::onSwitchRegionSettings()
+{
+ getChild<LLView>("user_environment_settings")->setEnabled(mRegionSettingsRadioGroup->getSelectedIndex() != 0);
+
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSwitchDayCycle()
+{
+ bool is_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+
+ mSkyPresetCombo->setEnabled(is_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!is_fixed_sky);
+
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSelectWaterPreset()
+{
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSelectSkyPreset()
+{
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onSelectDayCyclePreset()
+{
+ apply();
+}
+
+void LLFloaterEnvironmentSettings::onBtnOK()
+{
+ // Save and apply new user preferences.
+ bool use_region_settings = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ bool use_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+ std::string water_preset = mWaterPresetCombo->getValue().asString();
+ std::string sky_preset = mSkyPresetCombo->getValue().asString();
+ std::string day_cycle = mDayCyclePresetCombo->getValue().asString();
+
+ LLEnvManagerNew::instance().setUserPrefs(
+ water_preset,
+ sky_preset,
+ day_cycle,
+ use_fixed_sky,
+ use_region_settings);
+
+ // *TODO: This triggers applying user preferences again, which is suboptimal.
+ closeFloater();
+}
+
+void LLFloaterEnvironmentSettings::onBtnCancel()
+{
+ closeFloater();
+}
+
+void LLFloaterEnvironmentSettings::refresh()
+{
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+
+ bool use_region_settings = env_mgr.getUseRegionSettings();
+ bool use_fixed_sky = env_mgr.getUseFixedSky();
+
+ // Set up radio buttons according to user preferences.
+ mRegionSettingsRadioGroup->setSelectedIndex(use_region_settings ? 0 : 1);
+ mDayCycleSettingsRadioGroup->setSelectedIndex(use_fixed_sky ? 0 : 1);
+
+ // Populate the combo boxes with appropriate lists of available presets.
+ populateWaterPresetsList();
+ populateSkyPresetsList();
+ populateDayCyclePresetsList();
+
+ // Enable/disable other controls based on user preferences.
+ getChild<LLView>("user_environment_settings")->setEnabled(!use_region_settings);
+ mSkyPresetCombo->setEnabled(use_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!use_fixed_sky);
+
+ // Select the current presets in combo boxes.
+ mWaterPresetCombo->selectByValue(env_mgr.getWaterPresetName());
+ mSkyPresetCombo->selectByValue(env_mgr.getSkyPresetName());
+ mDayCyclePresetCombo->selectByValue(env_mgr.getDayCycleName());
+}
+
+void LLFloaterEnvironmentSettings::apply()
+{
+ // Update environment with the user choice.
+ bool use_region_settings = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ bool use_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+ std::string water_preset = mWaterPresetCombo->getValue().asString();
+ std::string sky_preset = mSkyPresetCombo->getValue().asString();
+ std::string day_cycle = mDayCyclePresetCombo->getValue().asString();
+
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ if (use_region_settings)
+ {
+ env_mgr.useRegionSettings();
+ }
+ else
+ {
+ if (use_fixed_sky)
+ {
+ env_mgr.useSkyPreset(sky_preset);
+ }
+ else
+ {
+ env_mgr.useDayCycle(day_cycle, LLEnvKey::SCOPE_LOCAL);
+ }
+
+ env_mgr.useWaterPreset(water_preset);
+ }
+}
+
+void LLFloaterEnvironmentSettings::cancel()
+{
+ // Revert environment to user preferences.
+ LLEnvManagerNew::instance().usePrefs();
+}
+
+void LLFloaterEnvironmentSettings::populateWaterPresetsList()
+{
+ mWaterPresetCombo->removeall();
+
+ std::list<std::string> user_presets, system_presets;
+ LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
+
+ // Add user presets first.
+ for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it);
+ }
+
+ if (user_presets.size() > 0)
+ {
+ mWaterPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it);
+ }
+}
+
+void LLFloaterEnvironmentSettings::populateSkyPresetsList()
+{
+ mSkyPresetCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets; // unused as we don't list region presets here
+ LLWLParamManager::preset_name_list_t user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it);
+ }
+
+ if (!user_presets.empty())
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it);
+ }
+}
+
+void LLFloaterEnvironmentSettings::populateDayCyclePresetsList()
+{
+ mDayCyclePresetCombo->removeall();
+
+ LLDayCycleManager::preset_name_list_t user_days, sys_days;
+ LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+
+ // Add user days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it);
+ }
+
+ if (user_days.size() > 0)
+ {
+ mDayCyclePresetCombo->addSeparator();
+ }
+
+ // Add system days.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it);
+ }
+}
diff --git a/indra/newview/llfloaterenvironmentsettings.h b/indra/newview/llfloaterenvironmentsettings.h
new file mode 100644
index 0000000000..0ab458a0f6
--- /dev/null
+++ b/indra/newview/llfloaterenvironmentsettings.h
@@ -0,0 +1,71 @@
+/**
+ * @file llfloaterenvironmentsettings.h
+ * @brief LLFloaterEnvironmentSettings class definition
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERENVIRONMENTSETTINGS_H
+#define LL_LLFLOATERENVIRONMENTSETTINGS_H
+
+#include "llfloater.h"
+
+class LLComboBox;
+class LLRadioGroup;
+
+class LLFloaterEnvironmentSettings : public LLFloater
+{
+ LOG_CLASS(LLFloaterEnvironmentSettings);
+
+public:
+ LLFloaterEnvironmentSettings(const LLSD &key);
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+private:
+ void onSwitchRegionSettings();
+ void onSwitchDayCycle();
+
+ void onSelectWaterPreset();
+ void onSelectSkyPreset();
+ void onSelectDayCyclePreset();
+
+ void onBtnOK();
+ void onBtnCancel();
+
+ void refresh(); /// update controls with user prefs
+ void apply();
+ void cancel();
+
+ void populateWaterPresetsList();
+ void populateSkyPresetsList();
+ void populateDayCyclePresetsList();
+
+ LLRadioGroup* mRegionSettingsRadioGroup;
+ LLRadioGroup* mDayCycleSettingsRadioGroup;
+
+ LLComboBox* mWaterPresetCombo;
+ LLComboBox* mSkyPresetCombo;
+ LLComboBox* mDayCyclePresetCombo;
+};
+
+#endif // LL_LLFLOATERENVIRONMENTSETTINGS_H
diff --git a/indra/newview/llfloaterenvsettings.cpp b/indra/newview/llfloaterenvsettings.cpp
deleted file mode 100644
index fcaef1f34b..0000000000
--- a/indra/newview/llfloaterenvsettings.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * @file llfloaterenvsettings.cpp
- * @brief LLFloaterEnvSettings class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterenvsettings.h"
-
-#include "llfloaterreg.h"
-#include "llfloaterwindlight.h"
-#include "llfloaterwater.h"
-#include "lluictrlfactory.h"
-#include "llsliderctrl.h"
-#include "llcombobox.h"
-#include "llcolorswatch.h"
-#include "llwlanimator.h"
-
-#include "llwlparamset.h"
-#include "llwlparammanager.h"
-#include "llwaterparammanager.h"
-#include "llmath.h"
-#include "llviewerwindow.h"
-
-#include "pipeline.h"
-
-#include <sstream>
-
-LLFloaterEnvSettings::LLFloaterEnvSettings(const LLSD& key)
- : LLFloater(key)
-{
-}
-// virtual
-LLFloaterEnvSettings::~LLFloaterEnvSettings()
-{
-}
-// virtual
-BOOL LLFloaterEnvSettings::postBuild()
-{
- // load it up
- initCallbacks();
- syncMenu();
- return TRUE;
-}
-
-void LLFloaterEnvSettings::initCallbacks(void)
-{
- // our three sliders
- getChild<LLUICtrl>("EnvTimeSlider")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeDayTime, this, _1));
- getChild<LLUICtrl>("EnvCloudSlider")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeCloudCoverage, this, _1));
- getChild<LLUICtrl>("EnvWaterFogSlider")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeWaterFogDensity, this, _1, &LLWaterParamManager::instance()->mFogDensity));
-
- // color picker
- getChild<LLUICtrl>("EnvWaterColor")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onChangeWaterColor, this, _1, &LLWaterParamManager::instance()->mFogColor));
-
- // WL Top
- getChild<LLUICtrl>("EnvAdvancedSkyButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedSky, this));
- getChild<LLUICtrl>("EnvAdvancedWaterButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onOpenAdvancedWater, this));
- getChild<LLUICtrl>("EnvUseEstateTimeButton")->setCommitCallback(boost::bind(&LLFloaterEnvSettings::onUseEstateTime, this));
-}
-
-// menu maintenance functions
-
-void LLFloaterEnvSettings::syncMenu()
-{
- LLSliderCtrl* sldr;
- sldr = getChild<LLSliderCtrl>("EnvTimeSlider");
-
- // sync the clock
- F32 val = (F32)LLWLParamManager::instance()->mAnimator.getDayTime();
- std::string timeStr = timeToString(val);
-
- LLTextBox* textBox;
- textBox = getChild<LLTextBox>("EnvTimeText");
-
- textBox->setValue(timeStr);
-
- // sync time slider which starts at 6 AM
- val -= 0.25;
- if(val < 0)
- {
- val++;
- }
- sldr->setValue(val);
-
- // sync cloud coverage
- bool err;
- getChild<LLUICtrl>("EnvCloudSlider")->setValue(LLWLParamManager::instance()->mCurParams.getFloat("cloud_shadow", err));
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
- // sync water params
- LLColor4 col = param_mgr->getFogColor();
- LLColorSwatchCtrl* colCtrl = getChild<LLColorSwatchCtrl>("EnvWaterColor");
- col.mV[3] = 1.0f;
- colCtrl->set(col);
-
- getChild<LLUICtrl>("EnvWaterFogSlider")->setValue(param_mgr->mFogDensity.mExp);
- param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
-
- // turn off Use Estate Time button if it's already being used
- if(LLWLParamManager::instance()->mAnimator.mUseLindenTime)
- {
- getChildView("EnvUseEstateTimeButton")->setEnabled(FALSE);
- } else {
- getChildView("EnvUseEstateTimeButton")->setEnabled(TRUE);
- }
-
- if(!gPipeline.canUseVertexShaders())
- {
- getChildView("EnvWaterColor")->setEnabled(FALSE);
- getChildView("EnvWaterColorText")->setEnabled(FALSE);
- //getChildView("EnvAdvancedWaterButton")->setEnabled(FALSE);
- }
- else
- {
- getChildView("EnvWaterColor")->setEnabled(TRUE);
- getChildView("EnvWaterColorText")->setEnabled(TRUE);
- //getChildView("EnvAdvancedWaterButton")->setEnabled(TRUE);
- }
-
- // only allow access to these if they are using windlight
- if(!gPipeline.canUseWindLightShaders())
- {
-
- getChildView("EnvCloudSlider")->setEnabled(FALSE);
- getChildView("EnvCloudText")->setEnabled(FALSE);
- //getChildView("EnvAdvancedSkyButton")->setEnabled(FALSE);
- }
- else
- {
- getChildView("EnvCloudSlider")->setEnabled(TRUE);
- getChildView("EnvCloudText")->setEnabled(TRUE);
- //getChildView("EnvAdvancedSkyButton")->setEnabled(TRUE);
- }
-}
-
-void LLFloaterEnvSettings::onChangeDayTime(LLUICtrl* ctrl)
-{
- LLSliderCtrl* sldr = static_cast<LLSliderCtrl*>(ctrl);
-
- // deactivate animator
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- F32 val = sldr->getValueF32() + 0.25f;
- if(val > 1.0)
- {
- val--;
- }
-
- LLWLParamManager::instance()->mAnimator.setDayTime((F64)val);
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
-}
-
-void LLFloaterEnvSettings::onChangeCloudCoverage(LLUICtrl* ctrl)
-{
- LLSliderCtrl* sldr = static_cast<LLSliderCtrl*>(ctrl);
-
- // deactivate animator
- //LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- //LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- F32 val = sldr->getValueF32();
- LLWLParamManager::instance()->mCurParams.set("cloud_shadow", val);
-}
-
-void LLFloaterEnvSettings::onChangeWaterFogDensity(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl)
-{
- LLSliderCtrl* sldr;
- sldr = getChild<LLSliderCtrl>("EnvWaterFogSlider");
-
- F32 val = sldr->getValueF32();
- expFloatControl->mExp = val;
- LLWaterParamManager::instance()->setDensitySliderValue(val);
-
- expFloatControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterEnvSettings::onChangeWaterColor(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
- *colorControl = swatch->get();
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-
-void LLFloaterEnvSettings::onOpenAdvancedSky()
-{
- LLFloaterReg::showInstance("env_windlight");
-}
-
-void LLFloaterEnvSettings::onOpenAdvancedWater()
-{
- LLFloaterReg::showInstance("env_water");
-}
-
-
-void LLFloaterEnvSettings::onUseEstateTime()
-{
- LLFloaterWindLight* wl = LLFloaterReg::findTypedInstance<LLFloaterWindLight>("env_windlight");
- if(wl)
- {
- LLComboBox* box = wl->getChild<LLComboBox>("WLPresetsCombo");
- box->selectByValue("");
- }
-
- LLWLParamManager::instance()->mAnimator.mIsRunning = true;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
-}
-
-std::string LLFloaterEnvSettings::timeToString(F32 curTime)
-{
- S32 hours;
- S32 min;
-
- // get hours and minutes
- hours = (S32) (24.0 * curTime);
- curTime -= ((F32) hours / 24.0f);
- min = llround(24.0f * 60.0f * curTime);
-
- // handle case where it's 60
- if(min == 60)
- {
- hours++;
- min = 0;
- }
-
- std::string newTime = getString("timeStr");
- struct tm * timeT;
- time_t secT = time(0);
- timeT = gmtime (&secT);
-
- timeT->tm_hour = hours;
- timeT->tm_min = min;
- secT = mktime (timeT);
- secT -= LLStringOps::getLocalTimeOffset ();
-
- LLSD substitution;
- substitution["datetime"] = (S32) secT;
-
- LLStringUtil::format (newTime, substitution);
- return newTime;
-}
diff --git a/indra/newview/llfloaterenvsettings.h b/indra/newview/llfloaterenvsettings.h
deleted file mode 100644
index a6280cfb97..0000000000
--- a/indra/newview/llfloaterenvsettings.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * @file llfloaterskysettings.h
- * @brief LLFloaterEnvSettings class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-/*
- * Simple menu for adjusting the atmospheric settings of the world
- */
-
-#ifndef LL_LLFLOATERENVSETTINGS_H
-#define LL_LLFLOATERENVSETTINGS_H
-
-#include "llfloater.h"
-
-struct WaterColorControl;
-struct WaterExpFloatControl;
-
-/// Menuing system for all of windlight's functionality
-class LLFloaterEnvSettings : public LLFloater
-{
-public:
-
- LLFloaterEnvSettings(const LLSD& key);
- /*virtual*/ ~LLFloaterEnvSettings();
- /*virtual*/ BOOL postBuild();
- /// initialize all the callbacks for the menu
- void initCallbacks(void);
-
- /// handle if time of day is changed
- void onChangeDayTime(LLUICtrl* ctrl);
-
- /// handle if cloud coverage is changed
- void onChangeCloudCoverage(LLUICtrl* ctrl);
-
- /// handle change in water fog density
- void onChangeWaterFogDensity(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl);
-
- /// handle change in water fog color
- void onChangeWaterColor(LLUICtrl* ctrl, WaterColorControl* colorControl);
-
- /// open the advanced sky settings menu
- void onOpenAdvancedSky();
-
- /// open the advanced water settings menu
- void onOpenAdvancedWater();
-
- /// sync time with the server
- void onUseEstateTime();
-
- //// menu management
-
- /// sync up sliders with parameters
- void syncMenu();
-
- /// convert the present time to a digital clock time
- std::string timeToString(F32 curTime);
-
-private:
-};
-
-
-#endif
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index ef3c8b764e..d495f20a9a 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -365,6 +365,8 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
element["columns"][3]["font"]["style"] = font_style;
}
+ LL_DEBUGS("Gesture") << "Added gesture [" << item_name << "]" << LL_ENDL;
+
LLScrollListItem* sl_item = list->addElement(element, ADD_BOTTOM);
if(sl_item)
{
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
index 627defd006..3012638d44 100644
--- a/indra/newview/llfloaterhelpbrowser.cpp
+++ b/indra/newview/llfloaterhelpbrowser.cpp
@@ -71,9 +71,18 @@ void LLFloaterHelpBrowser::buildURLHistory()
}
}
+void LLFloaterHelpBrowser::onOpen(const LLSD& key)
+{
+ gSavedSettings.setBOOL("HelpFloaterOpen", TRUE);
+}
+
//virtual
void LLFloaterHelpBrowser::onClose(bool app_quitting)
{
+ if (!app_quitting)
+ {
+ gSavedSettings.setBOOL("HelpFloaterOpen", FALSE);
+ }
// really really destroy the help browser when it's closed, it'll be recreated.
destroy(); // really destroy this dialog on closure, it's relatively heavyweight.
}
diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h
index 2731c81b9c..afe0f4df69 100644
--- a/indra/newview/llfloaterhelpbrowser.h
+++ b/indra/newview/llfloaterhelpbrowser.h
@@ -42,6 +42,7 @@ class LLFloaterHelpBrowser :
/*virtual*/ BOOL postBuild();
/*virtual*/ void onClose(bool app_quitting);
+ /*virtual*/ void onOpen(const LLSD& key);
// inherited from LLViewerMediaObserver
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 0d0c1f594d..4746f93009 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -566,10 +566,7 @@ void LLPanelLandGeneral::refresh()
if (regionp)
{
insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY);
-
- std::string land_type;
- bool is_land_type_localized = LLTrans::findString(land_type, regionp->getSimProductName());
- mLandType->setText(is_land_type_localized ? land_type : regionp->getSimProductName());
+ mLandType->setText(regionp->getLocalizedSimProductName());
}
// estate owner/manager cannot edit other parts of the parcel
@@ -1818,6 +1815,7 @@ LLPanelLandOptions::LLPanelLandOptions(LLParcelSelectionHandle& parcel)
mClearBtn(NULL),
mMatureCtrl(NULL),
mPushRestrictionCtrl(NULL),
+ mSeeAvatarsCtrl(NULL),
mParcel(parcel)
{
}
@@ -1860,6 +1858,9 @@ BOOL LLPanelLandOptions::postBuild()
mPushRestrictionCtrl = getChild<LLCheckBoxCtrl>( "PushRestrictCheck");
childSetCommitCallback("PushRestrictCheck", onCommitAny, this);
+ mSeeAvatarsCtrl = getChild<LLCheckBoxCtrl>( "SeeAvatarsCheck");
+ childSetCommitCallback("SeeAvatarsCheck", onCommitAny, this);
+
mCheckShowDirectory = getChild<LLCheckBoxCtrl>( "ShowDirectoryCheck");
childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this);
@@ -1952,7 +1953,7 @@ void LLPanelLandOptions::refresh()
mCheckEditLand ->set(FALSE);
mCheckEditLand ->setEnabled(FALSE);
-
+
mCheckSafe ->set(FALSE);
mCheckSafe ->setEnabled(FALSE);
@@ -1968,6 +1969,9 @@ void LLPanelLandOptions::refresh()
mPushRestrictionCtrl->set(FALSE);
mPushRestrictionCtrl->setEnabled(FALSE);
+ mSeeAvatarsCtrl->set(TRUE);
+ mSeeAvatarsCtrl->setEnabled(FALSE);
+
mLandingTypeCombo->setCurrentByIndex(0);
mLandingTypeCombo->setEnabled(FALSE);
@@ -2001,7 +2005,7 @@ void LLPanelLandOptions::refresh()
BOOL can_change_terraform = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_EDIT);
mCheckEditLand ->set( parcel->getAllowTerraform() );
mCheckEditLand ->setEnabled( can_change_terraform );
-
+
mCheckSafe ->set( !parcel->getAllowDamage() );
mCheckSafe ->setEnabled( can_change_options );
@@ -2027,6 +2031,10 @@ void LLPanelLandOptions::refresh()
mPushRestrictionCtrl->setEnabled(can_change_options);
}
+ mSeeAvatarsCtrl->set(parcel->getSeeAVs());
+ mSeeAvatarsCtrl->setLabel(getString("see_avs_text"));
+ mSeeAvatarsCtrl->setEnabled(can_change_options && parcel->getHaveNewParcelLimitData());
+
BOOL can_change_landing_point = LLViewerParcelMgr::isParcelModifiableByAgent(parcel,
GP_LAND_SET_LANDING_POINT);
mLandingTypeCombo->setCurrentByIndex((S32)parcel->getLandingType());
@@ -2231,6 +2239,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
BOOL allow_publish = FALSE;
BOOL mature_publish = self->mMatureCtrl->get();
BOOL push_restriction = self->mPushRestrictionCtrl->get();
+ BOOL see_avs = self->mSeeAvatarsCtrl->get();
BOOL show_directory = self->mCheckShowDirectory->get();
// we have to get the index from a lookup, not from the position in the dropdown!
S32 category_index = LLParcel::getCategoryFromString(self->mCategoryCombo->getSelectedValue());
@@ -2264,6 +2273,7 @@ void LLPanelLandOptions::onCommitAny(LLUICtrl *ctrl, void *userdata)
parcel->setCategory((LLParcel::ECategory)category_index);
parcel->setLandingType((LLParcel::ELandingType)landing_type_index);
parcel->setSnapshotID(snapshot_id);
+ parcel->setSeeAVs(see_avs);
// Send current parcel data upstream to server
LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
@@ -2870,13 +2880,7 @@ void LLPanelLandCovenant::refresh()
}
LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
- if (region_landtype)
- {
- std::string land_type;
- bool is_land_type_localized = LLTrans::findString(land_type, region->getSimProductName());
-
- region_landtype->setText(is_land_type_localized ? land_type : region->getSimProductName());
- }
+ region_landtype->setText(region->getLocalizedSimProductName());
LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
if (region_maturity)
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 8a70fa24d8..6fceca1acd 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -348,6 +348,7 @@ private:
LLCheckBoxCtrl *mMatureCtrl;
LLCheckBoxCtrl *mPushRestrictionCtrl;
+ LLCheckBoxCtrl *mSeeAvatarsCtrl;
LLSafeHandle<LLParcelSelection>& mParcel;
};
diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp
index 58931d112e..9edfe1e354 100644
--- a/indra/newview/llfloatermemleak.cpp
+++ b/indra/newview/llfloatermemleak.cpp
@@ -90,6 +90,11 @@ LLFloaterMemLeak::~LLFloaterMemLeak()
void LLFloaterMemLeak::release()
{
+ if(mLeakedMem.empty())
+ {
+ return ;
+ }
+
for(S32 i = 0 ; i < (S32)mLeakedMem.size() ; i++)
{
delete[] mLeakedMem[i] ;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index ab6753b4be..2510f43aa7 100644..100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -71,6 +71,7 @@
#include "llmatrix4a.h"
#include "llmenubutton.h"
#include "llmeshrepository.h"
+#include "llnotificationsutil.h"
#include "llsdutil_math.h"
#include "lltextbox.h"
#include "lltoolmgr.h"
@@ -100,7 +101,12 @@
#include "llcallbacklist.h"
#include "llviewerobjectlist.h"
#include "llanimationstates.h"
+#include "llviewernetwork.h"
#include "glod/glod.h"
+#include <boost/algorithm/string.hpp>
+
+
+const S32 SLM_SUPPORTED_VERSION = 2;
//static
S32 LLFloaterModelPreview::sUploadAmount = 10;
@@ -353,13 +359,16 @@ void LLMeshFilePicker::notify(const std::string& filename)
// LLFloaterModelPreview()
//-----------------------------------------------------------------------------
LLFloaterModelPreview::LLFloaterModelPreview(const LLSD& key) :
-LLFloater(key)
+LLFloaterModelUploadBase(key),
+mUploadBtn(NULL),
+mCalculateBtn(NULL)
{
sInstance = this;
mLastMouseX = 0;
mLastMouseY = 0;
mGLName = 0;
- mStatusLock = new LLMutex(NULL);
+ mStatusLock = new LLMutex();
+ mModelPreview = NULL;
mLODMode[LLModel::LOD_HIGH] = 0;
for (U32 i = 0; i < LLModel::LOD_HIGH; i++)
@@ -394,16 +403,17 @@ BOOL LLFloaterModelPreview::postBuild()
childSetCommitCallback("border_mode", onLODParamCommit, this);
childSetCommitCallback("share_tolerance", onLODParamCommit, this);
+ childSetCommitCallback("upload_skin", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
+ childSetCommitCallback("upload_joints", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
+ childSetCommitCallback("upload_textures", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
+
childSetTextArg("status", "[STATUS]", getString("status_idle"));
- //childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",sUploadAmount));
childSetAction("ok_btn", onUpload, this);
childDisable("ok_btn");
childSetAction("reset_btn", onReset, this);
- childSetAction("clear_materials", onClearMaterials, this);
-
childSetCommitCallback("preview_lod_combo", onPreviewLODCommit, this);
childSetCommitCallback("upload_skin", onUploadSkinCommit, this);
@@ -422,8 +432,6 @@ BOOL LLFloaterModelPreview::postBuild()
childDisable("ok_btn");
- childSetCommitCallback("confirm_checkbox", refresh, this);
-
mViewOptionMenuButton = getChild<LLMenuButton>("options_gear_btn");
mCommitCallbackRegistrar.add("ModelImport.ViewOption.Action", boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _2));
@@ -441,9 +449,7 @@ BOOL LLFloaterModelPreview::postBuild()
mPreviewRect = preview_panel->getRect();
- mModelPreview = new LLModelPreview(512, 512, this );
- mModelPreview->setPreviewTarget(16.f);
- mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelPreview::setDetails, this, _1, _2, _3, _4, _5));
+ initModelPreview();
//set callbacks for left click on line editor rows
for (U32 i = 0; i <= LLModel::LOD_HIGH; i++)
@@ -472,6 +478,25 @@ BOOL LLFloaterModelPreview::postBuild()
text->setMouseDownCallback(boost::bind(&LLModelPreview::setPreviewLOD, mModelPreview, i));
}
}
+ std::string current_grid = LLGridManager::getInstance()->getGridLabel();
+ std::transform(current_grid.begin(),current_grid.end(),current_grid.begin(),::tolower);
+ std::string validate_url;
+ if (current_grid == "agni")
+ {
+ validate_url = "http://secondlife.com/my/account/mesh.php";
+ }
+ else
+ {
+ validate_url = llformat("http://secondlife.%s.lindenlab.com/my/account/mesh.php",current_grid.c_str());
+ }
+ getChild<LLTextBox>("warning_message")->setTextArg("[VURL]", validate_url);
+
+ mUploadBtn = getChild<LLButton>("ok_btn");
+ mCalculateBtn = getChild<LLButton>("calculate_btn");
+
+ mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this));
+
+ toggleCalculateButton(true);
return TRUE;
}
@@ -497,6 +522,19 @@ LLFloaterModelPreview::~LLFloaterModelPreview()
mStatusLock = NULL;
}
+void LLFloaterModelPreview::initModelPreview()
+{
+ if (mModelPreview)
+ {
+ delete mModelPreview;
+ }
+
+ mModelPreview = new LLModelPreview(512, 512, this );
+ mModelPreview->setPreviewTarget(16.f);
+ mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelPreview::setDetails, this, _1, _2, _3, _4, _5));
+ mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this, _1));
+}
+
void LLFloaterModelPreview::onViewOptionChecked(const LLSD& userdata)
{
if (mModelPreview)
@@ -544,6 +582,30 @@ void LLFloaterModelPreview::loadModel(S32 lod)
(new LLMeshFilePicker(mModelPreview, lod))->getFile();
}
+void LLFloaterModelPreview::loadModel(S32 lod, const std::string& file_name, bool force_disable_slm)
+{
+ mModelPreview->mLoading = true;
+
+ mModelPreview->loadModel(file_name, lod, force_disable_slm);
+}
+
+void LLFloaterModelPreview::onClickCalculateBtn()
+{
+ mModelPreview->rebuildUploadData();
+
+ bool upload_skinweights = childGetValue("upload_skin").asBoolean();
+ bool upload_joint_positions = childGetValue("upload_joints").asBoolean();
+
+ mUploadModelUrl.clear();
+
+ gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
+ childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mUploadModelUrl, false,
+ getWholeModelFeeObserverHandle());
+
+ toggleCalculateButton(false);
+ mUploadBtn->setEnabled(false);
+}
+
//static
void LLFloaterModelPreview::onImportScaleCommit(LLUICtrl*,void* userdata)
{
@@ -554,7 +616,10 @@ void LLFloaterModelPreview::onImportScaleCommit(LLUICtrl*,void* userdata)
return;
}
- fp->mModelPreview->calcResourceCost();
+ fp->mModelPreview->mDirty = true;
+
+ fp->toggleCalculateButton(true);
+
fp->mModelPreview->refresh();
}
//static
@@ -566,7 +631,11 @@ void LLFloaterModelPreview::onPelvisOffsetCommit( LLUICtrl*, void* userdata )
{
return;
}
- fp->mModelPreview->calcResourceCost();
+
+ fp->mModelPreview->mDirty = true;
+
+ fp->toggleCalculateButton(true);
+
fp->mModelPreview->refresh();
}
@@ -615,8 +684,6 @@ void LLFloaterModelPreview::onUploadSkinCommit(LLUICtrl*,void* userdata)
{
return;
}
-
- fp->mModelPreview->calcResourceCost();
fp->mModelPreview->refresh();
fp->mModelPreview->resetPreviewTarget();
fp->mModelPreview->clearBuffers();
@@ -669,6 +736,7 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata)
void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata)
{
LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata;
+
fp->mModelPreview->onLODParamCommit(false);
}
@@ -707,31 +775,11 @@ void LLFloaterModelPreview::draw()
}
}
+ childSetEnabled("ok_btn", mHasUploadPerm && !mUploadModelUrl.empty());
+
childSetTextArg("prim_cost", "[PRIM_COST]", llformat("%d", mModelPreview->mResourceCost));
childSetTextArg("description_label", "[TEXTURES]", llformat("%d", mModelPreview->mTextureSet.size()));
- if (!mCurRequest.empty())
- {
- LLMutexLock lock(mStatusLock);
- childSetTextArg("status", "[STATUS]", mStatusMessage);
- }
- else
- {
- childSetVisible("Simplify", true);
- childSetVisible("simplify_cancel", false);
- childSetVisible("Decompose", true);
- childSetVisible("decompose_cancel", false);
- }
-
- U32 resource_cost = mModelPreview->mResourceCost*10;
-
- if (childGetValue("upload_textures").asBoolean())
- {
- resource_cost += mModelPreview->mTextureSet.size()*10;
- }
-
- childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d", resource_cost));
-
if (mModelPreview)
{
gGL.color3f(1.f, 1.f, 1.f);
@@ -864,6 +912,12 @@ BOOL LLFloaterModelPreview::handleScrollWheel(S32 x, S32 y, S32 clicks)
return TRUE;
}
+/*virtual*/
+void LLFloaterModelPreview::onOpen(const LLSD& key)
+{
+ requestAgentUploadPermissions();
+}
+
//static
void LLFloaterModelPreview::onPhysicsParamCommit(LLUICtrl* ctrl, void* data)
{
@@ -925,12 +979,14 @@ void LLFloaterModelPreview::onPhysicsStageExecute(LLUICtrl* ctrl, void* data)
sInstance->setStatusMessage(sInstance->getString("decomposing"));
sInstance->childSetVisible("Decompose", false);
sInstance->childSetVisible("decompose_cancel", true);
+ sInstance->childDisable("Simplify");
}
else if (stage == "Simplify")
{
sInstance->setStatusMessage(sInstance->getString("simplifying"));
sInstance->childSetVisible("Simplify", false);
sInstance->childSetVisible("simplify_cancel", true);
+ sInstance->childDisable("Decompose");
}
}
}
@@ -1883,8 +1939,11 @@ bool LLModelLoader::doLoadModel()
mesh_scale *= transformation;
transformation = mesh_scale;
- std::vector<LLImportMaterial> materials;
- materials.resize(model->getNumVolumeFaces());
+ std::map<std::string, LLImportMaterial> materials;
+ for (U32 i = 0; i < model->mMaterialList.size(); ++i)
+ {
+ materials[model->mMaterialList[i]] = LLImportMaterial();
+ }
mScene[transformation].push_back(LLModelInstance(model, model->mLabel, transformation, materials));
stretch_extents(model, transformation, mExtents[0], mExtents[1], mFirstTransform);
}
@@ -1946,6 +2005,11 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
//build model list for each LoD
model_list model[LLModel::NUM_LODS];
+ if (data["version"].asInteger() != SLM_SUPPORTED_VERSION)
+ { //unsupported version
+ return false;
+ }
+
LLSD& mesh = data["mesh"];
LLVolumeParams volume_params;
@@ -1968,10 +2032,6 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
mPreview->critiqueRigForUploadApplicability( loaded_model->mSkinInfo.mJointNames );
}
}
- else
- {
- llassert(model[lod].empty());
- }
}
}
@@ -2267,14 +2327,17 @@ void LLModelLoader::loadTextures()
{
for(U32 i = 0 ; i < iter->second.size(); i++)
{
- for(U32 j = 0 ; j < iter->second[i].mMaterial.size() ; j++)
+ for(std::map<std::string, LLImportMaterial>::iterator j = iter->second[i].mMaterial.begin();
+ j != iter->second[i].mMaterial.end(); ++j)
{
- if(!iter->second[i].mMaterial[j].mDiffuseMapFilename.empty())
+ LLImportMaterial& material = j->second;
+
+ if(!material.mDiffuseMapFilename.empty())
{
- iter->second[i].mMaterial[j].mDiffuseMap =
- LLViewerTextureManager::getFetchedTextureFromUrl("file://" + iter->second[i].mMaterial[j].mDiffuseMapFilename, TRUE, LLViewerTexture::BOOST_PREVIEW);
- iter->second[i].mMaterial[j].mDiffuseMap->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, mPreview, NULL, FALSE);
- iter->second[i].mMaterial[j].mDiffuseMap->forceToSaveRawImage(0, F32_MAX);
+ material.mDiffuseMap =
+ LLViewerTextureManager::getFetchedTextureFromUrl("file://" + material.mDiffuseMapFilename, TRUE, LLViewerTexture::BOOST_PREVIEW);
+ material.mDiffuseMap->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, mPreview, NULL, FALSE);
+ material.mDiffuseMap->forceToSaveRawImage(0, F32_MAX);
mNumOfFetchingTextures++ ;
}
}
@@ -2574,7 +2637,7 @@ void LLModelLoader::processElement( daeElement* element, bool& badElement )
{
LLMatrix4 transformation = mTransform;
- std::vector<LLImportMaterial> materials = getMaterials(model, instance_geo);
+ std::map<std::string, LLImportMaterial> materials = getMaterials(model, instance_geo);
// adjust the transformation to compensate for mesh normalization
LLVector3 mesh_scale_vector;
@@ -2630,9 +2693,9 @@ void LLModelLoader::processElement( daeElement* element, bool& badElement )
}
}
-std::vector<LLImportMaterial> LLModelLoader::getMaterials(LLModel* model, domInstance_geometry* instance_geo)
+std::map<std::string, LLImportMaterial> LLModelLoader::getMaterials(LLModel* model, domInstance_geometry* instance_geo)
{
- std::vector<LLImportMaterial> materials;
+ std::map<std::string, LLImportMaterial> materials;
for (int i = 0; i < model->mMaterialList.size(); i++)
{
LLImportMaterial import_material;
@@ -2679,7 +2742,8 @@ std::vector<LLImportMaterial> LLModelLoader::getMaterials(LLModel* model, domIns
}
}
- materials.push_back(import_material);
+ import_material.mBinding = model->mMaterialList[i];
+ materials[model->mMaterialList[i]] = import_material;
}
return materials;
@@ -2814,7 +2878,7 @@ LLColor4 LLModelLoader::getDaeColor(daeElement* element)
//-----------------------------------------------------------------------------
LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
-: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex(NULL)
+: LLViewerDynamicTexture(width, height, 3, ORDER_MIDDLE, FALSE), LLMutex()
, mPelvisZOffset( 0.0f )
, mLegacyRigValid( false )
, mRigValidJointUpload( false )
@@ -2919,8 +2983,7 @@ U32 LLModelPreview::calcResourceCost()
if (mFMP && mModelLoader)
{
- const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean();
- if ( getLoadState() < LLModelLoader::ERROR_PARSING && confirmed_checkbox )
+ if ( getLoadState() < LLModelLoader::ERROR_PARSING)
{
mFMP->childEnable("ok_btn");
}
@@ -2942,7 +3005,6 @@ U32 LLModelPreview::calcResourceCost()
//ok_btn should not have been changed unless something was wrong with joint list
}
- U32 cost = 0;
std::set<LLModel*> accounted;
U32 num_points = 0;
U32 num_hulls = 0;
@@ -2990,8 +3052,7 @@ U32 LLModelPreview::calcResourceCost()
mFMP->childGetValue("upload_skin").asBoolean(),
mFMP->childGetValue("upload_joints").asBoolean(),
TRUE);
- cost += gMeshRepo.calcResourceCost(ret);
-
+
num_hulls += decomp.mHull.size();
for (U32 i = 0; i < decomp.mHull.size(); ++i)
{
@@ -3011,7 +3072,7 @@ U32 LLModelPreview::calcResourceCost()
F32 z_length = z_transformed.normalize();
LLVector3 scale = LLVector3(x_length, y_length, z_length);
- F32 radius = scale.length()*debug_scale;
+ F32 radius = scale.length()*0.5f*debug_scale;
streaming_cost += LLMeshRepository::getStreamingCost(ret, radius);
}
@@ -3023,7 +3084,7 @@ U32 LLModelPreview::calcResourceCost()
updateStatusMessages();
- return cost;
+ return (U32) streaming_cost;
}
void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)
@@ -3031,8 +3092,6 @@ void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost,
childSetTextArg("import_dimensions", "[X]", llformat("%.3f", x));
childSetTextArg("import_dimensions", "[Y]", llformat("%.3f", y));
childSetTextArg("import_dimensions", "[Z]", llformat("%.3f", z));
- childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost));
- childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));
}
@@ -3062,12 +3121,24 @@ void LLModelPreview::rebuildUploadData()
F32 max_scale = 0.f;
- const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean();
- if ( mBaseScene.size() > 0 && confirmed_checkbox )
+ if ( mBaseScene.size() > 0)
{
mFMP->childEnable("ok_btn");
}
+ //reorder materials to match mBaseModel
+ for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ {
+ if (mBaseModel.size() == mModel[i].size())
+ {
+ for (U32 j = 0; j < mBaseModel.size(); ++j)
+ {
+ mModel[i][j]->matchMaterialOrder(mBaseModel[j]);
+ llassert(mModel[i][j]->mMaterialList == mBaseModel[j]->mMaterialList);
+ }
+ }
+ }
+
for (LLModelLoader::scene::iterator iter = mBaseScene.begin(); iter != mBaseScene.end(); ++iter)
{ //for each transform in scene
LLMatrix4 mat = iter->first;
@@ -3107,18 +3178,20 @@ void LLModelPreview::rebuildUploadData()
}
}
- for (U32 i = 0; i < LLModel::NUM_LODS; i++)
- { //fill LOD slots based on reference model index
- if (!mModel[i].empty())
- {
- instance.mLOD[i] = mModel[i][idx];
- }
- else
- {
- instance.mLOD[i] = NULL;
+ if(idx < mBaseModel.size())
+ {
+ for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ { //fill LOD slots based on reference model index
+ if (mModel[i].size() > idx)
+ {
+ instance.mLOD[i] = mModel[i][idx];
+ }
+ else
+ {
+ instance.mLOD[i] = NULL;
+ }
}
}
-
instance.mTransform = mat;
mUploadData.push_back(instance);
}
@@ -3164,6 +3237,8 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
LLSD data;
+ data["version"] = SLM_SUPPORTED_VERSION;
+
S32 mesh_id = 0;
//build list of unique models and initialize local id
@@ -3190,7 +3265,7 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
instance.mLOD[LLModel::LOD_LOW],
instance.mLOD[LLModel::LOD_IMPOSTOR],
decomp,
- save_skinweights, save_joint_positions);
+ save_skinweights, save_joint_positions, FALSE, TRUE);
data["mesh"][instance.mModel->mLocalID] = str.str();
@@ -3217,7 +3292,7 @@ void LLModelPreview::clearModel(S32 lod)
mScene[lod].clear();
}
-void LLModelPreview::loadModel(std::string filename, S32 lod)
+void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable_slm)
{
assert_main_thread();
@@ -3254,6 +3329,11 @@ void LLModelPreview::loadModel(std::string filename, S32 lod)
mModelLoader = new LLModelLoader(filename, lod, this, mJointTransformMap, mJointsFromNode );
+ if (force_disable_slm)
+ {
+ mModelLoader->mTrySLM = false;
+ }
+
mModelLoader->start();
mFMP->childSetTextArg("status", "[STATUS]", mFMP->getString("status_reading_file"));
@@ -3468,7 +3548,17 @@ void LLModelPreview::loadModelCallback(S32 lod)
mLoading = false;
if (mFMP)
+ {
mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE);
+ if (!mBaseModel.empty())
+ {
+ if (mFMP->getChild<LLUICtrl>("description_form")->getValue().asString().empty())
+ {
+ const std::string& model_name = mBaseModel[0]->getName();
+ mFMP->getChild<LLUICtrl>("description_form")->setValue(model_name);
+ }
+ }
+ }
refresh();
mModelLoadedSignal();
@@ -3524,43 +3614,6 @@ void LLModelPreview::generateNormals()
updateStatusMessages();
}
-void LLModelPreview::clearMaterials()
-{
- for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter)
- { //for each transform in current scene
- for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter)
- { //for each instance with that transform
- LLModelInstance& source_instance = *model_iter;
- LLModel* source = source_instance.mModel;
-
- for (S32 i = 0; i < source->getNumVolumeFaces(); ++i)
- { //for each face in instance
- LLImportMaterial& source_material = source_instance.mMaterial[i];
-
- //clear material info
- source_material.mDiffuseColor = LLColor4(1,1,1,1);
- source_material.mDiffuseMap = NULL;
- source_material.mDiffuseMapFilename.clear();
- source_material.mDiffuseMapLabel.clear();
- source_material.mFullbright = false;
- }
- }
- }
-
- mVertexBuffer[mPreviewLOD].clear();
-
- if (mPreviewLOD == LLModel::LOD_HIGH)
- {
- mBaseScene = mScene[mPreviewLOD];
- mBaseModel = mModel[mPreviewLOD];
- clearGLODGroup();
- mVertexBuffer[5].clear();
- }
-
- mResourceCost = calcResourceCost();
- refresh();
-}
-
void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit)
{
if (mBaseModel.empty())
@@ -3734,7 +3787,9 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
U32 tri_count = 0;
for (U32 i = 0; i < mVertexBuffer[5][mdl].size(); ++i)
{
- mVertexBuffer[5][mdl][i]->setBuffer(type_mask);
+ LLVertexBuffer* buff = mVertexBuffer[5][mdl][i];
+ buff->setBuffer(type_mask & buff->getTypeMask());
+
U32 num_indices = mVertexBuffer[5][mdl][i]->getNumIndices();
if (num_indices > 2)
{
@@ -3856,6 +3911,8 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
for (GLint i = 0; i < patch_count; ++i)
{
+ type_mask = mVertexBuffer[5][base][i]->getTypeMask();
+
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(type_mask, 0);
if (sizes[i*2+1] > 0 && sizes[i*2] > 0)
@@ -3880,8 +3937,15 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
LLStrider<U16> index;
buff->getVertexStrider(pos);
- buff->getNormalStrider(norm);
- buff->getTexCoord0Strider(tc);
+ if (type_mask & LLVertexBuffer::MAP_NORMAL)
+ {
+ buff->getNormalStrider(norm);
+ }
+ if (type_mask & LLVertexBuffer::MAP_TEXCOORD0)
+ {
+ buff->getTexCoord0Strider(tc);
+ }
+
buff->getIndexStrider(index);
target_model->setVolumeFaceData(names[i], pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices());
@@ -4087,18 +4151,20 @@ void LLModelPreview::updateStatusMessages()
}
else if (!verts[lod].empty())
{
+ S32 sum_verts_higher_lod = 0;
+ S32 sum_verts_this_lod = 0;
for (U32 i = 0; i < verts[lod].size(); ++i)
{
- S32 max_verts = i < verts[lod+1].size() ? verts[lod+1][i] : 0;
+ sum_verts_higher_lod += ((i < verts[lod+1].size()) ? verts[lod+1][i] : 0);
+ sum_verts_this_lod += verts[lod][i];
+ }
- if (max_verts > 0)
- {
- if (verts[lod][i] > max_verts)
- { //too many vertices in this lod
- message = "mesh_status_too_many_vertices";
- upload_status[lod] = 2;
- }
- }
+ if ((sum_verts_higher_lod > 0) &&
+ (sum_verts_this_lod > sum_verts_higher_lod))
+ {
+ //too many vertices in this lod
+ message = "mesh_status_too_many_vertices";
+ upload_status[lod] = 2;
}
}
}
@@ -4163,8 +4229,7 @@ void LLModelPreview::updateStatusMessages()
}
}
- const BOOL confirmed_checkbox = mFMP->getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean();
- if ( upload_ok && !errorStateFromLoader && skinAndRigOk && !has_degenerate && confirmed_checkbox)
+ if ( upload_ok && !errorStateFromLoader && skinAndRigOk && !has_degenerate)
{
mFMP->childEnable("ok_btn");
}
@@ -4269,6 +4334,24 @@ void LLModelPreview::updateStatusMessages()
child->setEnabled(enable);
child = panel->findNextSibling(child);
}
+
+ if (fmp->mCurRequest.empty())
+ {
+ fmp->childSetVisible("Simplify", true);
+ fmp->childSetVisible("simplify_cancel", false);
+ fmp->childSetVisible("Decompose", true);
+ fmp->childSetVisible("decompose_cancel", false);
+
+ if (phys_hulls > 0)
+ {
+ fmp->childEnable("Simplify");
+ }
+
+ if (phys_tris || phys_hulls > 0)
+ {
+ fmp->childEnable("Decompose");
+ }
+ }
}
const char* lod_controls[] =
@@ -4412,6 +4495,8 @@ void LLModelPreview::updateStatusMessages()
crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]);
}
+ mModelUpdatedSignal(true);
+
}
void LLModelPreview::setPreviewTarget(F32 distance)
@@ -4485,7 +4570,7 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
bool skinned = include_skin_weights && !mdl->mSkinWeights.empty();
- U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0;
+ U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0 ;
if (skinned)
{
@@ -4503,8 +4588,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
LLStrider<LLVector4> weights_strider;
vb->getVertexStrider(vertex_strider);
- vb->getNormalStrider(normal_strider);
- vb->getTexCoord0Strider(tc_strider);
vb->getIndexStrider(index_strider);
if (skinned)
@@ -4513,8 +4596,18 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights)
}
LLVector4a::memcpyNonAliased16((F32*) vertex_strider.get(), (F32*) vf.mPositions, num_vertices*4*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32));
- LLVector4a::memcpyNonAliased16((F32*) normal_strider.get(), (F32*) vf.mNormals, num_vertices*4*sizeof(F32));
+
+ if (vf.mTexCoords)
+ {
+ vb->getTexCoord0Strider(tc_strider);
+ LLVector4a::memcpyNonAliased16((F32*) tc_strider.get(), (F32*) vf.mTexCoords, num_vertices*2*sizeof(F32));
+ }
+
+ if (vf.mNormals)
+ {
+ vb->getNormalStrider(normal_strider);
+ LLVector4a::memcpyNonAliased16((F32*) normal_strider.get(), (F32*) vf.mNormals, num_vertices*4*sizeof(F32));
+ }
if (skinned)
{
@@ -4728,7 +4821,18 @@ BOOL LLModelPreview::render()
glClear(GL_DEPTH_BUFFER_BIT);
- LLRect preview_rect = mFMP->getChildView("preview_panel")->getRect();
+ LLRect preview_rect;
+
+ LLFloaterModelWizard* floater_wizard = dynamic_cast<LLFloaterModelWizard*>(mFMP);
+ if (floater_wizard)
+ {
+ preview_rect = floater_wizard->getPreviewRect();
+ }
+ else
+ {
+ preview_rect = mFMP->getChildView("preview_panel")->getRect();
+ }
+
F32 aspect = (F32) preview_rect.getWidth()/preview_rect.getHeight();
LLViewerCamera::getInstance()->setAspect(aspect);
@@ -4773,6 +4877,8 @@ BOOL LLModelPreview::render()
const F32 BRIGHTNESS = 0.9f;
gGL.color3f(BRIGHTNESS, BRIGHTNESS, BRIGHTNESS);
+ const U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0;
+
LLGLEnable normalize(GL_NORMALIZE);
if (!mBaseModel.empty() && mVertexBuffer[5].empty())
@@ -4795,6 +4901,19 @@ BOOL LLModelPreview::render()
}
}
+ //make sure material lists all match
+ for (U32 i = 0; i < LLModel::NUM_LODS; i++)
+ {
+ if (mBaseModel.size() == mModel[i].size())
+ {
+ for (U32 j = 0; j < mBaseModel.size(); ++j)
+ {
+ mModel[i][j]->matchMaterialOrder(mBaseModel[j]);
+ llassert(mModel[i][j]->mMaterialList == mBaseModel[j]->mMaterialList);
+ }
+ }
+ }
+
if (regen)
{
genBuffers(mPreviewLOD, skin_weight);
@@ -4821,18 +4940,23 @@ BOOL LLModelPreview::render()
for (U32 i = 0; i < mVertexBuffer[mPreviewLOD][model].size(); ++i)
{
LLVertexBuffer* buffer = mVertexBuffer[mPreviewLOD][model][i];
-
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
+
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
if (textures)
{
- glColor4fv(instance.mMaterial[i].mDiffuseColor.mV);
- if (i < instance.mMaterial.size() && instance.mMaterial[i].mDiffuseMap.notNull())
+ const std::string& binding = instance.mModel->mMaterialList[i];
+ const LLImportMaterial& material = instance.mMaterial[binding];
+
+ llassert(binding == model->mMaterialList[i]);
+
+ glColor4fv(material.mDiffuseColor.mV);
+ if (material.mDiffuseMap.notNull())
{
- if (instance.mMaterial[i].mDiffuseMap->getDiscardLevel() > -1)
+ if (material.mDiffuseMap->getDiscardLevel() > -1)
{
- gGL.getTexUnit(0)->bind(instance.mMaterial[i].mDiffuseMap, true);
- mTextureSet.insert(instance.mMaterial[i].mDiffuseMap.get());
+ gGL.getTexUnit(0)->bind(material.mDiffuseMap, true);
+ mTextureSet.insert(material.mDiffuseMap.get());
}
}
}
@@ -4941,7 +5065,7 @@ BOOL LLModelPreview::render()
{
LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i];
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
@@ -5007,7 +5131,7 @@ BOOL LLModelPreview::render()
{
LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i];
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
LLStrider<LLVector3> pos_strider;
buffer->getVertexStrider(pos_strider, 0);
@@ -5132,8 +5256,10 @@ BOOL LLModelPreview::render()
position[j] = v;
}
- buffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0);
- glColor4fv(instance.mMaterial[i].mDiffuseColor.mV);
+ const std::string& binding = instance.mModel->mMaterialList[i];
+ const LLImportMaterial& material = instance.mMaterial[binding];
+ buffer->setBuffer(type_mask & buffer->getTypeMask());
+ glColor4fv(material.mDiffuseColor.mV);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0);
glColor3f(0.4f, 0.4f, 0.4f);
@@ -5253,7 +5379,12 @@ void LLFloaterModelPreview::onReset(void* user_data)
LLFloaterModelPreview* fmp = (LLFloaterModelPreview*) user_data;
LLModelPreview* mp = fmp->mModelPreview;
std::string filename = mp->mLODFile[3];
- mp->loadModel(filename,3);
+
+ //reset model preview
+ fmp->initModelPreview();
+
+ mp = fmp->mModelPreview;
+ mp->loadModel(filename,3,true);
}
//static
@@ -5271,31 +5402,18 @@ void LLFloaterModelPreview::onUpload(void* user_data)
mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
- mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions);
-
- mp->closeFloater(false);
+ mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mp->mUploadModelUrl,
+ true, LLHandle<LLWholeModelFeeObserver>(), mp->getWholeModelUploadObserverHandle());
}
//static
-void LLFloaterModelPreview::onClearMaterials(void* user_data)
-{
- LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data;
- mp->mModelPreview->clearMaterials();
-}
-
-//static
void LLFloaterModelPreview::refresh(LLUICtrl* ctrl, void* user_data)
{
+ sInstance->toggleCalculateButton(true);
sInstance->mModelPreview->mDirty = true;
}
-void LLFloaterModelPreview::updateResourceCost()
-{
- U32 cost = mModelPreview->mResourceCost;
- childSetLabelArg("ok_btn", "[AMOUNT]", llformat("%d",cost));
-}
-
//static
void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* src_aux, S32 discard_level, BOOL final, void* userdata )
{
@@ -5339,6 +5457,97 @@ void LLFloaterModelPreview::setStatusMessage(const std::string& msg)
mStatusMessage = msg;
}
+void LLFloaterModelPreview::toggleCalculateButton()
+{
+ toggleCalculateButton(true);
+}
+
+void LLFloaterModelPreview::toggleCalculateButton(bool visible)
+{
+ mCalculateBtn->setVisible(visible);
+
+ bool uploadingSkin = childGetValue("upload_skin").asBoolean();
+ bool uploadingJointPositions = childGetValue("upload_joints").asBoolean();
+ if ( uploadingSkin )
+ {
+ //Disable the calculate button *if* the rig is invalid - which is determined during the critiquing process
+ if ( uploadingJointPositions && !mModelPreview->isRigValidForJointPositionUpload() )
+ {
+ mCalculateBtn->setVisible( false );
+ }
+ else
+ if ( !mModelPreview->isLegacyRigValid() )
+ {
+ mCalculateBtn->setVisible( false );
+ }
+ }
+
+ mUploadBtn->setVisible(!visible);
+ mUploadBtn->setEnabled(mHasUploadPerm && !mUploadModelUrl.empty());
+
+ if (visible)
+ {
+ std::string tbd = getString("tbd");
+ childSetTextArg("weights", "[EQ]", tbd);
+ childSetTextArg("weights", "[ST]", tbd);
+ childSetTextArg("weights", "[SIM]", tbd);
+ childSetTextArg("weights", "[PH]", tbd);
+ childSetTextArg("upload_fee", "[FEE]", tbd);
+ childSetTextArg("price_breakdown", "[STREAMING]", tbd);
+ childSetTextArg("price_breakdown", "[PHYSICS]", tbd);
+ childSetTextArg("price_breakdown", "[INSTANCES]", tbd);
+ childSetTextArg("price_breakdown", "[TEXTURES]", tbd);
+ childSetTextArg("price_breakdown", "[MODEL]", tbd);
+ }
+}
+
+void LLFloaterModelPreview::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url)
+{
+ mModelPhysicsFee = result;
+ mModelPhysicsFee["url"] = upload_url;
+
+ doOnIdleOneTime(boost::bind(&LLFloaterModelPreview::handleModelPhysicsFeeReceived,this));
+}
+
+void LLFloaterModelPreview::handleModelPhysicsFeeReceived()
+{
+ const LLSD& result = mModelPhysicsFee;
+ mUploadModelUrl = result["url"].asString();
+
+ childSetTextArg("weights", "[EQ]", llformat("%0.3f", result["resource_cost"].asReal()));
+ childSetTextArg("weights", "[ST]", llformat("%0.3f", result["model_streaming_cost"].asReal()));
+ childSetTextArg("weights", "[SIM]", llformat("%0.3f", result["simulation_cost"].asReal()));
+ childSetTextArg("weights", "[PH]", llformat("%0.3f", result["physics_cost"].asReal()));
+ childSetTextArg("upload_fee", "[FEE]", llformat("%d", result["upload_price"].asInteger()));
+ childSetTextArg("price_breakdown", "[STREAMING]", llformat("%d", result["upload_price_breakdown"]["mesh_streaming"].asInteger()));
+ childSetTextArg("price_breakdown", "[PHYSICS]", llformat("%d", result["upload_price_breakdown"]["mesh_physics"].asInteger()));
+ childSetTextArg("price_breakdown", "[INSTANCES]", llformat("%d", result["upload_price_breakdown"]["mesh_instance"].asInteger()));
+ childSetTextArg("price_breakdown", "[TEXTURES]", llformat("%d", result["upload_price_breakdown"]["texture"].asInteger()));
+ childSetTextArg("price_breakdown", "[MODEL]", llformat("%d", result["upload_price_breakdown"]["model"].asInteger()));
+ childSetVisible("weights", true);
+ childSetVisible("upload_fee", true);
+ childSetVisible("price_breakdown", true);
+ mUploadBtn->setEnabled(mHasUploadPerm && !mUploadModelUrl.empty());
+}
+
+void LLFloaterModelPreview::setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason)
+{
+ toggleCalculateButton(true);
+ llwarns << "LLFloaterModelPreview::setModelPhysicsFeeErrorStatus(" << status << " : " << reason << ")" << llendl;
+}
+
+/*virtual*/
+void LLFloaterModelPreview::onModelUploadSuccess()
+{
+ closeFloater(false);
+}
+
+/*virtual*/
+void LLFloaterModelPreview::onModelUploadFailure()
+{
+ toggleCalculateButton(true);
+}
+
S32 LLFloaterModelPreview::DecompRequest::statusCallback(const char* status, S32 p1, S32 p2)
{
if (mContinue)
@@ -5378,3 +5587,25 @@ void LLFloaterModelPreview::DecompRequest::completed()
llassert(sInstance->mCurRequest.find(this) == sInstance->mCurRequest.end());
}
}
+
+void dump_llsd_to_file(const LLSD& content, std::string filename);
+
+void LLFloaterModelPreview::onPermissionsReceived(const LLSD& result)
+{
+ dump_llsd_to_file(result,"perm_received.xml");
+ std::string upload_status = result["mesh_upload_status"].asString();
+ // BAP HACK: handle "" for case that MeshUploadFlag cap is broken.
+ mHasUploadPerm = (("" == upload_status) || ("valid" == upload_status));
+
+ //mUploadBtn->setEnabled(mHasUploadPerm);
+ mUploadBtn->setEnabled(mHasUploadPerm && !mUploadModelUrl.empty());
+ getChild<LLTextBox>("warning_title")->setVisible(!mHasUploadPerm);
+ getChild<LLTextBox>("warning_message")->setVisible(!mHasUploadPerm);
+}
+
+void LLFloaterModelPreview::setPermissonsErrorStatus(U32 status, const std::string& reason)
+{
+ llwarns << "LLFloaterModelPreview::setPermissonsErrorStatus(" << status << " : " << reason << ")" << llendl;
+
+ LLNotificationsUtil::add("MeshUploadPermError");
+}
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index d4f6b4d293..3a5f7602fe 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -109,7 +109,7 @@ public:
void loadTextures() ; //called in the main thread.
void processElement(daeElement* element, bool& badElement);
- std::vector<LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo);
+ std::map<std::string, LLImportMaterial> getMaterials(LLModel* model, domInstance_geometry* instance_geo);
LLImportMaterial profileToMaterial(domProfile_COMMON* material);
std::string getElementLabel(daeElement *element);
LLColor4 getDaeColor(daeElement* element);
@@ -140,7 +140,7 @@ private:
static bool isAlive(LLModelLoader* loader) ;
};
-class LLFloaterModelPreview : public LLFloater
+class LLFloaterModelPreview : public LLFloaterModelUploadBase
{
public:
@@ -162,11 +162,15 @@ public:
virtual BOOL postBuild();
+ void initModelPreview();
+
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
BOOL handleMouseUp(S32 x, S32 y, MASK mask);
BOOL handleHover(S32 x, S32 y, MASK mask);
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ /*virtual*/ void onOpen(const LLSD& key);
+
static void onMouseCaptureLostModelPreview(LLMouseHandler*);
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
@@ -178,13 +182,10 @@ public:
static void onUpload(void* data);
- static void onClearMaterials(void* data);
-
static void refresh(LLUICtrl* ctrl, void* data);
- void updateResourceCost();
-
void loadModel(S32 lod);
+ void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
void onViewOptionChecked(const LLSD& userdata);
bool isViewOptionChecked(const LLSD& userdata);
@@ -193,6 +194,20 @@ public:
void enableViewOption(const std::string& option);
void disableViewOption(const std::string& option);
+ // shows warning message if agent has no permissions to upload model
+ /*virtual*/ void onPermissionsReceived(const LLSD& result);
+
+ // called when error occurs during permissions request
+ /*virtual*/ void setPermissonsErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url);
+ void handleModelPhysicsFeeReceived();
+ /*virtual*/ void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelUploadSuccess();
+
+ /*virtual*/ void onModelUploadFailure();
+
protected:
friend class LLModelPreview;
friend class LLMeshFilePicker;
@@ -258,6 +273,17 @@ protected:
LLToggleableMenu* mViewOptionMenu;
LLMutex* mStatusLock;
+ LLSD mModelPhysicsFee;
+
+private:
+ void onClickCalculateBtn();
+ void toggleCalculateButton();
+
+ // Toggles between "Calculate weights & fee" and "Upload" buttons.
+ void toggleCalculateButton(bool visible);
+
+ LLButton* mUploadBtn;
+ LLButton* mCalculateBtn;
};
class LLMeshFilePicker : public LLFilePickerThread
@@ -276,6 +302,7 @@ class LLModelPreview : public LLViewerDynamicTexture, public LLMutex
{
typedef boost::signals2::signal<void (F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost)> details_signal_t;
typedef boost::signals2::signal<void (void)> model_loaded_signal_t;
+ typedef boost::signals2::signal<void (bool)> model_updated_signal_t;
public:
LLModelPreview(S32 width, S32 height, LLFloater* fmp);
@@ -297,11 +324,10 @@ public:
virtual BOOL needsRender() { return mNeedsUpdate; }
void setPreviewLOD(S32 lod);
void clearModel(S32 lod);
- void loadModel(std::string filename, S32 lod);
+ void loadModel(std::string filename, S32 lod, bool force_disable_slm = false);
void loadModelCallback(S32 lod);
void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
void generateNormals();
- void clearMaterials();
U32 calcResourceCost();
void rebuildUploadData();
void saveUploadData(bool save_skinweights, bool save_joint_poisitions);
@@ -335,6 +361,7 @@ public:
boost::signals2::connection setDetailsCallback( const details_signal_t::slot_type& cb ){ return mDetailsSignal.connect(cb); }
boost::signals2::connection setModelLoadedCallback( const model_loaded_signal_t::slot_type& cb ){ return mModelLoadedSignal.connect(cb); }
+ boost::signals2::connection setModelUpdatedCallback( const model_updated_signal_t::slot_type& cb ){ return mModelUpdatedSignal.connect(cb); }
void setLoadState( U32 state ) { mLoadState = state; }
U32 getLoadState() { return mLoadState; }
@@ -420,6 +447,7 @@ private:
details_signal_t mDetailsSignal;
model_loaded_signal_t mModelLoadedSignal;
+ model_updated_signal_t mModelUpdatedSignal;
LLVector3 mModelPivot;
bool mHasPivot;
diff --git a/indra/newview/llfloatermodeluploadbase.cpp b/indra/newview/llfloatermodeluploadbase.cpp
new file mode 100644
index 0000000000..6d3800bfa4
--- /dev/null
+++ b/indra/newview/llfloatermodeluploadbase.cpp
@@ -0,0 +1,58 @@
+/**
+ * @file llfloatermodeluploadbase.cpp
+ * @brief LLFloaterUploadModelBase class definition
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloatermodeluploadbase.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "llnotificationsutil.h"
+
+LLFloaterModelUploadBase::LLFloaterModelUploadBase(const LLSD& key)
+:LLFloater(key),
+ mHasUploadPerm(false)
+{
+}
+
+void LLFloaterModelUploadBase::requestAgentUploadPermissions()
+{
+ std::string capability = "MeshUploadFlag";
+ std::string url = gAgent.getRegion()->getCapability(capability);
+
+ if (!url.empty())
+ {
+ llinfos<< typeid(*this).name() <<"::requestAgentUploadPermissions() requesting for upload model permissions from: "<< url <<llendl;
+ LLHTTPClient::get(url, new LLUploadModelPremissionsResponder(getPermObserverHandle()));
+ }
+ else
+ {
+ LLSD args;
+ args["CAPABILITY"] = capability;
+ LLNotificationsUtil::add("RegionCapabilityRequestError", args);
+ // BAP HACK avoid being blocked by broken server side stuff
+ mHasUploadPerm = true;
+ }
+}
diff --git a/indra/newview/llfloatermodeluploadbase.h b/indra/newview/llfloatermodeluploadbase.h
new file mode 100644
index 0000000000..a52bc28687
--- /dev/null
+++ b/indra/newview/llfloatermodeluploadbase.h
@@ -0,0 +1,61 @@
+/**
+ * @file llfloatermodeluploadbase.h
+ * @brief LLFloaterUploadModelBase class declaration
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLFLOATERMODELUPLOADBASE_H
+#define LL_LLFLOATERMODELUPLOADBASE_H
+
+#include "lluploadfloaterobservers.h"
+
+class LLFloaterModelUploadBase : public LLFloater, public LLUploadPermissionsObserver, public LLWholeModelFeeObserver, public LLWholeModelUploadObserver
+{
+public:
+
+ LLFloaterModelUploadBase(const LLSD& key);
+
+ virtual ~LLFloaterModelUploadBase(){};
+
+ virtual void setPermissonsErrorStatus(U32 status, const std::string& reason) = 0;
+
+ virtual void onPermissionsReceived(const LLSD& result) = 0;
+
+ virtual void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url) = 0;
+
+ virtual void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason) = 0;
+
+ virtual void onModelUploadSuccess() {};
+
+ virtual void onModelUploadFailure() {};
+
+protected:
+
+ // requests agent's permissions to upload model
+ void requestAgentUploadPermissions();
+
+ std::string mUploadModelUrl;
+ bool mHasUploadPerm;
+};
+
+#endif /* LL_LLFLOATERMODELUPLOADBASE_H */
diff --git a/indra/newview/llfloatermodelwizard.cpp b/indra/newview/llfloatermodelwizard.cpp
index 707c8288df..b517b78e5a 100644
--- a/indra/newview/llfloatermodelwizard.cpp
+++ b/indra/newview/llfloatermodelwizard.cpp
@@ -46,12 +46,21 @@ static const std::string stateNames[]={
"choose_file",
"optimize",
"physics",
- "physics2",
"review",
"upload"};
+static void swap_controls(LLUICtrl* first_ctrl, LLUICtrl* second_ctrl, bool first_ctr_visible);
+
LLFloaterModelWizard::LLFloaterModelWizard(const LLSD& key)
- : LLFloater(key)
+ : LLFloaterModelUploadBase(key)
+ ,mRecalculateGeometryBtn(NULL)
+ ,mRecalculatePhysicsBtn(NULL)
+ ,mRecalculatingPhysicsBtn(NULL)
+ ,mCalculateWeightsBtn(NULL)
+ ,mCalculatingWeightsBtn(NULL)
+ ,mChooseFilePreviewPanel(NULL)
+ ,mOptimizePreviewPanel(NULL)
+ ,mPhysicsPreviewPanel(NULL)
{
mLastEnabledState = CHOOSE_FILE;
sInstance = this;
@@ -59,7 +68,6 @@ LLFloaterModelWizard::LLFloaterModelWizard(const LLSD& key)
mCommitCallbackRegistrar.add("Wizard.Choose", boost::bind(&LLFloaterModelWizard::setState, this, CHOOSE_FILE));
mCommitCallbackRegistrar.add("Wizard.Optimize", boost::bind(&LLFloaterModelWizard::setState, this, OPTIMIZE));
mCommitCallbackRegistrar.add("Wizard.Physics", boost::bind(&LLFloaterModelWizard::setState, this, PHYSICS));
- mCommitCallbackRegistrar.add("Wizard.Physics2", boost::bind(&LLFloaterModelWizard::setState, this, PHYSICS2));
mCommitCallbackRegistrar.add("Wizard.Review", boost::bind(&LLFloaterModelWizard::setState, this, REVIEW));
mCommitCallbackRegistrar.add("Wizard.Upload", boost::bind(&LLFloaterModelWizard::setState, this, UPLOAD));
}
@@ -81,16 +89,22 @@ void LLFloaterModelWizard::setState(int state)
}
}
+ LLView* current_preview_panel = NULL;
+
if (state == CHOOSE_FILE)
{
mModelPreview->mViewOption["show_physics"] = false;
+ current_preview_panel = mChooseFilePreviewPanel;
+
getChildView("close")->setVisible(false);
getChildView("back")->setVisible(true);
getChildView("back")->setEnabled(false);
getChildView("next")->setVisible(true);
getChildView("upload")->setVisible(false);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == OPTIMIZE)
@@ -102,12 +116,16 @@ void LLFloaterModelWizard::setState(int state)
mModelPreview->mViewOption["show_physics"] = false;
+ current_preview_panel = mOptimizePreviewPanel;
+
getChildView("back")->setVisible(true);
getChildView("back")->setEnabled(true);
getChildView("close")->setVisible(false);
getChildView("next")->setVisible(true);
getChildView("upload")->setVisible(false);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == PHYSICS)
@@ -115,34 +133,24 @@ void LLFloaterModelWizard::setState(int state)
if (mLastEnabledState < state)
{
mModelPreview->setPhysicsFromLOD(1);
- }
- mModelPreview->mViewOption["show_physics"] = true;
-
- getChildView("next")->setVisible(true);
- getChildView("upload")->setVisible(false);
- getChildView("close")->setVisible(false);
- getChildView("back")->setVisible(true);
- getChildView("back")->setEnabled(true);
- getChildView("cancel")->setVisible(true);
- }
-
- if (state == PHYSICS2)
- {
- if (mLastEnabledState < state)
- {
- executePhysicsStage("Decompose");
+ // Trigger the recalculate physics when first entering
+ // the Physics step.
+ onClickRecalculatePhysics();
}
mModelPreview->mViewOption["show_physics"] = true;
- getChildView("next")->setVisible(true);
- getChildView("next")->setEnabled(true);
+ current_preview_panel = mPhysicsPreviewPanel;
+
+ getChildView("next")->setVisible(false);
getChildView("upload")->setVisible(false);
getChildView("close")->setVisible(false);
getChildView("back")->setVisible(true);
getChildView("back")->setEnabled(true);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(true);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == REVIEW)
@@ -156,6 +164,8 @@ void LLFloaterModelWizard::setState(int state)
getChildView("back")->setEnabled(true);
getChildView("upload")->setVisible(true);
getChildView("cancel")->setVisible(true);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
if (state == UPLOAD)
@@ -165,8 +175,24 @@ void LLFloaterModelWizard::setState(int state)
getChildView("back")->setVisible(false);
getChildView("upload")->setVisible(false);
getChildView("cancel")->setVisible(false);
+ mCalculateWeightsBtn->setVisible(false);
+ mCalculatingWeightsBtn->setVisible(false);
}
+ if (current_preview_panel)
+ {
+ LLRect rect;
+ current_preview_panel->localRectToOtherView(current_preview_panel->getLocalRect(), &rect, this);
+
+ // Reduce the preview rect by 1 px to fit the borders
+ rect.stretch(-1);
+
+ if (rect != mPreviewRect)
+ {
+ mPreviewRect = rect;
+ mModelPreview->refresh();
+ }
+ }
updateButtons();
}
@@ -198,18 +224,60 @@ void LLFloaterModelWizard::updateButtons()
button->setEnabled(FALSE);
}
}
+}
- LLButton *physics_button = getChild<LLButton>(stateNames[PHYSICS]+"_btn");
-
- if (mState == PHYSICS2)
+void LLFloaterModelWizard::onClickSwitchToAdvanced()
+{
+ LLFloaterModelPreview* floater_preview = LLFloaterReg::getTypedInstance<LLFloaterModelPreview>("upload_model");
+ if (!floater_preview)
{
- physics_button->setVisible(false);
+ llwarns << "FLoater model preview not found." << llendl;
+ return;
}
- else
+
+ // Open floater model preview
+ floater_preview->openFloater();
+
+ // Close the wizard
+ closeFloater();
+
+ std::string filename = getChild<LLUICtrl>("lod_file")->getValue().asString();
+ if (!filename.empty())
{
- physics_button->setVisible(true);
+ // Re-load the model to the floater model preview if it has been loaded
+ // into the wizard.
+ floater_preview->loadModel(3, filename);
}
+}
+
+void LLFloaterModelWizard::onClickRecalculateGeometry()
+{
+ S32 val = getChild<LLUICtrl>("accuracy_slider")->getValue().asInteger();
+
+ mModelPreview->genLODs(-1, NUM_LOD - val);
+
+ mModelPreview->refresh();
+}
+
+void LLFloaterModelWizard::onClickRecalculatePhysics()
+{
+ // Hide the "Recalculate physics" button and show the "Recalculating..."
+ // button instead.
+ swap_controls(mRecalculatePhysicsBtn, mRecalculatingPhysicsBtn, false);
+
+ executePhysicsStage("Decompose");
+}
+void LLFloaterModelWizard::onClickCalculateUploadFee()
+{
+ swap_controls(mCalculateWeightsBtn, mCalculatingWeightsBtn, false);
+
+ mModelPreview->rebuildUploadData();
+
+ mUploadModelUrl.clear();
+
+ gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
+ true, false, false, mUploadModelUrl, false, getWholeModelFeeObserverHandle());
}
void LLFloaterModelWizard::loadModel()
@@ -344,6 +412,7 @@ BOOL LLFloaterModelWizard::handleScrollWheel(S32 x, S32 y, S32 clicks)
return TRUE;
}
+
void LLFloaterModelWizard::initDecompControls()
{
LLSD key;
@@ -401,12 +470,83 @@ void LLFloaterModelWizard::initDecompControls()
mDecompParams["Simplify Method"] = 0; // set it to retain %
}
+/*virtual*/
+void LLFloaterModelWizard::onPermissionsReceived(const LLSD& result)
+{
+ std::string upload_status = result["mesh_upload_status"].asString();
+ // BAP HACK: handle "" for case that MeshUploadFlag cap is broken.
+ mHasUploadPerm = (("" == upload_status) || ("valid" == upload_status));
+
+ getChildView("warning_label")->setVisible(!mHasUploadPerm);
+ getChildView("warning_text")->setVisible(!mHasUploadPerm);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::setPermissonsErrorStatus(U32 status, const std::string& reason)
+{
+ llwarns << "LLFloaterModelWizard::setPermissonsErrorStatus(" << status << " : " << reason << ")" << llendl;
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url)
+{
+ swap_controls(mCalculateWeightsBtn, mCalculatingWeightsBtn, true);
+
+ // Enable the "Upload" buton if we have calculated the upload fee
+ // and have the permission to upload.
+ getChildView("upload")->setEnabled(mHasUploadPerm);
+
+ mUploadModelUrl = upload_url;
+
+ S32 fee = result["upload_price"].asInteger();
+ childSetTextArg("review_fee", "[FEE]", llformat("%d", fee));
+ childSetTextArg("charged_fee", "[FEE]", llformat("%d", fee));
+
+ setState(REVIEW);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason)
+{
+ swap_controls(mCalculateWeightsBtn, mCalculatingWeightsBtn, true);
+
+ // Disable the "Review" step if it has been previously enabled.
+ modelChangedCallback();
+
+ llwarns << "LLFloaterModelWizard::setModelPhysicsFeeErrorStatus(" << status << " : " << reason << ")" << llendl;
+
+ setState(PHYSICS);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelUploadSuccess()
+{
+ // success!
+ setState(UPLOAD);
+}
+
+/*virtual*/
+void LLFloaterModelWizard::onModelUploadFailure()
+{
+ // Failure. Make the user recalculate fees
+ setState(PHYSICS);
+ // Disable the "Review" step if it has been previously enabled.
+ if (mLastEnabledState > PHYSICS)
+ {
+ mLastEnabledState = PHYSICS;
+ }
+
+ updateButtons();
+}
+
//static
void LLFloaterModelWizard::executePhysicsStage(std::string stage_name)
{
if (sInstance)
{
- F64 physics_accuracy = sInstance->getChild<LLSliderCtrl>("physics_slider")->getValue().asReal();
+ // Invert the slider value so that "performance" end is giving the least detailed physics,
+ // and the "accuracy" end is giving the most detailed physics
+ F64 physics_accuracy = 1 - sInstance->getChild<LLSliderCtrl>("physics_slider")->getValue().asReal();
sInstance->mDecompParams["Retain%"] = physics_accuracy;
@@ -471,13 +611,16 @@ void LLFloaterModelWizard::DecompRequest::completed()
{
executePhysicsStage("Simplify");
}
+ else
+ {
+ // Decomp request is complete so we can enable the "Recalculate physics" button again.
+ swap_controls(sInstance->mRecalculatePhysicsBtn, sInstance->mRecalculatingPhysicsBtn, true);
+ }
}
BOOL LLFloaterModelWizard::postBuild()
{
- LLView* preview_panel = getChildView("preview_panel");
-
childSetValue("import_scale", (F32) 0.67335826);
getChild<LLUICtrl>("browse")->setCommitCallback(boost::bind(&LLFloaterModelWizard::loadModel, this));
@@ -488,23 +631,36 @@ BOOL LLFloaterModelWizard::postBuild()
getChild<LLUICtrl>("next")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickNext, this));
getChild<LLUICtrl>("preview_lod_combo")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));
getChild<LLUICtrl>("preview_lod_combo2")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));
- getChild<LLUICtrl>("preview_lod_combo3")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPreviewLODCommit, this, _1));
- getChild<LLUICtrl>("accuracy_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onAccuracyPerformance, this, _2));
getChild<LLUICtrl>("upload")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onUpload, this));
- getChild<LLUICtrl>("physics_slider")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onPhysicsChanged, this));
+ getChild<LLUICtrl>("switch_to_advanced")->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickSwitchToAdvanced, this));
+
+ mRecalculateGeometryBtn = getChild<LLButton>("recalculate_geometry_btn");
+ mRecalculateGeometryBtn->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickRecalculateGeometry, this));
+
+ mRecalculatePhysicsBtn = getChild<LLButton>("recalculate_physics_btn");
+ mRecalculatePhysicsBtn->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickRecalculatePhysics, this));
+
+ mRecalculatingPhysicsBtn = getChild<LLButton>("recalculating_physics_btn");
+
+ mCalculateWeightsBtn = getChild<LLButton>("calculate");
+ mCalculateWeightsBtn->setCommitCallback(boost::bind(&LLFloaterModelWizard::onClickCalculateUploadFee, this));
+
+ mCalculatingWeightsBtn = getChild<LLButton>("calculating");
+
+ mChooseFilePreviewPanel = getChild<LLView>("choose_file_preview_panel");
+ mOptimizePreviewPanel = getChild<LLView>("optimize_preview_panel");
+ mPhysicsPreviewPanel = getChild<LLView>("physics_preview_panel");
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
enable_registrar.add("Next.OnEnable", boost::bind(&LLFloaterModelWizard::onEnableNext, this));
enable_registrar.add("Back.OnEnable", boost::bind(&LLFloaterModelWizard::onEnableBack, this));
-
-
- mPreviewRect = preview_panel->getRect();
mModelPreview = new LLModelPreview(512, 512, this);
mModelPreview->setPreviewTarget(16.f);
mModelPreview->setDetailsCallback(boost::bind(&LLFloaterModelWizard::setDetails, this, _1, _2, _3, _4, _5));
mModelPreview->setModelLoadedCallback(boost::bind(&LLFloaterModelWizard::modelLoadedCallback, this));
+ mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelWizard::modelChangedCallback, this));
mModelPreview->mViewOption["show_textures"] = true;
center();
@@ -517,6 +673,8 @@ BOOL LLFloaterModelWizard::postBuild()
initDecompControls();
+ requestAgentUploadPermissions();
+
return TRUE;
}
@@ -532,22 +690,29 @@ void LLFloaterModelWizard::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F
panel->childSetText("dimension_x", llformat("%.1f", x));
panel->childSetText("dimension_y", llformat("%.1f", y));
panel->childSetText("dimension_z", llformat("%.1f", z));
- panel->childSetTextArg("streaming cost", "[COST]", llformat("%.3f", streaming_cost));
- panel->childSetTextArg("physics cost", "[COST]", llformat("%.3f", physics_cost));
}
}
+
+ childSetTextArg("review_prim_equiv", "[EQUIV]", llformat("%d", mModelPreview->mResourceCost));
}
void LLFloaterModelWizard::modelLoadedCallback()
{
mLastEnabledState = CHOOSE_FILE;
- getChild<LLCheckBoxCtrl>("confirm_checkbox")->set(FALSE);
updateButtons();
}
-void LLFloaterModelWizard::onPhysicsChanged()
+void LLFloaterModelWizard::modelChangedCallback()
{
- mLastEnabledState = PHYSICS;
+ // Don't allow to proceed to the "Review" step if the model has changed
+ // but the new upload fee hasn't been calculated yet.
+ if (mLastEnabledState > PHYSICS)
+ {
+ mLastEnabledState = PHYSICS;
+ }
+
+ getChildView("upload")->setEnabled(false);
+
updateButtons();
}
@@ -556,22 +721,10 @@ void LLFloaterModelWizard::onUpload()
mModelPreview->rebuildUploadData();
gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
- true, false, false);
-
- setState(UPLOAD);
-
-}
-
-void LLFloaterModelWizard::onAccuracyPerformance(const LLSD& data)
-{
- int val = (int) data.asInteger();
-
- mModelPreview->genLODs(-1, NUM_LOD-val);
-
- mModelPreview->refresh();
+ true, false, false, mUploadModelUrl, true,
+ LLHandle<LLWholeModelFeeObserver>(), getWholeModelUploadObserverHandle());
}
-
void LLFloaterModelWizard::onPreviewLODCommit(LLUICtrl* ctrl)
{
if (!mModelPreview)
@@ -601,11 +754,6 @@ void LLFloaterModelWizard::refresh()
getChildView("next")->setEnabled(model_loaded);
}
- if (mState == REVIEW)
- {
- getChildView("upload")->setEnabled(getChild<LLCheckBoxCtrl>("confirm_checkbox")->getValue().asBoolean());
- }
-
}
void LLFloaterModelWizard::draw()
@@ -613,42 +761,35 @@ void LLFloaterModelWizard::draw()
refresh();
LLFloater::draw();
- LLRect r = getRect();
-
- mModelPreview->update();
- if (mModelPreview)
+ if (mModelPreview && mState < REVIEW)
{
+ mModelPreview->update();
+
gGL.color3f(1.f, 1.f, 1.f);
gGL.getTexUnit(0)->bind(mModelPreview);
- LLView *view = getChildView(stateNames[mState]+"_panel");
- LLView* preview_panel = view->getChildView("preview_panel");
-
- LLRect rect = preview_panel->getRect();
- if (rect != mPreviewRect)
- {
- mModelPreview->refresh();
- mPreviewRect = preview_panel->getRect();
- }
-
- LLRect item_rect;
- preview_panel->localRectToOtherView(preview_panel->getLocalRect(), &item_rect, this);
-
gGL.begin( LLRender::QUADS );
{
gGL.texCoord2f(0.f, 1.f);
- gGL.vertex2i(item_rect.mLeft, item_rect.mTop-1);
+ gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mTop);
gGL.texCoord2f(0.f, 0.f);
- gGL.vertex2i(item_rect.mLeft, item_rect.mBottom);
+ gGL.vertex2i(mPreviewRect.mLeft, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 0.f);
- gGL.vertex2i(item_rect.mRight-1, item_rect.mBottom);
+ gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mBottom);
gGL.texCoord2f(1.f, 1.f);
- gGL.vertex2i(item_rect.mRight-1, item_rect.mTop-1);
+ gGL.vertex2i(mPreviewRect.mRight, mPreviewRect.mTop);
}
gGL.end();
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
}
+
+// static
+void swap_controls(LLUICtrl* first_ctrl, LLUICtrl* second_ctrl, bool first_ctr_visible)
+{
+ first_ctrl->setVisible(first_ctr_visible);
+ second_ctrl->setVisible(!first_ctr_visible);
+}
diff --git a/indra/newview/llfloatermodelwizard.h b/indra/newview/llfloatermodelwizard.h
index b166d26295..db9b605777 100644
--- a/indra/newview/llfloatermodelwizard.h
+++ b/indra/newview/llfloatermodelwizard.h
@@ -30,12 +30,13 @@
#include "llmeshrepository.h"
#include "llmodel.h"
#include "llthread.h"
+#include "llfloatermodeluploadbase.h"
class LLModelPreview;
-class LLFloaterModelWizard : public LLFloater
+class LLFloaterModelWizard : public LLFloaterModelUploadBase
{
public:
@@ -62,13 +63,29 @@ public:
BOOL handleMouseDown(S32 x, S32 y, MASK mask);
BOOL handleMouseUp(S32 x, S32 y, MASK mask);
BOOL handleHover(S32 x, S32 y, MASK mask);
- BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
+ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
void modelLoadedCallback();
- void onPhysicsChanged();
+ void modelChangedCallback();
void initDecompControls();
+ // shows warning message if agent has no permissions to upload model
+ /*virtual*/ void onPermissionsReceived(const LLSD& result);
+
+ // called when error occurs during permissions request
+ /*virtual*/ void setPermissonsErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url);
+
+ /*virtual*/ void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason);
+
+ /*virtual*/ void onModelUploadSuccess();
+
+ /*virtual*/ void onModelUploadFailure();
+
+ const LLRect& getPreviewRect() const { return mPreviewRect; }
+
LLPhysicsDecomp::decomp_params mDecompParams;
std::set<LLPointer<DecompRequest> > mCurRequest;
std::string mStatusMessage;
@@ -80,13 +97,16 @@ private:
CHOOSE_FILE = 0,
OPTIMIZE,
PHYSICS,
- PHYSICS2,
REVIEW,
UPLOAD
};
void setState(int state);
void updateButtons();
+ void onClickSwitchToAdvanced();
+ void onClickRecalculateGeometry();
+ void onClickRecalculatePhysics();
+ void onClickCalculateUploadFee();
void onClickCancel();
void onClickBack();
void onClickNext();
@@ -94,7 +114,6 @@ private:
bool onEnableBack();
void loadModel();
void onPreviewLODCommit(LLUICtrl*);
- void onAccuracyPerformance(const LLSD& data);
void onUpload();
LLModelPreview* mModelPreview;
@@ -106,7 +125,15 @@ private:
U32 mLastEnabledState;
+ LLButton* mRecalculateGeometryBtn;
+ LLButton* mRecalculatePhysicsBtn;
+ LLButton* mRecalculatingPhysicsBtn;
+ LLButton* mCalculateWeightsBtn;
+ LLButton* mCalculatingWeightsBtn;
+ LLView* mChooseFilePreviewPanel;
+ LLView* mOptimizePreviewPanel;
+ LLView* mPhysicsPreviewPanel;
};
diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp
index dd0b1d999c..3bcbb987f7 100644
--- a/indra/newview/llfloaterpostcard.cpp
+++ b/indra/newview/llfloaterpostcard.cpp
@@ -137,9 +137,9 @@ void LLFloaterPostcard::draw()
// first set the max extents of our preview
rect.translate(-rect.mLeft, -rect.mBottom);
- rect.mLeft += 280;
+ rect.mLeft += 320;
rect.mRight -= 10;
- rect.mTop -= 20;
+ rect.mTop -= 27;
rect.mBottom = rect.mTop - 130;
// then fix the aspect ratio
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 7848484ac6..d65928e385 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -105,6 +105,7 @@
#include "llviewermedia.h"
#include "llpluginclassmedia.h"
#include "llteleporthistorystorage.h"
+#include "llproxy.h"
#include "lllogininstance.h" // to check if logged in yet
#include "llsdserialize.h"
@@ -158,7 +159,7 @@ BOOL LLVoiceSetKeyDialog::handleKeyHere(KEY key, MASK mask)
{
BOOL result = TRUE;
- if(key == 'Q' && mask == MASK_CONTROL)
+ if (key == 'Q' && mask == MASK_CONTROL)
{
result = FALSE;
}
@@ -333,16 +334,17 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.ClickEnablePopup", boost::bind(&LLFloaterPreference::onClickEnablePopup, this));
mCommitCallbackRegistrar.add("Pref.ClickDisablePopup", boost::bind(&LLFloaterPreference::onClickDisablePopup, this));
mCommitCallbackRegistrar.add("Pref.LogPath", boost::bind(&LLFloaterPreference::onClickLogPath, this));
- mCommitCallbackRegistrar.add("Pref.HardwareSettings", boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));
- mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this));
- mCommitCallbackRegistrar.add("Pref.VertexShaderEnable", boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));
- mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
- mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
- mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
+ mCommitCallbackRegistrar.add("Pref.HardwareSettings", boost::bind(&LLFloaterPreference::onOpenHardwareSettings, this));
+ mCommitCallbackRegistrar.add("Pref.HardwareDefaults", boost::bind(&LLFloaterPreference::setHardwareDefaults, this));
+ mCommitCallbackRegistrar.add("Pref.VertexShaderEnable", boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));
+ mCommitCallbackRegistrar.add("Pref.WindowedMod", boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));
+ mCommitCallbackRegistrar.add("Pref.UpdateSliderText", boost::bind(&LLFloaterPreference::onUpdateSliderText,this, _1,_2));
+ mCommitCallbackRegistrar.add("Pref.QualityPerformance", boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));
mCommitCallbackRegistrar.add("Pref.applyUIColor", boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.getUIColor", boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2));
mCommitCallbackRegistrar.add("Pref.MaturitySettings", boost::bind(&LLFloaterPreference::onChangeMaturity, this));
mCommitCallbackRegistrar.add("Pref.BlockList", boost::bind(&LLFloaterPreference::onClickBlockList, this));
+ mCommitCallbackRegistrar.add("Pref.Proxy", boost::bind(&LLFloaterPreference::onClickProxySettings, this));
sSkin = gSavedSettings.getString("SkinCurrent");
@@ -457,7 +459,7 @@ BOOL LLFloaterPreference::postBuild()
void LLFloaterPreference::onBusyResponseChanged()
{
// set "BusyResponseChanged" TRUE if user edited message differs from default, FALSE otherwise
- if(LLTrans::getString("BusyModeResponseDefault") != getChild<LLUICtrl>("busy_response")->getValue().asString())
+ if (LLTrans::getString("BusyModeResponseDefault") != getChild<LLUICtrl>("busy_response")->getValue().asString())
{
gSavedPerAccountSettings.setBOOL("BusyResponseChanged", TRUE );
}
@@ -539,7 +541,7 @@ void LLFloaterPreference::apply()
LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());
- if(hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
+ if (hasChild("web_proxy_enabled") &&hasChild("web_proxy_editor") && hasChild("web_proxy_port"))
{
bool proxy_enable = getChild<LLUICtrl>("web_proxy_enabled")->getValue();
std::string proxy_address = getChild<LLUICtrl>("web_proxy_editor")->getValue();
@@ -552,13 +554,13 @@ void LLFloaterPreference::apply()
gSavedSettings.setBOOL("PlainTextChatHistory", getChild<LLUICtrl>("plain_text_chat_history")->getValue().asBoolean());
- if(mGotPersonalInfo)
+ if (mGotPersonalInfo)
{
// gSavedSettings.setString("BusyModeResponse2", std::string(wstring_to_utf8str(busy_response)));
bool new_im_via_email = getChild<LLUICtrl>("send_im_to_email")->getValue().asBoolean();
bool new_hide_online = getChild<LLUICtrl>("online_visibility")->getValue().asBoolean();
- if((new_im_via_email != mOriginalIMViaEmail)
+ if ((new_im_via_email != mOriginalIMViaEmail)
||(new_hide_online != mOriginalHideOnlineStatus))
{
// This hack is because we are representing several different
@@ -566,13 +568,13 @@ void LLFloaterPreference::apply()
// can only select between 2 values, we represent it as a
// checkbox. This breaks down a little bit for liaisons, but
// works out in the end.
- if(new_hide_online != mOriginalHideOnlineStatus)
- {
- if(new_hide_online) mDirectoryVisibility = VISIBILITY_HIDDEN;
+ if (new_hide_online != mOriginalHideOnlineStatus)
+ {
+ if (new_hide_online) mDirectoryVisibility = VISIBILITY_HIDDEN;
else mDirectoryVisibility = VISIBILITY_DEFAULT;
//Update showonline value, otherwise multiple applys won't work
mOriginalHideOnlineStatus = new_hide_online;
- }
+ }
gAgent.sendAgentUpdateUserInfo(new_im_via_email,mDirectoryVisibility);
}
}
@@ -616,6 +618,11 @@ void LLFloaterPreference::cancel()
updateDoubleClickControls();
mDoubleClickActionDirty = false;
}
+ LLFloaterPreferenceProxy * advanced_proxy_settings = LLFloaterReg::findTypedInstance<LLFloaterPreferenceProxy>("prefs_proxy");
+ if (advanced_proxy_settings)
+ {
+ advanced_proxy_settings->cancel();
+ }
}
void LLFloaterPreference::onOpen(const LLSD& key)
@@ -751,10 +758,7 @@ void LLFloaterPreference::onBtnOK()
closeFloater(false);
LLUIColorTable::instance().saveUserSettings();
- gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
- std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- // save all settings, even if equals defaults
- gCrashSettings.saveToFile(crash_settings_filename, FALSE);
+ gSavedSettings.saveToFile(gSavedSettings.getString("ClientSettingsFile"), TRUE);
}
else
{
@@ -802,7 +806,7 @@ void LLFloaterPreference::onBtnCancel()
void LLFloaterPreference::updateUserInfo(const std::string& visibility, bool im_via_email, const std::string& email)
{
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
- if(instance)
+ if (instance)
{
instance->setPersonalInfo(visibility, im_via_email, email);
}
@@ -812,7 +816,7 @@ void LLFloaterPreference::updateUserInfo(const std::string& visibility, bool im_
void LLFloaterPreference::refreshEnabledGraphics()
{
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
- if(instance)
+ if (instance)
{
instance->refresh();
//instance->refreshEnabledState();
@@ -1099,7 +1103,7 @@ void LLFloaterPreference::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
// if vertex shaders off, disable all shader related products
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
{
ctrl_shader_enable->setEnabled(FALSE);
ctrl_shader_enable->setValue(FALSE);
@@ -1130,7 +1134,7 @@ void LLFloaterPreference::disableUnavailableSettings()
}
// disabled windlight
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
{
ctrl_wind_light->setEnabled(FALSE);
ctrl_wind_light->setValue(FALSE);
@@ -1167,28 +1171,28 @@ void LLFloaterPreference::disableUnavailableSettings()
}
// disabled deferred SSAO
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
{
ctrl_ssao->setEnabled(FALSE);
ctrl_ssao->setValue(FALSE);
}
// disabled deferred shadows
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
{
ctrl_shadows->setEnabled(FALSE);
ctrl_shadows->setValue(0);
}
// disabled reflections
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
{
ctrl_reflections->setEnabled(FALSE);
ctrl_reflections->setValue(FALSE);
}
// disabled av
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarVP"))
{
ctrl_avatar_vp->setEnabled(FALSE);
ctrl_avatar_vp->setValue(FALSE);
@@ -1211,14 +1215,14 @@ void LLFloaterPreference::disableUnavailableSettings()
}
// disabled cloth
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderAvatarCloth"))
{
ctrl_avatar_cloth->setEnabled(FALSE);
ctrl_avatar_cloth->setValue(FALSE);
}
// disabled impostors
- if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
+ if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors"))
{
ctrl_avatar_impostors->setEnabled(FALSE);
ctrl_avatar_impostors->setValue(FALSE);
@@ -1384,12 +1388,12 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
mOriginalIMViaEmail = im_via_email;
mDirectoryVisibility = visibility;
- if(visibility == VISIBILITY_DEFAULT)
+ if (visibility == VISIBILITY_DEFAULT)
{
mOriginalHideOnlineStatus = false;
getChildView("online_visibility")->setEnabled(TRUE);
}
- else if(visibility == VISIBILITY_HIDDEN)
+ else if (visibility == VISIBILITY_HIDDEN)
{
mOriginalHideOnlineStatus = true;
getChildView("online_visibility")->setEnabled(TRUE);
@@ -1437,7 +1441,7 @@ void LLFloaterPreference::onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name)
{
std::string ctrl_name = name.asString();
- if((ctrl_name =="" )|| !hasChild(ctrl_name, true))
+ if ((ctrl_name =="" )|| !hasChild(ctrl_name, true))
return;
LLTextBox* text_box = getChild<LLTextBox>(name.asString());
@@ -1447,7 +1451,7 @@ void LLFloaterPreference::onUpdateSliderText(LLUICtrl* ctrl, const LLSD& name)
void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box)
{
- if(text_box == NULL || ctrl== NULL)
+ if (text_box == NULL || ctrl== NULL)
return;
// get range and points when text should change
@@ -1460,7 +1464,7 @@ void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_b
F32 highPoint = min + (2.0f * range / 3.0f);
// choose the right text
- if(value < midPoint)
+ if (value < midPoint)
{
text_box->setText(LLTrans::getString("GraphicsQualityLow"));
}
@@ -1544,6 +1548,11 @@ void LLFloaterPreference::updateDoubleClickSettings()
}
}
+void LLFloaterPreference::onClickProxySettings()
+{
+ LLFloaterReg::showInstance("prefs_proxy");
+}
+
void LLFloaterPreference::updateDoubleClickControls()
{
// check is one of double-click actions settings enabled
@@ -1640,7 +1649,7 @@ BOOL LLPanelPreference::postBuild()
{
////////////////////// PanelVoice ///////////////////
- if(hasChild("voice_unavailable"))
+ if (hasChild("voice_unavailable"))
{
BOOL voice_disabled = gSavedSettings.getBOOL("CmdLineDisableVoice");
getChildView("voice_unavailable")->setVisible( voice_disabled);
@@ -1662,7 +1671,7 @@ BOOL LLPanelPreference::postBuild()
}
- if(hasChild("online_visibility") && hasChild("send_im_to_email"))
+ if (hasChild("online_visibility") && hasChild("send_im_to_email"))
{
getChild<LLUICtrl>("email_address")->setValue(getString("log_in_to_change") );
// getChild<LLUICtrl>("busy_response")->setValue(getString("log_in_to_change"));
@@ -1791,7 +1800,7 @@ void LLPanelPreference::cancel()
iter != mSavedColors.end(); ++iter)
{
LLColorSwatchCtrl* color_swatch = findChild<LLColorSwatchCtrl>(iter->first);
- if(color_swatch)
+ if (color_swatch)
{
color_swatch->set(iter->second);
color_swatch->onCommit();
@@ -1835,7 +1844,7 @@ void LLPanelPreferenceGraphics::draw()
LLButton* button_apply = findChild<LLButton>("Apply");
- if(button_apply && button_apply->getVisible())
+ if (button_apply && button_apply->getVisible())
{
bool enable = hasDirtyChilds();
@@ -1855,7 +1864,7 @@ bool LLPanelPreferenceGraphics::hasDirtyChilds()
LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(curview);
if (ctrl)
{
- if(ctrl->isDirty())
+ if (ctrl->isDirty())
return true;
}
// Push children onto the end of the work stack
@@ -1911,3 +1920,188 @@ void LLPanelPreferenceGraphics::setHardwareDefaults()
resetDirtyChilds();
LLPanelPreference::setHardwareDefaults();
}
+
+LLFloaterPreferenceProxy::LLFloaterPreferenceProxy(const LLSD& key)
+ : LLFloater(key),
+ mSocksSettingsDirty(false)
+{
+ mCommitCallbackRegistrar.add("Proxy.OK", boost::bind(&LLFloaterPreferenceProxy::onBtnOk, this));
+ mCommitCallbackRegistrar.add("Proxy.Cancel", boost::bind(&LLFloaterPreferenceProxy::onBtnCancel, this));
+ mCommitCallbackRegistrar.add("Proxy.Change", boost::bind(&LLFloaterPreferenceProxy::onChangeSocksSettings, this));
+}
+
+LLFloaterPreferenceProxy::~LLFloaterPreferenceProxy()
+{
+}
+
+BOOL LLFloaterPreferenceProxy::postBuild()
+{
+ LLRadioGroup* socksAuth = getChild<LLRadioGroup>("socks5_auth_type");
+ if (!socksAuth)
+ {
+ return FALSE;
+ }
+ if (socksAuth->getSelectedValue().asString() == "None")
+ {
+ getChild<LLLineEditor>("socks5_username")->setEnabled(false);
+ getChild<LLLineEditor>("socks5_password")->setEnabled(false);
+ }
+ else
+ {
+ // Populate the SOCKS 5 credential fields with protected values.
+ LLPointer<LLCredential> socks_cred = gSecAPIHandler->loadCredential("SOCKS5");
+ getChild<LLLineEditor>("socks5_username")->setValue(socks_cred->getIdentifier()["username"].asString());
+ getChild<LLLineEditor>("socks5_password")->setValue(socks_cred->getAuthenticator()["creds"].asString());
+ }
+
+ center();
+ return TRUE;
+}
+
+void LLFloaterPreferenceProxy::onOpen(const LLSD& key)
+{
+ saveSettings();
+}
+
+void LLFloaterPreferenceProxy::onClose(bool app_quitting)
+{
+ if (mSocksSettingsDirty)
+ {
+
+ // If the user plays with the Socks proxy settings after login, it's only fair we let them know
+ // it will not be updated until next restart.
+ if (LLStartUp::getStartupState()>STATE_LOGIN_WAIT)
+ {
+ LLNotifications::instance().add("ChangeProxySettings", LLSD(), LLSD());
+ mSocksSettingsDirty = false; // we have notified the user now be quiet again
+ }
+ }
+}
+
+void LLFloaterPreferenceProxy::saveSettings()
+{
+ // Save the value of all controls in the hierarchy
+ mSavedValues.clear();
+ std::list<LLView*> view_stack;
+ view_stack.push_back(this);
+ while(!view_stack.empty())
+ {
+ // Process view on top of the stack
+ LLView* curview = view_stack.front();
+ view_stack.pop_front();
+
+ LLUICtrl* ctrl = dynamic_cast<LLUICtrl*>(curview);
+ if (ctrl)
+ {
+ LLControlVariable* control = ctrl->getControlVariable();
+ if (control)
+ {
+ mSavedValues[control] = control->getValue();
+ }
+ }
+
+ // Push children onto the end of the work stack
+ for (child_list_t::const_iterator iter = curview->getChildList()->begin();
+ iter != curview->getChildList()->end(); ++iter)
+ {
+ view_stack.push_back(*iter);
+ }
+ }
+}
+
+void LLFloaterPreferenceProxy::onBtnOk()
+{
+ // commit any outstanding text entry
+ if (hasFocus())
+ {
+ LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
+ if (cur_focus && cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ }
+
+ // Save SOCKS proxy credentials securely if password auth is enabled
+ LLRadioGroup* socksAuth = getChild<LLRadioGroup>("socks5_auth_type");
+ if (socksAuth->getSelectedValue().asString() == "UserPass")
+ {
+ LLSD socks_id = LLSD::emptyMap();
+ socks_id["type"] = "SOCKS5";
+ socks_id["username"] = getChild<LLLineEditor>("socks5_username")->getValue().asString();
+
+ LLSD socks_authenticator = LLSD::emptyMap();
+ socks_authenticator["type"] = "SOCKS5";
+ socks_authenticator["creds"] = getChild<LLLineEditor>("socks5_password")->getValue().asString();
+
+ // Using "SOCKS5" as the "grid" argument since the same proxy
+ // settings will be used for all grids and because there is no
+ // way to specify the type of credential.
+ LLPointer<LLCredential> socks_cred = gSecAPIHandler->createCredential("SOCKS5", socks_id, socks_authenticator);
+ gSecAPIHandler->saveCredential(socks_cred, true);
+ }
+ else
+ {
+ // Clear SOCKS5 credentials since they are no longer needed.
+ LLPointer<LLCredential> socks_cred = new LLCredential("SOCKS5");
+ gSecAPIHandler->deleteCredential(socks_cred);
+ }
+
+ closeFloater(false);
+}
+
+void LLFloaterPreferenceProxy::onBtnCancel()
+{
+ if (hasFocus())
+ {
+ LLUICtrl* cur_focus = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
+ if (cur_focus && cur_focus->acceptsTextInput())
+ {
+ cur_focus->onCommit();
+ }
+ refresh();
+ }
+
+ cancel();
+}
+
+void LLFloaterPreferenceProxy::cancel()
+{
+
+ for (control_values_map_t::iterator iter = mSavedValues.begin();
+ iter != mSavedValues.end(); ++iter)
+ {
+ LLControlVariable* control = iter->first;
+ LLSD ctrl_value = iter->second;
+ control->set(ctrl_value);
+ }
+
+ closeFloater();
+}
+
+void LLFloaterPreferenceProxy::onChangeSocksSettings()
+{
+ mSocksSettingsDirty = true;
+
+ LLRadioGroup* socksAuth = getChild<LLRadioGroup>("socks5_auth_type");
+ if (socksAuth->getSelectedValue().asString() == "None")
+ {
+ getChild<LLLineEditor>("socks5_username")->setEnabled(false);
+ getChild<LLLineEditor>("socks5_password")->setEnabled(false);
+ }
+ else
+ {
+ getChild<LLLineEditor>("socks5_username")->setEnabled(true);
+ getChild<LLLineEditor>("socks5_password")->setEnabled(true);
+ }
+
+ // Check for invalid states for the other HTTP proxy radio
+ LLRadioGroup* otherHttpProxy = getChild<LLRadioGroup>("other_http_proxy_type");
+ if ((otherHttpProxy->getSelectedValue().asString() == "Socks" &&
+ getChild<LLCheckBoxCtrl>("socks_proxy_enabled")->get() == FALSE )||(
+ otherHttpProxy->getSelectedValue().asString() == "Web" &&
+ getChild<LLCheckBoxCtrl>("web_proxy_enabled")->get() == FALSE ) )
+ {
+ otherHttpProxy->selectFirstItem();
+ }
+
+};
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 61f2c78640..ef9bc2dd53 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -156,6 +156,7 @@ public:
void applyResolution();
void onChangeMaturity();
void onClickBlockList();
+ void onClickProxySettings();
void applyUIColor(LLUICtrl* ctrl, const LLSD& param);
void getUIColor(LLUICtrl* ctrl, const LLSD& param);
@@ -229,4 +230,33 @@ protected:
};
+class LLFloaterPreferenceProxy : public LLFloater
+{
+public:
+ LLFloaterPreferenceProxy(const LLSD& key);
+ ~LLFloaterPreferenceProxy();
+
+ /// show off our menu
+ static void show();
+ void cancel();
+
+protected:
+ BOOL postBuild();
+ void onOpen(const LLSD& key);
+ void onClose(bool app_quitting);
+ void saveSettings();
+ void onBtnOk();
+ void onBtnCancel();
+
+ void onChangeSocksSettings();
+
+private:
+
+ bool mSocksSettingsDirty;
+ typedef std::map<LLControlVariable*, LLSD> control_values_map_t;
+ control_values_map_t mSavedValues;
+
+};
+
+
#endif // LL_LLPREFERENCEFLOATER_H
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index dd12fa64d3..3f00ba39c7 100644
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -887,18 +887,14 @@ void LLFloaterProperties::dirtyAll()
LLMultiProperties::LLMultiProperties()
: LLMultiFloater(LLSD())
{
- // *TODO: There should be a .xml file for this
- const LLRect& nextrect = LLFloaterReg::getFloaterRect("properties"); // place where the next properties should show up
- if (nextrect.getWidth() > 0)
- {
- setRect(nextrect);
- }
- else
- {
- // start with a small rect in the top-left corner ; will get resized
- LLRect rect;
- rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 20, 20);
- setRect(rect);
+ // start with a small rect in the top-left corner ; will get resized
+ LLRect rect;
+ rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 20, 20);
+ setRect(rect);
+ LLFloater* last_floater = LLFloaterReg::getLastFloaterInGroup("properties");
+ if (last_floater)
+ {
+ stackWith(*last_floater);
}
setTitle(LLTrans::getString("MultiPropertiesTitle"));
buildTabContainer();
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 6b3e3088d5..9a99417e93 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -40,6 +40,10 @@
#include "llxfermanager.h"
#include "indra_constants.h"
#include "message.h"
+#include "llloadingindicator.h"
+#include "llradiogroup.h"
+#include "llsd.h"
+#include "llsdserialize.h"
#include "llagent.h"
#include "llappviewer.h"
@@ -48,6 +52,9 @@
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llcombobox.h"
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
+#include "llestateinfomodel.h"
#include "llfilepicker.h"
#include "llfloatergodtools.h" // for send_sim_wide_deletes()
#include "llfloatertopobjects.h" // added to fix SL-32336
@@ -55,12 +62,12 @@
#include "llfloaterreg.h"
#include "llfloaterregiondebugconsole.h"
#include "llfloatertelehub.h"
-#include "llfloaterwindlight.h"
#include "llinventorymodel.h"
#include "lllineeditor.h"
#include "llnamelistctrl.h"
#include "llnotifications.h"
#include "llnotificationsutil.h"
+#include "llregioninfomodel.h"
#include "llscrolllistitem.h"
#include "llsliderctrl.h"
#include "llslurl.h"
@@ -80,6 +87,7 @@
#include "llviewertexteditor.h"
#include "llviewerwindow.h"
#include "llvlcomposition.h"
+#include "llwaterparammanager.h"
#include "lltrans.h"
#include "llagentui.h"
#include "llmeshrepository.h"
@@ -87,6 +95,8 @@
const S32 TERRAIN_TEXTURE_COUNT = 4;
const S32 CORNER_COUNT = 4;
+#define TMP_DISABLE_WLES // STORM-1180
+
///----------------------------------------------------------------------------
/// Local class declaration
///----------------------------------------------------------------------------
@@ -190,24 +200,24 @@ LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed)
BOOL LLFloaterRegionInfo::postBuild()
{
mTab = getChild<LLTabContainer>("region_panels");
+ mTab->setCommitCallback(boost::bind(&LLFloaterRegionInfo::onTabSelected, this, _2));
// contruct the panels
LLPanelRegionInfo* panel;
- panel = new LLPanelRegionGeneralInfo;
+ panel = new LLPanelEstateInfo;
mInfoPanels.push_back(panel);
- panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
-
- panel->buildFromFile("panel_region_general.xml");
+ panel->buildFromFile("panel_region_estate.xml");
mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true));
- panel = new LLPanelRegionDebugInfo;
+ panel = new LLPanelEstateCovenant;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_debug.xml");
+ panel->buildFromFile("panel_region_covenant.xml");
mTab->addTabPanel(panel);
- panel = new LLPanelRegionTextureInfo;
+ panel = new LLPanelRegionGeneralInfo;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_texture.xml");
+ panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
+ panel->buildFromFile("panel_region_general.xml");
mTab->addTabPanel(panel);
panel = new LLPanelRegionTerrainInfo;
@@ -215,20 +225,23 @@ BOOL LLFloaterRegionInfo::postBuild()
panel->buildFromFile("panel_region_terrain.xml");
mTab->addTabPanel(panel);
- panel = new LLPanelEstateInfo;
+ panel = new LLPanelEnvironmentInfo;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_estate.xml");
+ panel->buildFromFile("panel_region_environment.xml");
mTab->addTabPanel(panel);
- panel = new LLPanelEstateCovenant;
+ panel = new LLPanelRegionDebugInfo;
mInfoPanels.push_back(panel);
- panel->buildFromFile("panel_region_covenant.xml");
+ panel->buildFromFile("panel_region_debug.xml");
mTab->addTabPanel(panel);
gMessageSystem->setHandlerFunc(
"EstateOwnerMessage",
&processEstateOwnerRequest);
+ // Request region info when agent region changes.
+ LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this));
+
return TRUE;
}
@@ -307,17 +320,25 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
{
LLPanel* panel;
LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
- llinfos << "LLFloaterRegionInfo::processRegionInfo" << llendl;
if(!floater)
{
return;
}
+
+ // We need to re-request environment setting here,
+ // otherwise after we apply (send) updated region settings we won't get them back,
+ // so our environment won't be updated.
+ // This is also the way to know about externally changed region environment.
+ LLEnvManagerNew::instance().requestRegionSettings();
LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
LLViewerRegion* region = gAgent.getRegion();
BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
+ // *TODO: Replace parsing msg with accessing the region info model.
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+
// extract message
std::string sim_name;
std::string sim_type = LLTrans::getString("land_type_unknown");
@@ -347,6 +368,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
msg->getSize("RegionInfo2", "ProductName") > 0)
{
msg->getString("RegionInfo2", "ProductName", sim_type);
+ LLTrans::findString(sim_type, sim_type); // try localizing sim product name
}
// GENERAL PANEL
@@ -389,15 +411,10 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
panel = tab->getChild<LLPanel>("Terrain");
panel->getChild<LLUICtrl>("region_text")->setValue(LLSD(sim_name));
- panel->getChild<LLUICtrl>("water_height_spin")->setValue(LLSD(water_height));
- panel->getChild<LLUICtrl>("terrain_raise_spin")->setValue(LLSD(terrain_raise_limit));
- panel->getChild<LLUICtrl>("terrain_lower_spin")->setValue(LLSD(terrain_lower_limit));
- panel->getChild<LLUICtrl>("use_estate_sun_check")->setValue(LLSD(use_estate_sun));
-
- panel->getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD((BOOL)(region_flags & REGION_FLAGS_SUN_FIXED)));
- panel->getChildView("fixed_sun_check")->setEnabled(allow_modify && !use_estate_sun);
- panel->getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour));
- panel->getChildView("sun_hour_slider")->setEnabled(allow_modify && !use_estate_sun);
+ panel->getChild<LLUICtrl>("water_height_spin")->setValue(region_info.mWaterHeight);
+ panel->getChild<LLUICtrl>("terrain_raise_spin")->setValue(region_info.mTerrainRaiseLimit);
+ panel->getChild<LLUICtrl>("terrain_lower_spin")->setValue(region_info.mTerrainLowerLimit);
+
panel->setCtrlsEnabled(allow_modify);
floater->refreshFromRegion( gAgent.getRegion() );
@@ -423,6 +440,29 @@ LLPanelEstateCovenant* LLFloaterRegionInfo::getPanelCovenant()
return panel;
}
+// static
+LLPanelRegionTerrainInfo* LLFloaterRegionInfo::getPanelRegionTerrain()
+{
+ LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
+ if (!floater)
+ {
+ llassert(floater);
+ return NULL;
+ }
+
+ LLTabContainer* tab_container = floater->getChild<LLTabContainer>("region_panels");
+ LLPanelRegionTerrainInfo* panel =
+ dynamic_cast<LLPanelRegionTerrainInfo*>(tab_container->getChild<LLPanel>("Terrain"));
+ llassert(panel);
+ return panel;
+}
+
+void LLFloaterRegionInfo::onTabSelected(const LLSD& param)
+{
+ LLPanel* active_panel = getChild<LLPanel>(param.asString());
+ active_panel->onOpen(LLSD());
+}
+
void LLFloaterRegionInfo::refreshFromRegion(LLViewerRegion* region)
{
if (!region)
@@ -503,8 +543,13 @@ void LLPanelRegionInfo::onChangeText(LLLineEditor* caller, void* user_data)
// virtual
BOOL LLPanelRegionInfo::postBuild()
{
- getChild<LLUICtrl>("apply_btn")->setCommitCallback(boost::bind(&LLPanelRegionInfo::onBtnSet, this));
- getChildView("apply_btn")->setEnabled(FALSE);
+ // If the panel has an Apply button, set a callback for it.
+ LLUICtrl* apply_btn = findChild<LLUICtrl>("apply_btn");
+ if (apply_btn)
+ {
+ apply_btn->setCommitCallback(boost::bind(&LLPanelRegionInfo::onBtnSet, this));
+ }
+
refresh();
return TRUE;
}
@@ -556,12 +601,14 @@ void LLPanelRegionInfo::sendEstateOwnerMessage(
void LLPanelRegionInfo::enableButton(const std::string& btn_name, BOOL enable)
{
- getChildView(btn_name)->setEnabled(enable);
+ LLView* button = findChildView(btn_name);
+ if (button) button->setEnabled(enable);
}
void LLPanelRegionInfo::disableButton(const std::string& btn_name)
{
- getChildView(btn_name)->setEnabled(FALSE);
+ LLView* button = findChildView(btn_name);
+ if (button) button->setEnabled(FALSE);
}
void LLPanelRegionInfo::initCtrl(const std::string& name)
@@ -1052,131 +1099,7 @@ void LLPanelRegionDebugInfo::onClickCancelRestart(void* data)
}
-/////////////////////////////////////////////////////////////////////////////
-// LLPanelRegionTextureInfo
-//
-LLPanelRegionTextureInfo::LLPanelRegionTextureInfo() : LLPanelRegionInfo()
-{
- // nothing.
-}
-
-bool LLPanelRegionTextureInfo::refreshFromRegion(LLViewerRegion* region)
-{
- BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate());
- setCtrlsEnabled(allow_modify);
- getChildView("apply_btn")->setEnabled(FALSE);
-
- if (region)
- {
- getChild<LLUICtrl>("region_text")->setValue(LLSD(region->getName()));
- }
- else
- {
- getChild<LLUICtrl>("region_text")->setValue(LLSD(""));
- }
-
- if (!region) return LLPanelRegionInfo::refreshFromRegion(region);
-
- LLVLComposition* compp = region->getComposition();
- LLTextureCtrl* texture_ctrl;
- std::string buffer;
- for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
- {
- buffer = llformat("texture_detail_%d", i);
- texture_ctrl = getChild<LLTextureCtrl>(buffer);
- if(texture_ctrl)
- {
- lldebugs << "Detail Texture " << i << ": "
- << compp->getDetailTextureID(i) << llendl;
- LLUUID tmp_id(compp->getDetailTextureID(i));
- texture_ctrl->setImageAssetID(tmp_id);
- }
- }
-
- for(S32 i = 0; i < CORNER_COUNT; ++i)
- {
- buffer = llformat("height_start_spin_%d", i);
- getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getStartHeight(i)));
- buffer = llformat("height_range_spin_%d", i);
- getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getHeightRange(i)));
- }
-
- // Call the parent for common book-keeping
- return LLPanelRegionInfo::refreshFromRegion(region);
-}
-
-
-BOOL LLPanelRegionTextureInfo::postBuild()
-{
- LLPanelRegionInfo::postBuild();
- std::string buffer;
- for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
- {
- buffer = llformat("texture_detail_%d", i);
- initCtrl(buffer);
- }
-
- for(S32 i = 0; i < CORNER_COUNT; ++i)
- {
- buffer = llformat("height_start_spin_%d", i);
- initCtrl(buffer);
- buffer = llformat("height_range_spin_%d", i);
- initCtrl(buffer);
- }
-
-// LLButton* btn = ("dump", LLRect(0, 20, 100, 0), "", onClickDump, this);
-// btn->setFollows(FOLLOWS_TOP|FOLLOWS_LEFT);
-// addChild(btn);
-
- return LLPanelRegionInfo::postBuild();
-}
-
-BOOL LLPanelRegionTextureInfo::sendUpdate()
-{
- llinfos << "LLPanelRegionTextureInfo::sendUpdate()" << llendl;
-
- // Make sure user hasn't chosen wacky textures.
- if (!validateTextureSizes())
- {
- return FALSE;
- }
-
- LLTextureCtrl* texture_ctrl;
- std::string buffer;
- std::string id_str;
- LLMessageSystem* msg = gMessageSystem;
- strings_t strings;
-
- LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
-
- for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
- {
- buffer = llformat("texture_detail_%d", i);
- texture_ctrl = getChild<LLTextureCtrl>(buffer);
- if(texture_ctrl)
- {
- LLUUID tmp_id(texture_ctrl->getImageAssetID());
- tmp_id.toString(id_str);
- buffer = llformat("%d %s", i, id_str.c_str());
- strings.push_back(buffer);
- }
- }
- sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
- strings.clear();
- for(S32 i = 0; i < CORNER_COUNT; ++i)
- {
- buffer = llformat("height_start_spin_%d", i);
- std::string buffer2 = llformat("height_range_spin_%d", i);
- std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
- strings.push_back(buffer3);
- }
- sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
- strings.clear();
- sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
- return TRUE;
-}
-
-BOOL LLPanelRegionTextureInfo::validateTextureSizes()
+BOOL LLPanelRegionTerrainInfo::validateTextureSizes()
{
for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
@@ -1219,49 +1142,86 @@ BOOL LLPanelRegionTextureInfo::validateTextureSizes()
return TRUE;
}
-
-// static
-void LLPanelRegionTextureInfo::onClickDump(void* data)
-{
- llinfos << "LLPanelRegionTextureInfo::onClickDump()" << llendl;
-}
-
-
/////////////////////////////////////////////////////////////////////////////
// LLPanelRegionTerrainInfo
/////////////////////////////////////////////////////////////////////////////
+// Initialize statics
+
BOOL LLPanelRegionTerrainInfo::postBuild()
{
LLPanelRegionInfo::postBuild();
-
+
initCtrl("water_height_spin");
initCtrl("terrain_raise_spin");
initCtrl("terrain_lower_spin");
- initCtrl("fixed_sun_check");
- getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelRegionTerrainInfo::onChangeFixedSun, this));
- getChild<LLUICtrl>("use_estate_sun_check")->setCommitCallback(boost::bind(&LLPanelRegionTerrainInfo::onChangeUseEstateTime, this));
- getChild<LLUICtrl>("sun_hour_slider")->setCommitCallback(boost::bind(&LLPanelRegionTerrainInfo::onChangeSunHour, this));
+ std::string buffer;
+ for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
+ {
+ buffer = llformat("texture_detail_%d", i);
+ initCtrl(buffer);
+ }
+
+ for(S32 i = 0; i < CORNER_COUNT; ++i)
+ {
+ buffer = llformat("height_start_spin_%d", i);
+ initCtrl(buffer);
+ buffer = llformat("height_range_spin_%d", i);
+ initCtrl(buffer);
+ }
childSetAction("download_raw_btn", onClickDownloadRaw, this);
childSetAction("upload_raw_btn", onClickUploadRaw, this);
childSetAction("bake_terrain_btn", onClickBakeTerrain, this);
- return TRUE;
+ return LLPanelRegionInfo::postBuild();
}
// virtual
bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
{
- llinfos << "LLPanelRegionTerrainInfo::refreshFromRegion" << llendl;
-
BOOL owner_or_god = gAgent.isGodlike()
|| (region && (region->getOwner() == gAgent.getID()));
BOOL owner_or_god_or_manager = owner_or_god
|| (region && region->isEstateManager());
setCtrlsEnabled(owner_or_god_or_manager);
+
getChildView("apply_btn")->setEnabled(FALSE);
+ if (region)
+ {
+ getChild<LLUICtrl>("region_text")->setValue(LLSD(region->getName()));
+
+ LLVLComposition* compp = region->getComposition();
+ LLTextureCtrl* texture_ctrl;
+ std::string buffer;
+ for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
+ {
+ buffer = llformat("texture_detail_%d", i);
+ texture_ctrl = getChild<LLTextureCtrl>(buffer);
+ if(texture_ctrl)
+ {
+ lldebugs << "Detail Texture " << i << ": "
+ << compp->getDetailTextureID(i) << llendl;
+ LLUUID tmp_id(compp->getDetailTextureID(i));
+ texture_ctrl->setImageAssetID(tmp_id);
+ }
+ }
+
+ for(S32 i = 0; i < CORNER_COUNT; ++i)
+ {
+ buffer = llformat("height_start_spin_%d", i);
+ getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getStartHeight(i)));
+ buffer = llformat("height_range_spin_%d", i);
+ getChild<LLUICtrl>(buffer)->setValue(LLSD(compp->getHeightRange(i)));
+ }
+ }
+ else
+ {
+ lldebugs << "no region set" << llendl;
+ getChild<LLUICtrl>("region_text")->setValue(LLSD(""));
+ }
+
getChildView("download_raw_btn")->setEnabled(owner_or_god);
getChildView("upload_raw_btn")->setEnabled(owner_or_god);
getChildView("bake_terrain_btn")->setEnabled(owner_or_god);
@@ -1269,6 +1229,7 @@ bool LLPanelRegionTerrainInfo::refreshFromRegion(LLViewerRegion* region)
return LLPanelRegionInfo::refreshFromRegion(region);
}
+
// virtual
BOOL LLPanelRegionTerrainInfo::sendUpdate()
{
@@ -1277,76 +1238,62 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
strings_t strings;
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("water_height_spin")->getValue().asReal());
- strings.push_back(buffer);
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_raise_spin")->getValue().asReal());
- strings.push_back(buffer);
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal());
- strings.push_back(buffer);
- buffer = llformat("%s", (getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean() ? "Y" : "N"));
- strings.push_back(buffer);
- buffer = llformat("%s", (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean() ? "Y" : "N"));
- strings.push_back(buffer);
- buffer = llformat("%f", (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal() );
- strings.push_back(buffer);
-
- // Grab estate information in case the user decided to set the
- // region back to estate time. JC
- LLFloaterRegionInfo* floater = LLFloaterReg::getTypedInstance<LLFloaterRegionInfo>("region_info");
- if (!floater) return true;
-
- LLTabContainer* tab = floater->getChild<LLTabContainer>("region_panels");
- if (!tab) return true;
+ // update the model
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+ region_info.mWaterHeight = (F32) getChild<LLUICtrl>("water_height_spin")->getValue().asReal();
+ region_info.mTerrainRaiseLimit = (F32) getChild<LLUICtrl>("terrain_raise_spin")->getValue().asReal();
+ region_info.mTerrainLowerLimit = (F32) getChild<LLUICtrl>("terrain_lower_spin")->getValue().asReal();
- LLPanelEstateInfo* panel = (LLPanelEstateInfo*)tab->getChild<LLPanel>("Estate");
- if (!panel) return true;
+ // and sync the region with it
+ region_info.sendRegionTerrain(invoice);
+
+ // =======================================
+ // Assemble and send texturedetail message
- BOOL estate_global_time = panel->getGlobalTime();
- BOOL estate_fixed_sun = panel->getFixedSun();
- F32 estate_sun_hour;
- if (estate_global_time)
+ // Make sure user hasn't chosen wacky textures.
+ if (!validateTextureSizes())
{
- estate_sun_hour = 0.f;
+ return FALSE;
}
- else
+
+ LLTextureCtrl* texture_ctrl;
+ std::string id_str;
+ LLMessageSystem* msg = gMessageSystem;
+
+ for(S32 i = 0; i < TERRAIN_TEXTURE_COUNT; ++i)
{
- estate_sun_hour = panel->getSunHour();
+ buffer = llformat("texture_detail_%d", i);
+ texture_ctrl = getChild<LLTextureCtrl>(buffer);
+ if(texture_ctrl)
+ {
+ LLUUID tmp_id(texture_ctrl->getImageAssetID());
+ tmp_id.toString(id_str);
+ buffer = llformat("%d %s", i, id_str.c_str());
+ strings.push_back(buffer);
+ }
}
+ sendEstateOwnerMessage(msg, "texturedetail", invoice, strings);
+ strings.clear();
- buffer = llformat("%s", (estate_global_time ? "Y" : "N") );
- strings.push_back(buffer);
- buffer = llformat("%s", (estate_fixed_sun ? "Y" : "N") );
- strings.push_back(buffer);
- buffer = llformat("%f", estate_sun_hour);
- strings.push_back(buffer);
-
- sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings);
- return TRUE;
-}
+ // ========================================
+ // Assemble and send textureheights message
-void LLPanelRegionTerrainInfo::onChangeUseEstateTime()
-{
- BOOL use_estate_sun = getChild<LLUICtrl>("use_estate_sun_check")->getValue().asBoolean();
- getChildView("fixed_sun_check")->setEnabled(!use_estate_sun);
- getChildView("sun_hour_slider")->setEnabled(!use_estate_sun);
- if (use_estate_sun)
+ for(S32 i = 0; i < CORNER_COUNT; ++i)
{
- getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE));
- getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f));
+ buffer = llformat("height_start_spin_%d", i);
+ std::string buffer2 = llformat("height_range_spin_%d", i);
+ std::string buffer3 = llformat("%d %f %f", i, (F32)getChild<LLUICtrl>(buffer)->getValue().asReal(), (F32)getChild<LLUICtrl>(buffer2)->getValue().asReal());
+ strings.push_back(buffer3);
}
- getChildView("apply_btn")->setEnabled(TRUE);
-}
+ sendEstateOwnerMessage(msg, "textureheights", invoice, strings);
+ strings.clear();
-void LLPanelRegionTerrainInfo::onChangeFixedSun()
-{
- // Just enable the apply button. We let the sun-hour slider be enabled
- // for both fixed-sun and non-fixed-sun. JC
- getChildView("apply_btn")->setEnabled(TRUE);
-}
+ // ========================================
+ // Send texturecommit message
-void LLPanelRegionTerrainInfo::onChangeSunHour()
-{
- getChildView("apply_btn")->setEnabled(TRUE);
+ sendEstateOwnerMessage(msg, "texturecommit", invoice, strings);
+
+ return TRUE;
}
// static
@@ -1406,6 +1353,7 @@ bool LLPanelRegionTerrainInfo::callbackBakeTerrain(const LLSD& notification, con
strings.push_back("bake");
LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
sendEstateOwnerMessage(gMessageSystem, "terrain", invoice, strings);
+
return false;
}
@@ -1417,6 +1365,9 @@ LLPanelEstateInfo::LLPanelEstateInfo()
: LLPanelRegionInfo(),
mEstateID(0) // invalid
{
+ LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+ estate_info.setCommitCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
+ estate_info.setUpdateCallback(boost::bind(&LLPanelEstateInfo::refreshFromEstate, this));
}
// static
@@ -1439,41 +1390,9 @@ void LLPanelEstateInfo::initDispatch(LLDispatcher& dispatch)
estate_dispatch_initialized = true;
}
-// Disables the sun-hour slider and the use fixed time check if the use global time is check
-void LLPanelEstateInfo::onChangeUseGlobalTime()
-{
- bool enabled = !getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean();
- getChildView("sun_hour_slider")->setEnabled(enabled);
- getChildView("fixed_sun_check")->setEnabled(enabled);
- getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(FALSE));
- enableButton("apply_btn");
-}
-
-// Enables the sun-hour slider if the fixed-sun checkbox is set
-void LLPanelEstateInfo::onChangeFixedSun()
-{
- bool enabled = !getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
- getChildView("use_global_time_check")->setEnabled(enabled);
- getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(FALSE));
- enableButton("apply_btn");
-}
-
-
-
-
//---------------------------------------------------------------------------
// Add/Remove estate access button callbacks
//---------------------------------------------------------------------------
-void LLPanelEstateInfo::onClickEditSky()
-{
- LLFloaterReg::showInstance("env_windlight");
-}
-
-void LLPanelEstateInfo::onClickEditDayCycle()
-{
- LLFloaterReg::showInstance("env_day_cycle");
-}
-
void LLPanelEstateInfo::onClickAddAllowedAgent()
{
LLCtrlListInterface *list = childGetListInterface("allowed_avatar_name_list");
@@ -1673,10 +1592,7 @@ std::string all_estates_text()
// static
bool LLPanelEstateInfo::isLindenEstate()
{
- LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
- if (!panel) return false;
-
- U32 estate_id = panel->getEstateID();
+ U32 estate_id = LLEstateInfoModel::instance().getID();
return (estate_id <= ESTATE_LAST_LINDEN);
}
@@ -2030,7 +1946,6 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
BOOL manager = (region && region->isEstateManager());
setCtrlsEnabled(god || owner || manager);
- getChildView("apply_btn")->setEnabled(FALSE);
getChildView("add_allowed_avatar_btn")->setEnabled(god || owner || manager);
getChildView("remove_allowed_avatar_btn")->setEnabled(god || owner || manager);
getChildView("add_allowed_group_btn")->setEnabled(god || owner || manager);
@@ -2039,7 +1954,7 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
// Can't ban people from mainland, orientation islands, etc. because this
// creates much network traffic and server load.
// Disable their accounts in CSR tool instead.
- bool linden_estate = (getEstateID() <= ESTATE_LAST_LINDEN);
+ bool linden_estate = isLindenEstate();
bool enable_ban = (god || owner || manager) && !linden_estate;
getChildView("add_banned_avatar_btn")->setEnabled(enable_ban);
getChildView("remove_banned_avatar_btn")->setEnabled(enable_ban);
@@ -2051,6 +1966,8 @@ void LLPanelEstateInfo::updateControls(LLViewerRegion* region)
getChildView("add_estate_manager_btn")->setEnabled(god || owner);
getChildView("remove_estate_manager_btn")->setEnabled(god || owner);
getChildView("estate_manager_name_list")->setEnabled(god || owner);
+
+ refresh();
}
bool LLPanelEstateInfo::refreshFromRegion(LLViewerRegion* region)
@@ -2088,10 +2005,6 @@ void LLPanelEstateInfo::updateChild(LLUICtrl* child_ctrl)
{
// do nothing
}
- else if (checkSunHourSlider(child_ctrl))
- {
- // do nothing
- }
}
bool LLPanelEstateInfo::estateUpdate(LLMessageSystem* msg)
@@ -2105,18 +2018,11 @@ BOOL LLPanelEstateInfo::postBuild()
{
// set up the callbacks for the generic controls
initCtrl("externally_visible_check");
- initCtrl("use_global_time_check");
- initCtrl("fixed_sun_check");
initCtrl("allow_direct_teleport");
initCtrl("limit_payment");
initCtrl("limit_age_verified");
initCtrl("voice_chat_check");
- // set up the use global time checkbox
- getChild<LLUICtrl>("use_global_time_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeUseGlobalTime, this));
- getChild<LLUICtrl>("fixed_sun_check")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeFixedSun, this));
- getChild<LLUICtrl>("sun_hour_slider")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
-
getChild<LLUICtrl>("allowed_avatar_name_list")->setCommitCallback(boost::bind(&LLPanelEstateInfo::onChangeChildCtrl, this, _1));
LLNameListCtrl *avatar_name_list = getChild<LLNameListCtrl>("allowed_avatar_name_list");
if (avatar_name_list)
@@ -2163,18 +2069,18 @@ BOOL LLPanelEstateInfo::postBuild()
childSetAction("message_estate_btn", boost::bind(&LLPanelEstateInfo::onClickMessageEstate, this));
childSetAction("kick_user_from_estate_btn", boost::bind(&LLPanelEstateInfo::onClickKickUser, this));
- childSetAction("WLEditSky", boost::bind(&LLPanelEstateInfo::onClickEditSky, this));
- childSetAction("WLEditDayCycle", boost::bind(&LLPanelEstateInfo::onClickEditDayCycle, this));
-
return LLPanelRegionInfo::postBuild();
}
void LLPanelEstateInfo::refresh()
{
+ // Disable access restriction controls if they make no sense.
bool public_access = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean();
+
getChildView("Only Allow")->setEnabled(public_access);
getChildView("limit_payment")->setEnabled(public_access);
getChildView("limit_age_verified")->setEnabled(public_access);
+
// if this is set to false, then the limit fields are meaningless and should be turned off
if (public_access == false)
{
@@ -2183,6 +2089,39 @@ void LLPanelEstateInfo::refresh()
}
}
+void LLPanelEstateInfo::refreshFromEstate()
+{
+ const LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+
+ getChild<LLUICtrl>("estate_name")->setValue(estate_info.getName());
+ setOwnerName(LLSLURL("agent", estate_info.getOwnerID(), "inspect").getSLURLString());
+
+ getChild<LLUICtrl>("externally_visible_check")->setValue(estate_info.getIsExternallyVisible());
+ getChild<LLUICtrl>("voice_chat_check")->setValue(estate_info.getAllowVoiceChat());
+ getChild<LLUICtrl>("allow_direct_teleport")->setValue(estate_info.getAllowDirectTeleport());
+ getChild<LLUICtrl>("limit_payment")->setValue(estate_info.getDenyAnonymous());
+ getChild<LLUICtrl>("limit_age_verified")->setValue(estate_info.getDenyAgeUnverified());
+
+ // If visible from mainland, disable the access allowed
+ // UI, as anyone can teleport there.
+ // However, gods need to be able to edit the access list for
+ // linden estates, regardless of visibility, to allow object
+ // and L$ transfers.
+ {
+ bool visible_from_mainland = estate_info.getIsExternallyVisible();
+ bool god = gAgent.isGodlike();
+ bool linden_estate = isLindenEstate();
+
+ bool enable_agent = (!visible_from_mainland || (god && linden_estate));
+ bool enable_group = enable_agent;
+ bool enable_ban = !linden_estate;
+
+ setAccessAllowedEnabled(enable_agent, enable_group, enable_ban);
+ }
+
+ refresh();
+}
+
BOOL LLPanelEstateInfo::sendUpdate()
{
llinfos << "LLPanelEsateInfo::sendUpdate()" << llendl;
@@ -2190,7 +2129,7 @@ BOOL LLPanelEstateInfo::sendUpdate()
LLNotification::Params params("ChangeLindenEstate");
params.functor.function(boost::bind(&LLPanelEstateInfo::callbackChangeLindenEstate, this, _1, _2));
- if (getEstateID() <= ESTATE_LAST_LINDEN)
+ if (isLindenEstate())
{
// trying to change reserved estate, warn
LLNotifications::instance().add(params);
@@ -2209,13 +2148,21 @@ bool LLPanelEstateInfo::callbackChangeLindenEstate(const LLSD& notification, con
switch(option)
{
case 0:
- // send the update
- if (!commitEstateInfoCaps())
{
- // the caps method failed, try the old way
- LLFloaterRegionInfo::nextInvoice();
- commitEstateInfoDataserver();
+ LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+
+ // update model
+ estate_info.setUseFixedSun(false); // we don't support fixed sun estates anymore
+ estate_info.setIsExternallyVisible(getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean());
+ estate_info.setAllowDirectTeleport(getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean());
+ estate_info.setDenyAnonymous(getChild<LLUICtrl>("limit_payment")->getValue().asBoolean());
+ estate_info.setDenyAgeUnverified(getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean());
+ estate_info.setAllowVoiceChat(getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean());
+
+ // send the update to sim
+ estate_info.sendEstateInfo();
}
+
// we don't want to do this because we'll get it automatically from the sim
// after the spaceserver processes it
// else
@@ -2272,6 +2219,8 @@ public:
// if we get a normal response, handle it here
virtual void result(const LLSD& content)
{
+ LL_INFOS("Windlight") << "Successfully committed estate info" << llendl;
+
// refresh the panel from the database
LLPanelEstateInfo* panel = dynamic_cast<LLPanelEstateInfo*>(mpPanel.get());
if (panel)
@@ -2288,185 +2237,6 @@ private:
LLHandle<LLPanel> mpPanel;
};
-// tries to send estate info using a cap; returns true if it succeeded
-bool LLPanelEstateInfo::commitEstateInfoCaps()
-{
- std::string url = gAgent.getRegion()->getCapability("EstateChangeInfo");
-
- if (url.empty())
- {
- // whoops, couldn't find the cap, so bail out
- return false;
- }
-
- LLSD body;
- body["estate_name"] = getEstateName();
-
- body["is_externally_visible"] = getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean();
- body["allow_direct_teleport"] = getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean();
- body["is_sun_fixed" ] = getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
- body["deny_anonymous" ] = getChild<LLUICtrl>("limit_payment")->getValue().asBoolean();
- body["deny_age_unverified" ] = getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean();
- body["allow_voice_chat" ] = getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean();
- body["invoice" ] = LLFloaterRegionInfo::getLastInvoice();
-
- // block fly is in estate database but not in estate UI, so we're not supporting it
- //body["block_fly" ] = getChild<LLUICtrl>("")->getValue().asBoolean();
-
- F32 sun_hour = getSunHour();
- if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean())
- {
- sun_hour = 0.f; // 0 = global time
- }
- body["sun_hour"] = sun_hour;
-
- // we use a responder so that we can re-get the data after committing to the database
- LLHTTPClient::post(url, body, new LLEstateChangeInfoResponder(this));
- return true;
-}
-
-/* This is the old way of doing things, is deprecated, and should be
- deleted when the dataserver model can be removed */
-// key = "estatechangeinfo"
-// strings[0] = str(estate_id) (added by simulator before relay - not here)
-// strings[1] = estate_name
-// strings[2] = str(estate_flags)
-// strings[3] = str((S32)(sun_hour * 1024.f))
-void LLPanelEstateInfo::commitEstateInfoDataserver()
-{
- LLMessageSystem* msg = gMessageSystem;
- msg->newMessage("EstateOwnerMessage");
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
-
- msg->nextBlock("MethodData");
- msg->addString("Method", "estatechangeinfo");
- msg->addUUID("Invoice", LLFloaterRegionInfo::getLastInvoice());
-
- msg->nextBlock("ParamList");
- msg->addString("Parameter", getEstateName());
-
- std::string buffer;
- buffer = llformat("%u", computeEstateFlags());
- msg->nextBlock("ParamList");
- msg->addString("Parameter", buffer);
-
- F32 sun_hour = getSunHour();
- if (getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean())
- {
- sun_hour = 0.f; // 0 = global time
- }
-
- buffer = llformat("%d", (S32)(sun_hour*1024.0f));
- msg->nextBlock("ParamList");
- msg->addString("Parameter", buffer);
-
- gAgent.sendMessage();
-}
-
-void LLPanelEstateInfo::setEstateFlags(U32 flags)
-{
- getChild<LLUICtrl>("externally_visible_check")->setValue(LLSD(flags & REGION_FLAGS_EXTERNALLY_VISIBLE ? TRUE : FALSE) );
- getChild<LLUICtrl>("fixed_sun_check")->setValue(LLSD(flags & REGION_FLAGS_SUN_FIXED ? TRUE : FALSE) );
- getChild<LLUICtrl>("voice_chat_check")->setValue(
- LLSD(flags & REGION_FLAGS_ALLOW_VOICE ? TRUE : FALSE));
- getChild<LLUICtrl>("allow_direct_teleport")->setValue(LLSD(flags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT ? TRUE : FALSE) );
- getChild<LLUICtrl>("limit_payment")->setValue(LLSD(flags & REGION_FLAGS_DENY_ANONYMOUS ? TRUE : FALSE) );
- getChild<LLUICtrl>("limit_age_verified")->setValue(LLSD(flags & REGION_FLAGS_DENY_AGEUNVERIFIED ? TRUE : FALSE) );
-
- refresh();
-}
-
-U32 LLPanelEstateInfo::computeEstateFlags()
-{
- U32 flags = 0;
-
- if (getChild<LLUICtrl>("externally_visible_check")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_EXTERNALLY_VISIBLE;
- }
-
- if ( getChild<LLUICtrl>("voice_chat_check")->getValue().asBoolean() )
- {
- flags |= REGION_FLAGS_ALLOW_VOICE;
- }
-
- if (getChild<LLUICtrl>("allow_direct_teleport")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_ALLOW_DIRECT_TELEPORT;
- }
-
- if (getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_SUN_FIXED;
- }
-
- if (getChild<LLUICtrl>("limit_payment")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_DENY_ANONYMOUS;
- }
-
- if (getChild<LLUICtrl>("limit_age_verified")->getValue().asBoolean())
- {
- flags |= REGION_FLAGS_DENY_AGEUNVERIFIED;
- }
-
-
- return flags;
-}
-
-BOOL LLPanelEstateInfo::getGlobalTime()
-{
- return getChild<LLUICtrl>("use_global_time_check")->getValue().asBoolean();
-}
-
-void LLPanelEstateInfo::setGlobalTime(bool b)
-{
- getChild<LLUICtrl>("use_global_time_check")->setValue(LLSD(b));
- getChildView("fixed_sun_check")->setEnabled(LLSD(!b));
- getChildView("sun_hour_slider")->setEnabled(LLSD(!b));
- if (b)
- {
- getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(0.f));
- }
-}
-
-
-BOOL LLPanelEstateInfo::getFixedSun()
-{
- return getChild<LLUICtrl>("fixed_sun_check")->getValue().asBoolean();
-}
-
-void LLPanelEstateInfo::setSunHour(F32 sun_hour)
-{
- if(sun_hour < 6.0f)
- {
- sun_hour = 24.0f + sun_hour;
- }
- getChild<LLUICtrl>("sun_hour_slider")->setValue(LLSD(sun_hour));
-}
-
-F32 LLPanelEstateInfo::getSunHour()
-{
- if (getChildView("sun_hour_slider")->getEnabled())
- {
- return (F32)getChild<LLUICtrl>("sun_hour_slider")->getValue().asReal();
- }
- return 0.f;
-}
-
-const std::string LLPanelEstateInfo::getEstateName() const
-{
- return getChild<LLUICtrl>("estate_name")->getValue().asString();
-}
-
-void LLPanelEstateInfo::setEstateName(const std::string& name)
-{
- getChild<LLUICtrl>("estate_name")->setValue(LLSD(name));
-}
-
const std::string LLPanelEstateInfo::getOwnerName() const
{
return getChild<LLUICtrl>("estate_owner")->getValue().asString();
@@ -2566,17 +2336,6 @@ BOOL LLPanelEstateInfo::checkRemovalButton(std::string name)
return (btn_name != "");
}
-BOOL LLPanelEstateInfo::checkSunHourSlider(LLUICtrl* child_ctrl)
-{
- BOOL found_child_ctrl = FALSE;
- if (child_ctrl->getName() == "sun_hour_slider")
- {
- enableButton("apply_btn");
- found_child_ctrl = TRUE;
- }
- return found_child_ctrl;
-}
-
// static
void LLPanelEstateInfo::onClickMessageEstate(void* userdata)
{
@@ -2651,11 +2410,7 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)
}
LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
- if (region_landtype)
- {
- region_landtype->setText(region->getSimProductName());
- }
-
+ region_landtype->setText(region->getLocalizedSimProductName());
// let the parent class handle the general data collection.
bool rv = LLPanelRegionInfo::refreshFromRegion(region);
@@ -2978,53 +2733,12 @@ bool LLDispatchEstateUpdateInfo::operator()(
const LLUUID& invoice,
const sparam_t& strings)
{
- LLPanelEstateInfo* panel = LLFloaterRegionInfo::getPanelEstate();
- if (!panel) return true;
+ lldebugs << "Received estate update" << llendl;
- // NOTE: LLDispatcher extracts strings with an extra \0 at the
- // end. If we pass the std::string direct to the UI/renderer
- // it draws with a weird character at the end of the string.
- std::string estate_name = strings[0].c_str(); // preserve c_str() call!
- panel->setEstateName(estate_name);
-
- LLViewerRegion* regionp = gAgent.getRegion();
-
- LLUUID owner_id(strings[1]);
- regionp->setOwner(owner_id);
- // Update estate owner name in UI
- std::string owner_name = LLSLURL("agent", owner_id, "inspect").getSLURLString();
- panel->setOwnerName(owner_name);
-
- U32 estate_id = strtoul(strings[2].c_str(), NULL, 10);
- panel->setEstateID(estate_id);
-
- U32 flags = strtoul(strings[3].c_str(), NULL, 10);
- panel->setEstateFlags(flags);
-
- F32 sun_hour = ((F32)(strtod(strings[4].c_str(), NULL)))/1024.0f;
- if(sun_hour == 0 && (flags & REGION_FLAGS_SUN_FIXED ? FALSE : TRUE))
- {
- panel->setGlobalTime(TRUE);
- }
- else
- {
- panel->setGlobalTime(FALSE);
- panel->setSunHour(sun_hour);
- }
-
- bool visible_from_mainland = (bool)(flags & REGION_FLAGS_EXTERNALLY_VISIBLE);
- bool god = gAgent.isGodlike();
- bool linden_estate = (estate_id <= ESTATE_LAST_LINDEN);
-
- // If visible from mainland, disable the access allowed
- // UI, as anyone can teleport there.
- // However, gods need to be able to edit the access list for
- // linden estates, regardless of visibility, to allow object
- // and L$ transfers.
- bool enable_agent = (!visible_from_mainland || (god && linden_estate));
- bool enable_group = enable_agent;
- bool enable_ban = !linden_estate;
- panel->setAccessAllowedEnabled(enable_agent, enable_group, enable_ban);
+ // Update estate info model.
+ // This will call LLPanelEstateInfo::refreshFromEstate().
+ // *TODO: Move estate message handling stuff to llestateinfomodel.cpp.
+ LLEstateInfoModel::instance().update(strings);
return true;
}
@@ -3198,3 +2912,595 @@ bool LLDispatchSetEstateAccess::operator()(
return true;
}
+
+LLPanelEnvironmentInfo::LLPanelEnvironmentInfo()
+: mEnableEditing(false),
+ mRegionSettingsRadioGroup(NULL),
+ mDayCycleSettingsRadioGroup(NULL),
+ mWaterPresetCombo(NULL),
+ mSkyPresetCombo(NULL),
+ mDayCyclePresetCombo(NULL)
+{
+}
+
+// virtual
+BOOL LLPanelEnvironmentInfo::postBuild()
+{
+ mRegionSettingsRadioGroup = getChild<LLRadioGroup>("region_settings_radio_group");
+ mRegionSettingsRadioGroup->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSwitchRegionSettings, this));
+
+ mDayCycleSettingsRadioGroup = getChild<LLRadioGroup>("sky_dayc_settings_radio_group");
+ mDayCycleSettingsRadioGroup->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSwitchDayCycle, this));
+
+ mWaterPresetCombo = getChild<LLComboBox>("water_settings_preset_combo");
+ mWaterPresetCombo->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSelectWaterPreset, this));
+
+ mSkyPresetCombo = getChild<LLComboBox>("sky_settings_preset_combo");
+ mSkyPresetCombo->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSelectSkyPreset, this));
+
+ mDayCyclePresetCombo = getChild<LLComboBox>("dayc_settings_preset_combo");
+ mDayCyclePresetCombo->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSelectDayCycle, this));
+
+ childSetCommitCallback("apply_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnApply, this), NULL);
+ getChild<LLButton>("apply_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpUserPrefs, LLEnvManagerNew::getInstance()));
+ childSetCommitCallback("cancel_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnCancel, this), NULL);
+ getChild<LLButton>("cancel_btn")->setRightMouseDownCallback(boost::bind(&LLEnvManagerNew::dumpPresets, LLEnvManagerNew::getInstance()));
+
+ LLEnvManagerNew::instance().setRegionSettingsChangeCallback(boost::bind(&LLPanelEnvironmentInfo::onRegionSettingschange, this));
+ LLEnvManagerNew::instance().setRegionSettingsAppliedCallback(boost::bind(&LLPanelEnvironmentInfo::onRegionSettingsApplied, this, _1));
+
+ LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLPanelEnvironmentInfo::populateDayCyclesList, this));
+ LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLPanelEnvironmentInfo::populateSkyPresetsList, this));
+ LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&LLPanelEnvironmentInfo::populateWaterPresetsList, this));
+
+ return TRUE;
+}
+
+// virtual
+void LLPanelEnvironmentInfo::onOpen(const LLSD& key)
+{
+ LL_DEBUGS("Windlight") << "Panel opened, refreshing" << LL_ENDL;
+ refresh();
+}
+
+// virtual
+void LLPanelEnvironmentInfo::handleVisibilityChange(BOOL new_visibility)
+{
+ // If hiding (user switched to another tab or closed the floater),
+ // display user's preferred environment.
+ if (!new_visibility)
+ {
+ LLEnvManagerNew::instance().usePrefs();
+ }
+}
+
+// virtual
+bool LLPanelEnvironmentInfo::refreshFromRegion(LLViewerRegion* region)
+{
+ LL_DEBUGS("Windlight") << "Region updated, enabling/disabling controls" << LL_ENDL;
+ BOOL owner_or_god = gAgent.isGodlike() || (region && (region->getOwner() == gAgent.getID()));
+ BOOL owner_or_god_or_manager = owner_or_god || (region && region->isEstateManager());
+
+ // Don't refresh from region settings to avoid flicker after applying new region settings.
+ mEnableEditing = owner_or_god_or_manager;
+ setControlsEnabled(mEnableEditing);
+
+ return LLPanelRegionInfo::refreshFromRegion(region);
+}
+
+void LLPanelEnvironmentInfo::refresh()
+{
+ populateWaterPresetsList();
+ populateSkyPresetsList();
+ populateDayCyclesList();
+
+ // Init radio groups.
+ const LLEnvironmentSettings& settings = LLEnvManagerNew::instance().getRegionSettings();
+ const LLSD& dc = settings.getWLDayCycle();
+ LLSD::Real first_frame_time = dc.size() > 0 ? dc[0][0].asReal() : 0.0f;
+ const bool use_fixed_sky = dc.size() == 1 && first_frame_time < 0;
+ mRegionSettingsRadioGroup->setSelectedIndex(settings.getSkyMap().size() == 0 ? 0 : 1);
+ mDayCycleSettingsRadioGroup->setSelectedIndex(use_fixed_sky ? 0 : 1);
+
+ setControlsEnabled(mEnableEditing);
+
+ setDirty(false);
+}
+
+void LLPanelEnvironmentInfo::setControlsEnabled(bool enabled)
+{
+ mRegionSettingsRadioGroup->setEnabled(enabled);
+ mDayCycleSettingsRadioGroup->setEnabled(enabled);
+
+ mWaterPresetCombo->setEnabled(enabled);
+ mSkyPresetCombo->setEnabled(enabled);
+ mDayCyclePresetCombo->setEnabled(enabled);
+
+ getChildView("apply_btn")->setEnabled(enabled);
+ getChildView("cancel_btn")->setEnabled(enabled);
+
+ if (enabled)
+ {
+ // Enable/disable some controls based on currently selected radio buttons.
+ bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ getChild<LLView>("user_environment_settings")->setEnabled(!use_defaults);
+
+ bool is_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+ mSkyPresetCombo->setEnabled(is_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!is_fixed_sky);
+ }
+}
+
+void LLPanelEnvironmentInfo::setApplyProgress(bool started)
+{
+ LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
+
+ indicator->setVisible(started);
+
+ if (started)
+ {
+ indicator->start();
+ }
+ else
+ {
+ indicator->stop();
+ }
+}
+
+void LLPanelEnvironmentInfo::setDirty(bool dirty)
+{
+ getChildView("apply_btn")->setEnabled(dirty);
+ getChildView("cancel_btn")->setEnabled(dirty);
+}
+
+void LLPanelEnvironmentInfo::sendRegionSunUpdate()
+{
+ LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
+
+ // If the region is being switched to fixed sky,
+ // change the region's sun hour according to the (fixed) sun position.
+ // This is needed for llGetSunDirection() LSL function to work properly (STORM-1330).
+ const LLSD& sky_map = mNewRegionSettings.getSkyMap();
+ bool region_use_fixed_sky = sky_map.size() == 1;
+ if (region_use_fixed_sky)
+ {
+ LLWLParamSet param_set;
+ llassert(sky_map.isMap());
+ param_set.setAll(sky_map.beginMap()->second);
+ F32 sun_angle = param_set.getSunAngle();
+
+ LL_DEBUGS("Windlight Sync") << "Old sun hour: " << region_info.mSunHour << LL_ENDL;
+ // convert value range from 0..2pi to 6..30
+ region_info.mSunHour = fmodf((sun_angle / F_TWO_PI) * 24.f, 24.f) + 6.f;
+ }
+
+ region_info.setUseFixedSun(region_use_fixed_sky);
+ region_info.mUseEstateSun = !region_use_fixed_sky;
+ LL_DEBUGS("Windlight Sync") << "Sun hour: " << region_info.mSunHour << LL_ENDL;
+
+ region_info.sendRegionTerrain(LLFloaterRegionInfo::getLastInvoice());
+}
+
+void LLPanelEnvironmentInfo::fixEstateSun()
+{
+ // We don't support fixed sun estates anymore and need to fix
+ // such estates for region day cycle to take effect.
+ // *NOTE: Assuming that current estate settings have arrived already.
+ LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
+ if (estate_info.getUseFixedSun())
+ {
+ llinfos << "Switching estate to global sun" << llendl;
+ estate_info.setUseFixedSun(false);
+ estate_info.sendEstateInfo();
+ }
+}
+
+void LLPanelEnvironmentInfo::populateWaterPresetsList()
+{
+ mWaterPresetCombo->removeall();
+
+ // If the region already has water params, add them to the list.
+ const LLEnvironmentSettings& region_settings = LLEnvManagerNew::instance().getRegionSettings();
+ if (region_settings.getWaterParams().size() != 0)
+ {
+ const std::string& region_name = gAgent.getRegion()->getName();
+ mWaterPresetCombo->add(region_name, LLWLParamKey(region_name, LLEnvKey::SCOPE_REGION).toLLSD());
+ mWaterPresetCombo->addSeparator();
+ }
+
+ std::list<std::string> user_presets, system_presets;
+ LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
+
+ // Add local user presets first.
+ for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ if (user_presets.size() > 0)
+ {
+ mWaterPresetCombo->addSeparator();
+ }
+
+ // Add local system presets.
+ for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
+ {
+ mWaterPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+ }
+
+ // There's no way to select current preset because its name is not stored on server.
+}
+
+void LLPanelEnvironmentInfo::populateSkyPresetsList()
+{
+ mSkyPresetCombo->removeall();
+
+ LLWLParamManager::preset_name_list_t region_presets;
+ LLWLParamManager::preset_name_list_t user_presets, sys_presets;
+ LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
+
+ // Add region presets.
+ std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
+ {
+ std::string preset_name = *it;
+ std::string item_title = preset_name + " (" + region_name + ")";
+ mSkyPresetCombo->add(item_title, LLWLParamKey(preset_name, LLEnvKey::SCOPE_REGION).toStringVal());
+ }
+
+ if (!region_presets.empty())
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add user presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ if (!user_presets.empty())
+ {
+ mSkyPresetCombo->addSeparator();
+ }
+
+ // Add system presets.
+ for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
+ {
+ mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ // Select current preset.
+ LLSD sky_map = LLEnvManagerNew::instance().getRegionSettings().getSkyMap();
+ if (sky_map.size() == 1) // if the region is set to fixed sky
+ {
+ std::string preset_name = sky_map.beginMap()->first;
+ mSkyPresetCombo->selectByValue(LLWLParamKey(preset_name, LLEnvKey::SCOPE_REGION).toStringVal());
+ }
+}
+
+void LLPanelEnvironmentInfo::populateDayCyclesList()
+{
+ mDayCyclePresetCombo->removeall();
+
+ // If the region already has env. settings, add its day cycle to the list.
+ const LLSD& cur_region_dc = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+ if (cur_region_dc.size() != 0)
+ {
+ LLViewerRegion* region = gAgent.getRegion();
+ llassert(region != NULL);
+
+ LLWLParamKey key(region->getName(), LLEnvKey::SCOPE_REGION);
+ mDayCyclePresetCombo->add(region->getName(), key.toStringVal());
+ mDayCyclePresetCombo->addSeparator();
+ }
+
+ // Add local user day cycles.
+ LLDayCycleManager::preset_name_list_t user_days, sys_days;
+ LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ if (user_days.size() > 0)
+ {
+ mDayCyclePresetCombo->addSeparator();
+ }
+
+ // Add local system day cycles.
+ for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+ {
+ mDayCyclePresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
+ }
+
+ // Current day cycle is already selected.
+}
+
+bool LLPanelEnvironmentInfo::getSelectedWaterParams(LLSD& water_params)
+{
+ LLWLParamKey water_key(mWaterPresetCombo->getSelectedValue());
+
+ if (water_key.scope == LLEnvKey::SCOPE_REGION)
+ {
+ water_params = LLEnvManagerNew::instance().getRegionSettings().getWaterParams();
+ }
+ else
+ {
+ LLWaterParamSet param_set;
+ if (!LLWaterParamManager::instance().getParamSet(water_key.name, param_set))
+ {
+ llwarns << "Error getting water preset: " << water_key.name << llendl;
+ return false;
+ }
+
+ water_params = param_set.getAll();
+ }
+
+ return true;
+}
+
+bool LLPanelEnvironmentInfo::getSelectedSkyParams(LLSD& sky_params, std::string& preset_name)
+{
+ std::string preset_key(mSkyPresetCombo->getValue().asString());
+ LLWLParamKey preset(preset_key);
+
+ // Get the preset sky params.
+ LLWLParamSet param_set;
+ if (!LLWLParamManager::instance().getParamSet(preset, param_set))
+ {
+ llwarns << "Error getting sky params: " << preset.toLLSD() << llendl;
+ return false;
+ }
+
+ sky_params = param_set.getAll();
+ preset_name = preset.name;
+ return true;
+}
+
+bool LLPanelEnvironmentInfo::getSelectedDayCycleParams(LLSD& day_cycle, LLSD& sky_map, short& scope)
+{
+ std::string preset_key(mDayCyclePresetCombo->getValue().asString());
+ LLWLParamKey dc(preset_key);
+ LL_DEBUGS("Windlight") << "Use day cycle: " << dc.toLLSD() << LL_ENDL;
+
+ if (dc.scope == LLEnvKey::SCOPE_REGION) // current region day cycle
+ {
+ const LLEnvironmentSettings& cur_region_settings = LLEnvManagerNew::instance().getRegionSettings();
+ day_cycle = cur_region_settings.getWLDayCycle();
+ sky_map = cur_region_settings.getSkyMap();
+ }
+ else // a local day cycle
+ {
+ if (!LLDayCycleManager::instance().getPreset(dc.name, day_cycle))
+ {
+ llwarns << "Error getting day cycle " << dc.name << llendl;
+ return false;
+ }
+
+ // Create sky map from the day cycle.
+ {
+ LLWLDayCycle tmp_day;
+ tmp_day.loadDayCycle(day_cycle, dc.scope);
+ tmp_day.getSkyMap(sky_map);
+ }
+ }
+
+ scope = dc.scope;
+
+ return true;
+}
+void LLPanelEnvironmentInfo::onSwitchRegionSettings()
+{
+ bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ getChild<LLView>("user_environment_settings")->setEnabled(!use_defaults);
+
+ if (use_defaults)
+ {
+ LLEnvManagerNew::instance().useDefaults();
+ }
+ else
+ {
+ onSelectWaterPreset();
+ onSwitchDayCycle();
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSwitchDayCycle()
+{
+ bool is_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+
+ mSkyPresetCombo->setEnabled(is_fixed_sky);
+ mDayCyclePresetCombo->setEnabled(!is_fixed_sky);
+
+ if (is_fixed_sky)
+ {
+ onSelectSkyPreset();
+ }
+ else
+ {
+ onSelectDayCycle();
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSelectWaterPreset()
+{
+ LLSD water_params;
+
+ if (getSelectedWaterParams(water_params))
+ {
+ LLEnvManagerNew::instance().useWaterParams(water_params);
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSelectSkyPreset()
+{
+ LLSD params;
+ std::string dummy;
+
+ if (getSelectedSkyParams(params, dummy))
+ {
+ LLEnvManagerNew::instance().useSkyParams(params);
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onSelectDayCycle()
+{
+ LLSD day_cycle;
+ LLSD sky_map; // unused
+ short scope;
+
+ if (getSelectedDayCycleParams(day_cycle, sky_map, scope))
+ {
+ LLEnvManagerNew::instance().useDayCycleParams(day_cycle, (LLEnvKey::EScope) scope);
+ }
+
+ setDirty(true);
+}
+
+void LLPanelEnvironmentInfo::onBtnApply()
+{
+ const bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
+ const bool use_fixed_sky = mDayCycleSettingsRadioGroup->getSelectedIndex() == 0;
+
+ LLSD day_cycle;
+ LLSD sky_map;
+ LLSD water_params;
+
+ if (use_defaults)
+ {
+ // settings will be empty
+ LL_DEBUGS("Windlight") << "Defaults" << LL_ENDL;
+ }
+ else // use custom region settings
+ {
+ if (use_fixed_sky)
+ {
+ LL_DEBUGS("Windlight") << "Use fixed sky" << LL_ENDL;
+
+ // Get selected sky params.
+ LLSD params;
+ std::string preset_name;
+ if (!getSelectedSkyParams(params, preset_name))
+ {
+ return;
+ }
+
+ // Create a day cycle consisting of a single sky preset.
+ LLSD key(LLSD::emptyArray());
+ key.append(-1.0f); // indicate that user preference is actually fixed sky, not a day cycle
+ key.append(preset_name);
+ day_cycle.append(key);
+
+ // Create a sky map consisting of only the sky preset.
+ std::map<LLWLParamKey, LLWLParamSet> refs;
+ LLWLParamSet param_set;
+ param_set.setAll(params);
+ refs[LLWLParamKey(preset_name, LLEnvKey::SCOPE_LOCAL)] = param_set; // scope doesn't matter here
+ sky_map = LLWLParamManager::createSkyMap(refs);
+ }
+ else // use day cycle
+ {
+ LL_DEBUGS("Windlight") << "Use day cycle" << LL_ENDL;
+
+ short scope; // unused
+ if (!getSelectedDayCycleParams(day_cycle, sky_map, scope))
+ {
+ return;
+ }
+
+ // If it's a special single-preset day cycle meaning using a fixed sky,
+ // reset the frame time to a non-negative value,
+ // so that the region setting is displayed in the floater as
+ // a day cycle, not a preset. (STORM-1289)
+ if (day_cycle.size() == 1 && day_cycle[0][0].asReal() < 0.0f)
+ {
+ LL_DEBUGS("Windlight") << "Fixing negative time" << LL_ENDL;
+ day_cycle[0][0] = 0.0f;
+ }
+ }
+
+ // Get water params.
+ if (!getSelectedWaterParams(water_params))
+ {
+ // *TODO: show a notification?
+ return;
+ }
+ }
+
+ // Send settings apply request.
+ LLEnvironmentSettings new_region_settings;
+ new_region_settings.saveParams(day_cycle, sky_map, water_params, 0.0f);
+ if (!LLEnvManagerNew::instance().sendRegionSettings(new_region_settings))
+ {
+ llwarns << "Error applying region environment settings" << llendl;
+ return;
+ }
+
+ // When the settings get applied, we'll also send the region sun position update.
+ // To determine the sun angle we're going to need the new settings.
+ mNewRegionSettings = new_region_settings;
+
+ // Start spinning the progress indicator.
+ setApplyProgress(true);
+}
+
+void LLPanelEnvironmentInfo::onBtnCancel()
+{
+ // Reload last saved region settings.
+ refresh();
+
+ // Apply them.
+ LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+ const LLEnvironmentSettings& cur_settings = env_mgr.getRegionSettings();
+ const LLSD& region_day_cycle = cur_settings.getWLDayCycle();
+ const LLSD& region_water = cur_settings.getWaterParams();
+ env_mgr.useWaterParams(region_water);
+ env_mgr.useDayCycleParams(region_day_cycle, LLEnvKey::SCOPE_REGION);
+}
+
+void LLPanelEnvironmentInfo::onRegionSettingschange()
+{
+ LL_DEBUGS("Windlight") << "Region settings changed, refreshing" << LL_ENDL;
+ refresh();
+
+ // Stop applying progress indicator (it may be running if it's us who initiated settings update).
+ setApplyProgress(false);
+}
+
+void LLPanelEnvironmentInfo::onRegionSettingsApplied(bool ok)
+{
+ // If applying new settings has failed, stop the indicator right away.
+ // Otherwise it will be stopped when we receive the updated settings from server.
+ if (ok)
+ {
+ // Set the region sun phase/flags according to the chosen new preferences.
+ //
+ // If we do this earlier we may get jerky transition from fixed sky to a day cycle (STORM-1481).
+ // That is caused by the simulator re-sending the region info, which in turn makes us
+ // re-request and display old region environment settings while the new ones haven't been applied yet.
+ sendRegionSunUpdate();
+
+ // Switch estate to not using fixed sun for the region day cycle to work properly (STORM-1506).
+ fixEstateSun();
+ }
+ else
+ {
+ setApplyProgress(false);
+
+ // We need to re-request environment setting here,
+ // otherwise our subsequent attempts to change region settings will fail with the following error:
+ // "Unable to update environment settings because the last update your viewer saw was not the same
+ // as the last update sent from the simulator. Try sending your update again, and if this
+ // does not work, try leaving and returning to the region."
+ LLEnvManagerNew::instance().requestRegionSettings();
+ }
+}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 2b87c27fcf..c1fef57ac9 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -34,6 +34,8 @@
#include "llhost.h"
#include "llpanel.h"
+#include "llenvmanager.h" // for LLEnvironmentSettings
+
class LLAvatarName;
class LLDispatcher;
class LLLineEditor;
@@ -46,6 +48,7 @@ class LLInventoryItem;
class LLCheckBoxCtrl;
class LLComboBox;
class LLNameListCtrl;
+class LLRadioGroup;
class LLSliderCtrl;
class LLSpinCtrl;
class LLTextBox;
@@ -53,11 +56,17 @@ class LLVFS;
class LLPanelRegionGeneralInfo;
class LLPanelRegionDebugInfo;
-class LLPanelRegionTextureInfo;
class LLPanelRegionTerrainInfo;
class LLPanelEstateInfo;
class LLPanelEstateCovenant;
+class LLEventTimer;
+class LLEnvironmentSettings;
+class LLWLParamManager;
+class LLWaterParamManager;
+class LLWLParamSet;
+class LLWaterParamSet;
+
class LLFloaterRegionInfo : public LLFloater
{
friend class LLFloaterReg;
@@ -79,6 +88,7 @@ public:
static LLPanelEstateInfo* getPanelEstate();
static LLPanelEstateCovenant* getPanelCovenant();
+ static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
// from LLPanel
virtual void refresh();
@@ -96,6 +106,7 @@ private:
boost::signals2::connection mConsoleReplySignalConnection;;
protected:
+ void onTabSelected(const LLSD& param);
void refreshFromRegion(LLViewerRegion* region);
// member data
@@ -208,44 +219,25 @@ private:
/////////////////////////////////////////////////////////////////////////////
-class LLPanelRegionTextureInfo : public LLPanelRegionInfo
+class LLPanelRegionTerrainInfo : public LLPanelRegionInfo
{
+ LOG_CLASS(LLPanelRegionTerrainInfo);
+
public:
- LLPanelRegionTextureInfo();
- ~LLPanelRegionTextureInfo() {}
-
- virtual bool refreshFromRegion(LLViewerRegion* region);
-
- // LLPanel && LLView
- virtual BOOL postBuild();
+ LLPanelRegionTerrainInfo() : LLPanelRegionInfo() {}
+ ~LLPanelRegionTerrainInfo() {}
-protected:
- virtual BOOL sendUpdate();
+ virtual BOOL postBuild(); // LLPanel
- static void onClickDump(void* data);
- BOOL validateTextureSizes();
-};
+ virtual bool refreshFromRegion(LLViewerRegion* region); // refresh local settings from region update from simulator
+ void setEnvControls(bool available); // Whether environment settings are available for this region
-/////////////////////////////////////////////////////////////////////////////
+ BOOL validateTextureSizes();
-class LLPanelRegionTerrainInfo : public LLPanelRegionInfo
-{
-public:
- LLPanelRegionTerrainInfo()
- : LLPanelRegionInfo() {}
- ~LLPanelRegionTerrainInfo() {}
- // LLPanel
- virtual BOOL postBuild();
-
- virtual bool refreshFromRegion(LLViewerRegion* region);
+ //static void onChangeAnything(LLUICtrl* ctrl, void* userData); // callback for any change, to enable commit button
-protected:
virtual BOOL sendUpdate();
- void onChangeUseEstateTime();
- void onChangeFixedSun();
- void onChangeSunHour();
-
static void onClickDownloadRaw(void*);
static void onClickUploadRaw(void*);
static void onClickBakeTerrain(void*);
@@ -312,23 +304,9 @@ public:
virtual BOOL postBuild();
virtual void updateChild(LLUICtrl* child_ctrl);
virtual void refresh();
-
- U32 computeEstateFlags();
- void setEstateFlags(U32 flags);
-
- BOOL getGlobalTime();
- void setGlobalTime(bool b);
-
- BOOL getFixedSun();
- F32 getSunHour();
- void setSunHour(F32 sun_hour);
+ void refreshFromEstate();
- const std::string getEstateName() const;
- void setEstateName(const std::string& name);
-
- U32 getEstateID() const { return mEstateID; }
- void setEstateID(U32 estate_id) { mEstateID = estate_id; }
static bool isLindenEstate();
const std::string getOwnerName() const;
@@ -337,14 +315,11 @@ public:
// If visible from mainland, allowed agent and allowed groups
// are ignored, so must disable UI.
void setAccessAllowedEnabled(bool enable_agent, bool enable_group, bool enable_ban);
-
protected:
virtual BOOL sendUpdate();
// confirmation dialog callback
bool callbackChangeLindenEstate(const LLSD& notification, const LLSD& response);
- void commitEstateInfoDataserver();
- bool commitEstateInfoCaps();
void commitEstateAccess();
void commitEstateManagers();
@@ -417,4 +392,66 @@ protected:
EAssetStatus mAssetStatus;
};
+/////////////////////////////////////////////////////////////////////////////
+
+class LLPanelEnvironmentInfo : public LLPanelRegionInfo
+{
+ LOG_CLASS(LLPanelEnvironmentInfo);
+
+public:
+ LLPanelEnvironmentInfo();
+
+ // LLPanel
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
+
+ // LLView
+ /*virtual*/ void handleVisibilityChange(BOOL new_visibility);
+
+ // LLPanelRegionInfo
+ /*virtual*/ bool refreshFromRegion(LLViewerRegion* region);
+
+private:
+ void refresh();
+ void setControlsEnabled(bool enabled);
+ void setApplyProgress(bool started);
+ void setDirty(bool dirty);
+
+ void sendRegionSunUpdate();
+ void fixEstateSun();
+
+ void populateWaterPresetsList();
+ void populateSkyPresetsList();
+ void populateDayCyclesList();
+
+ bool getSelectedWaterParams(LLSD& water_params);
+ bool getSelectedSkyParams(LLSD& sky_params, std::string& preset_name);
+ bool getSelectedDayCycleParams(LLSD& day_cycle, LLSD& sky_map, short& scope);
+
+ void onSwitchRegionSettings();
+ void onSwitchDayCycle();
+
+ void onSelectWaterPreset();
+ void onSelectSkyPreset();
+ void onSelectDayCycle();
+
+ void onBtnApply();
+ void onBtnCancel();
+
+ void onRegionSettingschange();
+ void onRegionSettingsApplied(bool ok);
+
+ /// New environment settings that are being applied to the region.
+ LLEnvironmentSettings mNewRegionSettings;
+
+ bool mEnableEditing;
+
+ LLRadioGroup* mRegionSettingsRadioGroup;
+ LLRadioGroup* mDayCycleSettingsRadioGroup;
+
+ LLComboBox* mWaterPresetCombo;
+ LLComboBox* mSkyPresetCombo;
+ LLComboBox* mDayCyclePresetCombo;
+};
+
#endif
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index d5806e375c..23cc23376f 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -27,16 +27,26 @@
#include "llviewerprecompiledheaders.h"
+#include "llappviewer.h"
+#include "llbase64.h"
#include "llcommandhandler.h"
#include "llfloaterreg.h"
#include "llfloatersearch.h"
#include "llmediactrl.h"
#include "llnotificationsutil.h"
+#include "llparcel.h"
+#include "llplugincookiestore.h"
#include "lllogininstance.h"
#include "lluri.h"
#include "llagent.h"
+#include "llsdserialize.h"
#include "llui.h"
#include "llviewercontrol.h"
+#include "llviewerregion.h"
+#include "llversioninfo.h"
+#include "llviewermedia.h"
+#include "llviewernetwork.h"
+#include "llviewerparcelmgr.h"
#include "llweb.h"
// support secondlife:///app/search/{CATEGORY}/{QUERY} SLapps
@@ -70,21 +80,24 @@ public:
}
// create the LLSD arguments for the search floater
- LLSD args;
- args["category"] = category;
- args["id"] = LLURI::unescape(search_text);
+ LLFloaterSearch::Params p;
+ p.search.category = category;
+ p.search.query = LLURI::unescape(search_text);
// open the search floater and perform the requested search
- LLFloaterReg::showInstance("search", args);
+ LLFloaterReg::showInstance("search", p);
return true;
}
};
LLSearchHandler gSearchHandler;
-LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
- LLFloater(key),
- LLViewerMediaObserver(),
- mBrowser(NULL),
+LLFloaterSearch::SearchQuery::SearchQuery()
+: category("category", ""),
+ query("query")
+{}
+
+LLFloaterSearch::LLFloaterSearch(const Params& key) :
+ LLFloaterWebContent(key),
mSearchGodLevel(0)
{
// declare a map that transforms a category name into
@@ -102,53 +115,45 @@ LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
BOOL LLFloaterSearch::postBuild()
{
- mBrowser = getChild<LLMediaCtrl>("browser");
- mBrowser->addObserver(this);
+ LLFloaterWebContent::postBuild();
+ mWebBrowser->addObserver(this);
return TRUE;
}
void LLFloaterSearch::onOpen(const LLSD& key)
{
- search(key);
+ Params p(key);
+ p.trusted_content = true;
+ p.allow_address_entry = false;
+
+ LLFloaterWebContent::onOpen(p);
+ search(p.search);
}
void LLFloaterSearch::onClose(bool app_quitting)
{
+ LLFloaterWebContent::onClose(app_quitting);
// tear down the web view so we don't show the previous search
// result when the floater is opened next time
destroy();
}
-void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)
-{
- switch (event)
- {
- case MEDIA_EVENT_NAVIGATE_BEGIN:
- getChild<LLUICtrl>("status_text")->setValue(getString("loading_text"));
- break;
-
- case MEDIA_EVENT_NAVIGATE_COMPLETE:
- getChild<LLUICtrl>("status_text")->setValue(getString("done_text"));
- break;
-
- default:
- break;
- }
-}
-
void LLFloaterSearch::godLevelChanged(U8 godlevel)
{
// search results can change based upon god level - if the user
// changes god level, then give them a warning (we don't refresh
// the search as this might undo any page navigation or
// AJAX-driven changes since the last search).
- getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
+
+ //FIXME: set status bar text
+
+ //getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
}
-void LLFloaterSearch::search(const LLSD &key)
+void LLFloaterSearch::search(const SearchQuery &p)
{
- if (! mBrowser)
+ if (! mWebBrowser || !p.validateBlock())
{
return;
}
@@ -159,10 +164,9 @@ void LLFloaterSearch::search(const LLSD &key)
// work out the subdir to use based on the requested category
LLSD subs;
- std::string category = key.has("category") ? key["category"].asString() : "";
- if (mCategoryPaths.has(category))
+ if (mCategoryPaths.has(p.category))
{
- subs["CATEGORY"] = mCategoryPaths[category].asString();
+ subs["CATEGORY"] = mCategoryPaths[p.category].asString();
}
else
{
@@ -170,17 +174,18 @@ void LLFloaterSearch::search(const LLSD &key)
}
// add the search query string
- std::string search_text = key.has("id") ? key["id"].asString() : "";
- subs["QUERY"] = LLURI::escape(search_text);
+ subs["QUERY"] = LLURI::escape(p.query);
// add the permissions token that login.cgi gave us
// We use "search_token", and fallback to "auth_token" if not present.
+ LLSD search_cookie;
+
LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
if (search_token.asString().empty())
{
search_token = LLLoginInstance::getInstance()->getResponse("auth_token");
}
- subs["AUTH_TOKEN"] = search_token.asString();
+ search_cookie["AUTH_TOKEN"] = search_token.asString();
// add the user's preferred maturity (can be changed via prefs)
std::string maturity;
@@ -196,10 +201,57 @@ void LLFloaterSearch::search(const LLSD &key)
{
maturity = "13"; // PG
}
- subs["MATURITY"] = maturity;
+ search_cookie["MATURITY"] = maturity;
// add the user's god status
- subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+ search_cookie["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+ search_cookie["VERSION"] = LLVersionInfo::getVersion();
+ search_cookie["VERSION_MAJOR"] = LLVersionInfo::getMajor();
+ search_cookie["VERSION_MINOR"] = LLVersionInfo::getMinor();
+ search_cookie["VERSION_PATCH"] = LLVersionInfo::getPatch();
+ search_cookie["VERSION_BUILD"] = LLVersionInfo::getBuild();
+ search_cookie["CHANNEL"] = LLVersionInfo::getChannel();
+ search_cookie["GRID"] = LLGridManager::getInstance()->getGridLabel();
+ search_cookie["OS"] = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
+ search_cookie["SESSION_ID"] = gAgent.getSessionID();
+ search_cookie["FIRST_LOGIN"] = gAgent.isFirstLogin();
+
+ std::string lang = LLUI::getLanguage();
+ if (lang == "en-us")
+ {
+ lang = "en";
+ }
+ search_cookie["LANGUAGE"] = lang;
+
+ // find the region ID
+ LLUUID region_id;
+ LLViewerRegion *region = gAgent.getRegion();
+ if (region)
+ {
+ region_id = region->getRegionID();
+ }
+ search_cookie["REGION_ID"] = region_id;
+
+ // find the parcel local ID
+ S32 parcel_id = 0;
+ LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+ if (parcel)
+ {
+ parcel_id = parcel->getLocalID();
+ }
+ search_cookie["PARCEL_ID"] = llformat("%d", parcel_id);
+
+ std::stringstream cookie_string_stream;
+ LLSDSerialize::toXML(search_cookie, cookie_string_stream);
+ std::string cookie_string = cookie_string_stream.str();
+
+ U8* cookie_string_buffer = (U8*)cookie_string.c_str();
+ std::string cookie_value = LLBase64::encode(cookie_string_buffer, cookie_string.size());
+
+ // for staging services
+ LLViewerMedia::getCookieStore()->setCookiesFromHost(std::string("viewer_session_info=") + cookie_value, ".lindenlab.com");
+ // for live services
+ LLViewerMedia::getCookieStore()->setCookiesFromHost(std::string("viewer_session_info=") + cookie_value, ".secondlife.com");
// get the search URL and expand all of the substitutions
// (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
@@ -207,5 +259,5 @@ void LLFloaterSearch::search(const LLSD &key)
url = LLWeb::expandURLSubstitutions(url, subs);
// and load the URL in the web view
- mBrowser->navigateTo(url, "text/html");
+ mWebBrowser->navigateTo(url, "text/html");
}
diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h
index ba4dc4c0fa..35b268e1b2 100644
--- a/indra/newview/llfloatersearch.h
+++ b/indra/newview/llfloatersearch.h
@@ -28,7 +28,7 @@
#ifndef LL_LLFLOATERSEARCH_H
#define LL_LLFLOATERSEARCH_H
-#include "llfloater.h"
+#include "llfloaterwebcontent.h"
#include "llviewermediaobserver.h"
#include <string>
@@ -43,11 +43,25 @@ class LLMediaCtrl;
/// so that the user can click on teleport links in search results.
///
class LLFloaterSearch :
- public LLFloater,
- public LLViewerMediaObserver
+ public LLFloaterWebContent
{
public:
- LLFloaterSearch(const LLSD& key);
+ struct SearchQuery : public LLInitParam::Block<SearchQuery>
+ {
+ Optional<std::string> category;
+ Optional<std::string> query;
+
+ SearchQuery();
+ };
+
+ struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params>
+ {
+ Optional<SearchQuery> search;
+ };
+
+ typedef LLSDParamAdapter<_Params> Params;
+
+ LLFloaterSearch(const Params& key);
/// show the search floater with a new search
/// see search() for details on the key parameter.
@@ -60,7 +74,7 @@ public:
/// - "id": specifies the text phrase to search for
/// - "category": one of "all" (default), "people", "places",
/// "events", "groups", "wiki", "destinations", "classifieds"
- void search(const LLSD &key);
+ void search(const SearchQuery &query);
/// changing godmode can affect the search results that are
/// returned by the search website - use this method to tell the
@@ -70,10 +84,6 @@ public:
private:
/*virtual*/ BOOL postBuild();
- // inherited from LLViewerMediaObserver
- /*virtual*/ void handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event);
-
- LLMediaCtrl *mBrowser;
LLSD mCategoryPaths;
U8 mSearchGodLevel;
};
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
index 8558a1277c..3434841d09 100644
--- a/indra/newview/llfloatersellland.cpp
+++ b/indra/newview/llfloatersellland.cpp
@@ -41,6 +41,7 @@
#include "llviewerparcelmgr.h"
#include "lluictrlfactory.h"
#include "llviewerwindow.h"
+#include "lltrans.h"
class LLAvatarName;
@@ -451,7 +452,7 @@ void LLFloaterSellLandUI::doSellLand(void *userdata)
// Do a confirmation
S32 sale_price = self->getChild<LLUICtrl>("price")->getValue();
S32 area = parcel->getArea();
- std::string authorizedBuyerName = "Anyone";
+ std::string authorizedBuyerName = LLTrans::getString("Anyone");
bool sell_to_anyone = true;
if ("user" == self->getChild<LLUICtrl>("sell_to")->getValue().asString())
{
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 0d798afdcc..84fb8bd9e7 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -36,7 +36,6 @@
#include "llagentcamera.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
-#include "llcombobox.h"
#include "lldraghandle.h"
#include "llerror.h"
#include "llfloaterbuildoptions.h"
@@ -101,6 +100,7 @@ const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =
std::string("Content"), // PANEL_CONTENTS,
};
+
// Local prototypes
void commit_select_component(void *data);
void click_show_more(void*);
@@ -116,7 +116,6 @@ void commit_radio_group_focus(LLUICtrl* ctrl);
void commit_radio_group_move(LLUICtrl* ctrl);
void commit_radio_group_edit(LLUICtrl* ctrl);
void commit_radio_group_land(LLUICtrl* ctrl);
-void commit_grid_mode(LLUICtrl *);
void commit_slider_zoom(LLUICtrl *ctrl);
@@ -234,7 +233,6 @@ BOOL LLFloaterTools::postBuild()
getChild<LLUICtrl>("checkbox uniform")->setValue((BOOL)gSavedSettings.getBOOL("ScaleUniform"));
mCheckStretchTexture = getChild<LLCheckBoxCtrl>("checkbox stretch textures");
getChild<LLUICtrl>("checkbox stretch textures")->setValue((BOOL)gSavedSettings.getBOOL("ScaleStretchTextures"));
- mComboGridMode = getChild<LLComboBox>("combobox grid mode");
mCheckStretchUniformLabel = getChild<LLTextBox>("checkbox uniform label");
//
@@ -269,6 +267,8 @@ BOOL LLFloaterTools::postBuild()
// the setting stores the actual force multiplier, but the slider is logarithmic, so we convert here
getChild<LLUICtrl>("slider force")->setValue(log10(gSavedSettings.getF32("LandBrushForce")));
+ mCostTextBorder = getChild<LLViewBorder>("cost_text_border");
+
mTab = getChild<LLTabContainer>("Object Info Tabs");
if(mTab)
{
@@ -311,7 +311,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCheckSnapToGrid(NULL),
mBtnGridOptions(NULL),
mTitleMedia(NULL),
- mComboGridMode(NULL),
mCheckStretchUniform(NULL),
mCheckStretchTexture(NULL),
mCheckStretchUniformLabel(NULL),
@@ -344,6 +343,7 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mPanelFace(NULL),
mPanelLandInfo(NULL),
+ mCostTextBorder(NULL),
mTabLand(NULL),
mDirty(TRUE),
mNeedMediaTitle(TRUE)
@@ -367,7 +367,6 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCommitCallbackRegistrar.add("BuildTool.selectComponent", boost::bind(&commit_select_component, this));
mCommitCallbackRegistrar.add("BuildTool.gridOptions", boost::bind(&LLFloaterTools::onClickGridOptions,this));
mCommitCallbackRegistrar.add("BuildTool.applyToSelection", boost::bind(&click_apply_to_selection, this));
- mCommitCallbackRegistrar.add("BuildTool.gridMode", boost::bind(&commit_grid_mode,_1));
mCommitCallbackRegistrar.add("BuildTool.commitRadioLand", boost::bind(&commit_radio_group_land,_1));
mCommitCallbackRegistrar.add("BuildTool.LandBrushForce", boost::bind(&commit_slider_dozer_force,_1));
mCommitCallbackRegistrar.add("BuildTool.AddMedia", boost::bind(&LLFloaterTools::onClickBtnAddMedia,this));
@@ -423,16 +422,15 @@ void LLFloaterTools::refresh()
// Refresh object and prim count labels
LLLocale locale(LLLocale::USER_LOCALE);
-
#if 0
- if (gMeshRepo.meshRezEnabled())
+ if (!gMeshRepo.meshRezEnabled())
{
std::string obj_count_string;
LLResMgr::getInstance()->getIntegerString(obj_count_string, LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
- getChild<LLUICtrl>("obj_count")->setTextArg("[COUNT]", obj_count_string);
+ getChild<LLUICtrl>("selection_count")->setTextArg("[OBJ_COUNT]", obj_count_string);
std::string prim_count_string;
LLResMgr::getInstance()->getIntegerString(prim_count_string, LLSelectMgr::getInstance()->getSelection()->getObjectCount());
- getChild<LLUICtrl>("prim_count")->setTextArg("[COUNT]", prim_count_string);
+ getChild<LLUICtrl>("selection_count")->setTextArg("[PRIM_COUNT]", prim_count_string);
// calculate selection rendering cost
if (sShowObjectCost)
@@ -451,55 +449,50 @@ void LLFloaterTools::refresh()
else
#endif
{
- // Get the number of objects selected
- std::string root_object_count_string;
- std::string object_count_string;
-
- LLResMgr::getInstance()->getIntegerString(
- root_object_count_string,
- LLSelectMgr::getInstance()->getSelection()->getRootObjectCount());
- LLResMgr::getInstance()->getIntegerString(
- object_count_string,
- LLSelectMgr::getInstance()->getSelection()->getObjectCount());
-
- F32 obj_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedObjectCost();
- F32 link_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost();
- F32 obj_physics_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedPhysicsCost();
- F32 link_physics_cost =
- LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetPhysicsCost();
-
- // Update the text for the counts
- childSetTextArg(
- "linked_set_count",
- "[COUNT]",
- root_object_count_string);
- childSetTextArg("object_count", "[COUNT]", object_count_string);
-
- // Update the text for the resource costs
- childSetTextArg("linked_set_cost","[COST]",llformat("%.1f", link_cost));
- childSetTextArg("object_cost", "[COST]", llformat("%.1f", obj_cost));
- childSetTextArg("linked_set_cost","[PHYSICS]",llformat("%.1f", link_physics_cost));
- childSetTextArg("object_cost", "[PHYSICS]", llformat("%.1f", obj_physics_cost));
-
- // Display rendering cost if needed
- if (sShowObjectCost)
+ F32 link_phys_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetPhysicsCost();
+ F32 link_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost();
+ S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
+ S32 link_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
+
+ LLStringUtil::format_map_t selection_args;
+ selection_args["OBJ_COUNT"] = llformat("%.1d", link_count);
+ selection_args["PRIM_COUNT"] = llformat("%.1d", prim_count);
+
+ std::ostringstream selection_info;
+
+ bool show_adv_weight = gSavedSettings.getBOOL("ShowAdvancedBuilderOptions");
+ bool show_mesh_cost = gMeshRepo.meshRezEnabled();
+
+ if (show_mesh_cost)
{
- std::string prim_cost_string;
- LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost());
- getChild<LLUICtrl>("RenderingCost")->setTextArg("[COUNT]", prim_cost_string);
+ LLStringUtil::format_map_t prim_equiv_args;
+ prim_equiv_args["SEL_WEIGHT"] = llformat("%.1d", (S32)link_cost);
+ selection_args["PE_STRING"] = getString("status_selectprimequiv", prim_equiv_args);
+ }
+ else
+ {
+ selection_args["PE_STRING"] = "";
}
+ selection_info << getString("status_selectcount", selection_args);
- // disable the object and prim counts if nothing selected
- bool have_selection = ! LLSelectMgr::getInstance()->getSelection()->isEmpty();
- childSetEnabled("linked_set_count", have_selection);
- childSetEnabled("object_count", have_selection);
- childSetEnabled("linked_set_cost", have_selection);
- childSetEnabled("object_cost", have_selection);
- getChildView("RenderingCost")->setEnabled(have_selection && sShowObjectCost);
+ if (show_adv_weight)
+ {
+ selection_info << ",";
+
+ childSetTextArg("selection_weight", "[PHYS_WEIGHT]", llformat("%.1f", link_phys_cost));
+ childSetTextArg("selection_weight", "[DISP_WEIGHT]", llformat("%.1d", calcRenderCost()));
+ }
+ else
+ {
+ selection_info<<".";
+ }
+ getChild<LLTextBox>("selection_count")->setText(selection_info.str());
+
+ bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
+ childSetVisible("selection_count", have_selection);
+ childSetVisible("selection_weight", have_selection && show_adv_weight);
+ childSetVisible("selection_empty", !have_selection);
}
@@ -664,33 +657,6 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
mRadioGroupEdit->setValue("radio select face");
}
- if (mComboGridMode)
- {
- mComboGridMode->setVisible( edit_visible );
- S32 index = mComboGridMode->getCurrentIndex();
- mComboGridMode->removeall();
-
- switch (mObjectSelection->getSelectType())
- {
- case SELECT_TYPE_HUD:
- mComboGridMode->add(getString("grid_screen_text"));
- mComboGridMode->add(getString("grid_local_text"));
- //mComboGridMode->add(getString("grid_reference_text"));
- break;
- case SELECT_TYPE_WORLD:
- mComboGridMode->add(getString("grid_world_text"));
- mComboGridMode->add(getString("grid_local_text"));
- mComboGridMode->add(getString("grid_reference_text"));
- break;
- case SELECT_TYPE_ATTACHMENT:
- mComboGridMode->add(getString("grid_attachment_text"));
- mComboGridMode->add(getString("grid_local_text"));
- mComboGridMode->add(getString("grid_reference_text"));
- break;
- }
-
- mComboGridMode->setCurrentByIndex(index);
- }
// Snap to grid disabled for grab tool - very confusing
if (mCheckSnapToGrid) mCheckSnapToGrid->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );
if (mBtnGridOptions) mBtnGridOptions->setVisible( edit_visible /* || tool == LLToolGrab::getInstance() */ );
@@ -739,6 +705,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
// Land buttons
BOOL land_visible = (tool == LLToolBrushLand::getInstance() || tool == LLToolSelectLand::getInstance() );
+ mCostTextBorder->setVisible(!land_visible);
+
if (mBtnLand) mBtnLand ->setToggleState( land_visible );
mRadioGroupLand->setVisible( land_visible );
@@ -791,15 +759,11 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
getChildView("Strength:")->setVisible( land_visible);
}
- bool show_mesh_cost = gMeshRepo.meshRezEnabled();
+ bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
- getChildView("obj_count")->setVisible( !land_visible && !show_mesh_cost);
- getChildView("prim_count")->setVisible( !land_visible && !show_mesh_cost);
- getChildView("linked_set_count")->setVisible( !land_visible && show_mesh_cost);
- getChildView("linked_set_cost")->setVisible( !land_visible && show_mesh_cost);
- getChildView("object_count")->setVisible( !land_visible && show_mesh_cost);
- getChildView("object_cost")->setVisible( !land_visible && show_mesh_cost);
- getChildView("RenderingCost")->setVisible( !land_visible && sShowObjectCost);
+ getChildView("selection_count")->setVisible(!land_visible && have_selection);
+ getChildView("selection_weight")->setVisible(!land_visible && have_selection && gSavedSettings.getBOOL("ShowAdvancedBuilderOptions"));
+ getChildView("selection_empty")->setVisible(!land_visible && !have_selection);
mTab->setVisible(!land_visible);
mPanelLandInfo->setVisible(land_visible);
@@ -1032,13 +996,6 @@ void commit_select_component(void *data)
}
}
-void commit_grid_mode(LLUICtrl *ctrl)
-{
- LLComboBox* combo = (LLComboBox*)ctrl;
-
- LLSelectMgr::getInstance()->setGridMode((EGridMode)combo->getCurrentIndex());
-}
-
// static
void LLFloaterTools::setObjectType( LLPCode pcode )
{
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index fd81a75397..69636190fc 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -32,7 +32,6 @@
#include "llparcelselection.h"
class LLButton;
-class LLComboBox;
class LLCheckBoxCtrl;
class LLPanelPermissions;
class LLPanelObject;
@@ -140,7 +139,6 @@ public:
LLCheckBoxCtrl* mCheckSnapToGrid;
LLButton* mBtnGridOptions;
- LLComboBox* mComboGridMode;
LLCheckBoxCtrl* mCheckStretchUniform;
LLCheckBoxCtrl* mCheckStretchTexture;
@@ -179,6 +177,8 @@ public:
LLPanelFace *mPanelFace;
LLPanelLandInfo *mPanelLandInfo;
+ LLViewBorder* mCostTextBorder;
+
LLTabContainer* mTabLand;
LLParcelSelectionHandle mParcelSelection;
diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp
index 2a3950f9b1..030fed0575 100644
--- a/indra/newview/llfloatervoiceeffect.cpp
+++ b/indra/newview/llfloatervoiceeffect.cpp
@@ -145,7 +145,7 @@ void LLFloaterVoiceEffect::refreshEffectList()
for (voice_effect_list_t::const_iterator it = template_list.begin(); it != template_list.end(); ++it)
{
const LLUUID& effect_id = it->second;
- std::string effect_name = it->first;
+ std::string effect_name = getString("effect_" + it->first); // will throw an error if the effect is not listed in the XML
LLSD effect_properties = effect_interface->getVoiceEffectProperties(effect_id);
diff --git a/indra/newview/llfloaterwater.cpp b/indra/newview/llfloaterwater.cpp
deleted file mode 100644
index be4b144f41..0000000000
--- a/indra/newview/llfloaterwater.cpp
+++ /dev/null
@@ -1,625 +0,0 @@
-/**
- * @file llfloaterwater.cpp
- * @brief LLFloaterWater class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterwater.h"
-
-#include "pipeline.h"
-#include "llsky.h"
-
-#include "llfloaterreg.h"
-#include "llsliderctrl.h"
-#include "llspinctrl.h"
-#include "llcolorswatch.h"
-#include "llcheckboxctrl.h"
-#include "lltexturectrl.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
-#include "llcombobox.h"
-#include "lllineeditor.h"
-#include "llnotificationsutil.h"
-#include "llfloaterdaycycle.h"
-#include "llboost.h"
-#include "llmultisliderctrl.h"
-
-#include "v4math.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-#include "llsavedsettingsglue.h"
-
-#include "llwaterparamset.h"
-#include "llwaterparammanager.h"
-#include "llpostprocess.h"
-
-#undef max
-
-std::set<std::string> LLFloaterWater::sDefaultPresets;
-
-LLFloaterWater::LLFloaterWater(const LLSD& key)
- : LLFloater(key)
-{
-}
-
-LLFloaterWater::~LLFloaterWater()
-{
-}
-BOOL LLFloaterWater::postBuild()
-{
-
- std::string def_water = getString("WLDefaultWaterNames");
-
- // no editing or deleting of the blank string
- sDefaultPresets.insert("");
- boost_tokenizer tokens(def_water, boost::char_separator<char>(":"));
- for (boost_tokenizer::iterator token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
- {
- std::string tok(*token_iter);
- sDefaultPresets.insert(tok);
- }
-
- // add the combo boxes
- LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
-
- if(comboBox != NULL) {
-
- std::map<std::string, LLWaterParamSet>::iterator mIt =
- LLWaterParamManager::instance()->mParamList.begin();
- for(; mIt != LLWaterParamManager::instance()->mParamList.end(); mIt++)
- {
- comboBox->add(mIt->first);
- }
-
- // set defaults on combo boxes
- comboBox->selectByValue(LLSD("Default"));
- }
- // load it up
- initCallbacks();
- syncMenu();
- return TRUE;
-}
-void LLFloaterWater::initCallbacks(void) {
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- getChild<LLUICtrl>("WaterFogColor")->setCommitCallback(boost::bind(&LLFloaterWater::onWaterFogColorMoved, this, _1, &param_mgr->mFogColor));
-
- //
- getChild<LLUICtrl>("WaterGlow")->setCommitCallback(boost::bind(&LLFloaterWater::onColorControlAMoved, this, _1, &param_mgr->mFogColor));
-
- // fog density
- getChild<LLUICtrl>("WaterFogDensity")->setCommitCallback(boost::bind(&LLFloaterWater::onExpFloatControlMoved, this, _1, &param_mgr->mFogDensity));
- getChild<LLUICtrl>("WaterUnderWaterFogMod")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mUnderWaterFogMod));
-
- // blue density
- getChild<LLUICtrl>("WaterNormalScaleX")->setCommitCallback(boost::bind(&LLFloaterWater::onVector3ControlXMoved, this, _1, &param_mgr->mNormalScale));
- getChild<LLUICtrl>("WaterNormalScaleY")->setCommitCallback(boost::bind(&LLFloaterWater::onVector3ControlYMoved, this, _1, &param_mgr->mNormalScale));
- getChild<LLUICtrl>("WaterNormalScaleZ")->setCommitCallback(boost::bind(&LLFloaterWater::onVector3ControlZMoved, this, _1, &param_mgr->mNormalScale));
-
- // fresnel
- getChild<LLUICtrl>("WaterFresnelScale")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mFresnelScale));
- getChild<LLUICtrl>("WaterFresnelOffset")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mFresnelOffset));
-
- // scale above/below
- getChild<LLUICtrl>("WaterScaleAbove")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mScaleAbove));
- getChild<LLUICtrl>("WaterScaleBelow")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mScaleBelow));
-
- // blur mult
- getChild<LLUICtrl>("WaterBlurMult")->setCommitCallback(boost::bind(&LLFloaterWater::onFloatControlMoved, this, _1, &param_mgr->mBlurMultiplier));
-
- // Load/save
-// getChild<LLUICtrl>("WaterLoadPreset")->setCommitCallback(boost::bind(&LLFloaterWater::onLoadPreset, this));
- getChild<LLUICtrl>("WaterNewPreset")->setCommitCallback(boost::bind(&LLFloaterWater::onNewPreset, this));
- getChild<LLUICtrl>("WaterSavePreset")->setCommitCallback(boost::bind(&LLFloaterWater::onSavePreset, this));
- getChild<LLUICtrl>("WaterDeletePreset")->setCommitCallback(boost::bind(&LLFloaterWater::onDeletePreset, this));
-
- // wave direction
- getChild<LLUICtrl>("WaterWave1DirX")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlXMoved, this, _1, &param_mgr->mWave1Dir));
- getChild<LLUICtrl>("WaterWave1DirY")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlYMoved, this, _1, &param_mgr->mWave1Dir));
- getChild<LLUICtrl>("WaterWave2DirX")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlXMoved, this, _1, &param_mgr->mWave2Dir));
- getChild<LLUICtrl>("WaterWave2DirY")->setCommitCallback(boost::bind(&LLFloaterWater::onVector2ControlYMoved, this, _1, &param_mgr->mWave2Dir));
-
- getChild<LLUICtrl>("WaterPresetsCombo")->setCommitCallback(boost::bind(&LLFloaterWater::onChangePresetName, this, _1));
-
- LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
- textCtrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL);
- getChild<LLUICtrl>("WaterNormalMap")->setCommitCallback(boost::bind(&LLFloaterWater::onNormalMapPicked, this, _1));
-}
-
-bool LLFloaterWater::newPromptCallback(const LLSD& notification, const LLSD& response)
-{
- std::string text = response["message"].asString();
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- if(text == "")
- {
- return false;
- }
-
- if(option == 0) {
- LLComboBox* comboBox = getChild<LLComboBox>( "WaterPresetsCombo");
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- // add the current parameters to the list
- // see if it's there first
- std::map<std::string, LLWaterParamSet>::iterator mIt =
- param_mgr->mParamList.find(text);
-
- // if not there, add a new one
- if(mIt == param_mgr->mParamList.end())
- {
- param_mgr->addParamSet(text, param_mgr->mCurParams);
- comboBox->add(text);
- comboBox->sortByName();
-
- comboBox->setSelectedByValue(text, true);
-
- param_mgr->savePreset(text);
-
- // otherwise, send a message to the user
- }
- else
- {
- LLNotificationsUtil::add("ExistsWaterPresetAlert");
- }
- }
- return false;
-}
-
-void LLFloaterWater::syncMenu()
-{
- bool err;
-
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- LLWaterParamSet & current_params = param_mgr->mCurParams;
-
- // blue horizon
- param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err);
-
- LLColor4 col = param_mgr->getFogColor();
- getChild<LLUICtrl>("WaterGlow")->setValue(col.mV[3]);
- col.mV[3] = 1.0f;
- LLColorSwatchCtrl* colCtrl = getChild<LLColorSwatchCtrl>("WaterFogColor");
-
- colCtrl->set(col);
-
- // fog and wavelets
- param_mgr->mFogDensity.mExp =
- log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) /
- log(param_mgr->mFogDensity.mBase);
- param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
- getChild<LLUICtrl>("WaterFogDensity")->setValue(param_mgr->mFogDensity.mExp);
-
- param_mgr->mUnderWaterFogMod.mX =
- current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err);
- getChild<LLUICtrl>("WaterUnderWaterFogMod")->setValue(param_mgr->mUnderWaterFogMod.mX);
-
- param_mgr->mNormalScale = current_params.getVector3(param_mgr->mNormalScale.mName, err);
- getChild<LLUICtrl>("WaterNormalScaleX")->setValue(param_mgr->mNormalScale.mX);
- getChild<LLUICtrl>("WaterNormalScaleY")->setValue(param_mgr->mNormalScale.mY);
- getChild<LLUICtrl>("WaterNormalScaleZ")->setValue(param_mgr->mNormalScale.mZ);
-
- // Fresnel
- param_mgr->mFresnelScale.mX = current_params.getFloat(param_mgr->mFresnelScale.mName, err);
- getChild<LLUICtrl>("WaterFresnelScale")->setValue(param_mgr->mFresnelScale.mX);
- param_mgr->mFresnelOffset.mX = current_params.getFloat(param_mgr->mFresnelOffset.mName, err);
- getChild<LLUICtrl>("WaterFresnelOffset")->setValue(param_mgr->mFresnelOffset.mX);
-
- // Scale Above/Below
- param_mgr->mScaleAbove.mX = current_params.getFloat(param_mgr->mScaleAbove.mName, err);
- getChild<LLUICtrl>("WaterScaleAbove")->setValue(param_mgr->mScaleAbove.mX);
- param_mgr->mScaleBelow.mX = current_params.getFloat(param_mgr->mScaleBelow.mName, err);
- getChild<LLUICtrl>("WaterScaleBelow")->setValue(param_mgr->mScaleBelow.mX);
-
- // blur mult
- param_mgr->mBlurMultiplier.mX = current_params.getFloat(param_mgr->mBlurMultiplier.mName, err);
- getChild<LLUICtrl>("WaterBlurMult")->setValue(param_mgr->mBlurMultiplier.mX);
-
- // wave directions
- param_mgr->mWave1Dir = current_params.getVector2(param_mgr->mWave1Dir.mName, err);
- getChild<LLUICtrl>("WaterWave1DirX")->setValue(param_mgr->mWave1Dir.mX);
- getChild<LLUICtrl>("WaterWave1DirY")->setValue(param_mgr->mWave1Dir.mY);
-
- param_mgr->mWave2Dir = current_params.getVector2(param_mgr->mWave2Dir.mName, err);
- getChild<LLUICtrl>("WaterWave2DirX")->setValue(param_mgr->mWave2Dir.mX);
- getChild<LLUICtrl>("WaterWave2DirY")->setValue(param_mgr->mWave2Dir.mY);
-
- LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
- textCtrl->setImageAssetID(param_mgr->getNormalMapID());
-}
-
-
-// vector control callbacks
-void LLFloaterWater::onVector3ControlXMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mX = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// vector control callbacks
-void LLFloaterWater::onVector3ControlYMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mY = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// vector control callbacks
-void LLFloaterWater::onVector3ControlZMoved(LLUICtrl* ctrl, WaterVector3Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mZ = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-
-// vector control callbacks
-void LLFloaterWater::onVector2ControlXMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mX = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// vector control callbacks
-void LLFloaterWater::onVector2ControlYMoved(LLUICtrl* ctrl, WaterVector2Control* vectorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- vectorControl->mY = sldrCtrl->getValueF32();
-
- vectorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-// color control callbacks
-void LLFloaterWater::onColorControlRMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mR = sldrCtrl->getValueF32();
-
- // move i if it's the max
- if(colorControl->mR >= colorControl->mG
- && colorControl->mR >= colorControl->mB
- && colorControl->mHasSliderName)
- {
- colorControl->mI = colorControl->mR;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- getChild<LLUICtrl>(name)->setValue(colorControl->mR);
- }
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onColorControlGMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mG = sldrCtrl->getValueF32();
-
- // move i if it's the max
- if(colorControl->mG >= colorControl->mR
- && colorControl->mG >= colorControl->mB
- && colorControl->mHasSliderName)
- {
- colorControl->mI = colorControl->mG;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- getChild<LLUICtrl>(name)->setValue(colorControl->mG);
-
- }
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onColorControlBMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mB = sldrCtrl->getValueF32();
-
- // move i if it's the max
- if(colorControl->mB >= colorControl->mR
- && colorControl->mB >= colorControl->mG
- && colorControl->mHasSliderName)
- {
- colorControl->mI = colorControl->mB;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- getChild<LLUICtrl>(name)->setValue(colorControl->mB);
- }
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onColorControlAMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mA = sldrCtrl->getValueF32();
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
-
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-
-void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->mI = sldrCtrl->getValueF32();
-
- // only for sliders where we pass a name
- if(colorControl->mHasSliderName)
- {
- // set it to the top
- F32 maxVal = std::max(std::max(colorControl->mR, colorControl->mG), colorControl->mB);
- F32 iVal;
-
- iVal = colorControl->mI;
-
- // get the names of the other sliders
- std::string rName = colorControl->mSliderName;
- rName.append("R");
- std::string gName = colorControl->mSliderName;
- gName.append("G");
- std::string bName = colorControl->mSliderName;
- bName.append("B");
-
- // handle if at 0
- if(iVal == 0)
- {
- colorControl->mR = 0;
- colorControl->mG = 0;
- colorControl->mB = 0;
-
- // if all at the start
- // set them all to the intensity
- }
- else if (maxVal == 0)
- {
- colorControl->mR = iVal;
- colorControl->mG = iVal;
- colorControl->mB = iVal;
- }
- else
- {
- // add delta amounts to each
- F32 delta = (iVal - maxVal) / maxVal;
- colorControl->mR *= (1.0f + delta);
- colorControl->mG *= (1.0f + delta);
- colorControl->mB *= (1.0f + delta);
- }
-
- // set the sliders to the new vals
- getChild<LLUICtrl>(rName)->setValue(colorControl->mR);
- getChild<LLUICtrl>(gName)->setValue(colorControl->mG);
- getChild<LLUICtrl>(bName)->setValue(colorControl->mB);
- }
-
- // now update the current parameters and send them to shaders
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onExpFloatControlMoved(LLUICtrl* ctrl, WaterExpFloatControl* expFloatControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- F32 val = sldrCtrl->getValueF32();
- expFloatControl->mExp = val;
- LLWaterParamManager::instance()->setDensitySliderValue(val);
-
- expFloatControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onFloatControlMoved(LLUICtrl* ctrl, WaterFloatControl* floatControl)
-{
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- floatControl->mX = sldrCtrl->getValueF32() / floatControl->mMult;
-
- floatControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-void LLFloaterWater::onWaterFogColorMoved(LLUICtrl* ctrl, WaterColorControl* colorControl)
-{
- LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
- *colorControl = swatch->get();
-
- colorControl->update(LLWaterParamManager::instance()->mCurParams);
- LLWaterParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWater::onNormalMapPicked(LLUICtrl* ctrl)
-{
- LLTextureCtrl* textCtrl = static_cast<LLTextureCtrl*>(ctrl);
- LLUUID textID = textCtrl->getImageAssetID();
- LLWaterParamManager::instance()->setNormalMapID(textID);
-}
-
-void LLFloaterWater::onNewPreset()
-{
- LLNotificationsUtil::add("NewWaterPreset", LLSD(), LLSD(), boost::bind(&LLFloaterWater::newPromptCallback, this, _1, _2));
-}
-
-void LLFloaterWater::onSavePreset()
-{
- // get the name
- LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
-
- // don't save the empty name
- if(comboBox->getSelectedItemLabel() == "")
- {
- return;
- }
-
- LLWaterParamManager::instance()->mCurParams.mName =
- comboBox->getSelectedItemLabel();
-
- // check to see if it's a default and shouldn't be overwritten
- std::set<std::string>::iterator sIt = sDefaultPresets.find(
- comboBox->getSelectedItemLabel());
- if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("WaterEditPresets"))
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return;
- }
-
- LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterWater::saveAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWater::saveAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- // if they choose save, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
-
- param_mgr->setParamSet(
- param_mgr->mCurParams.mName,
- param_mgr->mCurParams);
-
- // comment this back in to save to file
- param_mgr->savePreset(param_mgr->mCurParams.mName);
- }
- return false;
-}
-
-void LLFloaterWater::onDeletePreset()
-{
- LLComboBox* combo_box = getChild<LLComboBox>("WaterPresetsCombo");
-
- if(combo_box->getSelectedValue().asString() == "")
- {
- return;
- }
-
- LLSD args;
- args["SKY"] = combo_box->getSelectedValue().asString();
- LLNotificationsUtil::add("WLDeletePresetAlert", args, LLSD(), boost::bind(&LLFloaterWater::deleteAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- // if they choose delete, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLComboBox* combo_box = getChild<LLComboBox>("WaterPresetsCombo");
- LLFloaterDayCycle* day_cycle = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- LLComboBox* key_combo = NULL;
-
- if (day_cycle)
- {
- key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
- }
-
- std::string name = combo_box->getSelectedValue().asString();
-
- // check to see if it's a default and shouldn't be deleted
- std::set<std::string>::iterator sIt = sDefaultPresets.find(name);
- if(sIt != sDefaultPresets.end())
- {
- LLNotificationsUtil::add("WaterNoEditDefault");
- return false;
- }
-
- LLWaterParamManager::instance()->removeParamSet(name, true);
-
- // remove and choose another
- S32 new_index = combo_box->getCurrentIndex();
-
- combo_box->remove(name);
-
- if(key_combo != NULL)
- {
- key_combo->remove(name);
-
- // remove from slider, as well
- day_cycle->deletePreset(name);
- }
-
- // pick the previously selected index after delete
- if(new_index > 0)
- {
- new_index--;
- }
-
- if(combo_box->getItemCount() > 0)
- {
- combo_box->setCurrentByIndex(new_index);
- }
- }
- return false;
-}
-
-
-void LLFloaterWater::onChangePresetName(LLUICtrl* ctrl)
-{
- std::string data = ctrl->getValue().asString();
- if(!data.empty())
- {
- LLWaterParamManager::instance()->loadPreset(data);
- syncMenu();
- }
-}
-
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index 058567492b..2c9a736aff 100644
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -40,8 +40,21 @@
#include "llfloaterwebcontent.h"
-LLFloaterWebContent::LLFloaterWebContent( const LLSD& key )
- : LLFloater( key )
+LLFloaterWebContent::_Params::_Params()
+: url("url"),
+ target("target"),
+ id("id"),
+ window_class("window_class", "web_content"),
+ show_chrome("show_chrome", true),
+ allow_address_entry("allow_address_entry", true),
+ preferred_media_size("preferred_media_size"),
+ trusted_content("trusted_content", false)
+{}
+
+LLFloaterWebContent::LLFloaterWebContent( const Params& params )
+: LLFloater( params ),
+ LLInstanceTracker<LLFloaterWebContent, std::string>(params.id()),
+ mUUID(params.id())
{
mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));
mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this ));
@@ -54,9 +67,9 @@ LLFloaterWebContent::LLFloaterWebContent( const LLSD& key )
BOOL LLFloaterWebContent::postBuild()
{
// these are used in a bunch of places so cache them
- mWebBrowser = getChild< LLMediaCtrl >( "webbrowser" );
- mAddressCombo = getChild< LLComboBox >( "address" );
- mStatusBarText = getChild< LLTextBox >( "statusbartext" );
+ mWebBrowser = getChild< LLMediaCtrl >( "webbrowser" );
+ mAddressCombo = getChild< LLComboBox >( "address" );
+ mStatusBarText = getChild< LLTextBox >( "statusbartext" );
mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress" );
// observe browser events
@@ -75,6 +88,20 @@ BOOL LLFloaterWebContent::postBuild()
return TRUE;
}
+bool LLFloaterWebContent::matchesKey(const LLSD& key)
+{
+ LLUUID id = key["id"];
+ if (id.notNull())
+ {
+ return id == mKey["id"].asUUID();
+ }
+ else
+ {
+ return key["target"].asString() == mKey["target"].asString();
+ }
+}
+
+
void LLFloaterWebContent::initializeURLHistory()
{
// start with an empty list
@@ -86,10 +113,8 @@ void LLFloaterWebContent::initializeURLHistory()
// Get all of the entries in the "browser" collection
LLSD browser_history = LLURLHistory::getURLHistory("browser");
- LLSD::array_iterator iter_history =
- browser_history.beginArray();
- LLSD::array_iterator end_history =
- browser_history.endArray();
+ LLSD::array_iterator iter_history = browser_history.beginArray();
+ LLSD::array_iterator end_history = browser_history.endArray();
for(; iter_history != end_history; ++iter_history)
{
std::string url = (*iter_history).asString();
@@ -99,30 +124,25 @@ void LLFloaterWebContent::initializeURLHistory()
}
//static
-void LLFloaterWebContent::create( const std::string &url, const std::string& target, const std::string& uuid )
+LLFloater* LLFloaterWebContent::create( Params p)
{
- lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
+ lldebugs << "url = " << p.url() << ", target = " << p.target() << ", uuid = " << p.id() << llendl;
- std::string tag = target;
+ if (!p.id.isProvided())
+ {
+ p.id = LLUUID::generateNewID().asString();
+ }
- if(target.empty() || target == "_blank")
+ if(p.target().empty() || p.target() == "_blank")
{
- if(!uuid.empty())
- {
- tag = uuid;
- }
- else
- {
- // create a unique tag for this instance
- LLUUID id;
- id.generate();
- tag = id.asString();
- }
+ p.target = p.id();
}
S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit");
- if(LLFloaterReg::findInstance("web_content", tag) != NULL)
+ LLSD sd;
+ sd["target"] = p.target;
+ if(LLFloaterReg::findInstance(p.window_class, sd) != NULL)
{
// There's already a web browser for this tag, so we won't be opening a new window.
}
@@ -131,12 +151,12 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar
// showInstance will open a new window. Figure out how many web browsers are already open,
// and close the least recently opened one if this will put us over the limit.
- LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("web_content");
+ LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList(p.window_class);
lldebugs << "total instance count is " << instances.size() << llendl;
for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
{
- lldebugs << " " << (*iter)->getKey() << llendl;
+ lldebugs << " " << (*iter)->getKey()["target"] << llendl;
}
if(instances.size() >= (size_t)browser_window_limit)
@@ -146,49 +166,26 @@ void LLFloaterWebContent::create( const std::string &url, const std::string& tar
}
}
- LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::showInstance("web_content", tag));
- llassert(browser);
- if(browser)
- {
- browser->mUUID = uuid;
-
- // tell the browser instance to load the specified URL
- browser->open_media(url, target);
- LLViewerMedia::proxyWindowOpened(target, uuid);
- }
+ return LLFloaterReg::showInstance(p.window_class, p);
}
//static
void LLFloaterWebContent::closeRequest(const std::string &uuid)
{
- LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content");
- lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
- for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+ LLFloaterWebContent* floaterp = getInstance(uuid);
+ if (floaterp)
{
- LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter);
- lldebugs << " " << i->mUUID << llendl;
- if (i && i->mUUID == uuid)
- {
- i->closeFloater(false);
- return;
- }
- }
+ floaterp->closeFloater(false);
+ }
}
//static
void LLFloaterWebContent::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
{
- LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content");
- lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
- for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
+ LLFloaterWebContent* floaterp = getInstance(uuid);
+ if (floaterp)
{
- LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter);
- lldebugs << " " << i->mUUID << llendl;
- if (i && i->mUUID == uuid)
- {
- i->geometryChanged(x, y, width, height);
- return;
- }
+ floaterp->geometryChanged(x, y, width, height);
}
}
@@ -202,24 +199,75 @@ void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height)
getWindow()->getSize(&window_size);
// Adjust width and height for the size of the chrome on the web Browser window.
- width += getRect().getWidth() - mWebBrowser->getRect().getWidth();
- height += getRect().getHeight() - mWebBrowser->getRect().getHeight();
+ LLRect browser_rect;
+ mWebBrowser->localRectToOtherView(mWebBrowser->getLocalRect(), &browser_rect, this);
+ S32 requested_browser_bottom = window_size.mY - (y + height);
LLRect geom;
- geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
+ geom.setOriginAndSize(x - browser_rect.mLeft,
+ requested_browser_bottom - browser_rect.mBottom,
+ width + getRect().getWidth() - browser_rect.getWidth(),
+ height + getRect().getHeight() - browser_rect.getHeight());
lldebugs << "geometry change: " << geom << llendl;
-
- handleReshape(geom,false);
+
+ LLRect new_rect;
+ getParent()->screenRectToLocal(geom, &new_rect);
+ setShape(new_rect);
}
-void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target)
+void LLFloaterWebContent::open_media(const Params& p)
{
// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
- mWebBrowser->setHomePageUrl(web_url, "text/html");
- mWebBrowser->setTarget(target);
- mWebBrowser->navigateTo(web_url, "text/html");
- set_current_url(web_url);
+ LLViewerMedia::proxyWindowOpened(p.target(), p.id());
+ mWebBrowser->setHomePageUrl(p.url, "text/html");
+ mWebBrowser->setTarget(p.target);
+ mWebBrowser->navigateTo(p.url, "text/html");
+
+ set_current_url(p.url);
+
+ getChild<LLLayoutPanel>("status_bar")->setVisible(p.show_chrome);
+ getChild<LLLayoutPanel>("nav_controls")->setVisible(p.show_chrome);
+ bool address_entry_enabled = p.allow_address_entry && !p.trusted_content;
+ getChildView("address")->setEnabled(address_entry_enabled);
+ getChildView("popexternal")->setEnabled(address_entry_enabled);
+
+ if (!address_entry_enabled)
+ {
+ mWebBrowser->setFocus(TRUE);
+ }
+
+ if (!p.show_chrome)
+ {
+ setResizeLimits(100, 100);
+ }
+
+ if (!p.preferred_media_size().isEmpty())
+ {
+ LLLayoutStack::updateClass();
+ LLRect browser_rect = mWebBrowser->calcScreenRect();
+ LLCoordWindow window_size;
+ getWindow()->getSize(&window_size);
+
+ geometryChanged(browser_rect.mLeft, window_size.mY - browser_rect.mTop, p.preferred_media_size().getWidth(), p.preferred_media_size().getHeight());
+ }
+
+}
+
+void LLFloaterWebContent::onOpen(const LLSD& key)
+{
+ Params params(key);
+
+ if (!params.validateBlock())
+ {
+ closeFloater();
+ return;
+ }
+
+ mWebBrowser->setTrustedContent(params.trusted_content);
+
+ // tell the browser instance to load the specified URL
+ open_media(params);
}
//virtual
@@ -232,7 +280,7 @@ void LLFloaterWebContent::onClose(bool app_quitting)
// virtual
void LLFloaterWebContent::draw()
{
- // this is asychronous so we need to keep checking
+ // this is asynchronous so we need to keep checking
getChildView( "back" )->setEnabled( mWebBrowser->canNavigateBack() );
getChildView( "forward" )->setEnabled( mWebBrowser->canNavigateForward() );
@@ -374,7 +422,7 @@ void LLFloaterWebContent::onClickStop()
// still should happen when we catch the navigate complete event
// but sometimes (don't know why) that event isn't sent from Qt
- // and we getto a point where the stop button stays active.
+ // and we ghetto a point where the stop button stays active.
getChildView("reload")->setVisible( true );
getChildView("stop")->setVisible( false );
}
diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h
index ecc7e970d8..36e214b7a9 100644
--- a/indra/newview/llfloaterwebcontent.h
+++ b/indra/newview/llfloaterwebcontent.h
@@ -29,6 +29,7 @@
#include "llfloater.h"
#include "llmediactrl.h"
+#include "llsdparam.h"
class LLMediaCtrl;
class LLComboBox;
@@ -38,24 +39,45 @@ class LLIconCtrl;
class LLFloaterWebContent :
public LLFloater,
- public LLViewerMediaObserver
+ public LLViewerMediaObserver,
+ public LLInstanceTracker<LLFloaterWebContent, std::string>
{
public:
LOG_CLASS(LLFloaterWebContent);
- LLFloaterWebContent(const LLSD& key);
+
+ struct _Params : public LLInitParam::Block<_Params>
+ {
+ Optional<std::string> url,
+ target,
+ window_class,
+ id;
+ Optional<bool> show_chrome,
+ allow_address_entry,
+ trusted_content;
+ Optional<LLRect> preferred_media_size;
+
+ _Params();
+ };
+
+ typedef LLSDParamAdapter<_Params> Params;
+
+ LLFloaterWebContent(const Params& params);
void initializeURLHistory();
- static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
+ static LLFloater* create(Params);
static void closeRequest(const std::string &uuid);
static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
void geometryChanged(S32 x, S32 y, S32 width, S32 height);
/* virtual */ BOOL postBuild();
+ /* virtual */ void onOpen(const LLSD& key);
+ /* virtual */ bool matchesKey(const LLSD& key);
/* virtual */ void onClose(bool app_quitting);
/* virtual */ void draw();
+protected:
// inherited from LLViewerMediaObserver
/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
@@ -66,8 +88,7 @@ public:
void onEnterAddress();
void onPopExternal();
-private:
- void open_media(const std::string& media_url, const std::string& target);
+ void open_media(const Params& );
void set_current_url(const std::string& url);
LLMediaCtrl* mWebBrowser;
diff --git a/indra/newview/llfloaterwindlight.cpp b/indra/newview/llfloaterwindlight.cpp
deleted file mode 100644
index ae98b2cf99..0000000000
--- a/indra/newview/llfloaterwindlight.cpp
+++ /dev/null
@@ -1,875 +0,0 @@
-/**
- * @file llfloaterwindlight.cpp
- * @brief LLFloaterWindLight class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llfloaterwindlight.h"
-
-#include "pipeline.h"
-#include "llsky.h"
-
-#include "llfloaterreg.h"
-#include "llsliderctrl.h"
-#include "llmultislider.h"
-#include "llmultisliderctrl.h"
-#include "llnotificationsutil.h"
-#include "llspinctrl.h"
-#include "llcheckboxctrl.h"
-#include "lluictrlfactory.h"
-#include "llviewercamera.h"
-#include "llcombobox.h"
-#include "lllineeditor.h"
-#include "llfloaterdaycycle.h"
-#include "llboost.h"
-
-#include "v4math.h"
-#include "llviewerdisplay.h"
-#include "llviewercontrol.h"
-#include "llviewerwindow.h"
-#include "llsavedsettingsglue.h"
-
-#include "llwlparamset.h"
-#include "llwlparammanager.h"
-#include "llpostprocess.h"
-#include "lltabcontainer.h"
-
-
-#undef max
-
-std::set<std::string> LLFloaterWindLight::sDefaultPresets;
-
-static const F32 WL_SUN_AMBIENT_SLIDER_SCALE = 3.0f;
-
-LLFloaterWindLight::LLFloaterWindLight(const LLSD& key)
- : LLFloater(key)
-{
-}
-
-LLFloaterWindLight::~LLFloaterWindLight()
-{
-}
-
-BOOL LLFloaterWindLight::postBuild()
-{
- // add the list of presets
- std::string def_days = getString("WLDefaultSkyNames");
-
- // no editing or deleting of the blank string
- sDefaultPresets.insert("");
- boost_tokenizer tokens(def_days, boost::char_separator<char>(":"));
- for (boost_tokenizer::iterator token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
- {
- std::string tok(*token_iter);
- sDefaultPresets.insert(tok);
- }
-
- // add the combo boxes
- LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
-
- if(comboBox != NULL) {
-
- std::map<std::string, LLWLParamSet>::iterator mIt =
- LLWLParamManager::instance()->mParamList.begin();
- for(; mIt != LLWLParamManager::instance()->mParamList.end(); mIt++)
- {
- comboBox->add(mIt->first);
- }
-
- // entry for when we're in estate time
- comboBox->add(LLStringUtil::null);
-
- // set defaults on combo boxes
- comboBox->selectByValue(LLSD("Default"));
- }
- // load it up
- initCallbacks();
-
- syncMenu();
-
- return TRUE;
-}
-void LLFloaterWindLight::initCallbacks(void) {
-
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- // blue horizon
- getChild<LLUICtrl>("WLBlueHorizonR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mBlueHorizon));
- getChild<LLUICtrl>("WLBlueHorizonG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mBlueHorizon));
- getChild<LLUICtrl>("WLBlueHorizonB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mBlueHorizon));
- getChild<LLUICtrl>("WLBlueHorizonI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mBlueHorizon));
-
- // haze density, horizon, mult, and altitude
- getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mHazeDensity));
- getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mHazeHorizon));
- getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mDensityMult));
- getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mMaxAlt));
-
- // blue density
- getChild<LLUICtrl>("WLBlueDensityR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mBlueDensity));
- getChild<LLUICtrl>("WLBlueDensityG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mBlueDensity));
- getChild<LLUICtrl>("WLBlueDensityB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mBlueDensity));
- getChild<LLUICtrl>("WLBlueDensityI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mBlueDensity));
-
- // Lighting
-
- // sunlight
- getChild<LLUICtrl>("WLSunlightR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mSunlight));
- getChild<LLUICtrl>("WLSunlightG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mSunlight));
- getChild<LLUICtrl>("WLSunlightB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mSunlight));
- getChild<LLUICtrl>("WLSunlightI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mSunlight));
-
- // glow
- getChild<LLUICtrl>("WLGlowR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onGlowRMoved, this, _1, &param_mgr->mGlow));
- getChild<LLUICtrl>("WLGlowB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onGlowBMoved, this, _1, &param_mgr->mGlow));
-
- // ambient
- getChild<LLUICtrl>("WLAmbientR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mAmbient));
- getChild<LLUICtrl>("WLAmbientG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mAmbient));
- getChild<LLUICtrl>("WLAmbientB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mAmbient));
- getChild<LLUICtrl>("WLAmbientI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mAmbient));
-
- // time of day
- getChild<LLUICtrl>("WLSunAngle")->setCommitCallback(boost::bind(&LLFloaterWindLight::onSunMoved, this, _1, &param_mgr->mLightnorm));
- getChild<LLUICtrl>("WLEastAngle")->setCommitCallback(boost::bind(&LLFloaterWindLight::onSunMoved, this, _1, &param_mgr->mLightnorm));
-
- // Clouds
-
- // Cloud Color
- getChild<LLUICtrl>("WLCloudColorR")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mCloudColor));
- getChild<LLUICtrl>("WLCloudColorG")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mCloudColor));
- getChild<LLUICtrl>("WLCloudColorB")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mCloudColor));
- getChild<LLUICtrl>("WLCloudColorI")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlIMoved, this, _1, &param_mgr->mCloudColor));
-
- // Cloud
- getChild<LLUICtrl>("WLCloudX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mCloudMain));
- getChild<LLUICtrl>("WLCloudY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mCloudMain));
- getChild<LLUICtrl>("WLCloudDensity")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mCloudMain));
-
- // Cloud Detail
- getChild<LLUICtrl>("WLCloudDetailX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlRMoved, this, _1, &param_mgr->mCloudDetail));
- getChild<LLUICtrl>("WLCloudDetailY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlGMoved, this, _1, &param_mgr->mCloudDetail));
- getChild<LLUICtrl>("WLCloudDetailDensity")->setCommitCallback(boost::bind(&LLFloaterWindLight::onColorControlBMoved, this, _1, &param_mgr->mCloudDetail));
-
- // Cloud extras
- getChild<LLUICtrl>("WLCloudCoverage")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mCloudCoverage));
- getChild<LLUICtrl>("WLCloudScale")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mCloudScale));
- getChild<LLUICtrl>("WLCloudLockX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollXToggled, this, _1));
- getChild<LLUICtrl>("WLCloudLockY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollYToggled, this, _1));
- getChild<LLUICtrl>("WLCloudScrollX")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollXMoved, this, _1));
- getChild<LLUICtrl>("WLCloudScrollY")->setCommitCallback(boost::bind(&LLFloaterWindLight::onCloudScrollYMoved, this, _1));
- getChild<LLUICtrl>("WLDistanceMult")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mDistanceMult));
- getChild<LLUICtrl>("DrawClassicClouds")->setCommitCallback(boost::bind(LLSavedSettingsGlue::setBOOL, _1, "SkyUseClassicClouds"));
-
- // WL Top
- getChild<LLUICtrl>("WLDayCycleMenuButton")->setCommitCallback(boost::bind(&LLFloaterWindLight::onOpenDayCycle, this));
- // Load/save
- LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
-
- //childSetAction("WLLoadPreset", onLoadPreset, comboBox);
- getChild<LLUICtrl>("WLNewPreset")->setCommitCallback(boost::bind(&LLFloaterWindLight::onNewPreset, this));
- getChild<LLUICtrl>("WLSavePreset")->setCommitCallback(boost::bind(&LLFloaterWindLight::onSavePreset, this));
- getChild<LLUICtrl>("WLDeletePreset")->setCommitCallback(boost::bind(&LLFloaterWindLight::onDeletePreset, this));
-
- comboBox->setCommitCallback(boost::bind(&LLFloaterWindLight::onChangePresetName, this, _1));
-
-
- // Dome
- getChild<LLUICtrl>("WLGamma")->setCommitCallback(boost::bind(&LLFloaterWindLight::onFloatControlMoved, this, _1, &param_mgr->mWLGamma));
- getChild<LLUICtrl>("WLStarAlpha")->setCommitCallback(boost::bind(&LLFloaterWindLight::onStarAlphaMoved, this, _1));
-}
-
-bool LLFloaterWindLight::newPromptCallback(const LLSD& notification, const LLSD& response)
-{
- std::string text = response["message"].asString();
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- if(text == "")
- {
- return false;
- }
-
- if(option == 0) {
- LLComboBox* comboBox = getChild<LLComboBox>("WLPresetsCombo");
-
- LLFloaterDayCycle* day_cycle = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- LLComboBox* keyCombo = NULL;
- if(day_cycle)
- {
- keyCombo = day_cycle->getChild<LLComboBox>("WLKeyPresets");
- }
-
- // add the current parameters to the list
- // see if it's there first
- std::map<std::string, LLWLParamSet>::iterator mIt =
- LLWLParamManager::instance()->mParamList.find(text);
-
- // if not there, add a new one
- if(mIt == LLWLParamManager::instance()->mParamList.end())
- {
- LLWLParamManager::instance()->addParamSet(text,
- LLWLParamManager::instance()->mCurParams);
- comboBox->add(text);
- comboBox->sortByName();
-
- // add a blank to the bottom
- comboBox->selectFirstItem();
- if(comboBox->getSimple() == "")
- {
- comboBox->remove(0);
- }
- comboBox->add(LLStringUtil::null);
-
- comboBox->setSelectedByValue(text, true);
- if(keyCombo)
- {
- keyCombo->add(text);
- keyCombo->sortByName();
- }
- LLWLParamManager::instance()->savePreset(text);
-
- // otherwise, send a message to the user
- }
- else
- {
- LLNotificationsUtil::add("ExistsSkyPresetAlert");
- }
- }
- return false;
-}
-
-void LLFloaterWindLight::syncMenu()
-{
- bool err;
-
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- LLWLParamSet& currentParams = param_mgr->mCurParams;
- //std::map<std::string, LLVector4> & currentParams = param_mgr->mCurParams.mParamValues;
-
- // blue horizon
- param_mgr->mBlueHorizon = currentParams.getVector(param_mgr->mBlueHorizon.mName, err);
- getChild<LLUICtrl>("WLBlueHorizonR")->setValue(param_mgr->mBlueHorizon.r / 2.0);
- getChild<LLUICtrl>("WLBlueHorizonG")->setValue(param_mgr->mBlueHorizon.g / 2.0);
- getChild<LLUICtrl>("WLBlueHorizonB")->setValue(param_mgr->mBlueHorizon.b / 2.0);
- getChild<LLUICtrl>("WLBlueHorizonI")->setValue(
- std::max(param_mgr->mBlueHorizon.r / 2.0,
- std::max(param_mgr->mBlueHorizon.g / 2.0,
- param_mgr->mBlueHorizon.b / 2.0)));
-
- // haze density, horizon, mult, and altitude
- param_mgr->mHazeDensity = currentParams.getVector(param_mgr->mHazeDensity.mName, err);
- getChild<LLUICtrl>("WLHazeDensity")->setValue(param_mgr->mHazeDensity.r);
- param_mgr->mHazeHorizon = currentParams.getVector(param_mgr->mHazeHorizon.mName, err);
- getChild<LLUICtrl>("WLHazeHorizon")->setValue(param_mgr->mHazeHorizon.r);
- param_mgr->mDensityMult = currentParams.getVector(param_mgr->mDensityMult.mName, err);
- getChild<LLUICtrl>("WLDensityMult")->setValue(param_mgr->mDensityMult.x *
- param_mgr->mDensityMult.mult);
- param_mgr->mMaxAlt = currentParams.getVector(param_mgr->mMaxAlt.mName, err);
- getChild<LLUICtrl>("WLMaxAltitude")->setValue(param_mgr->mMaxAlt.x);
-
- // blue density
- param_mgr->mBlueDensity = currentParams.getVector(param_mgr->mBlueDensity.mName, err);
- getChild<LLUICtrl>("WLBlueDensityR")->setValue(param_mgr->mBlueDensity.r / 2.0);
- getChild<LLUICtrl>("WLBlueDensityG")->setValue(param_mgr->mBlueDensity.g / 2.0);
- getChild<LLUICtrl>("WLBlueDensityB")->setValue(param_mgr->mBlueDensity.b / 2.0);
- getChild<LLUICtrl>("WLBlueDensityI")->setValue(
- std::max(param_mgr->mBlueDensity.r / 2.0,
- std::max(param_mgr->mBlueDensity.g / 2.0, param_mgr->mBlueDensity.b / 2.0)));
-
- // Lighting
-
- // sunlight
- param_mgr->mSunlight = currentParams.getVector(param_mgr->mSunlight.mName, err);
- getChild<LLUICtrl>("WLSunlightR")->setValue(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLSunlightG")->setValue(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLSunlightB")->setValue(param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLSunlightI")->setValue(
- std::max(param_mgr->mSunlight.r / WL_SUN_AMBIENT_SLIDER_SCALE,
- std::max(param_mgr->mSunlight.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mSunlight.b / WL_SUN_AMBIENT_SLIDER_SCALE)));
-
- // glow
- param_mgr->mGlow = currentParams.getVector(param_mgr->mGlow.mName, err);
- getChild<LLUICtrl>("WLGlowR")->setValue(2 - param_mgr->mGlow.r / 20.0f);
- getChild<LLUICtrl>("WLGlowB")->setValue(-param_mgr->mGlow.b / 5.0f);
-
- // ambient
- param_mgr->mAmbient = currentParams.getVector(param_mgr->mAmbient.mName, err);
- getChild<LLUICtrl>("WLAmbientR")->setValue(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLAmbientG")->setValue(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLAmbientB")->setValue(param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE);
- getChild<LLUICtrl>("WLAmbientI")->setValue(
- std::max(param_mgr->mAmbient.r / WL_SUN_AMBIENT_SLIDER_SCALE,
- std::max(param_mgr->mAmbient.g / WL_SUN_AMBIENT_SLIDER_SCALE, param_mgr->mAmbient.b / WL_SUN_AMBIENT_SLIDER_SCALE)));
-
- getChild<LLUICtrl>("WLSunAngle")->setValue(param_mgr->mCurParams.getFloat("sun_angle",err) / F_TWO_PI);
- getChild<LLUICtrl>("WLEastAngle")->setValue(param_mgr->mCurParams.getFloat("east_angle",err) / F_TWO_PI);
-
- // Clouds
-
- // Cloud Color
- param_mgr->mCloudColor = currentParams.getVector(param_mgr->mCloudColor.mName, err);
- getChild<LLUICtrl>("WLCloudColorR")->setValue(param_mgr->mCloudColor.r);
- getChild<LLUICtrl>("WLCloudColorG")->setValue(param_mgr->mCloudColor.g);
- getChild<LLUICtrl>("WLCloudColorB")->setValue(param_mgr->mCloudColor.b);
- getChild<LLUICtrl>("WLCloudColorI")->setValue(
- std::max(param_mgr->mCloudColor.r,
- std::max(param_mgr->mCloudColor.g, param_mgr->mCloudColor.b)));
-
- // Cloud
- param_mgr->mCloudMain = currentParams.getVector(param_mgr->mCloudMain.mName, err);
- getChild<LLUICtrl>("WLCloudX")->setValue(param_mgr->mCloudMain.r);
- getChild<LLUICtrl>("WLCloudY")->setValue(param_mgr->mCloudMain.g);
- getChild<LLUICtrl>("WLCloudDensity")->setValue(param_mgr->mCloudMain.b);
-
- // Cloud Detail
- param_mgr->mCloudDetail = currentParams.getVector(param_mgr->mCloudDetail.mName, err);
- getChild<LLUICtrl>("WLCloudDetailX")->setValue(param_mgr->mCloudDetail.r);
- getChild<LLUICtrl>("WLCloudDetailY")->setValue(param_mgr->mCloudDetail.g);
- getChild<LLUICtrl>("WLCloudDetailDensity")->setValue(param_mgr->mCloudDetail.b);
-
- // Cloud extras
- param_mgr->mCloudCoverage = currentParams.getVector(param_mgr->mCloudCoverage.mName, err);
- param_mgr->mCloudScale = currentParams.getVector(param_mgr->mCloudScale.mName, err);
- getChild<LLUICtrl>("WLCloudCoverage")->setValue(param_mgr->mCloudCoverage.x);
- getChild<LLUICtrl>("WLCloudScale")->setValue(param_mgr->mCloudScale.x);
-
- // cloud scrolling
- bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX();
- bool lockY = !param_mgr->mCurParams.getEnableCloudScrollY();
- getChild<LLUICtrl>("WLCloudLockX")->setValue(lockX);
- getChild<LLUICtrl>("WLCloudLockY")->setValue(lockY);
- getChild<LLUICtrl>("DrawClassicClouds")->setValue(gSavedSettings.getBOOL("SkyUseClassicClouds"));
-
- // disable if locked, enable if not
- if(lockX)
- {
- getChildView("WLCloudScrollX")->setEnabled(FALSE);
- } else {
- getChildView("WLCloudScrollX")->setEnabled(TRUE);
- }
- if(lockY)
- {
- getChildView("WLCloudScrollY")->setEnabled(FALSE);
- } else {
- getChildView("WLCloudScrollY")->setEnabled(TRUE);
- }
-
- // *HACK cloud scrolling is off my an additive of 10
- getChild<LLUICtrl>("WLCloudScrollX")->setValue(param_mgr->mCurParams.getCloudScrollX() - 10.0f);
- getChild<LLUICtrl>("WLCloudScrollY")->setValue(param_mgr->mCurParams.getCloudScrollY() - 10.0f);
-
- param_mgr->mDistanceMult = currentParams.getVector(param_mgr->mDistanceMult.mName, err);
- getChild<LLUICtrl>("WLDistanceMult")->setValue(param_mgr->mDistanceMult.x);
-
- // Tweak extras
-
- param_mgr->mWLGamma = currentParams.getVector(param_mgr->mWLGamma.mName, err);
- getChild<LLUICtrl>("WLGamma")->setValue(param_mgr->mWLGamma.x);
-
- getChild<LLUICtrl>("WLStarAlpha")->setValue(param_mgr->mCurParams.getStarBrightness());
-
- LLTabContainer* tab = getChild<LLTabContainer>("WindLight Tabs");
- LLPanel* panel = getChild<LLPanel>("Scattering");
-
- tab->enableTabButton(tab->getIndexForPanel(panel), gSavedSettings.getBOOL("RenderDeferredGI"));
-}
-
-
-// color control callbacks
-void LLFloaterWindLight::onColorControlRMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->r = sldrCtrl->getValueF32();
- if(colorControl->isSunOrAmbientColor) {
- colorControl->r *= 3;
- }
- if(colorControl->isBlueHorizonOrDensity) {
- colorControl->r *= 2;
- }
-
- // move i if it's the max
- if(colorControl->r >= colorControl->g && colorControl->r >= colorControl->b
- && colorControl->hasSliderName) {
- colorControl->i = colorControl->r;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- if(colorControl->isSunOrAmbientColor) {
- getChild<LLUICtrl>(name)->setValue(colorControl->r / 3);
- } else if(colorControl->isBlueHorizonOrDensity) {
- getChild<LLUICtrl>(name)->setValue(colorControl->r / 2);
- } else {
- getChild<LLUICtrl>(name)->setValue(colorControl->r);
- }
- }
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
-
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onColorControlGMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->g = sldrCtrl->getValueF32();
- if(colorControl->isSunOrAmbientColor) {
- colorControl->g *= 3;
- }
- if(colorControl->isBlueHorizonOrDensity) {
- colorControl->g *= 2;
- }
-
- // move i if it's the max
- if(colorControl->g >= colorControl->r && colorControl->g >= colorControl->b
- && colorControl->hasSliderName) {
- colorControl->i = colorControl->g;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- if(colorControl->isSunOrAmbientColor) {
- getChild<LLUICtrl>(name)->setValue(colorControl->g / 3);
- } else if(colorControl->isBlueHorizonOrDensity) {
- getChild<LLUICtrl>(name)->setValue(colorControl->g / 2);
- } else {
- getChild<LLUICtrl>(name)->setValue(colorControl->g);
- }
- }
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
-
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onColorControlBMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->b = sldrCtrl->getValueF32();
- if(colorControl->isSunOrAmbientColor) {
- colorControl->b *= 3;
- }
- if(colorControl->isBlueHorizonOrDensity) {
- colorControl->b *= 2;
- }
-
- // move i if it's the max
- if(colorControl->b >= colorControl->r && colorControl->b >= colorControl->g
- && colorControl->hasSliderName) {
- colorControl->i = colorControl->b;
- std::string name = colorControl->mSliderName;
- name.append("I");
-
- if(colorControl->isSunOrAmbientColor) {
- getChild<LLUICtrl>(name)->setValue(colorControl->b / 3);
- } else if(colorControl->isBlueHorizonOrDensity) {
- getChild<LLUICtrl>(name)->setValue(colorControl->b / 2);
- } else {
- getChild<LLUICtrl>(name)->setValue(colorControl->b);
- }
- }
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
-
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onColorControlIMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- colorControl->i = sldrCtrl->getValueF32();
-
- // only for sliders where we pass a name
- if(colorControl->hasSliderName) {
-
- // set it to the top
- F32 maxVal = std::max(std::max(colorControl->r, colorControl->g), colorControl->b);
- F32 iVal;
-
- if(colorControl->isSunOrAmbientColor)
- {
- iVal = colorControl->i * 3;
- }
- else if(colorControl->isBlueHorizonOrDensity)
- {
- iVal = colorControl->i * 2;
- }
- else
- {
- iVal = colorControl->i;
- }
-
- // get the names of the other sliders
- std::string rName = colorControl->mSliderName;
- rName.append("R");
- std::string gName = colorControl->mSliderName;
- gName.append("G");
- std::string bName = colorControl->mSliderName;
- bName.append("B");
-
- // handle if at 0
- if(iVal == 0) {
- colorControl->r = 0;
- colorControl->g = 0;
- colorControl->b = 0;
-
- // if all at the start
- // set them all to the intensity
- } else if (maxVal == 0) {
- colorControl->r = iVal;
- colorControl->g = iVal;
- colorControl->b = iVal;
-
- } else {
-
- // add delta amounts to each
- F32 delta = (iVal - maxVal) / maxVal;
- colorControl->r *= (1.0f + delta);
- colorControl->g *= (1.0f + delta);
- colorControl->b *= (1.0f + delta);
- }
-
- // divide sun color vals by three
- if(colorControl->isSunOrAmbientColor)
- {
- getChild<LLUICtrl>(rName)->setValue(colorControl->r/3);
- getChild<LLUICtrl>(gName)->setValue(colorControl->g/3);
- getChild<LLUICtrl>(bName)->setValue(colorControl->b/3);
-
- }
- else if(colorControl->isBlueHorizonOrDensity)
- {
- getChild<LLUICtrl>(rName)->setValue(colorControl->r/2);
- getChild<LLUICtrl>(gName)->setValue(colorControl->g/2);
- getChild<LLUICtrl>(bName)->setValue(colorControl->b/2);
-
- }
- else
- {
- // set the sliders to the new vals
- getChild<LLUICtrl>(rName)->setValue(colorControl->r);
- getChild<LLUICtrl>(gName)->setValue(colorControl->g);
- getChild<LLUICtrl>(bName)->setValue(colorControl->b);
- }
- }
-
- // now update the current parameters and send them to shaders
- colorControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-/// GLOW SPECIFIC CODE
-void LLFloaterWindLight::onGlowRMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- // scaled by 20
- colorControl->r = (2 - sldrCtrl->getValueF32()) * 20;
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-/// \NOTE that we want NEGATIVE (-) B
-void LLFloaterWindLight::onGlowBMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- /// \NOTE that we want NEGATIVE (-) B and NOT by 20 as 20 is too big
- colorControl->b = -sldrCtrl->getValueF32() * 5;
-
- colorControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-void LLFloaterWindLight::onFloatControlMoved(LLUICtrl* ctrl, WLFloatControl* floatControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- floatControl->x = sldrCtrl->getValueF32() / floatControl->mult;
-
- floatControl->update(LLWLParamManager::instance()->mCurParams);
- LLWLParamManager::instance()->propagateParameters();
-}
-
-// Lighting callbacks
-
-// time of day
-void LLFloaterWindLight::onSunMoved(LLUICtrl* ctrl, WLColorControl* colorControl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sunSldr = getChild<LLSliderCtrl>("WLSunAngle");
- LLSliderCtrl* eastSldr = getChild<LLSliderCtrl>("WLEastAngle");
-
- // get the two angles
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- param_mgr->mCurParams.setSunAngle(F_TWO_PI * sunSldr->getValueF32());
- param_mgr->mCurParams.setEastAngle(F_TWO_PI * eastSldr->getValueF32());
-
- // set the sun vector
- colorControl->r = -sin(param_mgr->mCurParams.getEastAngle()) *
- cos(param_mgr->mCurParams.getSunAngle());
- colorControl->g = sin(param_mgr->mCurParams.getSunAngle());
- colorControl->b = cos(param_mgr->mCurParams.getEastAngle()) *
- cos(param_mgr->mCurParams.getSunAngle());
- colorControl->i = 1.f;
-
- colorControl->update(param_mgr->mCurParams);
- param_mgr->propagateParameters();
-}
-
-void LLFloaterWindLight::onStarAlphaMoved(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- LLWLParamManager::instance()->mCurParams.setStarBrightness(sldrCtrl->getValueF32());
-}
-
-void LLFloaterWindLight::onNewPreset()
-{
- LLNotificationsUtil::add("NewSkyPreset", LLSD(), LLSD(), boost::bind(&LLFloaterWindLight::newPromptCallback, this, _1, _2));
-}
-
-void LLFloaterWindLight::onSavePreset()
-{
- // get the name
- LLComboBox* comboBox = getChild<LLComboBox>(
- "WLPresetsCombo");
-
- // don't save the empty name
- if(comboBox->getSelectedItemLabel() == "")
- {
- return;
- }
-
- // check to see if it's a default and shouldn't be overwritten
- std::set<std::string>::iterator sIt = sDefaultPresets.find(
- comboBox->getSelectedItemLabel());
- if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("SkyEditPresets"))
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return;
- }
-
- LLWLParamManager::instance()->mCurParams.mName =
- comboBox->getSelectedItemLabel();
-
- LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterWindLight::saveAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWindLight::saveAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- // if they choose save, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLWLParamManager * param_mgr = LLWLParamManager::instance();
-
- param_mgr->setParamSet(param_mgr->mCurParams.mName, param_mgr->mCurParams);
-
- // comment this back in to save to file
- param_mgr->savePreset(param_mgr->mCurParams.mName);
- }
- return false;
-}
-
-void LLFloaterWindLight::onDeletePreset()
-{
- LLComboBox* combo_box = getChild<LLComboBox>(
- "WLPresetsCombo");
-
- if(combo_box->getSelectedValue().asString() == "")
- {
- return;
- }
-
- LLSD args;
- args["SKY"] = combo_box->getSelectedValue().asString();
- LLNotificationsUtil::add("WLDeletePresetAlert", args, LLSD(),
- boost::bind(&LLFloaterWindLight::deleteAlertCallback, this, _1, _2));
-}
-
-bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- // if they choose delete, do it. Otherwise, don't do anything
- if(option == 0)
- {
- LLComboBox* combo_box = getChild<LLComboBox>("WLPresetsCombo");
- LLFloaterDayCycle* day_cycle = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- LLComboBox* key_combo = NULL;
-
- if (day_cycle)
- {
- key_combo = day_cycle->getChild<LLComboBox>("WLKeyPresets");
- }
-
- std::string name(combo_box->getSelectedValue().asString());
-
- // check to see if it's a default and shouldn't be deleted
- std::set<std::string>::iterator sIt = sDefaultPresets.find(name);
- if(sIt != sDefaultPresets.end())
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return false;
- }
-
- LLWLParamManager::instance()->removeParamSet(name, true);
-
- // remove and choose another
- S32 new_index = combo_box->getCurrentIndex();
-
- combo_box->remove(name);
- if(key_combo != NULL)
- {
- key_combo->remove(name);
-
- // remove from slider, as well
- day_cycle->deletePreset(name);
- }
-
- // pick the previously selected index after delete
- if(new_index > 0)
- {
- new_index--;
- }
-
- if(combo_box->getItemCount() > 0)
- {
- combo_box->setCurrentByIndex(new_index);
- }
- }
- return false;
-}
-
-
-void LLFloaterWindLight::onChangePresetName(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- std::string data = ctrl->getValue().asString();
- if(!data.empty())
- {
- LLWLParamManager::instance()->loadPreset( data);
- syncMenu();
- }
-}
-
-void LLFloaterWindLight::onOpenDayCycle()
-{
- LLFloaterReg::showInstance("env_day_cycle");
-}
-
-// Clouds
-void LLFloaterWindLight::onCloudScrollXMoved(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
- // *HACK all cloud scrolling is off by an additive of 10.
- LLWLParamManager::instance()->mCurParams.setCloudScrollX(sldrCtrl->getValueF32() + 10.0f);
-}
-
-void LLFloaterWindLight::onCloudScrollYMoved(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
-
- // *HACK all cloud scrolling is off by an additive of 10.
- LLWLParamManager::instance()->mCurParams.setCloudScrollY(sldrCtrl->getValueF32() + 10.0f);
-}
-
-void LLFloaterWindLight::onCloudScrollXToggled(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLCheckBoxCtrl* cbCtrl = static_cast<LLCheckBoxCtrl*>(ctrl);
-
- bool lock = cbCtrl->get();
- LLWLParamManager::instance()->mCurParams.setEnableCloudScrollX(!lock);
-
- LLSliderCtrl* sldr = getChild<LLSliderCtrl>(
- "WLCloudScrollX");
-
- if(cbCtrl->get())
- {
- sldr->setEnabled(false);
- }
- else
- {
- sldr->setEnabled(true);
- }
-
-}
-
-void LLFloaterWindLight::onCloudScrollYToggled(LLUICtrl* ctrl)
-{
- deactivateAnimator();
-
- LLCheckBoxCtrl* cbCtrl = static_cast<LLCheckBoxCtrl*>(ctrl);
- bool lock = cbCtrl->get();
- LLWLParamManager::instance()->mCurParams.setEnableCloudScrollY(!lock);
-
- LLSliderCtrl* sldr = getChild<LLSliderCtrl>(
- "WLCloudScrollY");
-
- if(cbCtrl->get())
- {
- sldr->setEnabled(false);
- }
- else
- {
- sldr->setEnabled(true);
- }
-}
-
-void LLFloaterWindLight::deactivateAnimator()
-{
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-}
diff --git a/indra/newview/llfloaterwindlight.h b/indra/newview/llfloaterwindlight.h
deleted file mode 100644
index b43edc2c11..0000000000
--- a/indra/newview/llfloaterwindlight.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/**
- * @file llfloaterwindlight.h
- * @brief LLFloaterWindLight class definition
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-/*
- * Menu for adjusting the atmospheric settings of the world
- */
-
-#ifndef LL_LLFLOATERWINDLIGHT_H
-#define LL_LLFLOATERWINDLIGHT_H
-
-#include "llfloater.h"
-
-#include <vector>
-#include "llwlparamset.h"
-
-struct WLColorControl;
-struct WLFloatControl;
-
-
-/// Menuing system for all of windlight's functionality
-class LLFloaterWindLight : public LLFloater
-{
-public:
-
- LLFloaterWindLight(const LLSD& key);
- virtual ~LLFloaterWindLight();
- /*virtual*/ BOOL postBuild();
- /// initialize all
- void initCallbacks(void);
-
- bool newPromptCallback(const LLSD& notification, const LLSD& response);
-
- /// general purpose callbacks for dealing with color controllers
- void onColorControlRMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onColorControlGMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onColorControlBMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onColorControlIMoved(LLUICtrl* ctrl, WLColorControl* userData);
- void onFloatControlMoved(LLUICtrl* ctrl, WLFloatControl* userData);
-
- /// lighting callbacks for glow
- void onGlowRMoved(LLUICtrl* ctrl, WLColorControl* userData);
- //static void onGlowGMoved(LLUICtrl* ctrl, void* userData);
- void onGlowBMoved(LLUICtrl* ctrl, WLColorControl* userData);
-
- /// lighting callbacks for sun
- void onSunMoved(LLUICtrl* ctrl, WLColorControl* userData);
-
- /// for handling when the star slider is moved to adjust the alpha
- void onStarAlphaMoved(LLUICtrl* ctrl);
-
- /// when user hits the load preset button
- void onNewPreset();
-
- /// when user hits the save preset button
- void onSavePreset();
-
- /// prompts a user when overwriting a preset
- bool saveAlertCallback(const LLSD& notification, const LLSD& response);
-
- /// when user hits the save preset button
- void onDeletePreset();
-
- /// prompts a user when overwriting a preset
- bool deleteAlertCallback(const LLSD& notification, const LLSD& response);
-
- /// what to do when you change the preset name
- void onChangePresetName(LLUICtrl* ctrl);
-
- /// when user hits the save preset button
- void onOpenDayCycle();
-
- /// handle cloud scrolling
- void onCloudScrollXMoved(LLUICtrl* ctrl);
- void onCloudScrollYMoved(LLUICtrl* ctrl);
- void onCloudScrollXToggled(LLUICtrl* ctrl);
- void onCloudScrollYToggled(LLUICtrl* ctrl);
-
- /// sync up sliders with parameters
- void syncMenu();
-
- /// turn off animated skies
- static void deactivateAnimator();
-
-private:
- static std::set<std::string> sDefaultPresets;
-};
-
-
-#endif
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index f8a4ce7ad0..137b5446cf 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -70,7 +70,7 @@
#include "llappviewer.h"
#include "llmapimagetype.h"
#include "llweb.h"
-#include "llslider.h"
+#include "llsliderctrl.h"
#include "message.h"
#include "llwindow.h" // copyTextToClipboard()
#include <algorithm>
@@ -237,16 +237,19 @@ const LLUUID LLFloaterWorldMap::sHomeID( "10000000-0000-0000-0000-000000000001"
LLFloaterWorldMap::LLFloaterWorldMap(const LLSD& key)
: LLFloater(key),
-mInventory(NULL),
-mInventoryObserver(NULL),
-mFriendObserver(NULL),
-mCompletingRegionName(),
-mCompletingRegionPos(),
-mWaitingForTracker(FALSE),
-mIsClosing(FALSE),
-mSetToUserPosition(TRUE),
-mTrackedLocation(0,0,0),
-mTrackedStatus(LLTracker::TRACKING_NOTHING)
+ mInventory(NULL),
+ mInventoryObserver(NULL),
+ mFriendObserver(NULL),
+ mCompletingRegionName(),
+ mCompletingRegionPos(),
+ mWaitingForTracker(FALSE),
+ mIsClosing(FALSE),
+ mSetToUserPosition(TRUE),
+ mTrackedLocation(0,0,0),
+ mTrackedStatus(LLTracker::TRACKING_NOTHING),
+ mListFriendCombo(NULL),
+ mListLandmarkCombo(NULL),
+ mListSearchResults(NULL)
{
gFloaterWorldMap = this;
@@ -281,17 +284,20 @@ BOOL LLFloaterWorldMap::postBuild()
avatar_combo->selectFirstItem();
avatar_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onAvatarComboPrearrange, this) );
avatar_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
+ mListFriendCombo = dynamic_cast<LLCtrlListInterface *>(avatar_combo);
LLSearchEditor *location_editor = getChild<LLSearchEditor>("location");
location_editor->setFocusChangedCallback(boost::bind(&LLFloaterWorldMap::onLocationFocusChanged, this, _1));
location_editor->setKeystrokeCallback( boost::bind(&LLFloaterWorldMap::onSearchTextEntry, this));
getChild<LLScrollListCtrl>("search_results")->setDoubleClickCallback( boost::bind(&LLFloaterWorldMap::onClickTeleportBtn, this));
+ mListSearchResults = childGetListInterface("search_results");
LLComboBox *landmark_combo = getChild<LLComboBox>( "landmark combo");
landmark_combo->selectFirstItem();
landmark_combo->setPrearrangeCallback( boost::bind(&LLFloaterWorldMap::onLandmarkComboPrearrange, this) );
landmark_combo->setTextEntryCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );
+ mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo);
mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f);
getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale);
@@ -864,7 +870,7 @@ void LLFloaterWorldMap::friendsChanged()
// No longer really builds a list. Instead, just updates mAvatarCombo.
void LLFloaterWorldMap::buildAvatarIDList()
{
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (!list) return;
// Delete all but the "None" entry
@@ -894,7 +900,7 @@ void LLFloaterWorldMap::buildAvatarIDList()
void LLFloaterWorldMap::buildLandmarkIDLists()
{
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (!list) return;
// Delete all but the "None" entry
@@ -955,7 +961,7 @@ F32 LLFloaterWorldMap::getDistanceToDestination(const LLVector3d &destination,
void LLFloaterWorldMap::clearLocationSelection(BOOL clear_ui)
{
- LLCtrlListInterface *list = childGetListInterface("search_results");
+ LLCtrlListInterface *list = mListSearchResults;
if (list)
{
list->operateOnAll(LLCtrlListInterface::OP_DELETE);
@@ -969,7 +975,7 @@ void LLFloaterWorldMap::clearLandmarkSelection(BOOL clear_ui)
{
if (clear_ui || !childHasKeyboardFocus("landmark combo"))
{
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (list)
{
list->selectByValue( "None" );
@@ -983,7 +989,7 @@ void LLFloaterWorldMap::clearAvatarSelection(BOOL clear_ui)
if (clear_ui || !childHasKeyboardFocus("friend combo"))
{
mTrackedStatus = LLTracker::TRACKING_NOTHING;
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (list)
{
list->selectByValue( "None" );
@@ -1029,7 +1035,7 @@ void LLFloaterWorldMap::adjustZoomSliderBounds()
F32 min_power = log(pixels_per_region/256.f)/log(2.f);
- getChild<LLSlider>("zoom slider")->setMinValue(min_power);
+ getChild<LLSliderCtrl>("zoom slider")->setMinValue(min_power);
}
@@ -1051,7 +1057,7 @@ void LLFloaterWorldMap::onLandmarkComboPrearrange( )
return;
}
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (!list) return;
LLUUID current_choice = list->getCurrentID();
@@ -1070,7 +1076,7 @@ void LLFloaterWorldMap::onComboTextEntry()
// Reset the tracking whenever we start typing into any of the search fields,
// so that hitting <enter> does an auto-complete versus teleporting us to the
// previously selected landmark/friend.
- LLTracker::clearFocus();
+ LLTracker::stopTracking(NULL);
}
void LLFloaterWorldMap::onSearchTextEntry( )
@@ -1087,7 +1093,7 @@ void LLFloaterWorldMap::onLandmarkComboCommit()
return;
}
- LLCtrlListInterface *list = childGetListInterface("landmark combo");
+ LLCtrlListInterface *list = mListLandmarkCombo;
if (!list) return;
LLUUID asset_id;
@@ -1134,7 +1140,7 @@ void LLFloaterWorldMap::onAvatarComboPrearrange( )
return;
}
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (!list) return;
LLUUID current_choice;
@@ -1159,7 +1165,7 @@ void LLFloaterWorldMap::onAvatarComboCommit()
return;
}
- LLCtrlListInterface *list = childGetListInterface("friend combo");
+ LLCtrlListInterface *list = mListFriendCombo;
if (!list) return;
const LLUUID& new_avatar_id = list->getCurrentID();
@@ -1221,6 +1227,12 @@ void LLFloaterWorldMap::onLocationCommit()
{ // Set the value in the UI if any spaces were removed
getChild<LLUICtrl>("location")->setValue(str);
}
+
+ // Don't try completing empty name (STORM-1427).
+ if (str.empty())
+ {
+ return;
+ }
LLStringUtil::toLower(str);
mCompletingRegionName = str;
@@ -1527,17 +1539,24 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
mCompletingRegionName = "";
}
- // if match found, highlight it and go
- if (!match.isUndefined())
+ if (num_results > 0)
{
- list->selectByValue(match);
+ // if match found, highlight it and go
+ if (!match.isUndefined())
+ {
+ list->selectByValue(match);
+ }
+ // else select first found item
+ else
+ {
+ list->selectFirstItem();
+ }
getChild<LLUICtrl>("search_results")->setFocus(TRUE);
onCommitSearchResult();
}
-
- // if we found nothing, say "none"
- if (num_results == 0)
+ else
{
+ // if we found nothing, say "none"
list->setCommentText(LLTrans::getString("worldmap_results_none_found"));
list->operateOnAll(LLCtrlListInterface::OP_DESELECT);
}
@@ -1546,7 +1565,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim)
void LLFloaterWorldMap::onCommitSearchResult()
{
- LLCtrlListInterface *list = childGetListInterface("search_results");
+ LLCtrlListInterface *list = mListSearchResults;
if (!list) return;
LLSD selected_value = list->getSelectedValue();
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 783d9f4819..e3b83b2579 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -39,6 +39,7 @@
#include "lltracker.h"
#include "llslurl.h"
+class LLCtrlListInterface;
class LLFriendObserver;
class LLInventoryModel;
class LLInventoryObserver;
@@ -190,6 +191,10 @@ private:
std::string mTrackedSimName;
std::string mTrackedAvatarName;
LLSLURL mSLURL;
+
+ LLCtrlListInterface * mListFriendCombo;
+ LLCtrlListInterface * mListLandmarkCombo;
+ LLCtrlListInterface * mListSearchResults;
};
extern LLFloaterWorldMap* gFloaterWorldMap;
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 3884b94b60..e4bd2049fa 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -167,13 +167,24 @@ void LLCloseAllFoldersFunctor::doItem(LLFolderViewItem* item)
///----------------------------------------------------------------------------
/// Class LLFolderView
///----------------------------------------------------------------------------
+LLFolderView::Params::Params()
+: task_id("task_id"),
+ title("title"),
+ use_label_suffix("use_label_suffix"),
+ allow_multiselect("allow_multiselect", true),
+ show_load_status("show_load_status", true),
+ use_ellipses("use_ellipses", false)
+{
+}
+
// Default constructor
LLFolderView::LLFolderView(const Params& p)
: LLFolderViewFolder(p),
+ mRunningHeight(0),
mScrollContainer( NULL ),
mPopupMenuHandle(),
- mAllowMultiSelect(TRUE),
+ mAllowMultiSelect(p.allow_multiselect),
mShowFolderHierarchy(FALSE),
mSourceID(p.task_id),
mRenameItem( NULL ),
@@ -194,10 +205,14 @@ LLFolderView::LLFolderView(const Params& p)
mDragAndDropThisFrame(FALSE),
mCallbackRegistrar(NULL),
mParentPanel(p.parent_panel),
- mUseEllipses(false),
+ mUseEllipses(p.use_ellipses),
mDraggingOverItem(NULL),
mStatusTextBox(NULL)
{
+ mRoot = this;
+
+ mShowLoadStatus = p.show_load_status();
+
LLRect rect = p.rect;
LLRect new_rect(rect.mLeft, rect.mBottom + getRect().getHeight(), rect.mLeft + getRect().getWidth(), rect.mBottom);
setRect( rect );
@@ -263,6 +278,7 @@ LLFolderView::LLFolderView(const Params& p)
menu->setBackgroundColor(LLUIColorTable::instance().getColor("MenuPopupBgColor"));
mPopupMenuHandle = menu->getHandle();
+ mListener->openItem();
}
// Destroys the object
@@ -308,15 +324,10 @@ void LLFolderView::setSortOrder(U32 order)
if (order != mSortOrder)
{
LLFastTimer t(FTM_SORT);
+
mSortOrder = order;
- for (folders_t::iterator iter = mFolders.begin();
- iter != mFolders.end();)
- {
- folders_t::iterator fit = iter++;
- (*fit)->sortBy(order);
- }
-
+ sortBy(order);
arrangeAll();
}
}
@@ -342,7 +353,7 @@ BOOL LLFolderView::addFolder( LLFolderViewFolder* folder)
{
recursiveIncrementNumDescendantsSelected(folder->numSelected());
}
- folder->setShowLoadStatus(true);
+ folder->setShowLoadStatus(mShowLoadStatus);
folder->setOrigin(0, 0);
folder->reshape(getRect().getWidth(), 0);
folder->setVisible(FALSE);
@@ -359,16 +370,6 @@ void LLFolderView::closeAllFolders()
arrangeAll();
}
-void LLFolderView::openFolder(const std::string& foldername)
-{
- LLFolderViewFolder* inv = findChild<LLFolderViewFolder>(foldername);
- if (inv)
- {
- setSelection(inv, FALSE, FALSE);
- inv->setOpen(TRUE);
- }
-}
-
void LLFolderView::openTopLevelFolders()
{
for (folders_t::iterator iter = mFolders.begin();
@@ -392,6 +393,16 @@ static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange");
// This view grows and shinks to enclose all of its children items and folders.
S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_generation )
{
+ if (getListener()->getUUID().notNull())
+ {
+ if (mNeedsSort)
+ {
+ mFolders.sort(mSortFunction);
+ mItems.sort(mSortFunction);
+ mNeedsSort = false;
+ }
+ }
+
LLFastTimer t2(FTM_ARRANGE);
filter_generation = mFilter->getMinRequiredGeneration();
@@ -424,11 +435,7 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
(folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
}
- // Need to call arrange regardless of visibility, since children's visibility
- // might need to be changed too (e.g. even though a folder is invisible, its
- // children also need to be set invisible for state-tracking purposes, e.g.
- // llfolderviewitem::filter).
- // if (folderp->getVisible())
+ if (folderp->getVisible())
{
S32 child_height = 0;
S32 child_width = 0;
@@ -473,6 +480,7 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen
target_height = running_height;
}
+ mRunningHeight = running_height;
LLRect scroll_rect = mScrollContainer->getContentWindowRect();
reshape( llmax(scroll_rect.getWidth(), total_width), running_height );
@@ -518,9 +526,11 @@ void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)
LLRect scroll_rect;
if (mScrollContainer)
{
+ LLView::reshape(width, height, called_from_parent);
scroll_rect = mScrollContainer->getContentWindowRect();
}
width = llmax(mMinWidth, scroll_rect.getWidth());
+ height = llmax(mRunningHeight, scroll_rect.getHeight());
// restrict width with scroll container's width
if (mUseEllipses)
@@ -704,8 +714,10 @@ void LLFolderView::extendSelection(LLFolderViewItem* selection, LLFolderViewItem
mSignalSelectCallback = SIGNAL_KEYBOARD_FOCUS;
}
+static LLFastTimer::DeclareTimer FTM_SANITIZE_SELECTION("Sanitize Selection");
void LLFolderView::sanitizeSelection()
{
+ LLFastTimer _(FTM_SANITIZE_SELECTION);
// store off current item in case it is automatically deselected
// and we want to preserve context
LLFolderViewItem* original_selected_item = getCurSelectedItem();
@@ -764,7 +776,7 @@ void LLFolderView::sanitizeSelection()
}
// Don't allow invisible items (such as root folders) to be selected.
- if (item->getHidden())
+ if (item == getRoot())
{
items_to_remove.push_back(item);
}
@@ -787,7 +799,7 @@ void LLFolderView::sanitizeSelection()
parent_folder;
parent_folder = parent_folder->getParentFolder())
{
- if (parent_folder->potentiallyVisible() && !parent_folder->getHidden())
+ if (parent_folder->potentiallyVisible())
{
// give initial selection to first ancestor folder that potentially passes the filter
if (!new_selection)
@@ -806,13 +818,7 @@ void LLFolderView::sanitizeSelection()
}
else
{
- // nothing selected to start with, so pick "My Inventory" as best guess
- new_selection = getItemByID(gInventory.getRootFolderID());
- // ... except if it's hidden from the UI.
- if (new_selection && new_selection->getHidden())
- {
- new_selection = NULL;
- }
+ new_selection = NULL;
}
if (new_selection)
@@ -931,14 +937,15 @@ void LLFolderView::draw()
if (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() || mCompletedFilterGeneration < mFilter->getMinRequiredGeneration())
{
mStatusText = LLTrans::getString("Searching");
- //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
}
else
{
- LLStringUtil::format_map_t args;
- args["[SEARCH_TERM]"] = LLURI::escape(getFilter()->getFilterSubStringOrig());
- mStatusText = LLTrans::getString(getFilter()->getEmptyLookupMessage(), args);
- //font->renderUTF8(mStatusText, 0, 2, 1, sSearchStatusColor, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE );
+ if (getFilter())
+ {
+ LLStringUtil::format_map_t args;
+ args["[SEARCH_TERM]"] = LLURI::escape(getFilter()->getFilterSubStringOrig());
+ mStatusText = LLTrans::getString(getFilter()->getEmptyLookupMessage(), args);
+ }
}
mStatusTextBox->setValue(mStatusText);
mStatusTextBox->setVisible( TRUE );
@@ -962,7 +969,9 @@ void LLFolderView::draw()
}
- LLFolderViewFolder::draw();
+ // skip over LLFolderViewFolder::draw since we don't want the folder icon, label,
+ // and arrow for the root folder
+ LLView::draw();
mDragAndDropThisFrame = FALSE;
}
@@ -1642,11 +1651,7 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
LLFolderViewItem* parent_folder = last_selected->getParentFolder();
if (!last_selected->isOpen() && parent_folder && parent_folder->getParentFolder())
{
- // Don't change selectin to hidden folder. See EXT-5328.
- if (!parent_folder->getHidden())
- {
- setSelection(parent_folder, FALSE, TRUE);
- }
+ setSelection(parent_folder, FALSE, TRUE);
}
else
{
@@ -1904,14 +1909,26 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
std::string& tooltip_msg)
{
mDragAndDropThisFrame = TRUE;
+ // have children handle it first
BOOL handled = LLView::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data,
accept, tooltip_msg);
- // When there are no visible children drag and drop is handled
+ // when drop is not handled by child, it should be handled
// by the folder which is the hierarchy root.
- if (!handled && !hasVisibleChildren())
+ if (!handled)
{
- handled = mFolders.front()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg);
+ if (getListener()->getUUID().notNull())
+ {
+ LLFolderViewFolder::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
+ }
+ else
+ {
+ if (!mFolders.empty())
+ {
+ // dispatch to last folder as a hack to support "Contents" folder in object inventory
+ handled = mFolders.back()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg);
+ }
+ }
}
if (handled)
@@ -1927,8 +1944,11 @@ void LLFolderView::deleteAllChildren()
closeRenamer();
LLView::deleteViewByHandle(mPopupMenuHandle);
mPopupMenuHandle = LLHandle<LLView>();
- mRenamer = NULL;
+ mScrollContainer = NULL;
mRenameItem = NULL;
+ mRenamer = NULL;
+ mStatusTextBox = NULL;
+
clearSelection();
LLView::deleteAllChildren();
}
@@ -2029,9 +2049,11 @@ void LLFolderView::removeItemID(const LLUUID& id)
mItemMap.erase(id);
}
+LLFastTimer::DeclareTimer FTM_GET_ITEM_BY_ID("Get FolderViewItem by ID");
LLFolderViewItem* LLFolderView::getItemByID(const LLUUID& id)
{
- if (id.isNull())
+ LLFastTimer _(FTM_GET_ITEM_BY_ID);
+ if (id == getListener()->getUUID())
{
return this;
}
@@ -2048,7 +2070,7 @@ LLFolderViewItem* LLFolderView::getItemByID(const LLUUID& id)
LLFolderViewFolder* LLFolderView::getFolderByID(const LLUUID& id)
{
- if (id.isNull())
+ if (id == getListener()->getUUID())
{
return this;
}
@@ -2173,7 +2195,7 @@ void LLFolderView::doIdle()
// filter to determine visiblity before arranging
filterFromRoot();
- // automatically show matching items, and select first one
+ // automatically show matching items, and select first one if we had a selection
// do this every frame until user puts keyboard focus into the inventory window
// signaling the end of the automatic update
// only do this when mNeedsFilter is set, meaning filtered items have
@@ -2183,7 +2205,7 @@ void LLFolderView::doIdle()
LLFastTimer t3(FTM_AUTO_SELECT);
// select new item only if a filtered item not currently selected
LLFolderViewItem* selected_itemp = mSelectedItems.empty() ? NULL : mSelectedItems.back();
- if ((!selected_itemp || !selected_itemp->getFiltered()) && !mAutoSelectOverride)
+ if ((selected_itemp && !selected_itemp->getFiltered()) && !mAutoSelectOverride)
{
// select first filtered item
LLSelectFirstFilteredItem filter;
@@ -2496,11 +2518,6 @@ BOOL LLFolderView::isFilterModified()
return mFilter->isNotDefault();
}
-BOOL LLFolderView::getAllowMultiSelect()
-{
- return mAllowMultiSelect;
-}
-
void delete_selected_item(void* user_data)
{
if(user_data)
diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h
index 1464a058d8..8af01e9102 100644
--- a/indra/newview/llfolderview.h
+++ b/indra/newview/llfolderview.h
@@ -59,22 +59,6 @@ class LLUICtrl;
class LLTextBox;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// Class LLFolderViewFunctor
-//
-// Simple abstract base class for applying a functor to folders and
-// items in a folder view hierarchy. This is suboptimal for algorithms
-// that only work folders or only work on items, but I'll worry about
-// that later when it's determined to be too slow.
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class LLFolderViewFunctor
-{
-public:
- virtual ~LLFolderViewFunctor() {}
- virtual void doFolder(LLFolderViewFolder* folder) = 0;
- virtual void doItem(LLFolderViewItem* item) = 0;
-};
-
-//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLFolderView
//
// Th LLFolderView represents the root level folder view object. It
@@ -89,7 +73,12 @@ public:
Mandatory<LLPanel*> parent_panel;
Optional<LLUUID> task_id;
Optional<std::string> title;
- Optional<bool> use_label_suffix;
+ Optional<bool> use_label_suffix,
+ allow_multiselect,
+ show_load_status,
+ use_ellipses;
+
+ Params();
};
LLFolderView(const Params&);
virtual ~LLFolderView( void );
@@ -102,7 +91,6 @@ public:
// and resort the items if necessary.
void setSortOrder(U32 order);
void setFilterPermMask(PermissionMask filter_perm_mask);
- void setAllowMultiSelect(BOOL allow) { mAllowMultiSelect = allow; }
typedef boost::signals2::signal<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)> signal_t;
void setSelectCallback(const signal_t::slot_type& cb) { mSelectSignal.connect(cb); }
@@ -117,11 +105,9 @@ public:
//LLInventoryFilter::EFolderShow getShowFolderState();
U32 getSortOrder() const;
BOOL isFilterModified();
- BOOL getAllowMultiSelect();
// Close all folders in the view
void closeAllFolders();
- void openFolder(const std::string& foldername);
void openTopLevelFolders();
virtual void toggleOpen() {};
@@ -238,7 +224,6 @@ public:
void setShowSingleSelection(BOOL show);
BOOL getShowSingleSelection() { return mShowSingleSelection; }
F32 getSelectionFadeElapsedTime() { return mMultiSelectionFadeTimer.getElapsedTimeF32(); }
- void setUseEllipses(bool use_ellipses) { mUseEllipses = use_ellipses; }
bool getUseEllipses() { return mUseEllipses; }
void addItemID(const LLUUID& id, LLFolderViewItem* itemp);
@@ -329,6 +314,7 @@ protected:
signal_t mReshapeSignal;
S32 mSignalSelectCallback;
S32 mMinWidth;
+ S32 mRunningHeight;
std::map<LLUUID, LLFolderViewItem*> mItemMap;
BOOL mDragAndDropThisFrame;
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index e9d1ad3a9e..e2b7c45eab 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -30,8 +30,10 @@
// viewer includes
#include "llfolderview.h" // Items depend extensively on LLFolderViews
#include "llfoldervieweventlistener.h"
+#include "llviewerfoldertype.h"
#include "llinventorybridge.h" // for LLItemBridge in LLInventorySort::operator()
#include "llinventoryfilter.h"
+#include "llinventoryfunctions.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llpanel.h"
#include "llviewercontrol.h" // gSavedSettings
@@ -130,10 +132,14 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
mIconOpen(p.icon_open),
mIconOverlay(p.icon_overlay),
mListener(p.listener),
- mHidden(false),
mShowLoadStatus(false)
{
+}
+
+BOOL LLFolderViewItem::postBuild()
+{
refresh();
+ return TRUE;
}
// Destroys the object
@@ -195,7 +201,7 @@ LLFolderViewItem* LLFolderViewItem::getPreviousOpenNode(BOOL include_children)
LLFolderViewItem* itemp = mParentFolder->getPreviousFromChild( this, include_children );
// Skip over items that are invisible or are hidden from the UI.
- while(itemp && (!itemp->getVisible() || itemp->getHidden()))
+ while(itemp && !itemp->getVisible())
{
LLFolderViewItem* next_itemp = itemp->mParentFolder->getPreviousFromChild( itemp, include_children );
if (itemp == next_itemp)
@@ -280,7 +286,7 @@ void LLFolderViewItem::refreshFromListener()
time_t creation_date = mListener->getCreationDate();
if (mCreationDate != creation_date)
{
- mCreationDate = mListener->getCreationDate();
+ setCreationDate(mListener->getCreationDate());
dirtyFilter();
}
if (mRoot->useLabelSuffix())
@@ -351,7 +357,10 @@ void LLFolderViewItem::arrangeAndSet(BOOL set_selection,
BOOL take_keyboard_focus)
{
LLFolderView* root = getRoot();
+ if (getParentFolder())
+ {
getParentFolder()->requestArrange();
+ }
if(set_selection)
{
setSelectionFromRoot(this, TRUE, take_keyboard_focus);
@@ -442,23 +451,20 @@ S32 LLFolderViewItem::arrange( S32* width, S32* height, S32 filter_generation)
S32 LLFolderViewItem::getItemHeight()
{
- if (getHidden()) return 0;
-
return mItemHeight;
}
void LLFolderViewItem::filter( LLInventoryFilter& filter)
{
const BOOL previous_passed_filter = mPassedFilter;
- const BOOL passed_filter = mListener && filter.check(this);
+ const BOOL passed_filter = filter.check(this);
// If our visibility will change as a result of this filter, then
// we need to be rearranged in our parent folder
if (mParentFolder)
{
- if (getVisible() != passed_filter)
- mParentFolder->requestArrange();
- if (passed_filter != previous_passed_filter)
+ if (getVisible() != passed_filter
+ || previous_passed_filter != passed_filter )
mParentFolder->requestArrange();
}
@@ -863,11 +869,6 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
void LLFolderViewItem::draw()
{
- if (getHidden())
- {
- return;
- }
-
static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE);
@@ -891,8 +892,8 @@ void LLFolderViewItem::draw()
// Draw open folder arrow
//
const bool up_to_date = mListener && mListener->isUpToDate();
- const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) || // we fetched our children and some of them have passed the filter...
- (!up_to_date && mListener && mListener->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter)
+ const bool possibly_has_children = ((up_to_date && hasVisibleChildren()) // we fetched our children and some of them have passed the filter...
+ || (!up_to_date && mListener && mListener->hasChildren())); // ...or we know we have children but haven't fetched them (doesn't obey filter)
if (possibly_has_children)
{
LLUIImage* arrow_image = default_params.folder_arrow_image;
@@ -1054,8 +1055,11 @@ void LLFolderViewItem::draw()
{
root_is_loading = LLInventoryModelBackgroundFetch::instance().libraryFetchInProgress();
}
- if ((mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime")) ||
- (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive() && root_is_loading && (mShowLoadStatus || mHidden)))
+ if ((mIsLoading
+ && mTimeSinceRequestStart.getElapsedTimeF32() >= gSavedSettings.getF32("FolderLoadingMessageWaitTime"))
+ || (LLInventoryModelBackgroundFetch::instance().backgroundFetchActive()
+ && root_is_loading
+ && mShowLoadStatus))
{
std::string load_string = " ( " + LLTrans::getString("LoadingData") + " ) ";
font->renderUTF8(load_string, 0, right_x, y, sSearchStatusColor,
@@ -1119,7 +1123,8 @@ LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):
mLastCalculatedWidth(0),
mCompletedFilterGeneration(-1),
mMostFilteredDescendantGeneration(-1),
- mNeedsSort(false)
+ mNeedsSort(false),
+ mPassedFolderFilter(FALSE)
{
}
@@ -1131,6 +1136,17 @@ LLFolderViewFolder::~LLFolderViewFolder( void )
gFocusMgr.releaseFocusIfNeeded( this ); // calls onCommit()
}
+void LLFolderViewFolder::setFilteredFolder(bool filtered, S32 filter_generation)
+{
+ mPassedFolderFilter = filtered;
+ mLastFilterGeneration = filter_generation;
+}
+
+bool LLFolderViewFolder::getFilteredFolder(S32 filter_generation)
+{
+ return mPassedFolderFilter && mLastFilterGeneration >= getRoot()->getFilter()->getMinRequiredGeneration();
+}
+
// addToFolder() returns TRUE if it succeeds. FALSE otherwise
BOOL LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder, LLFolderView* root)
{
@@ -1157,8 +1173,6 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
mHasVisibleChildren = hasFilteredDescendants(filter_generation);
- LLInventoryFilter::EFolderShow show_folder_state = getRoot()->getFilter()->getShowFolderState();
-
// calculate height as a single item (without any children), and reshapes rectangle to match
LLFolderViewItem::arrange( width, height, filter_generation );
@@ -1190,8 +1204,10 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)
}
else
{
- folderp->setVisible(show_folder_state == LLInventoryFilter::SHOW_ALL_FOLDERS || // always show folders?
- (folderp->getFiltered(filter_generation) || folderp->hasFilteredDescendants(filter_generation))); // passed filter or has descendants that passed filter
+ folderp->setVisible( folderp->getListener()
+ && (folderp->getFiltered(filter_generation)
+ || (folderp->getFilteredFolder(filter_generation)
+ && folderp->hasFilteredDescendants(filter_generation)))); // passed filter or has descendants that passed filter
}
if (folderp->getVisible())
@@ -1311,7 +1327,9 @@ void LLFolderViewFolder::setCompletedFilterGeneration(S32 generation, BOOL recur
mMostFilteredDescendantGeneration = llmin(mMostFilteredDescendantGeneration, generation);
mCompletedFilterGeneration = generation;
// only aggregate up if we are a lower (older) value
- if (recurse_up && mParentFolder && generation < mParentFolder->getCompletedFilterGeneration())
+ if (recurse_up
+ && mParentFolder
+ && generation < mParentFolder->getCompletedFilterGeneration())
{
mParentFolder->setCompletedFilterGeneration(generation, TRUE);
}
@@ -1336,21 +1354,19 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
// filter folder itself
if (getLastFilterGeneration() < filter_generation)
{
- if (getLastFilterGeneration() >= must_pass_generation && // folder has been compared to a valid precursor filter
- !mPassedFilter) // and did not pass the filter
+ if (getLastFilterGeneration() >= must_pass_generation // folder has been compared to a valid precursor filter
+ && !mPassedFilter) // and did not pass the filter
{
// go ahead and flag this folder as done
mLastFilterGeneration = filter_generation;
}
- else
+ else // filter self only on first pass through
{
- // filter self only on first pass through
+ // filter against folder rules
+ filterFolder(filter);
+ // and then item rules
LLFolderViewItem::filter( filter );
}
- if (mHidden)
- {
- setOpen();
- }
}
if (getRoot()->getDebugFilters())
@@ -1377,7 +1393,10 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
}
// when applying a filter, matching folders get their contents downloaded first
- if (filter.isNotDefault() && getFiltered(filter.getMinRequiredGeneration()) && (mListener && !gInventory.isCategoryComplete(mListener->getUUID())))
+ if (filter.isNotDefault()
+ && getFiltered(filter.getMinRequiredGeneration())
+ && (mListener
+ && !gInventory.isCategoryComplete(mListener->getUUID())))
{
LLInventoryModelBackgroundFetch::instance().start(mListener->getUUID());
}
@@ -1403,6 +1422,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (folder->getFiltered() || folder->hasFilteredDescendants(filter.getMinRequiredGeneration()))
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
}
// just skip it, it has already been filtered
continue;
@@ -1415,6 +1435,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (folder->getFiltered() || folder->hasFilteredDescendants(filter_generation))
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
if (getRoot()->needsAutoSelect() && autoopen_folders)
{
folder->setOpenArrangeRecursively(TRUE);
@@ -1436,6 +1457,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (item->getFiltered())
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
}
continue;
}
@@ -1454,6 +1476,7 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
if (item->getFiltered(filter.getMinRequiredGeneration()))
{
mMostFilteredDescendantGeneration = filter_generation;
+ requestArrange();
}
}
@@ -1467,6 +1490,31 @@ void LLFolderViewFolder::filter( LLInventoryFilter& filter)
}
}
+void LLFolderViewFolder::filterFolder(LLInventoryFilter& filter)
+{
+ const BOOL previous_passed_filter = mPassedFolderFilter;
+ const BOOL passed_filter = filter.checkFolder(this);
+
+ // If our visibility will change as a result of this filter, then
+ // we need to be rearranged in our parent folder
+ if (mParentFolder)
+ {
+ if (getVisible() != passed_filter
+ || previous_passed_filter != passed_filter )
+ {
+ mParentFolder->requestArrange();
+ }
+ }
+
+ setFilteredFolder(passed_filter, filter.getCurrentGeneration());
+ filter.decrementFilterCount();
+
+ if (getRoot()->getDebugFilters())
+ {
+ mStatusText = llformat("%d", mLastFilterGeneration);
+ }
+}
+
void LLFolderViewFolder::setFiltered(BOOL filtered, S32 filter_generation)
{
// if this folder is now filtered, but wasn't before
@@ -1488,6 +1536,23 @@ void LLFolderViewFolder::dirtyFilter()
LLFolderViewItem::dirtyFilter();
}
+BOOL LLFolderViewFolder::getFiltered()
+{
+ return getFilteredFolder(getRoot()->getFilter()->getMinRequiredGeneration())
+ && LLFolderViewItem::getFiltered();
+}
+
+BOOL LLFolderViewFolder::getFiltered(S32 filter_generation)
+{
+ return getFilteredFolder(filter_generation) && LLFolderViewItem::getFiltered(filter_generation);
+}
+
+BOOL LLFolderViewFolder::hasFilteredDescendants(S32 filter_generation)
+{
+ return mMostFilteredDescendantGeneration >= filter_generation;
+}
+
+
BOOL LLFolderViewFolder::hasFilteredDescendants()
{
return mMostFilteredDescendantGeneration >= getRoot()->getFilter()->getCurrentGeneration();
@@ -1743,7 +1808,7 @@ void LLFolderViewFolder::destroyView()
folderp->destroyView(); // removes entry from mFolders
}
- deleteAllChildren();
+ //deleteAllChildren();
if (mParentFolder)
{
@@ -1843,8 +1908,12 @@ void LLFolderViewFolder::sortBy(U32 order)
(*fit)->sortBy(order);
}
- mFolders.sort(mSortFunction);
- mItems.sort(mSortFunction);
+ // Don't sort the topmost folders (My Inventory and Library)
+ if (mListener->getUUID().notNull())
+ {
+ mFolders.sort(mSortFunction);
+ mItems.sort(mSortFunction);
+ }
if (order & LLInventoryFilter::SO_DATE)
{
@@ -1981,6 +2050,13 @@ BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item)
item->dirtyFilter();
requestArrange();
requestSort();
+ LLFolderViewFolder* parentp = getParentFolder();
+ while (parentp && parentp->mSortFunction.isByDate())
+ {
+ // parent folder doesn't have a time stamp yet, so get it from us
+ parentp->requestSort();
+ parentp = parentp->getParentFolder();
+ }
return TRUE;
}
@@ -2000,6 +2076,13 @@ BOOL LLFolderViewFolder::addFolder(LLFolderViewFolder* folder)
// rearrange all descendants too, as our indentation level might have changed
folder->requestArrange(TRUE);
requestSort();
+ LLFolderViewFolder* parentp = getParentFolder();
+ while (parentp && !parentp->mSortFunction.isByDate())
+ {
+ // parent folder doesn't have a time stamp yet, so get it from us
+ parentp->requestSort();
+ parentp = parentp->getParentFolder();
+ }
return TRUE;
}
@@ -2059,7 +2142,9 @@ void LLFolderViewFolder::setOpenArrangeRecursively(BOOL openitem, ERecurseType r
(*fit)->setOpenArrangeRecursively(openitem, RECURSE_DOWN); /* Flawfinder: ignore */
}
}
- if (mParentFolder && (recurse == RECURSE_UP || recurse == RECURSE_UP_DOWN))
+ if (mParentFolder
+ && (recurse == RECURSE_UP
+ || recurse == RECURSE_UP_DOWN))
{
mParentFolder->setOpenArrangeRecursively(openitem, RECURSE_UP);
}
@@ -2301,13 +2386,16 @@ void LLFolderViewFolder::draw()
bool possibly_has_children = false;
bool up_to_date = mListener && mListener->isUpToDate();
- if(!up_to_date && mListener && mListener->hasChildren()) // we know we have children but haven't fetched them (doesn't obey filter)
+ if(!up_to_date
+ && mListener->hasChildren()) // we know we have children but haven't fetched them (doesn't obey filter)
{
possibly_has_children = true;
}
- BOOL loading = ( mIsOpen && possibly_has_children && !up_to_date );
+ BOOL loading = (mIsOpen
+ && possibly_has_children
+ && !up_to_date );
if ( loading && !mIsLoading )
{
@@ -2330,6 +2418,41 @@ void LLFolderViewFolder::draw()
time_t LLFolderViewFolder::getCreationDate() const
{
+ // folders have no creation date try to create one from an item somewhere in our folder hierarchy
+ if (!mCreationDate)
+ {
+ for (items_t::const_iterator iit = mItems.begin();
+ iit != mItems.end(); ++iit)
+ {
+ LLFolderViewItem* itemp = (*iit);
+
+ const time_t item_creation_date = itemp->getCreationDate();
+
+ if (item_creation_date)
+ {
+ setCreationDate(item_creation_date);
+ break;
+ }
+ }
+
+ if (!mCreationDate)
+ {
+ for (folders_t::const_iterator fit = mFolders.begin();
+ fit != mFolders.end(); ++fit)
+ {
+ LLFolderViewFolder* folderp = (*fit);
+
+ const time_t folder_creation_date = folderp->getCreationDate();
+
+ if (folder_creation_date)
+ {
+ setCreationDate(folder_creation_date);
+ break;
+ }
+ }
+ }
+ }
+
return llmax<time_t>(mCreationDate, mSubtreeCreationDate);
}
@@ -2573,7 +2696,8 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde
{
// ignore sort order for landmarks in the Favorites folder.
// they should be always sorted as in Favorites bar. See EXT-719
- if (a->getSortGroup() == SG_ITEM && b->getSortGroup() == SG_ITEM
+ if (a->getSortGroup() == SG_ITEM
+ && b->getSortGroup() == SG_ITEM
&& a->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK
&& b->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h
index fc941510ab..dac0c3032c 100644
--- a/indra/newview/llfolderviewitem.h
+++ b/indra/newview/llfolderviewitem.h
@@ -66,6 +66,7 @@ public:
// Returns true if order has changed
bool updateSort(U32 order);
U32 getSort() { return mSortOrder; }
+ bool isByDate() { return mByDate; }
bool operator()(const LLFolderViewItem* const& a, const LLFolderViewItem* const& b);
private:
@@ -94,7 +95,7 @@ public:
Optional<LLUIImage*> icon_open; // used for folders
Optional<LLUIImage*> icon_overlay; // for links
Optional<LLFolderView*> root;
- Optional<LLFolderViewEventListener*> listener;
+ Mandatory<LLFolderViewEventListener*> listener;
Optional<LLUIImage*> folder_arrow_image;
Optional<S32> folder_indentation; // pixels
@@ -135,7 +136,7 @@ protected:
std::string mSearchableLabel;
S32 mLabelWidth;
bool mLabelWidthDirty;
- time_t mCreationDate;
+ mutable time_t mCreationDate;
LLFolderViewFolder* mParentFolder;
LLFolderViewEventListener* mListener;
BOOL mIsCurSelection;
@@ -157,7 +158,6 @@ protected:
BOOL mDragAndDropTarget;
BOOL mIsLoading;
LLTimer mTimeSinceRequestStart;
- bool mHidden;
bool mShowLoadStatus;
// helper function to change the selection from the root.
@@ -167,13 +167,17 @@ protected:
void extendSelectionFromRoot(LLFolderViewItem* selection);
// this is an internal method used for adding items to folders. A
- // no-op at this leve, but reimplemented in derived classes.
+ // no-op at this level, but reimplemented in derived classes.
virtual BOOL addItem(LLFolderViewItem*) { return FALSE; }
virtual BOOL addFolder(LLFolderViewFolder*) { return FALSE; }
static LLFontGL* getLabelFontForStyle(U8 style);
+ virtual void setCreationDate(time_t creation_date_utc) const { mCreationDate = creation_date_utc; }
+
public:
+ BOOL postBuild();
+
// This function clears the currently selected item, and records
// the specified selected item appropriately for display and use
// in the UI. If open is TRUE, then folders are opened up along
@@ -202,11 +206,6 @@ public:
virtual S32 arrange( S32* width, S32* height, S32 filter_generation );
virtual S32 getItemHeight();
- // Hide the folder from the UI, such as if you want to hide the root
- // folder in an inventory panel.
- void setHidden(bool hidden) { mHidden = hidden; }
- bool getHidden() const { return mHidden; }
-
// applies filters to control visibility of inventory items
virtual void filter( LLInventoryFilter& filter);
@@ -231,7 +230,7 @@ public:
void deselectItem();
// this method is used to select this element
- void selectItem();
+ virtual void selectItem();
// gets multiple-element selection
virtual std::set<LLUUID> getSelectionList() const;
@@ -329,6 +328,8 @@ public:
virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask );
+ virtual LLView* findChildView(const std::string& name, BOOL recurse) const { return NULL; }
+
// virtual void handleDropped();
virtual void draw();
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
@@ -366,6 +367,9 @@ public:
UNKNOWN, TRASH, NOT_TRASH
} ETrash;
+ typedef std::list<LLFolderViewItem*> items_t;
+ typedef std::list<LLFolderViewFolder*> folders_t;
+
private:
S32 mNumDescendantsSelected;
@@ -374,8 +378,6 @@ public: // Accessed needed by LLFolderViewItem
S32 numSelected(void) const { return mNumDescendantsSelected + (isSelected() ? 1 : 0); }
protected:
- typedef std::list<LLFolderViewItem*> items_t;
- typedef std::list<LLFolderViewFolder*> folders_t;
items_t mItems;
folders_t mFolders;
LLInventorySort mSortFunction;
@@ -392,6 +394,8 @@ protected:
S32 mCompletedFilterGeneration;
S32 mMostFilteredDescendantGeneration;
bool mNeedsSort;
+ bool mPassedFolderFilter;
+
public:
typedef enum e_recurse_type
{
@@ -425,13 +429,21 @@ public:
virtual void setCompletedFilterGeneration(S32 generation, BOOL recurse_up);
virtual S32 getCompletedFilterGeneration() { return mCompletedFilterGeneration; }
- BOOL hasFilteredDescendants(S32 filter_generation) { return mMostFilteredDescendantGeneration >= filter_generation; }
+ BOOL hasFilteredDescendants(S32 filter_generation);
BOOL hasFilteredDescendants();
// applies filters to control visibility of inventory items
virtual void filter( LLInventoryFilter& filter);
virtual void setFiltered(BOOL filtered, S32 filter_generation);
+ virtual BOOL getFiltered();
+ virtual BOOL getFiltered(S32 filter_generation);
+
virtual void dirtyFilter();
+
+ // folder-specific filtering (filter status propagates top down instead of bottom up)
+ void filterFolder(LLInventoryFilter& filter);
+ void setFilteredFolder(bool filtered, S32 filter_generation);
+ bool getFilteredFolder(S32 filter_generation);
// Passes selection information on to children and record
// selection information if necessary.
@@ -537,6 +549,10 @@ public:
time_t getCreationDate() const;
bool isTrash() const;
S32 getNumSelectedDescendants(void) const { return mNumDescendantsSelected; }
+
+ folders_t::const_iterator getFoldersBegin() const { return mFolders.begin(); }
+ folders_t::const_iterator getFoldersEnd() const { return mFolders.end(); }
+ folders_t::size_type getFoldersCount() const { return mFolders.size(); }
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 842911ecc0..fa3f546157 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -620,7 +620,7 @@ void LLViewerParcelMgr::renderCollisionSegments(U8* segments, BOOL use_pass, LLV
F32 pos_y = pos.mV[VY];
LLGLSUIDefault gls_ui;
- LLGLDepthTest gls_depth(GL_TRUE);
+ LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
LLGLDisable cull(GL_CULL_FACE);
if (mCollisionBanned == BA_BANNED)
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index ce936a9924..efffd0f98e 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -857,7 +857,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
- llwarns << "Got group properties reply for another agent!" << llendl;
+ llwarns << "Got group members reply for another agent!" << llendl;
return;
}
@@ -867,10 +867,10 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
LLUUID request_id;
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
- LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->createGroupData(group_id);
- if (group_datap->mMemberRequestID != request_id)
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mMemberRequestID != request_id))
{
- llwarns << "processGroupMembersReply: Received incorrect (stale?) request id" << llendl;
+ llwarns << "processGroupMembersReply: Received incorrect (stale?) group or request id" << llendl;
return;
}
@@ -1028,7 +1028,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
- llwarns << "Got group properties reply for another agent!" << llendl;
+ llwarns << "Got group role data reply for another agent!" << llendl;
return;
}
@@ -1038,14 +1038,14 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
LLUUID request_id;
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_RequestID, request_id);
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
- if (group_data->mRoleDataRequestID != request_id)
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mRoleDataRequestID != request_id))
{
- llwarns << "processGroupRoleDataReply: Received incorrect (stale?) request id" << llendl;
+ llwarns << "processGroupPropertiesReply: Received incorrect (stale?) group or request id" << llendl;
return;
}
- msg->getS32(_PREHASH_GroupData, "RoleCount", group_data->mRoleCount );
+ msg->getS32(_PREHASH_GroupData, "RoleCount", group_datap->mRoleCount );
std::string name;
std::string title;
@@ -1086,22 +1086,22 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
lldebugs << "Adding role data: " << name << " {" << role_id << "}" << llendl;
LLGroupRoleData* rd = new LLGroupRoleData(role_id,name,title,desc,powers,member_count);
- group_data->mRoles[role_id] = rd;
+ group_datap->mRoles[role_id] = rd;
}
- if (group_data->mRoles.size() == (U32)group_data->mRoleCount)
+ if (group_datap->mRoles.size() == (U32)group_datap->mRoleCount)
{
- group_data->mRoleDataComplete = TRUE;
- group_data->mRoleDataRequestID.setNull();
+ group_datap->mRoleDataComplete = TRUE;
+ group_datap->mRoleDataRequestID.setNull();
// We don't want to make role-member data requests until we have all the role data
- if (group_data->mPendingRoleMemberRequest)
+ if (group_datap->mPendingRoleMemberRequest)
{
- group_data->mPendingRoleMemberRequest = FALSE;
- LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_data->mID);
+ group_datap->mPendingRoleMemberRequest = FALSE;
+ LLGroupMgr::getInstance()->sendGroupRoleMembersRequest(group_datap->mID);
}
}
- group_data->mChanged = TRUE;
+ group_datap->mChanged = TRUE;
LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_DATA);
}
@@ -1113,7 +1113,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
if (gAgent.getID() != agent_id)
{
- llwarns << "Got group properties reply for another agent!" << llendl;
+ llwarns << "Got group role members reply for another agent!" << llendl;
return;
}
@@ -1126,11 +1126,10 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
U32 total_pairs;
msg->getU32(_PREHASH_AgentData, "TotalPairs", total_pairs);
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
-
- if (group_data->mRoleMembersRequestID != request_id)
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mRoleMembersRequestID != request_id))
{
- llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) role member request id" << llendl;
+ llwarns << "processGroupRoleMembersReply: Received incorrect (stale?) group or request id" << llendl;
return;
}
@@ -1155,15 +1154,15 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
if (role_id.notNull() && member_id.notNull() )
{
rd = NULL;
- ri = group_data->mRoles.find(role_id);
- if (ri != group_data->mRoles.end())
+ ri = group_datap->mRoles.find(role_id);
+ if (ri != group_datap->mRoles.end())
{
rd = ri->second;
}
md = NULL;
- mi = group_data->mMembers.find(member_id);
- if (mi != group_data->mMembers.end())
+ mi = group_datap->mMembers.find(member_id);
+ if (mi != group_datap->mMembers.end())
{
md = mi->second;
}
@@ -1182,21 +1181,21 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
}
}
- group_data->mReceivedRoleMemberPairs += num_blocks;
+ group_datap->mReceivedRoleMemberPairs += num_blocks;
}
- if (group_data->mReceivedRoleMemberPairs == total_pairs)
+ if (group_datap->mReceivedRoleMemberPairs == total_pairs)
{
// Add role data for the 'everyone' role to all members
- LLGroupRoleData* everyone = group_data->mRoles[LLUUID::null];
+ LLGroupRoleData* everyone = group_datap->mRoles[LLUUID::null];
if (!everyone)
{
llwarns << "Everyone role not found!" << llendl;
}
else
{
- for (LLGroupMgrGroupData::member_list_t::iterator mi = group_data->mMembers.begin();
- mi != group_data->mMembers.end(); ++mi)
+ for (LLGroupMgrGroupData::member_list_t::iterator mi = group_datap->mMembers.begin();
+ mi != group_datap->mMembers.end(); ++mi)
{
LLGroupMemberData* data = mi->second;
if (data)
@@ -1206,11 +1205,11 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
}
}
- group_data->mRoleMemberDataComplete = TRUE;
- group_data->mRoleMembersRequestID.setNull();
+ group_datap->mRoleMemberDataComplete = TRUE;
+ group_datap->mRoleMembersRequestID.setNull();
}
- group_data->mChanged = TRUE;
+ group_datap->mChanged = TRUE;
LLGroupMgr::getInstance()->notifyObservers(GC_ROLE_MEMBER_DATA);
}
@@ -1228,15 +1227,13 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
LLUUID group_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_GroupID, group_id );
-
- LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->createGroupData(group_id);
-
LLUUID request_id;
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_RequestID, request_id);
-
- if (group_data->mTitlesRequestID != request_id)
+
+ LLGroupMgrGroupData* group_datap = LLGroupMgr::getInstance()->getGroupData(group_id);
+ if (!group_datap || (group_datap->mTitlesRequestID != request_id))
{
- llwarns << "processGroupTitlesReply: Received incorrect (stale?) title request id" << llendl;
+ llwarns << "processGroupTitlesReply: Received incorrect (stale?) group" << llendl;
return;
}
@@ -1253,11 +1250,11 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
if (!title.mTitle.empty())
{
lldebugs << "LLGroupMgr adding title: " << title.mTitle << ", " << title.mRoleID << ", " << (title.mSelected ? 'Y' : 'N') << llendl;
- group_data->mTitles.push_back(title);
+ group_datap->mTitles.push_back(title);
}
}
- group_data->mChanged = TRUE;
+ group_datap->mChanged = TRUE;
LLGroupMgr::getInstance()->notifyObservers(GC_TITLES);
}
diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
index 82e1f2dfb5..482294c8a6 100644
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -477,7 +477,7 @@ void LLHUDNameTag::renderText(BOOL for_select)
// Render label
{
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
segment_iter != mLabelSegments.end(); ++segment_iter )
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 86c8a1a9b5..f0fc710f3d 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -40,6 +40,7 @@
#include "llfloateropenobject.h"
#include "llfloaterreg.h"
#include "llfloaterworldmap.h"
+#include "llfolderview.h"
#include "llfriendcard.h"
#include "llgesturemgr.h"
#include "llgiveinventory.h"
@@ -571,8 +572,8 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id,
}
}
- // Don't allow items to be pasted directly into the COF.
- if (!isCOFFolder())
+ // Don't allow items to be pasted directly into the COF or the inbox
+ if (!isCOFFolder() && !isInboxFolder())
{
items.push_back(std::string("Paste"));
}
@@ -781,6 +782,18 @@ BOOL LLInvFVBridge::isCOFFolder() const
return LLAppearanceMgr::instance().getIsInCOF(mUUID);
}
+BOOL LLInvFVBridge::isInboxFolder() const
+{
+ const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false);
+
+ if (inbox_id.isNull())
+ {
+ return FALSE;
+ }
+
+ return gInventory.isObjectDescendentOf(mUUID, inbox_id);
+}
+
BOOL LLInvFVBridge::isItemPermissive() const
{
return FALSE;
@@ -1786,6 +1799,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
else
{
+ if (gInventory.isObjectDescendentOf(inv_cat->getUUID(), gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false)))
+ {
+ set_dad_inbox_object(inv_cat->getUUID());
+ }
// Reparent the folder and restamp children if it's moving
// into trash.
@@ -2466,8 +2483,6 @@ void LLFolderBridge::staticFolderOptionsMenu()
void LLFolderBridge::folderOptionsMenu()
{
- menuentry_vec_t disabled_items;
-
LLInventoryModel* model = getInventoryModel();
if(!model) return;
@@ -2497,6 +2512,11 @@ void LLFolderBridge::folderOptionsMenu()
}
}
+ if (!isItemRemovable())
+ {
+ mDisabledItems.push_back(std::string("Delete"));
+ }
+
#ifndef LL_RELEASE_FOR_DOWNLOAD
if (LLFolderType::lookupIsProtectedType(type))
{
@@ -2525,6 +2545,7 @@ void LLFolderBridge::folderOptionsMenu()
{
mItems.push_back(std::string("Add To Outfit"));
}
+
mItems.push_back(std::string("Replace Outfit"));
}
if (is_ensemble)
@@ -2534,18 +2555,18 @@ void LLFolderBridge::folderOptionsMenu()
mItems.push_back(std::string("Remove From Outfit"));
if (!LLAppearanceMgr::getCanRemoveFromCOF(mUUID))
{
- disabled_items.push_back(std::string("Remove From Outfit"));
+ mDisabledItems.push_back(std::string("Remove From Outfit"));
}
if (!LLAppearanceMgr::instance().getCanReplaceCOF(mUUID))
{
- disabled_items.push_back(std::string("Replace Outfit"));
+ mDisabledItems.push_back(std::string("Replace Outfit"));
}
mItems.push_back(std::string("Outfit Separator"));
}
LLMenuGL* menup = dynamic_cast<LLMenuGL*>(mMenu.get());
if (menup)
{
- hide_context_entries(*menup, mItems, disabled_items, TRUE);
+ hide_context_entries(*menup, mItems, mDisabledItems, TRUE);
// Reposition the menu, in case we're adding items to an existing menu.
menup->needsArrange();
@@ -2614,15 +2635,17 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
// Not sure what the right thing is to do here.
if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
{
- // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
- if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
- mItems.push_back(std::string("New Folder"));
- mItems.push_back(std::string("New Script"));
- mItems.push_back(std::string("New Note"));
- mItems.push_back(std::string("New Gesture"));
- mItems.push_back(std::string("New Clothes"));
- mItems.push_back(std::string("New Body Parts"));
-
+ if (!isInboxFolder()) // don't allow creation in inbox
+ {
+ // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
+ if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
+ mItems.push_back(std::string("New Folder"));
+ mItems.push_back(std::string("New Script"));
+ mItems.push_back(std::string("New Note"));
+ mItems.push_back(std::string("New Gesture"));
+ mItems.push_back(std::string("New Clothes"));
+ mItems.push_back(std::string("New Body Parts"));
+ }
#if SUPPORT_ENSEMBLES
// Changing folder types is an unfinished unsupported feature
// and can lead to unexpected behavior if enabled.
@@ -3161,6 +3184,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// (move the item, restamp if into trash)
else
{
+ // set up observer to select item once drag and drop from inbox is complete
+ if (gInventory.isObjectDescendentOf(inv_item->getUUID(), gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false)))
+ {
+ set_dad_inbox_object(inv_item->getUUID());
+ }
+
LLInvFVBridge::changeItemParent(
model,
(LLViewerInventoryItem*)inv_item,
@@ -4896,31 +4925,22 @@ void LLWearableBridge::onRemoveFromAvatarArrived(LLWearable* wearable,
// static
void LLWearableBridge::removeAllClothesFromAvatar()
{
- // Remove COF links.
- for (S32 itype = LLWearableType::WT_SHAPE; itype < LLWearableType::WT_COUNT; ++itype)
- {
- if (itype == LLWearableType::WT_SHAPE || itype == LLWearableType::WT_SKIN || itype == LLWearableType::WT_HAIR || itype == LLWearableType::WT_EYES)
- continue;
+ // Fetch worn clothes (i.e. the ones in COF).
+ LLInventoryModel::item_array_t clothing_items;
+ LLInventoryModel::cat_array_t dummy;
+ LLIsType is_clothing(LLAssetType::AT_CLOTHING);
+ gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(),
+ dummy,
+ clothing_items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ is_clothing,
+ false);
- for (S32 index = gAgentWearables.getWearableCount(itype)-1; index >= 0 ; --index)
- {
- LLViewerInventoryItem *item = dynamic_cast<LLViewerInventoryItem*>(
- gAgentWearables.getWearableInventoryItem((LLWearableType::EType)itype, index));
- if (!item)
- continue;
- const LLUUID &item_id = item->getUUID();
- const LLWearable *wearable = gAgentWearables.getWearableFromItemID(item_id);
- if (!wearable)
- continue;
-
- // Find and remove this item from the COF.
- LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false);
- }
+ // Take them off by removing from COF.
+ for (LLInventoryModel::item_array_t::const_iterator it = clothing_items.begin(); it != clothing_items.end(); ++it)
+ {
+ LLAppearanceMgr::instance().removeItemFromAvatar((*it)->getUUID());
}
- gInventory.notifyObservers();
-
- // Remove wearables from gAgentWearables
- LLAgentWearables::userRemoveAllClothes();
}
// static
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 1e849c8812..15629c0c75 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -139,6 +139,7 @@ protected:
BOOL isAgentInventory() const; // false if lost or in the inventory library
BOOL isCOFFolder() const; // true if COF or descendent of
+ BOOL isInboxFolder() const; // true if COF or descendent of marketplace inbox
virtual BOOL isItemPermissive() const;
static void changeItemParent(LLInventoryModel* model,
LLViewerInventoryItem* item,
@@ -584,6 +585,9 @@ protected:
};
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Recent Inventory Panel related classes
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Overridden version of the Inventory-Folder-View-Bridge for Folders
class LLRecentItemsFolderBridge : public LLFolderBridge
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index dee15a1efd..d6278a5fda 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -107,6 +107,32 @@ BOOL LLInventoryFilter::check(const LLFolderViewItem* item)
return passed;
}
+bool LLInventoryFilter::checkFolder(const LLFolderViewFolder* folder)
+{
+ // we're showing all folders, overriding filter
+ if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
+ {
+ return true;
+ }
+
+ const LLFolderViewEventListener* listener = folder->getListener();
+ const LLUUID folder_id = listener->getUUID();
+
+ if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
+ {
+ // Can only filter categories for items in your inventory
+ // (e.g. versus in-world object contents).
+ const LLViewerInventoryCategory *cat = gInventory.getCategory(folder_id);
+ if (!cat)
+ return false;
+ LLFolderType::EType cat_type = cat->getPreferredType();
+ if (cat_type != LLFolderType::FT_NONE && (1LL << cat_type & mFilterOps.mFilterCategoryTypes) == U64(0))
+ return false;
+ }
+
+ return true;
+}
+
BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) const
{
const LLFolderViewEventListener* listener = item->getListener();
@@ -137,30 +163,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
}
}
-
- ////////////////////////////////////////////////////////////////////////////////
- // FILTERTYPE_CATEGORY
- // Pass if this item is a category of the filter type, or
- // if its parent is a category of the filter type.
- if (filterTypes & FILTERTYPE_CATEGORY)
- {
- // Can only filter categories for items in your inventory
- // (e.g. versus in-world object contents).
- if (!object) return FALSE;
-
- LLUUID cat_id = object_id;
- if (listener->getInventoryType() != LLInventoryType::IT_CATEGORY)
- {
- cat_id = object->getParentUUID();
- }
- const LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
- if (!cat)
- return FALSE;
- if ((1LL << cat->getPreferredType() & mFilterOps.mFilterCategoryTypes) == U64(0))
- return FALSE;
- }
-
-
////////////////////////////////////////////////////////////////////////////////
// FILTERTYPE_UUID
// Pass if this item is the target UUID or if it links to the target UUID
@@ -172,7 +174,6 @@ BOOL LLInventoryFilter::checkAgainstFilterType(const LLFolderViewItem* item) con
return FALSE;
}
-
////////////////////////////////////////////////////////////////////////////////
// FILTERTYPE_DATE
// Pass if this item is within the date range.
@@ -293,15 +294,15 @@ BOOL LLInventoryFilter::isModifiedAndClear()
return ret;
}
-void LLInventoryFilter::setFilterObjectTypes(U64 types)
+void LLInventoryFilter::updateFilterTypes(U64 types, U64& current_types)
{
- if (mFilterOps.mFilterObjectTypes != types)
+ if (current_types != types)
{
// keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterObjectTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterObjectTypes & types);
+ bool fewer_bits_set = (current_types & ~types) != 0;
+ bool more_bits_set = (~current_types & types) != 0;
- mFilterOps.mFilterObjectTypes = types;
+ current_types = types;
if (more_bits_set && fewer_bits_set)
{
// neither less or more restrive, both simultaneously
@@ -318,62 +319,23 @@ void LLInventoryFilter::setFilterObjectTypes(U64 types)
setModified(FILTER_MORE_RESTRICTIVE);
}
}
+}
+
+void LLInventoryFilter::setFilterObjectTypes(U64 types)
+{
+ updateFilterTypes(types, mFilterOps.mFilterObjectTypes);
mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
}
void LLInventoryFilter::setFilterCategoryTypes(U64 types)
{
- if (mFilterOps.mFilterCategoryTypes != types)
- {
- // keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterCategoryTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterCategoryTypes & types);
-
- mFilterOps.mFilterCategoryTypes = types;
- if (more_bits_set && fewer_bits_set)
- {
- // neither less or more restrive, both simultaneously
- // so we need to filter from scratch
- setModified(FILTER_RESTART);
- }
- else if (more_bits_set)
- {
- // target is only one of all requested types so more type bits == less restrictive
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else if (fewer_bits_set)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- }
- mFilterOps.mFilterTypes |= FILTERTYPE_OBJECT;
+ updateFilterTypes(types, mFilterOps.mFilterCategoryTypes);
+ mFilterOps.mFilterTypes |= FILTERTYPE_CATEGORY;
}
void LLInventoryFilter::setFilterWearableTypes(U64 types)
{
- if (mFilterOps.mFilterWearableTypes != types)
- {
- // keep current items only if no type bits getting turned off
- BOOL fewer_bits_set = (mFilterOps.mFilterWearableTypes & ~types);
- BOOL more_bits_set = (~mFilterOps.mFilterWearableTypes & types);
-
- mFilterOps.mFilterWearableTypes = types;
- if (more_bits_set && fewer_bits_set)
- {
- // neither less or more restrive, both simultaneously
- // so we need to filter from scratch
- setModified(FILTER_RESTART);
- }
- else if (more_bits_set)
- {
- // target is only one of all requested types so more type bits == less restrictive
- setModified(FILTER_LESS_RESTRICTIVE);
- }
- else if (fewer_bits_set)
- {
- setModified(FILTER_MORE_RESTRICTIVE);
- }
- }
+ updateFilterTypes(types, mFilterOps.mFilterWearableTypes);
mFilterOps.mFilterTypes |= FILTERTYPE_WEARABLE;
}
@@ -898,11 +860,16 @@ void LLInventoryFilter::fromLLSD(LLSD& data)
}
}
-U32 LLInventoryFilter::getFilterObjectTypes() const
+U64 LLInventoryFilter::getFilterObjectTypes() const
{
return mFilterOps.mFilterObjectTypes;
}
+U64 LLInventoryFilter::getFilterCategoryTypes() const
+{
+ return mFilterOps.mFilterCategoryTypes;
+}
+
BOOL LLInventoryFilter::hasFilterString() const
{
return mFilterSubString.size() > 0;
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index 39e6f797a2..f9460822f7 100644
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -31,6 +31,7 @@
#include "llpermissionsflags.h"
class LLFolderViewItem;
+class LLFolderViewFolder;
class LLInventoryFilter
{
@@ -81,11 +82,13 @@ public:
// + Parameters
// +-------------------------------------------------------------------+
void setFilterObjectTypes(U64 types);
- U32 getFilterObjectTypes() const;
+ U64 getFilterObjectTypes() const;
+ U64 getFilterCategoryTypes() const;
BOOL isFilterObjectTypesWith(LLInventoryType::EType t) const;
void setFilterCategoryTypes(U64 types);
void setFilterUUID(const LLUUID &object_id);
void setFilterWearableTypes(U64 types);
+ void updateFilterTypes(U64 types, U64& current_types);
void setFilterSubString(const std::string& string);
const std::string& getFilterSubString(BOOL trim = FALSE) const;
@@ -110,6 +113,7 @@ public:
// + Execution And Results
// +-------------------------------------------------------------------+
BOOL check(const LLFolderViewItem* item);
+ bool checkFolder(const LLFolderViewFolder* folder);
BOOL checkAgainstFilterType(const LLFolderViewItem* item) const;
BOOL checkAgainstPermissions(const LLFolderViewItem* item) const;
BOOL checkAgainstFilterLinks(const LLFolderViewItem* item) const;
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index cfe1747fd4..2016b92666 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -28,9 +28,9 @@
#ifndef LL_LLINVENTORYFUNCTIONS_H
#define LL_LLINVENTORYFUNCTIONS_H
-#include "llinventorytype.h"
-#include "llfolderview.h"
-#include "llfolderviewitem.h"
+#include "llinventorymodel.h"
+#include "llinventory.h"
+#include "llwearabletype.h"
/********************************************************************************
** **
@@ -417,6 +417,24 @@ public:
/** Inventory Collector Functions
** **
*******************************************************************************/
+class LLFolderViewItem;
+class LLFolderViewFolder;
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLFolderViewFunctor
+//
+// Simple abstract base class for applying a functor to folders and
+// items in a folder view hierarchy. This is suboptimal for algorithms
+// that only work folders or only work on items, but I'll worry about
+// that later when it's determined to be too slow.
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLFolderViewFunctor
+{
+public:
+ virtual ~LLFolderViewFunctor() {}
+ virtual void doFolder(LLFolderViewFolder* folder) = 0;
+ virtual void doItem(LLFolderViewItem* item) = 0;
+};
class LLInventoryState
{
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 318beafe65..e86c427ae2 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -2168,6 +2168,9 @@ void LLInventoryModel::registerCallbacks(LLMessageSystem* msg)
msg->setHandlerFuncFast(_PREHASH_RemoveInventoryFolder,
processRemoveInventoryFolder,
NULL);
+ msg->setHandlerFuncFast(_PREHASH_RemoveInventoryObjects,
+ processRemoveInventoryObjects,
+ NULL);
//msg->setHandlerFuncFast(_PREHASH_ExchangeCallingCard,
// processExchangeCallingcard,
// NULL);
@@ -2284,26 +2287,21 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
}
// static
-void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
+void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg, const char* msg_label)
{
- lldebugs << "LLInventoryModel::processRemoveInventoryItem()" << llendl;
- LLUUID agent_id, item_id;
- msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
- if(agent_id != gAgent.getID())
- {
- llwarns << "Got a RemoveInventoryItem for the wrong agent."
- << llendl;
- return;
- }
- S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
+ LLUUID item_id;
+ S32 count = msg->getNumberOfBlocksFast(msg_label);
+ lldebugs << "Message has " << count << " item blocks" << llendl;
uuid_vec_t item_ids;
update_map_t update;
for(S32 i = 0; i < count; ++i)
{
- msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id, i);
+ msg->getUUIDFast(msg_label, _PREHASH_ItemID, item_id, i);
+ lldebugs << "Checking for item-to-be-removed " << item_id << llendl;
LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
if(itemp)
{
+ lldebugs << "Item will be removed " << item_id << llendl;
// we only bother with the delete and account if we found
// the item - this is usually a back-up for permissions,
// so frequently the item will already be gone.
@@ -2314,8 +2312,24 @@ void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
gInventory.accountForUpdate(update);
for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it)
{
+ lldebugs << "Calling deleteObject " << *it << llendl;
gInventory.deleteObject(*it);
}
+}
+
+// static
+void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
+{
+ lldebugs << "LLInventoryModel::processRemoveInventoryItem()" << llendl;
+ LLUUID agent_id, item_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+ if(agent_id != gAgent.getID())
+ {
+ llwarns << "Got a RemoveInventoryItem for the wrong agent."
+ << llendl;
+ return;
+ }
+ LLInventoryModel::removeInventoryItem(agent_id, msg, _PREHASH_InventoryData);
gInventory.notifyObservers();
}
@@ -2380,18 +2394,10 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
}
// static
-void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
- void**)
+void LLInventoryModel::removeInventoryFolder(LLUUID agent_id,
+ LLMessageSystem* msg)
{
- lldebugs << "LLInventoryModel::processRemoveInventoryFolder()" << llendl;
- LLUUID agent_id, folder_id;
- msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_AgentID, agent_id);
- if(agent_id != gAgent.getID())
- {
- llwarns << "Got a RemoveInventoryFolder for the wrong agent."
- << llendl;
- return;
- }
+ LLUUID folder_id;
uuid_vec_t folder_ids;
update_map_t update;
S32 count = msg->getNumberOfBlocksFast(_PREHASH_FolderData);
@@ -2410,6 +2416,42 @@ void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
{
gInventory.deleteObject(*it);
}
+}
+
+// static
+void LLInventoryModel::processRemoveInventoryFolder(LLMessageSystem* msg,
+ void**)
+{
+ lldebugs << "LLInventoryModel::processRemoveInventoryFolder()" << llendl;
+ LLUUID agent_id, session_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
+ if(agent_id != gAgent.getID())
+ {
+ llwarns << "Got a RemoveInventoryFolder for the wrong agent."
+ << llendl;
+ return;
+ }
+ LLInventoryModel::removeInventoryFolder( agent_id, msg );
+ gInventory.notifyObservers();
+}
+
+// static
+void LLInventoryModel::processRemoveInventoryObjects(LLMessageSystem* msg,
+ void**)
+{
+ lldebugs << "LLInventoryModel::processRemoveInventoryObjects()" << llendl;
+ LLUUID agent_id, session_id;
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
+ msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
+ if(agent_id != gAgent.getID())
+ {
+ llwarns << "Got a RemoveInventoryObjects for the wrong agent."
+ << llendl;
+ return;
+ }
+ LLInventoryModel::removeInventoryFolder( agent_id, msg );
+ LLInventoryModel::removeInventoryItem( agent_id, msg, _PREHASH_ItemData );
gInventory.notifyObservers();
}
@@ -2589,7 +2631,7 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
LLInventoryState::sWearNewClothing = FALSE;
}
- if (tid == LLInventoryState::sWearNewClothingTransactionID)
+ if (tid.notNull() && tid == LLInventoryState::sWearNewClothingTransactionID)
{
count = wearable_ids.size();
for (i = 0; i < count; ++i)
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index 15da09990f..e0e81f1006 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -492,9 +492,12 @@ protected:
//--------------------------------------------------------------------
public:
static void processUpdateCreateInventoryItem(LLMessageSystem* msg, void**);
+ static void removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg, const char* msg_label);
static void processRemoveInventoryItem(LLMessageSystem* msg, void**);
static void processUpdateInventoryFolder(LLMessageSystem* msg, void**);
+ static void removeInventoryFolder(LLUUID agent_id, LLMessageSystem* msg);
static void processRemoveInventoryFolder(LLMessageSystem* msg, void**);
+ static void processRemoveInventoryObjects(LLMessageSystem* msg, void**);
static void processSaveAssetIntoInventory(LLMessageSystem* msg, void**);
static void processBulkUpdateInventory(LLMessageSystem* msg, void**);
static void processInventoryDescendents(LLMessageSystem* msg, void**);
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
index 7b1ff102e7..91fdd67806 100644
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -31,7 +31,9 @@
#include "llappviewer.h"
#include "llcallbacklist.h"
#include "llinventorypanel.h"
+#include "llinventorymodel.h"
#include "llviewercontrol.h"
+#include "llviewerinventory.h"
#include "llviewermessage.h"
#include "llviewerregion.h"
#include "llviewerwindow.h"
@@ -103,7 +105,7 @@ BOOL LLInventoryModelBackgroundFetch::backgroundFetchActive() const
void LLInventoryModelBackgroundFetch::start(const LLUUID& cat_id, BOOL recursive)
{
- if (!mAllFoldersFetched)
+ if (!mAllFoldersFetched || cat_id.notNull())
{
LL_DEBUGS("InventoryFetch") << "Start fetching category: " << cat_id << ", recursive: " << recursive << LL_ENDL;
@@ -209,7 +211,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// Double timeouts on failure.
mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f);
mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f);
- llinfos << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
+ lldebugs << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
// fetch is no longer considered "timely" although we will wait for full time-out.
mTimelyFetchPending = FALSE;
}
@@ -278,7 +280,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
// Shrink timeouts based on success.
mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f);
mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f);
- //llinfos << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
+ lldebugs << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << llendl;
}
mTimelyFetchPending = FALSE;
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 6bf19e346d..ceba4a0191 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -601,6 +601,34 @@ void LLInventoryAddedObserver::changed(U32 mask)
}
}
+void LLInventoryCategoryAddedObserver::changed(U32 mask)
+{
+ if (!(mask & LLInventoryObserver::ADD))
+ {
+ return;
+ }
+
+ const LLInventoryModel::changed_items_t& changed_ids = gInventory.getChangedIDs();
+
+ for (LLInventoryModel::changed_items_t::const_iterator cit = changed_ids.begin(); cit != changed_ids.end(); ++cit)
+ {
+ LLViewerInventoryCategory* cat = gInventory.getCategory(*cit);
+
+ if (cat)
+ {
+ mAddedCategories.push_back(cat);
+ }
+ }
+
+ if (!mAddedCategories.empty())
+ {
+ done();
+
+ mAddedCategories.clear();
+ }
+}
+
+
LLInventoryTransactionObserver::LLInventoryTransactionObserver(const LLTransactionID& transaction_id) :
mTransactionID(transaction_id)
{
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index 2d9021961e..aa1eae84d7 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -219,6 +219,28 @@ protected:
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// Class LLInventoryCategoryAddedObserver
+//
+// Base class for doing something when a new category is created in the
+// inventory.
+// It does not watch for a certain UUID, rather it acts when anything is added
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class LLInventoryCategoryAddedObserver : public LLInventoryObserver
+{
+public:
+
+ typedef std::vector<LLViewerInventoryCategory*> cat_vec_t;
+
+ LLInventoryCategoryAddedObserver() : mAddedCategories() {}
+ /*virtual*/ void changed(U32 mask);
+
+protected:
+ virtual void done() = 0;
+
+ cat_vec_t mAddedCategories;
+};
+
+//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLInventoryTransactionObserver
//
// Base class for doing something when an inventory transaction completes.
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 1dcb91ad4d..1aa402802e 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -35,6 +35,7 @@
#include "llavataractions.h"
#include "llfloaterinventory.h"
#include "llfloaterreg.h"
+#include "llfolderview.h"
#include "llimfloater.h"
#include "llimview.h"
#include "llinventorybridge.h"
@@ -42,7 +43,6 @@
#include "llinventorymodelbackgroundfetch.h"
#include "llsidepanelinventory.h"
#include "llsidetray.h"
-#include "llscrollcontainer.h"
#include "llviewerattachmenu.h"
#include "llviewerfoldertype.h"
#include "llvoavatarself.h"
@@ -131,9 +131,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
mInventory(p.inventory),
mAllowMultiSelect(p.allow_multi_select),
mShowItemLinkOverlays(p.show_item_link_overlays),
+ mShowLoadStatus(p.show_load_status),
mViewsInitialized(false),
- mStartFolderString(p.start_folder),
- mBuildDefaultHierarchy(true),
mInvFVBridgeBuilder(NULL)
{
mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER;
@@ -146,11 +145,88 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
mCommitCallbackRegistrar.add("Inventory.AttachObject", boost::bind(&LLInventoryPanel::attachObject, this, _2));
mCommitCallbackRegistrar.add("Inventory.BeginIMSession", boost::bind(&LLInventoryPanel::beginIMSession, this));
mCommitCallbackRegistrar.add("Inventory.Share", boost::bind(&LLAvatarActions::shareWithAvatars));
+
+}
+
+void LLInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
+{
+ // Determine the root folder in case specified, and
+ // build the views starting with that folder.
+
+ std::string start_folder_name(params.start_folder());
+
+ const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(start_folder_name);
+
+ LLUUID root_id;
+
+ if ("LIBRARY" == params.start_folder())
+ {
+ root_id = gInventory.getLibraryRootFolderID();
+ }
+ // leslie -- temporary HACK to work around sim not creating inbox and outbox with proper system folder type
+ else if (preferred_type == LLFolderType::FT_INBOX)
+ {
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+
+ gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items);
+
+ if (cats)
+ {
+ for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it)
+ {
+ LLInventoryCategory* cat = *cat_it;
+
+ if (cat->getName() == "Received Items")
+ {
+ root_id = cat->getUUID();
+ }
+ }
+ }
+ }
+ // leslie -- temporary HACK to work around sim not creating inbox and outbox with proper system folder type
+ else if (preferred_type == LLFolderType::FT_OUTBOX)
+ {
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+
+ gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items);
+
+ if (cats)
+ {
+ for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it)
+ {
+ LLInventoryCategory* cat = *cat_it;
+
+ if (cat->getName() == "Merchant Outbox")
+ {
+ root_id = cat->getUUID();
+ }
+ }
+ }
+ }
+ // leslie -- end temporary HACK
+ else
+ {
+ root_id = (preferred_type != LLFolderType::FT_NONE)
+ ? gInventory.findCategoryUUIDForType(preferred_type, false, false)
+ : LLUUID::null;
+ }
- if (mStartFolderString != "")
+ if ((root_id == LLUUID::null) && !start_folder_name.empty())
{
- mBuildDefaultHierarchy = false;
+ llwarns << "No category found that matches start_folder: " << start_folder_name << llendl;
+ root_id = LLUUID::generateNewID();
}
+
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY,
+ LLAssetType::AT_CATEGORY,
+ LLInventoryType::IT_CATEGORY,
+ this,
+ NULL,
+ root_id);
+
+ mFolderRoot = createFolderView(new_listener, params.use_label_suffix());
}
void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
@@ -159,22 +235,7 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
- // Create root folder
- {
- LLRect folder_rect(0,
- 0,
- getRect().getWidth(),
- 0);
- LLFolderView::Params p;
- p.name = getName();
- p.title = getLabel();
- p.rect = folder_rect;
- p.parent_panel = this;
- p.tool_tip = p.name;
- p.use_label_suffix = params.use_label_suffix;
- mFolderRoot = LLUICtrlFactory::create<LLFolderView>(p);
- mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);
- }
+ buildFolderView(params);
mCommitCallbackRegistrar.popScope();
@@ -184,13 +245,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
{
LLRect scroller_view_rect = getRect();
scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
- LLScrollContainer::Params p;
- p.name("Inventory Scroller");
- p.rect(scroller_view_rect);
- p.follows.flags(FOLLOWS_ALL);
- p.reserve_scroll_corner(true);
- p.tab_stop(true);
- mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+ LLScrollContainer::Params scroller_params(params.scroll());
+ scroller_params.rect(scroller_view_rect);
+ mScroller = LLUICtrlFactory::create<LLScrollContainer>(scroller_params);
addChild(mScroller);
mScroller->addChild(mFolderRoot);
mFolderRoot->setScrollContainer(mScroller);
@@ -206,7 +263,7 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
// Build view of inventory if we need default full hierarchy and inventory ready,
// otherwise wait for idle callback.
- if (mBuildDefaultHierarchy && mInventory->isInventoryUsable() && !mViewsInitialized)
+ if (mInventory->isInventoryUsable() && !mViewsInitialized)
{
initializeViews();
}
@@ -222,6 +279,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
}
mFolderRoot->setSortOrder(getFilter()->getSortOrder());
+ // hide inbox
+ getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX));
+
// Initialize base class params.
LLPanel::initFromParams(params);
}
@@ -264,6 +324,15 @@ LLInventoryFilter* LLInventoryPanel::getFilter()
return NULL;
}
+const LLInventoryFilter* LLInventoryPanel::getFilter() const
+{
+ if (mFolderRoot)
+ {
+ return mFolderRoot->getFilter();
+ }
+ return NULL;
+}
+
void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType filter_type)
{
if (filter_type == LLInventoryFilter::FILTERTYPE_OBJECT)
@@ -272,6 +341,17 @@ void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType
getFilter()->setFilterCategoryTypes(types);
}
+U32 LLInventoryPanel::getFilterObjectTypes() const
+{
+ return mFolderRoot->getFilterObjectTypes();
+}
+
+U32 LLInventoryPanel::getFilterPermMask() const
+{
+ return mFolderRoot->getFilterPermissions();
+}
+
+
void LLInventoryPanel::setFilterPermMask(PermissionMask filter_perm_mask)
{
getFilter()->setFilterPermissions(filter_perm_mask);
@@ -287,6 +367,12 @@ void LLInventoryPanel::setFilterSubString(const std::string& string)
getFilter()->setFilterSubString(string);
}
+const std::string LLInventoryPanel::getFilterSubString()
+{
+ return mFolderRoot->getFilterSubString();
+}
+
+
void LLInventoryPanel::setSortOrder(U32 order)
{
getFilter()->setSortOrder(order);
@@ -298,6 +384,12 @@ void LLInventoryPanel::setSortOrder(U32 order)
}
}
+U32 LLInventoryPanel::getSortOrder() const
+{
+ return mFolderRoot->getSortOrder();
+}
+
+
void LLInventoryPanel::setSinceLogoff(BOOL sl)
{
getFilter()->setDateRangeLastLogoff(sl);
@@ -379,7 +471,8 @@ void LLInventoryPanel::modelChanged(U32 mask)
{
view_item->destroyView();
}
- buildNewViews(item_id);
+ view_item = buildNewViews(item_id);
+ view_folder = dynamic_cast<LLFolderViewFolder *>(view_item);
}
//////////////////////////////
@@ -432,11 +525,10 @@ void LLInventoryPanel::modelChanged(U32 mask)
//////////////////////////////
// STRUCTURE Operation
// This item already exists in both memory and UI. It was probably reparented.
- if (model_item && view_item)
+ else if (model_item && view_item)
{
- // Don't process the item if it's hanging from the root, since its
- // model_item's parent will be NULL.
- if (view_item->getRoot() != view_item->getParent())
+ // Don't process the item if it is the root
+ if (view_item->getRoot() != view_item)
{
LLFolderViewFolder* new_parent = (LLFolderViewFolder*)mFolderRoot->getItemByID(model_item->getParentUUID());
// Item has been moved.
@@ -461,7 +553,7 @@ void LLInventoryPanel::modelChanged(U32 mask)
//////////////////////////////
// REMOVE Operation
// This item has been removed from memory, but its associated UI element still exists.
- if (!model_item && view_item)
+ else if (!model_item && view_item)
{
// Remove the item's UI.
view_item->destroyView();
@@ -470,6 +562,12 @@ void LLInventoryPanel::modelChanged(U32 mask)
}
}
+LLFolderView* LLInventoryPanel::getRootFolder()
+{
+ return mFolderRoot;
+}
+
+
// static
void LLInventoryPanel::onIdle(void *userdata)
{
@@ -488,23 +586,16 @@ void LLInventoryPanel::onIdle(void *userdata)
}
}
+const LLUUID& LLInventoryPanel::getRootFolderID() const
+{
+ return mFolderRoot->getListener()->getUUID();
+}
+
void LLInventoryPanel::initializeViews()
{
if (!gInventory.isInventoryUsable()) return;
- // Determine the root folder in case specified, and
- // build the views starting with that folder.
- const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(mStartFolderString);
-
- if ("LIBRARY" == mStartFolderString)
- {
- mStartFolderID = gInventory.getLibraryRootFolderID();
- }
- else
- {
- mStartFolderID = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
- }
- rebuildViewsFor(mStartFolderID);
+ rebuildViewsFor(getRootFolderID());
mViewsInitialized = true;
@@ -529,132 +620,155 @@ void LLInventoryPanel::initializeViews()
}
}
-void LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
+LLFolderViewItem* LLInventoryPanel::rebuildViewsFor(const LLUUID& id)
{
// Destroy the old view for this ID so we can rebuild it.
LLFolderViewItem* old_view = mFolderRoot->getItemByID(id);
- if (old_view && id.notNull())
+ if (old_view)
{
old_view->destroyView();
}
- buildNewViews(id);
+ return buildNewViews(id);
}
-void LLInventoryPanel::buildNewViews(const LLUUID& id)
+LLFolderView * LLInventoryPanel::createFolderView(LLInvFVBridge * bridge, bool useLabelSuffix)
{
- LLMemType mt(LLMemType::MTYPE_INVENTORY_BUILD_NEW_VIEWS);
- LLFolderViewItem* itemp = NULL;
- LLInventoryObject* objectp = gInventory.getObject(id);
- if (objectp)
+ LLRect folder_rect(0,
+ 0,
+ getRect().getWidth(),
+ 0);
+
+ LLFolderView::Params p;
+
+ p.name = getName();
+ p.title = getLabel();
+ p.rect = folder_rect;
+ p.parent_panel = this;
+ p.tool_tip = p.name;
+ p.listener = bridge;
+ p.use_label_suffix = useLabelSuffix;
+ p.allow_multiselect = mAllowMultiSelect;
+ p.show_load_status = mShowLoadStatus;
+
+ return LLUICtrlFactory::create<LLFolderView>(p);
+}
+
+LLFolderViewFolder * LLInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge)
+{
+ LLFolderViewFolder::Params params;
+
+ params.name = bridge->getDisplayName();
+ params.icon = bridge->getIcon();
+ params.icon_open = bridge->getOpenIcon();
+
+ if (mShowItemLinkOverlays) // if false, then links show up just like normal items
{
- const LLUUID &parent_id = objectp->getParentUUID();
- LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id);
- if (id == mStartFolderID)
- {
- parent_folder = mFolderRoot;
- }
- else if ((mStartFolderID != LLUUID::null) && (!gInventory.isObjectDescendentOf(id, mStartFolderID)))
- {
- // This item exists outside the inventory's hierarchy, so don't add it.
- return;
- }
-
- if (objectp->getType() <= LLAssetType::AT_NONE ||
- objectp->getType() >= LLAssetType::AT_COUNT)
- {
- llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : "
- << ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID()
- << llendl;
- return;
- }
-
- if ((objectp->getType() == LLAssetType::AT_CATEGORY) &&
- (objectp->getActualType() != LLAssetType::AT_LINK_FOLDER))
- {
- LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
- objectp->getType(),
- LLInventoryType::IT_CATEGORY,
- this,
- mFolderRoot,
- objectp->getUUID());
- if (new_listener)
- {
- LLFolderViewFolder::Params params;
- params.name = new_listener->getDisplayName();
- params.icon = new_listener->getIcon();
- params.icon_open = new_listener->getOpenIcon();
- if (mShowItemLinkOverlays) // if false, then links show up just like normal items
- {
- params.icon_overlay = LLUI::getUIImage("Inv_Link");
- }
- params.root = mFolderRoot;
- params.listener = new_listener;
- params.tool_tip = params.name;
- LLFolderViewFolder* folderp = LLUICtrlFactory::create<LLFolderViewFolder>(params);
- folderp->setItemSortOrder(mFolderRoot->getSortOrder());
- itemp = folderp;
-
- // Hide the root folder, so we can show the contents of a folder flat
- // but still have the parent folder present for listener-related operations.
- if (id == mStartFolderID)
- {
- folderp->setHidden(TRUE);
- }
- const LLViewerInventoryCategory *cat = dynamic_cast<LLViewerInventoryCategory *>(objectp);
- if (cat && getIsHiddenFolderType(cat->getPreferredType()))
- {
- folderp->setHidden(TRUE);
- }
- }
- }
- else
- {
- // Build new view for item.
- LLInventoryItem* item = (LLInventoryItem*)objectp;
- LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
- item->getActualType(),
- item->getInventoryType(),
- this,
- mFolderRoot,
- item->getUUID(),
- item->getFlags());
-
- if (new_listener)
- {
- LLFolderViewItem::Params params;
- params.name = new_listener->getDisplayName();
- params.icon = new_listener->getIcon();
- params.icon_open = new_listener->getOpenIcon();
- if (mShowItemLinkOverlays) // if false, then links show up just like normal items
- {
- params.icon_overlay = LLUI::getUIImage("Inv_Link");
- }
- params.creation_date = new_listener->getCreationDate();
- params.root = mFolderRoot;
- params.listener = new_listener;
- params.rect = LLRect (0, 0, 0, 0);
- params.tool_tip = params.name;
- itemp = LLUICtrlFactory::create<LLFolderViewItem> (params);
- }
- }
+ params.icon_overlay = LLUI::getUIImage("Inv_Link");
+ }
+
+ params.root = mFolderRoot;
+ params.listener = bridge;
+ params.tool_tip = params.name;
- if (itemp)
- {
- itemp->addToFolder(parent_folder, mFolderRoot);
+ return LLUICtrlFactory::create<LLFolderViewFolder>(params);
+}
- // Don't add children of hidden folders unless this is the panel's root folder.
- if (itemp->getHidden() && (id != mStartFolderID))
- {
- return;
- }
+LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge)
+{
+ LLFolderViewItem::Params params;
+
+ params.name = bridge->getDisplayName();
+ params.icon = bridge->getIcon();
+ params.icon_open = bridge->getOpenIcon();
+
+ if (mShowItemLinkOverlays) // if false, then links show up just like normal items
+ {
+ params.icon_overlay = LLUI::getUIImage("Inv_Link");
+ }
+
+ params.creation_date = bridge->getCreationDate();
+ params.root = mFolderRoot;
+ params.listener = bridge;
+ params.rect = LLRect (0, 0, 0, 0);
+ params.tool_tip = params.name;
+
+ return LLUICtrlFactory::create<LLFolderViewItem>(params);
+}
+
+LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id)
+{
+ LLInventoryObject const* objectp = gInventory.getObject(id);
+ LLUUID root_id = mFolderRoot->getListener()->getUUID();
+ LLFolderViewFolder* parent_folder = NULL;
+ LLFolderViewItem* itemp = NULL;
+
+ if (id == root_id)
+ {
+ parent_folder = mFolderRoot;
+ }
+ else if (objectp)
+ {
+ const LLUUID &parent_id = objectp->getParentUUID();
+ parent_folder = (LLFolderViewFolder*)mFolderRoot->getItemByID(parent_id);
+
+ if (parent_folder)
+ {
+ if (objectp->getType() <= LLAssetType::AT_NONE ||
+ objectp->getType() >= LLAssetType::AT_COUNT)
+ {
+ llwarns << "LLInventoryPanel::buildNewViews called with invalid objectp->mType : "
+ << ((S32) objectp->getType()) << " name " << objectp->getName() << " UUID " << objectp->getUUID()
+ << llendl;
+ return NULL;
+ }
+
+ if ((objectp->getType() == LLAssetType::AT_CATEGORY) &&
+ (objectp->getActualType() != LLAssetType::AT_LINK_FOLDER))
+ {
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(objectp->getType(),
+ objectp->getType(),
+ LLInventoryType::IT_CATEGORY,
+ this,
+ mFolderRoot,
+ objectp->getUUID());
+ if (new_listener)
+ {
+ LLFolderViewFolder* folderp = createFolderViewFolder(new_listener);
+ folderp->setItemSortOrder(mFolderRoot->getSortOrder());
+ itemp = folderp;
+ }
+ }
+ else
+ {
+ // Build new view for item.
+ LLInventoryItem* item = (LLInventoryItem*)objectp;
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(item->getType(),
+ item->getActualType(),
+ item->getInventoryType(),
+ this,
+ mFolderRoot,
+ item->getUUID(),
+ item->getFlags());
+
+ if (new_listener)
+ {
+ itemp = createFolderViewItem(new_listener);
+ }
+ }
+
+ if (itemp)
+ {
+ itemp->addToFolder(parent_folder, mFolderRoot);
+ }
}
}
// If this is a folder, add the children of the folder and recursively add any
// child folders.
- if ((id == mStartFolderID) ||
- (objectp && objectp->getType() == LLAssetType::AT_CATEGORY))
+ if (id.isNull()
+ || (objectp
+ && objectp->getType() == LLAssetType::AT_CATEGORY))
{
LLViewerInventoryCategory::cat_array_t* categories;
LLViewerInventoryItem::item_array_t* items;
@@ -671,7 +785,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
}
}
- if(items)
+ if(items && parent_folder)
{
for (LLViewerInventoryItem::item_array_t::const_iterator item_iter = items->begin();
item_iter != items->end();
@@ -683,28 +797,23 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
}
mInventory->unlockDirectDescendentArrays(id);
}
+
+ return itemp;
}
// bit of a hack to make sure the inventory is open.
void LLInventoryPanel::openStartFolderOrMyInventory()
{
- if (mStartFolderString != "")
- {
- mFolderRoot->openFolder(mStartFolderString);
- }
- else
+ // Find My Inventory folder and open it up by name
+ for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child))
{
- // Find My Inventory folder and open it up by name
- for (LLView *child = mFolderRoot->getFirstChild(); child; child = mFolderRoot->findNextSibling(child))
+ LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
+ if (fchild
+ && fchild->getListener()
+ && fchild->getListener()->getUUID() == gInventory.getRootFolderID())
{
- LLFolderViewFolder *fchild = dynamic_cast<LLFolderViewFolder*>(child);
- if (fchild && fchild->getListener() &&
- (fchild->getListener()->getUUID() == gInventory.getRootFolderID()))
- {
- const std::string& child_name = child->getName();
- mFolderRoot->openFolder(child_name);
- break;
- }
+ fchild->setOpen(TRUE);
+ break;
}
}
}
@@ -723,6 +832,12 @@ void LLInventoryPanel::openSelected()
bridge->openItem();
}
+void LLInventoryPanel::unSelectAll()
+{
+ mFolderRoot->setSelection(NULL, FALSE, FALSE);
+}
+
+
BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask)
{
BOOL handled = LLView::handleHover(x, y, mask);
@@ -785,6 +900,18 @@ void LLInventoryPanel::onFocusReceived()
LLPanel::onFocusReceived();
}
+bool LLInventoryPanel::addBadge(LLBadge * badge)
+{
+ bool badge_added = false;
+
+ if (acceptsBadge())
+ {
+ badge_added = badge->addToView(mFolderRoot);
+ }
+
+ return badge_added;
+}
+
void LLInventoryPanel::openAllFolders()
{
mFolderRoot->setOpenArrangeRecursively(TRUE, LLFolderViewFolder::RECURSE_DOWN);
@@ -802,7 +929,7 @@ void LLInventoryPanel::setSelection(const LLUUID& obj_id, BOOL take_keyboard_foc
mFolderRoot->setSelectionByID(obj_id, take_keyboard_focus);
}
-void LLInventoryPanel::setSelectCallback(const LLFolderView::signal_t::slot_type& cb)
+void LLInventoryPanel::setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb)
{
if (mFolderRoot)
{
@@ -1067,15 +1194,12 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)
void LLInventoryPanel::addHideFolderType(LLFolderType::EType folder_type)
{
- if (!getIsHiddenFolderType(folder_type))
- {
- mHiddenFolderTypes.push_back(folder_type);
- }
+ getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << folder_type));
}
BOOL LLInventoryPanel::getIsHiddenFolderType(LLFolderType::EType folder_type) const
{
- return (std::find(mHiddenFolderTypes.begin(), mHiddenFolderTypes.end(), folder_type) != mHiddenFolderTypes.end());
+ return !(getFilter()->getFilterCategoryTypes() & (1ULL << folder_type));
}
@@ -1092,6 +1216,13 @@ public:
struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
{};
+ void initFromParams(const Params& p)
+ {
+ LLInventoryPanel::initFromParams(p);
+ // turn on inbox for recent items
+ getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() | (1ULL << LLFolderType::FT_INBOX));
+ }
+
protected:
LLInventoryRecentItemsPanel (const Params&);
friend class LLUICtrlFactory;
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 9da9f7d8ba..7676bbb6d7 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -33,11 +33,13 @@
#include "llfloater.h"
#include "llinventory.h"
#include "llinventoryfilter.h"
-#include "llfolderview.h"
#include "llinventorymodel.h"
+#include "llscrollcontainer.h"
#include "lluictrlfactory.h"
#include <set>
+class LLFolderView;
+class LLFolderViewFolder;
class LLFolderViewItem;
class LLInventoryFilter;
class LLInventoryModel;
@@ -46,7 +48,6 @@ class LLInventoryFVBridgeBuilder;
class LLMenuBarGL;
class LLCheckBoxCtrl;
class LLSpinCtrl;
-class LLScrollContainer;
class LLTextBox;
class LLIconCtrl;
class LLSaveFolderState;
@@ -83,6 +84,8 @@ public:
Optional<Filter> filter;
Optional<std::string> start_folder;
Optional<bool> use_label_suffix;
+ Optional<bool> show_load_status;
+ Optional<LLScrollContainer::Params> scroll;
Params()
: sort_order_setting("sort_order_setting"),
@@ -91,7 +94,9 @@ public:
show_item_link_overlays("show_item_link_overlays", false),
filter("filter"),
start_folder("start_folder"),
- use_label_suffix("use_label_suffix", true)
+ use_label_suffix("use_label_suffix", true),
+ show_load_status("show_load_status"),
+ scroll("scroll")
{}
};
@@ -120,19 +125,23 @@ public:
/*virtual*/ void onFocusLost();
/*virtual*/ void onFocusReceived();
+ // LLBadgeHolder methods
+ bool addBadge(LLBadge * badge);
+
// Call this method to set the selection.
void openAllFolders();
void setSelection(const LLUUID& obj_id, BOOL take_keyboard_focus);
- void setSelectCallback(const LLFolderView::signal_t::slot_type& cb);
+ void setSelectCallback(const boost::function<void (const std::deque<LLFolderViewItem*>& items, BOOL user_action)>& cb);
void clearSelection();
LLInventoryFilter* getFilter();
+ const LLInventoryFilter* getFilter() const;
void setFilterTypes(U64 filter, LLInventoryFilter::EFilterType = LLInventoryFilter::FILTERTYPE_OBJECT);
- U32 getFilterObjectTypes() const { return mFolderRoot->getFilterObjectTypes(); }
+ U32 getFilterObjectTypes() const;
void setFilterPermMask(PermissionMask filter_perm_mask);
- U32 getFilterPermMask() const { return mFolderRoot->getFilterPermissions(); }
+ U32 getFilterPermMask() const;
void setFilterWearableTypes(U64 filter);
void setFilterSubString(const std::string& string);
- const std::string getFilterSubString() { return mFolderRoot->getFilterSubString(); }
+ const std::string getFilterSubString();
void setSinceLogoff(BOOL sl);
void setHoursAgo(U32 hours);
BOOL getSinceLogoff();
@@ -140,10 +149,9 @@ public:
void setShowFolderState(LLInventoryFilter::EFolderShow show);
LLInventoryFilter::EFolderShow getShowFolderState();
- void setAllowMultiSelect(BOOL allow) { mFolderRoot->setAllowMultiSelect(allow); }
// This method is called when something has changed about the inventory.
void modelChanged(U32 mask);
- LLFolderView* getRootFolder() { return mFolderRoot; }
+ LLFolderView* getRootFolder();
LLScrollContainer* getScrollableContainer() { return mScroller; }
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
@@ -158,7 +166,7 @@ public:
static void dumpSelectionInformation(void* user_data);
void openSelected();
- void unSelectAll() { mFolderRoot->setSelection(NULL, FALSE, FALSE); }
+ void unSelectAll();
static void onIdle(void* user_data);
@@ -175,6 +183,7 @@ protected:
LLInvPanelComplObserver* mCompletionObserver;
BOOL mAllowMultiSelect;
BOOL mShowItemLinkOverlays; // Shows link graphic over inventory item icons
+ BOOL mShowLoadStatus;
LLFolderView* mFolderRoot;
LLScrollContainer* mScroller;
@@ -198,7 +207,7 @@ public:
static const std::string INHERIT_SORT_ORDER;
void setSortOrder(U32 order);
- U32 getSortOrder() const { return mFolderRoot->getSortOrder(); }
+ U32 getSortOrder() const;
private:
std::string mSortOrderSetting;
@@ -207,29 +216,27 @@ private:
//--------------------------------------------------------------------
public:
void addHideFolderType(LLFolderType::EType folder_type);
-protected:
- BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const;
-private:
- std::vector<LLFolderType::EType> mHiddenFolderTypes;
- //--------------------------------------------------------------------
- // Initialization routines for building up the UI ("views")
- //--------------------------------------------------------------------
public:
BOOL getIsViewsInitialized() const { return mViewsInitialized; }
- const LLUUID& getStartFolderID() const { return mStartFolderID; }
- const std::string& getStartFolderString() { return mStartFolderString; }
+ const LLUUID& getRootFolderID() const;
protected:
// Builds the UI. Call this once the inventory is usable.
void initializeViews();
- void rebuildViewsFor(const LLUUID& id); // Given the id and the parent, build all of the folder views.
- virtual void buildNewViews(const LLUUID& id);
+ LLFolderViewItem* rebuildViewsFor(const LLUUID& id); // Given the id and the parent, build all of the folder views.
+
+ virtual void buildFolderView(const LLInventoryPanel::Params& params);
+ LLFolderViewItem* buildNewViews(const LLUUID& id);
+ BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const;
+
+ virtual LLFolderView* createFolderView(LLInvFVBridge * bridge, bool useLabelSuffix);
+ virtual LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge);
+ virtual LLFolderViewItem* createFolderViewItem(LLInvFVBridge * bridge);
private:
BOOL mBuildDefaultHierarchy; // default inventory hierarchy should be created in postBuild()
BOOL mViewsInitialized; // Views have been generated
// UUID of category from which hierarchy should be built. Set with the
// "start_folder" xml property. Default is LLUUID::null that means total Inventory hierarchy.
- std::string mStartFolderString;
LLUUID mStartFolderID;
};
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 5c65dcec34..1c8f6b6c98 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -190,6 +190,7 @@ LLLocationInputCtrl::Params::Params()
scripts_icon("scripts_icon"),
damage_icon("damage_icon"),
damage_text("damage_text"),
+ see_avatars_icon("see_avatars_icon"),
maturity_help_topic("maturity_help_topic")
{
}
@@ -342,6 +343,13 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
addChild(mDamageText);
+ LLIconCtrl::Params see_avatars_icon = p.see_avatars_icon;
+ see_avatars_icon.tool_tip = LLTrans::getString("LocationCtrlSeeAVsTooltip");
+ see_avatars_icon.mouse_opaque = true;
+ mParcelIcon[SEE_AVATARS_ICON] = LLUICtrlFactory::create<LLIconCtrl>(see_avatars_icon);
+ mParcelIcon[SEE_AVATARS_ICON]->setMouseDownCallback(boost::bind(&LLLocationInputCtrl::onParcelIconClick, this, SEE_AVATARS_ICON));
+ addChild(mParcelIcon[SEE_AVATARS_ICON]);
+
// Register callbacks and load the location field context menu (NB: the order matters).
LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Navbar.EnableMenuItem", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemEnabled, this, _2));
@@ -810,6 +818,7 @@ void LLLocationInputCtrl::refreshParcelIcons()
bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel);
bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel);
+ bool see_avs = current_parcel->getSeeAVs();
// Most icons are "block this ability"
mParcelIcon[VOICE_ICON]->setVisible( !allow_voice );
@@ -819,6 +828,7 @@ void LLLocationInputCtrl::refreshParcelIcons()
mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage );
mDamageText->setVisible(allow_damage);
+ mParcelIcon[SEE_AVATARS_ICON]->setVisible( !see_avs );
// Padding goes to left of both landmark star and for sale btn
x -= mAddLandmarkHPad;
@@ -1175,6 +1185,9 @@ void LLLocationInputCtrl::onParcelIconClick(EParcelIcon icon)
case DAMAGE_ICON:
LLNotificationsUtil::add("NotSafe");
break;
+ case SEE_AVATARS_ICON:
+ LLNotificationsUtil::add("SeeAvatars");
+ break;
case ICON_COUNT:
break;
// no default to get compiler warning when a new icon gets added
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
index 6368bf5cf2..ed47ba73e3 100644
--- a/indra/newview/lllocationinputctrl.h
+++ b/indra/newview/lllocationinputctrl.h
@@ -77,7 +77,8 @@ public:
push_icon,
build_icon,
scripts_icon,
- damage_icon;
+ damage_icon,
+ see_avatars_icon;
Optional<LLTextBox::Params> damage_text;
Params();
};
@@ -109,12 +110,13 @@ private:
enum EParcelIcon
{
VOICE_ICON = 0,
- FLY_ICON,
- PUSH_ICON,
- BUILD_ICON,
- SCRIPTS_ICON,
- DAMAGE_ICON,
- ICON_COUNT
+ FLY_ICON, // 1
+ PUSH_ICON, // 2
+ BUILD_ICON, // 3
+ SCRIPTS_ICON, // 4
+ DAMAGE_ICON, // 5
+ SEE_AVATARS_ICON, // 6
+ ICON_COUNT // 7 total
};
friend class LLUICtrlFactory;
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
index 48be251611..9b4f146332 100644
--- a/indra/newview/llloginhandler.cpp
+++ b/indra/newview/llloginhandler.cpp
@@ -30,13 +30,13 @@
// viewer includes
#include "llsecapi.h"
-#include "lllogininstance.h" // to check if logged in yet
-#include "llpanellogin.h" // save_password_to_disk()
+#include "lllogininstance.h" // to check if logged in yet
+#include "llpanellogin.h"
#include "llstartup.h" // getStartupState()
#include "llslurl.h"
#include "llviewercontrol.h" // gSavedSettings
#include "llviewernetwork.h" // EGridInfo
-#include "llviewerwindow.h" // getWindow()
+#include "llviewerwindow.h" // getWindow()
// library includes
#include "llmd5.h"
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 00de6a86e1..f00d6087f9 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -568,6 +568,7 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
else
{
requested_options.append("basic-mode");
+ //requested_options.append("inventory-basic");
}
#endif
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
index 5c020e6d98..d73048a28b 100644
--- a/indra/newview/llmainlooprepeater.cpp
+++ b/indra/newview/llmainlooprepeater.cpp
@@ -46,7 +46,7 @@ void LLMainLoopRepeater::start(void)
{
if(mQueue != 0) return;
- mQueue = new LLThreadSafeQueue<LLSD>(gAPRPoolp, 1024);
+ mQueue = new LLThreadSafeQueue<LLSD>(1024);
mMainLoopConnection = LLEventPumps::instance().
obtain("mainloop").listen(LLEventPump::inventName(), boost::bind(&LLMainLoopRepeater::onMainLoop, this, _1));
mRepeaterConnection = LLEventPumps::instance().
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index b3ad9efeb2..5bbef78dd4 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -38,6 +38,7 @@
#include "llviewermedia.h"
#include "llviewertexture.h"
#include "llviewerwindow.h"
+#include "lldebugmessagebox.h"
#include "llweb.h"
#include "llrender.h"
#include "llpluginclassmedia.h"
@@ -318,6 +319,11 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
if (mContextMenu)
{
+ // hide/show debugging options
+ bool media_plugin_debugging_enabled = gSavedSettings.getBOOL("MediaPluginDebugging");
+ mContextMenu->setItemVisible("open_webinspector", media_plugin_debugging_enabled );
+ mContextMenu->setItemVisible("debug_separator", media_plugin_debugging_enabled );
+
mContextMenu->show(x, y);
LLMenuGL::showPopup(this, mContextMenu, x, y);
}
@@ -384,12 +390,22 @@ void LLMediaCtrl::onFocusLost()
//
BOOL LLMediaCtrl::postBuild ()
{
+ LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registar;
+ registar.add("Open.WebInspector", boost::bind(&LLMediaCtrl::onOpenWebInspector, this));
+
mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
"menu_media_ctrl.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
+
return TRUE;
}
+void LLMediaCtrl::onOpenWebInspector()
+{
+ if (mMediaSource && mMediaSource->hasMedia())
+ mMediaSource->getMediaPlugin()->showWebInspector( true );
+}
+
////////////////////////////////////////////////////////////////////////////////
//
BOOL LLMediaCtrl::handleKeyHere( KEY key, MASK mask )
@@ -708,6 +724,8 @@ LLPluginClassMedia* LLMediaCtrl::getMediaPlugin()
//
void LLMediaCtrl::draw()
{
+ F32 alpha = getDrawContext().mAlpha;
+
if ( gRestoreGL == 1 )
{
LLRect r = getRect();
@@ -746,21 +764,11 @@ void LLMediaCtrl::draw()
}
}
-// if(mHidingInitialLoad)
-// {
-// // If we're hiding loading, don't draw at all.
-// draw_media = false;
-// }
-
bool background_visible = isBackgroundVisible();
bool background_opaque = isBackgroundOpaque();
if(draw_media)
{
- // alpha off for this
- LLGLSUIDefault gls_ui;
- LLGLDisable gls_alphaTest( GL_ALPHA_TEST );
-
gGL.pushUIMatrix();
{
if (mIgnoreUIScale)
@@ -775,7 +783,8 @@ void LLMediaCtrl::draw()
// scale texture to fit the space using texture coords
gGL.getTexUnit(0)->bind(media_texture);
- gGL.color4fv( LLColor4::white.mV );
+ LLColor4 media_color = LLColor4::white % alpha;
+ gGL.color4fv( media_color.mV );
F32 max_u = ( F32 )media_plugin->getWidth() / ( F32 )media_plugin->getTextureWidth();
F32 max_v = ( F32 )media_plugin->getHeight() / ( F32 )media_plugin->getTextureHeight();
@@ -827,7 +836,6 @@ void LLMediaCtrl::draw()
}
// draw the browser
- gGL.setSceneBlendType(LLRender::BT_REPLACE);
gGL.begin( LLRender::QUADS );
if (! media_plugin->getTextureCoordsOpenGL())
{
@@ -860,7 +868,6 @@ void LLMediaCtrl::draw()
gGL.vertex2i( x_offset + width, y_offset );
}
gGL.end();
- gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
gGL.popUIMatrix();
@@ -1073,6 +1080,12 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
mHoverTextChanged = true;
};
break;
+
+ case MEDIA_EVENT_DEBUG_MESSAGE:
+ {
+ LL_INFOS("media") << self->getDebugMessageText() << LL_ENDL;
+ };
+ break;
};
// chain all events to any potential observers of this object.
@@ -1172,3 +1185,12 @@ void LLMediaCtrl::hideNotification()
mWindowShade->hide();
}
}
+
+void LLMediaCtrl::setTrustedContent(bool trusted)
+{
+ mTrusted = trusted;
+ if (mMediaSource)
+ {
+ mMediaSource->setTrustedBrowser(trusted);
+ }
+}
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 28666e620f..3c0436e27a 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -149,6 +149,8 @@ public:
void showNotification(boost::shared_ptr<class LLNotification> notify);
void hideNotification();
+ void setTrustedContent(bool trusted);
+
// over-rides
virtual BOOL handleKeyHere( KEY key, MASK mask);
virtual void handleVisibilityChange ( BOOL new_visibility );
@@ -164,6 +166,11 @@ public:
// Incoming media event dispatcher
virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+ // right click debugging item
+ void onOpenWebInspector();
+
+ LLUUID getTextureID() {return mMediaTextureID;}
+
protected:
void convertInputCoords(S32& x, S32& y);
@@ -176,7 +183,7 @@ public:
LLViewBorder* mBorder;
bool mFrequentUpdates;
bool mForceUpdate;
- const bool mTrusted;
+ bool mTrusted;
std::string mHomePageUrl;
std::string mHomePageMimeType;
std::string mCurrentNavUrl;
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 6e0722bcf9..fc594841e3 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -34,9 +34,9 @@
#include "llagent.h"
#include "llappviewer.h"
#include "llbufferstream.h"
+#include "llcallbacklist.h"
#include "llcurl.h"
#include "lldatapacker.h"
-#include "llfasttimer.h"
#include "llfloatermodelpreview.h"
#include "llfloaterperms.h"
#include "lleconomy.h"
@@ -49,6 +49,7 @@
#include "llthread.h"
#include "llvfile.h"
#include "llviewercontrol.h"
+#include "llviewerinventory.h"
#include "llviewermenufile.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
@@ -62,6 +63,7 @@
#include "llinventorymodel.h"
#include "llfoldertype.h"
#include "llviewerparcelmgr.h"
+#include "lluploadfloaterobservers.h"
#include "boost/lexical_cast.hpp"
@@ -71,13 +73,18 @@
#include <queue>
-LLFastTimer::DeclareTimer FTM_MESH_UPDATE("Mesh Update");
-LLFastTimer::DeclareTimer FTM_LOAD_MESH("Load Mesh");
-
LLMeshRepository gMeshRepo;
const U32 MAX_MESH_REQUESTS_PER_SECOND = 100;
+// Maximum mesh version to support. Three least significant digits are reserved for the minor version,
+// with major version changes indicating a format change that is not backwards compatible and should not
+// be parsed by viewers that don't specifically support that version. For example, if the integer "1" is
+// present, the version is 0.001. A viewer that can parse version 0.001 can also parse versions up to 0.999,
+// but not 1.0 (integer 1000).
+// See wiki at https://wiki.secondlife.com/wiki/Mesh/Mesh_Asset_Format
+const S32 MAX_MESH_VERSION = 999;
+
U32 LLMeshRepository::sBytesReceived = 0;
U32 LLMeshRepository::sHTTPRequestCount = 0;
U32 LLMeshRepository::sHTTPRetryCount = 0;
@@ -190,196 +197,6 @@ S32 LLMeshRepoThread::sActiveHeaderRequests = 0;
S32 LLMeshRepoThread::sActiveLODRequests = 0;
U32 LLMeshRepoThread::sMaxConcurrentRequests = 1;
-
-class LLTextureCostResponder : public LLCurl::Responder
-{
-public:
- LLTextureUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLTextureCostResponder(LLTextureUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
-
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingConfirmations--;
- if (isGoodStatus(status))
- {
- mThread->priceResult(mData, content);
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
-
- if (mData.mRetries < MAX_TEXTURE_UPLOAD_RETRIES)
- {
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
-
- if (status == 499 || status == 500)
- {
- mThread->uploadTexture(mData);
- }
- else
- {
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- else
- {
- llwarns << "Giving up after " << mData.mRetries << " retries." << llendl;
- }
- }
- }
-};
-
-class LLTextureUploadResponder : public LLCurl::Responder
-{
-public:
- LLTextureUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLTextureUploadResponder(LLTextureUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingUploads--;
- if (isGoodStatus(status))
- {
- mData.mUUID = content["new_asset"].asUUID();
- gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mData.mPostData, content));
- mThread->onTextureUploaded(mData);
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
-
- if (status == 404)
- {
- mThread->uploadTexture(mData);
- }
- else if (status == 499)
- {
- mThread->mConfirmedTextureQ.push(mData);
- }
- else
- {
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- }
-};
-
-class LLMeshCostResponder : public LLCurl::Responder
-{
-public:
- LLMeshUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLMeshCostResponder(LLMeshUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
-
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingConfirmations--;
-
- if (isGoodStatus(status))
- {
- mThread->priceResult(mData, content);
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
-
- if (status == HTTP_INTERNAL_ERROR)
- {
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
- mThread->uploadModel(mData);
- }
- else if (status == HTTP_BAD_REQUEST)
- {
- llwarns << "Status 400 received from server, giving up." << llendl;
- }
- else if (status == HTTP_NOT_FOUND)
- {
- llwarns <<"Status 404 received, server is disconnected, giving up." << llendl ;
- }
- else
- {
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- }
-};
-
-class LLMeshUploadResponder : public LLCurl::Responder
-{
-public:
- LLMeshUploadData mData;
- LLMeshUploadThread* mThread;
-
- LLMeshUploadResponder(LLMeshUploadData data, LLMeshUploadThread* thread)
- : mData(data), mThread(thread)
- {
- }
-
- virtual void completed(U32 status, const std::string& reason, const LLSD& content)
- {
- mThread->mPendingUploads--;
- if (isGoodStatus(status))
- {
- mData.mUUID = content["new_asset"].asUUID();
- if (mData.mUUID.isNull())
- {
- LLSD args;
- std::string message = content["error"]["message"];
- std::string identifier = content["error"]["identifier"];
- std::string invalidity_identifier = content["error"]["invalidity_identifier"];
-
- args["MESSAGE"] = message;
- args["IDENTIFIER"] = identifier;
- args["INVALIDITY_IDENTIFIER"] = invalidity_identifier;
- args["LABEL"] = mData.mBaseModel->mLabel;
-
- gMeshRepo.uploadError(args);
- }
- else
- {
- gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mData.mPostData, content));
- mThread->onModelUploaded(mData);
- }
- }
- else
- {
- llwarns << status << ": " << reason << llendl;
- llwarns << "Retrying. (" << ++mData.mRetries << ")" << llendl;
-
- if (status == 404)
- {
- mThread->uploadModel(mData);
- }
- else if (status == 499)
- {
- mThread->mConfirmedQ.push(mData);
- }
- else if (status != 500)
- { //drop internal server errors on the floor, otherwise grab
- llerrs << "Unhandled status " << status << llendl;
- }
- }
- }
-};
-
-
class LLMeshHeaderResponder : public LLCurl::Responder
{
public:
@@ -518,38 +335,16 @@ void log_upload_error(S32 status, const LLSD& content, std::string stage, std::s
}
}
-class LLModelObjectUploadResponder: public LLCurl::Responder
-{
- LLSD mObjectAsset;
- LLMeshUploadThread* mThread;
-
-public:
- LLModelObjectUploadResponder(LLMeshUploadThread* thread, const LLSD& object_asset):
- mThread(thread),
- mObjectAsset(object_asset)
- {
- }
-
- virtual void completedRaw(U32 status, const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer)
- {
- assert_main_thread();
-
- llinfos << "completed" << llendl;
- mThread->mPendingUploads--;
- mThread->mFinished = true;
- }
-};
-
class LLWholeModelFeeResponder: public LLCurl::Responder
{
LLMeshUploadThread* mThread;
LLSD mModelData;
+ LLHandle<LLWholeModelFeeObserver> mObserverHandle;
public:
- LLWholeModelFeeResponder(LLMeshUploadThread* thread, LLSD& model_data):
+ LLWholeModelFeeResponder(LLMeshUploadThread* thread, LLSD& model_data, LLHandle<LLWholeModelFeeObserver> observer_handle):
mThread(thread),
- mModelData(model_data)
+ mModelData(model_data),
+ mObserverHandle(observer_handle)
{
}
virtual void completed(U32 status,
@@ -562,20 +357,32 @@ public:
cc = llsd_from_file("fake_upload_error.xml");
}
- llinfos << "completed" << llendl;
mThread->mPendingUploads--;
dump_llsd_to_file(cc,make_dump_name("whole_model_fee_response_",dump_num));
+
+ LLWholeModelFeeObserver* observer = mObserverHandle.get();
+
if (isGoodStatus(status) &&
cc["state"].asString() == "upload")
{
- llinfos << "fee request succeeded" << llendl;
- mThread->mWholeModelUploadURL = cc["uploader"].asString();
+ mThread->mWholeModelUploadURL = cc["uploader"].asString();
+
+ if (observer)
+ {
+ cc["data"]["upload_price"] = cc["upload_price"];
+ observer->onModelPhysicsFeeReceived(cc["data"], mThread->mWholeModelUploadURL);
+ }
}
else
{
llwarns << "fee request failed" << llendl;
log_upload_error(status,cc,"fee",mModelData["name"]);
mThread->mWholeModelUploadURL = "";
+
+ if (observer)
+ {
+ observer->setModelPhysicsFeeErrorStatus(status, reason);
+ }
}
}
@@ -585,11 +392,13 @@ class LLWholeModelUploadResponder: public LLCurl::Responder
{
LLMeshUploadThread* mThread;
LLSD mModelData;
+ LLHandle<LLWholeModelUploadObserver> mObserverHandle;
public:
- LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data):
+ LLWholeModelUploadResponder(LLMeshUploadThread* thread, LLSD& model_data, LLHandle<LLWholeModelUploadObserver> observer_handle):
mThread(thread),
- mModelData(model_data)
+ mModelData(model_data),
+ mObserverHandle(observer_handle)
{
}
virtual void completed(U32 status,
@@ -605,32 +414,43 @@ public:
//assert_main_thread();
mThread->mPendingUploads--;
dump_llsd_to_file(cc,make_dump_name("whole_model_upload_response_",dump_num));
- llinfos << "LLWholeModelUploadResponder content: " << cc << llendl;
+
+ LLWholeModelUploadObserver* observer = mObserverHandle.get();
+
// requested "mesh" asset type isn't actually the type
// of the resultant object, fix it up here.
if (isGoodStatus(status) &&
cc["state"].asString() == "complete")
{
- llinfos << "upload succeeded" << llendl;
mModelData["asset_type"] = "object";
gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mModelData,cc));
+
+ if (observer)
+ {
+ doOnIdleOneTime(boost::bind(&LLWholeModelUploadObserver::onModelUploadSuccess, observer));
+ }
}
else
{
llwarns << "upload failed" << llendl;
std::string model_name = mModelData["name"].asString();
log_upload_error(status,cc,"upload",model_name);
+
+ if (observer)
+ {
+ doOnIdleOneTime(boost::bind(&LLWholeModelUploadObserver::onModelUploadFailure, observer));
+ }
}
}
};
LLMeshRepoThread::LLMeshRepoThread()
-: LLThread("mesh repo", NULL)
+: LLThread("mesh repo")
{
mWaiting = false;
- mMutex = new LLMutex(NULL);
- mHeaderMutex = new LLMutex(NULL);
- mSignal = new LLCondition(NULL);
+ mMutex = new LLMutex();
+ mHeaderMutex = new LLMutex();
+ mSignal = new LLCondition();
}
LLMeshRepoThread::~LLMeshRepoThread()
@@ -840,15 +660,16 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
}
U32 header_size = mMeshHeaderSize[mesh_id];
-
+
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id]["skin"]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id]["skin"]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh skin info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
@@ -859,7 +680,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -915,12 +736,13 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id]["physics_convex"]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id]["physics_convex"]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh skin info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
@@ -931,7 +753,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -987,12 +809,13 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id]["physics_mesh"]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id]["physics_mesh"]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh physics shape info
LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH);
@@ -1003,7 +826,7 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -1060,9 +883,9 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
S32 size = file.getSize();
if (size > 0)
- {
- U8 buffer[1024];
- S32 bytes = llmin(size, 1024);
+ { //NOTE -- if the header size is ever more than 4KB, this will break
+ U8 buffer[4096];
+ S32 bytes = llmin(size, 4096);
LLMeshRepository::sCacheBytesRead += bytes;
file.read(buffer, bytes);
if (headerReceived(mesh_params, buffer, bytes))
@@ -1084,6 +907,7 @@ bool LLMeshRepoThread::fetchMeshHeader(const LLVolumeParams& mesh_params)
retval = true;
//grab first 4KB if we're going to bother with a fetch. Cache will prevent future fetches if a full mesh fits
//within the first 4KB
+ //NOTE -- this will break of headers ever exceed 4KB
LLMeshRepository::sHTTPRequestCount++;
mCurlRequest->getByteRange(http_url, headers, 0, 4096, new LLMeshHeaderResponder(mesh_params));
}
@@ -1103,10 +927,12 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
if (header_size > 0)
{
+ S32 version = mMeshHeader[mesh_id]["version"].asInteger();
S32 offset = header_size + mMeshHeader[mesh_id][header_lod[lod]]["offset"].asInteger();
S32 size = mMeshHeader[mesh_id][header_lod[lod]]["size"].asInteger();
mHeaderMutex->unlock();
- if (offset >= 0 && size > 0)
+
+ if (version <= MAX_MESH_VERSION && offset >= 0 && size > 0)
{
//check VFS for mesh asset
@@ -1118,7 +944,7 @@ bool LLMeshRepoThread::fetchMeshLOD(const LLVolumeParams& mesh_params, S32 lod)
U8* buffer = new U8[size];
file.read(buffer, size);
- //make sure buffer isn't all 0's (reserved block but not written)
+ //make sure buffer isn't all 0's by checking the first 1KB (reserved block but not written)
bool zero = true;
for (S32 i = 0; i < llmin(size, 1024) && zero; ++i)
{
@@ -1204,14 +1030,11 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
}
{
- U32 cost = gMeshRepo.calcResourceCost(header);
-
LLUUID mesh_id = mesh_params.getSculptID();
mHeaderMutex->lock();
mMeshHeaderSize[mesh_id] = header_size;
mMeshHeader[mesh_id] = header;
- mMeshResourceCost[mesh_id] = cost;
mHeaderMutex->unlock();
//check for pending requests
@@ -1363,19 +1186,22 @@ bool LLMeshRepoThread::physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32
}
LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints)
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload,
+ LLHandle<LLWholeModelFeeObserver> fee_observer, LLHandle<LLWholeModelUploadObserver> upload_observer)
: LLThread("mesh upload"),
- mDiscarded(FALSE)
+ mDiscarded(FALSE),
+ mDoUpload(do_upload),
+ mWholeModelUploadURL(upload_url),
+ mFeeObserverHandle(fee_observer),
+ mUploadObserverHandle(upload_observer)
{
mInstanceList = data;
mUploadTextures = upload_textures;
mUploadSkin = upload_skin;
mUploadJoints = upload_joints;
- mMutex = new LLMutex(NULL);
+ mMutex = new LLMutex();
mCurlRequest = NULL;
- mPendingConfirmations = 0;
mPendingUploads = 0;
- mPendingCost = 0;
mFinished = false;
mOrigin = gAgent.getPositionAgent();
mHost = gAgent.getRegionHost();
@@ -1383,6 +1209,8 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");
mOrigin += gAgent.getAtAxis() * scale.magVec();
+
+ mMeshUploadTimeOut = gSavedSettings.getS32("MeshUploadTimeOut") ;
}
LLMeshUploadThread::~LLMeshUploadThread()
@@ -1441,7 +1269,14 @@ BOOL LLMeshUploadThread::isDiscarded()
void LLMeshUploadThread::run()
{
- doWholeModelUpload();
+ if (mDoUpload)
+ {
+ doWholeModelUpload();
+ }
+ else
+ {
+ requestWholeModelFee();
+ }
}
void dump_llsd_to_file(const LLSD& content, std::string filename)
@@ -1467,10 +1302,13 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
LLSD res;
result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
+ result["texture_folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE);
result["asset_type"] = "mesh";
result["inventory_type"] = "object";
- result["name"] = "mesh model";
- result["description"] = "your description here";
+ result["description"] = "(No Description)";
+ result["next_owner_mask"] = LLSD::Integer(LLFloaterPerms::getNextOwnerPerms());
+ result["group_mask"] = LLSD::Integer(LLFloaterPerms::getGroupPerms());
+ result["everyone_mask"] = LLSD::Integer(LLFloaterPerms::getEveryonePerms());
res["mesh_list"] = LLSD::emptyArray();
res["texture_list"] = LLSD::emptyArray();
@@ -1482,6 +1320,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
std::map<LLViewerTexture*,S32> texture_index;
std::map<LLModel*,S32> mesh_index;
+ std::string model_name;
S32 instance_num = 0;
@@ -1498,10 +1337,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
if (mesh_index.find(data.mBaseModel) == mesh_index.end())
{
// Have not seen this model before - create a new mesh_list entry for it.
- std::string model_name = data.mBaseModel->getName();
- if (!model_name.empty())
+ if (model_name.empty())
{
- result["name"] = model_name;
+ model_name = data.mBaseModel->getName();
}
std::stringstream ostr;
@@ -1556,24 +1394,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
instance_entry["scale"] = ll_sd_from_vector3(scale);
instance_entry["material"] = LL_MCODE_WOOD;
- LLPermissions perm;
- perm.setOwnerAndGroup(gAgent.getID(), gAgent.getID(), LLUUID::null, false);
- perm.setCreator(gAgent.getID());
-
- perm.initMasks(PERM_ITEM_UNRESTRICTED | PERM_MOVE, //base
- PERM_ITEM_UNRESTRICTED | PERM_MOVE, //owner
- LLFloaterPerms::getEveryonePerms(),
- LLFloaterPerms::getGroupPerms(),
- LLFloaterPerms::getNextOwnerPerms());
- instance_entry["permissions"] = ll_create_sd_from_permissions(perm);
instance_entry["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL);
instance_entry["mesh"] = mesh_index[data.mBaseModel];
instance_entry["face_list"] = LLSD::emptyArray();
- for (S32 face_num = 0; face_num < data.mBaseModel->getNumVolumeFaces(); face_num++)
+ S32 end = llmin((S32)data.mBaseModel->mMaterialList.size(), data.mBaseModel->getNumVolumeFaces()) ;
+ for (S32 face_num = 0; face_num < end; face_num++)
{
- LLImportMaterial& material = instance.mMaterial[face_num];
+ LLImportMaterial& material = instance.mMaterial[data.mBaseModel->mMaterialList[face_num]];
LLSD face_entry = LLSD::emptyMap();
LLViewerFetchedTexture *texture = material.mDiffuseMap.get();
@@ -1624,75 +1453,66 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
}
}
+ if (model_name.empty()) model_name = "mesh model";
+ result["name"] = model_name;
result["asset_resources"] = res;
dump_llsd_to_file(result,make_dump_name("whole_model_",dump_num));
dest = result;
}
-void LLMeshUploadThread::doWholeModelUpload()
+void LLMeshUploadThread::generateHulls()
{
- dump_num++;
-
- mCurlRequest = new LLCurlRequest();
-
- // Queue up models for hull generation (viewer-side)
for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter)
- {
- LLMeshUploadData data;
- data.mBaseModel = iter->first;
-
- LLModelInstance& instance = *(iter->second.begin());
-
- for (S32 i = 0; i < 5; i++)
{
- data.mModel[i] = instance.mLOD[i];
- }
+ LLMeshUploadData data;
+ data.mBaseModel = iter->first;
- //queue up models for hull generation
- LLModel* physics = NULL;
+ LLModelInstance& instance = *(iter->second.begin());
- if (data.mModel[LLModel::LOD_PHYSICS].notNull())
- {
- physics = data.mModel[LLModel::LOD_PHYSICS];
- }
- else if (data.mModel[LLModel::LOD_MEDIUM].notNull())
- {
- physics = data.mModel[LLModel::LOD_MEDIUM];
- }
- else
- {
- physics = data.mModel[LLModel::LOD_HIGH];
- }
+ for (S32 i = 0; i < 5; i++)
+ {
+ data.mModel[i] = instance.mLOD[i];
+ }
- llassert(physics != NULL);
-
- DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this);
- if(request->isValid())
- {
- gMeshRepo.mDecompThread->submitRequest(request);
- }
- }
+ //queue up models for hull generation
+ LLModel* physics = NULL;
- while (!mPhysicsComplete)
- {
- apr_sleep(100);
- }
+ if (data.mModel[LLModel::LOD_PHYSICS].notNull())
+ {
+ physics = data.mModel[LLModel::LOD_PHYSICS];
+ }
+ else if (data.mModel[LLModel::LOD_LOW].notNull())
+ {
+ physics = data.mModel[LLModel::LOD_LOW];
+ }
+ else if (data.mModel[LLModel::LOD_MEDIUM].notNull())
+ {
+ physics = data.mModel[LLModel::LOD_MEDIUM];
+ }
+ else
+ {
+ physics = data.mModel[LLModel::LOD_HIGH];
+ }
- LLSD model_data;
- wholeModelToLLSD(model_data,false);
- dump_llsd_to_file(model_data,make_dump_name("whole_model_fee_request_",dump_num));
+ llassert(physics != NULL);
- mPendingUploads++;
- LLCurlRequest::headers_t headers;
- mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
- new LLWholeModelFeeResponder(this,model_data));
+ DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this);
+ if(request->isValid())
+ {
+ gMeshRepo.mDecompThread->submitRequest(request);
+ }
+ }
- do
- {
- mCurlRequest->process();
- } while (mCurlRequest->getQueued() > 0);
+ while (!mPhysicsComplete)
+ {
+ apr_sleep(100);
+ }
+}
+void LLMeshUploadThread::doWholeModelUpload()
+{
+ mCurlRequest = new LLCurlRequest();
if (mWholeModelUploadURL.empty())
{
@@ -1700,15 +1520,20 @@ void LLMeshUploadThread::doWholeModelUpload()
}
else
{
+ generateHulls();
+
LLSD full_model_data;
wholeModelToLLSD(full_model_data, true);
LLSD body = full_model_data["asset_resources"];
dump_llsd_to_file(body,make_dump_name("whole_model_body_",dump_num));
+ LLCurlRequest::headers_t headers;
mCurlRequest->post(mWholeModelUploadURL, headers, body,
- new LLWholeModelUploadResponder(this, model_data));
+ new LLWholeModelUploadResponder(this, full_model_data, mUploadObserverHandle), mMeshUploadTimeOut);
do
{
mCurlRequest->process();
+ //sleep for 10ms to prevent eating a whole core
+ apr_sleep(10000);
} while (mCurlRequest->getQueued() > 0);
}
@@ -1719,22 +1544,36 @@ void LLMeshUploadThread::doWholeModelUpload()
mFinished = true;
}
-void LLMeshUploadThread::uploadModel(LLMeshUploadData& data)
-{ //called from arbitrary thread
- {
- LLMutexLock lock(mMutex);
- mUploadQ.push(data);
- }
-}
+void LLMeshUploadThread::requestWholeModelFee()
+{
+ dump_num++;
-void LLMeshUploadThread::uploadTexture(LLTextureUploadData& data)
-{ //called from mesh upload thread
- mTextureQ.push(data);
-}
+ mCurlRequest = new LLCurlRequest();
+
+ generateHulls();
+
+ LLSD model_data;
+ wholeModelToLLSD(model_data,false);
+ dump_llsd_to_file(model_data,make_dump_name("whole_model_fee_request_",dump_num));
+ mPendingUploads++;
+ LLCurlRequest::headers_t headers;
+ mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
+ new LLWholeModelFeeResponder(this,model_data, mFeeObserverHandle), mMeshUploadTimeOut);
-static LLFastTimer::DeclareTimer FTM_NOTIFY_MESH_LOADED("Notify Loaded");
-static LLFastTimer::DeclareTimer FTM_NOTIFY_MESH_UNAVAILABLE("Notify Unavailable");
+ do
+ {
+ mCurlRequest->process();
+ //sleep for 10ms to prevent eating a whole core
+ apr_sleep(10000);
+ } while (mCurlRequest->getQueued() > 0);
+
+ delete mCurlRequest;
+ mCurlRequest = NULL;
+
+ // Currently a no-op.
+ mFinished = true;
+}
void LLMeshRepoThread::notifyLoadedMeshes()
{
@@ -1799,7 +1638,9 @@ S32 LLMeshRepository::getActualMeshLOD(LLSD& header, S32 lod)
{
lod = llclamp(lod, 0, 3);
- if (header.has("404"))
+ S32 version = header["version"];
+
+ if (header.has("404") || version > MAX_MESH_VERSION)
{
return -1;
}
@@ -1832,19 +1673,6 @@ S32 LLMeshRepository::getActualMeshLOD(LLSD& header, S32 lod)
return -1;
}
-U32 LLMeshRepoThread::getResourceCost(const LLUUID& mesh_id)
-{
- LLMutexLock lock(mHeaderMutex);
-
- std::map<LLUUID, U32>::iterator iter = mMeshResourceCost.find(mesh_id);
- if (iter != mMeshResourceCost.end())
- {
- return iter->second;
- }
-
- return 0;
-}
-
void LLMeshRepository::cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header)
{
mThread->mMeshHeader[data.mUUID] = header;
@@ -2135,54 +1963,54 @@ void LLMeshHeaderResponder::completedRaw(U32 status, const std::string& reason,
LLUUID mesh_id = mMeshParams.getSculptID();
LLSD header = gMeshRepo.mThread->mMeshHeader[mesh_id];
- std::stringstream str;
+ S32 version = header["version"].asInteger();
+
+ if (version <= MAX_MESH_VERSION)
+ {
+ std::stringstream str;
- S32 lod_bytes = 0;
+ S32 lod_bytes = 0;
- for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i)
- { //figure out how many bytes we'll need to reserve in the file
- std::string lod_name = header_lod[i];
- lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger());
- }
+ for (U32 i = 0; i < LLModel::LOD_PHYSICS; ++i)
+ { //figure out how many bytes we'll need to reserve in the file
+ std::string lod_name = header_lod[i];
+ lod_bytes = llmax(lod_bytes, header[lod_name]["offset"].asInteger()+header[lod_name]["size"].asInteger());
+ }
- //just in case skin info or decomposition is at the end of the file (which it shouldn't be)
- lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger());
- lod_bytes = llmax(lod_bytes, header["physics_convex"]["offset"].asInteger() + header["physics_convex"]["size"].asInteger());
+ //just in case skin info or decomposition is at the end of the file (which it shouldn't be)
+ lod_bytes = llmax(lod_bytes, header["skin"]["offset"].asInteger() + header["skin"]["size"].asInteger());
+ lod_bytes = llmax(lod_bytes, header["physics_convex"]["offset"].asInteger() + header["physics_convex"]["size"].asInteger());
- S32 header_bytes = (S32) gMeshRepo.mThread->mMeshHeaderSize[mesh_id];
- S32 bytes = lod_bytes + header_bytes;
+ S32 header_bytes = (S32) gMeshRepo.mThread->mMeshHeaderSize[mesh_id];
+ S32 bytes = lod_bytes + header_bytes;
- //it's possible for the remote asset to have more data than is needed for the local cache
- //only allocate as much space in the VFS as is needed for the local cache
- data_size = llmin(data_size, bytes);
+ //it's possible for the remote asset to have more data than is needed for the local cache
+ //only allocate as much space in the VFS as is needed for the local cache
+ data_size = llmin(data_size, bytes);
- LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
- if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
- {
- LLMeshRepository::sCacheBytesWritten += data_size;
+ LLVFile file(gVFS, mesh_id, LLAssetType::AT_MESH, LLVFile::WRITE);
+ if (file.getMaxSize() >= bytes || file.setMaxSize(bytes))
+ {
+ LLMeshRepository::sCacheBytesWritten += data_size;
- file.write((const U8*) data, data_size);
+ file.write((const U8*) data, data_size);
- //zero out the rest of the file
- U8 block[4096];
- memset(block, 0, 4096);
-
- while (bytes-file.tell() > 4096)
- {
- file.write(block, 4096);
- }
+ //zero out the rest of the file
+ U8 block[4096];
+ memset(block, 0, 4096);
- S32 remaining = bytes-file.tell();
+ while (bytes-file.tell() > 4096)
+ {
+ file.write(block, 4096);
+ }
- if (remaining < 0 || remaining > 4096)
- {
- llerrs << "Bad padding of mesh asset cache entry." << llendl;
- }
+ S32 remaining = bytes-file.tell();
- if (remaining > 0)
- {
- file.write(block, remaining);
+ if (remaining > 0)
+ {
+ file.write(block, remaining);
+ }
}
}
}
@@ -2201,7 +2029,7 @@ LLMeshRepository::LLMeshRepository()
void LLMeshRepository::init()
{
- mMeshMutex = new LLMutex(NULL);
+ mMeshMutex = new LLMutex();
LLConvexDecomposition::getInstance()->initSystem();
@@ -2292,8 +2120,6 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para
return detail;
}
- LLFastTimer t(FTM_LOAD_MESH);
-
{
LLMutexLock lock(mMeshMutex);
//add volume to list of loading meshes
@@ -2369,11 +2195,6 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para
return detail;
}
-static LLFastTimer::DeclareTimer FTM_START_MESH_THREAD("Start Thread");
-static LLFastTimer::DeclareTimer FTM_LOAD_MESH_LOD("Load LOD");
-static LLFastTimer::DeclareTimer FTM_MESH_LOCK1("Lock 1");
-static LLFastTimer::DeclareTimer FTM_MESH_LOCK2("Lock 2");
-
void LLMeshRepository::notifyLoadedMeshes()
{ //called from main thread
@@ -2406,6 +2227,38 @@ void LLMeshRepository::notifyLoadedMeshes()
LLAssetType::EType asset_type = LLAssetType::lookup(data.mPostData["asset_type"].asString());
LLInventoryType::EType inventory_type = LLInventoryType::lookup(data.mPostData["inventory_type"].asString());
+ // Handle addition of texture, if any.
+ if ( data.mResponse.has("new_texture_folder_id") )
+ {
+ const LLUUID& folder_id = data.mResponse["new_texture_folder_id"].asUUID();
+
+ if ( folder_id.notNull() )
+ {
+ LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE);
+
+ std::string name;
+ // Check if the server built a different name for the texture folder
+ if ( data.mResponse.has("new_texture_folder_name") )
+ {
+ name = data.mResponse["new_texture_folder_name"].asString();
+ }
+ else
+ {
+ name = data.mPostData["name"].asString();
+ }
+
+ // Add the category to the internal representation
+ LLPointer<LLViewerInventoryCategory> cat =
+ new LLViewerInventoryCategory(folder_id, parent_id,
+ LLFolderType::FT_NONE, name, gAgent.getID());
+ cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN);
+
+ LLInventoryModel::LLCategoryUpdate update(cat->getParentUUID(), 1);
+ gInventory.accountForUpdate(update);
+ gInventory.updateCategory(cat);
+ }
+ }
+
on_new_single_inventory_upload_complete(
asset_type,
inventory_type,
@@ -2414,7 +2267,8 @@ void LLMeshRepository::notifyLoadedMeshes()
data.mPostData["name"],
data.mPostData["description"],
data.mResponse,
- 0);
+ data.mResponse["upload_price"]);
+ //}
mInventoryQ.pop();
}
@@ -2439,18 +2293,9 @@ void LLMeshRepository::notifyLoadedMeshes()
}
}
- LLFastTimer t(FTM_MESH_UPDATE);
-
- {
- LLFastTimer t(FTM_MESH_LOCK1);
- mMeshMutex->lock();
- }
-
- {
- LLFastTimer t(FTM_MESH_LOCK2);
- mThread->mMutex->lock();
- }
-
+ mMeshMutex->lock();
+ mThread->mMutex->lock();
+
//popup queued error messages from background threads
while (!mUploadErrorQ.empty())
{
@@ -2502,7 +2347,6 @@ void LLMeshRepository::notifyLoadedMeshes()
while (!mPendingRequests.empty() && push_count > 0)
{
- LLFastTimer t(FTM_LOAD_MESH_LOD);
LLMeshRepoThread::LODRequest& request = mPendingRequests.front();
mThread->loadMeshLOD(request.mMeshParams, request.mLOD);
mPendingRequests.erase(mPendingRequests.begin());
@@ -2652,25 +2496,6 @@ S32 LLMeshRepository::getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lo
return mThread->getActualMeshLOD(mesh_params, lod);
}
-U32 LLMeshRepository::calcResourceCost(LLSD& header)
-{
- U32 bytes = 0;
-
- for (U32 i = 0; i < 4; i++)
- {
- bytes += header[header_lod[i]]["size"].asInteger();
- }
-
- bytes += header["skin"]["size"].asInteger();
-
- return bytes/4096 + 1;
-}
-
-U32 LLMeshRepository::getResourceCost(const LLUUID& mesh_id)
-{
- return mThread->getResourceCost(mesh_id);
-}
-
const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj)
{
if (mesh_id.notNull())
@@ -2809,9 +2634,11 @@ LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints)
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload,
+ LLHandle<LLWholeModelFeeObserver> fee_observer, LLHandle<LLWholeModelUploadObserver> upload_observer)
{
- LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints);
+ LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints, upload_url,
+ do_upload, fee_observer, upload_observer);
mUploadWaitList.push_back(thread);
}
@@ -2839,101 +2666,6 @@ S32 LLMeshRepository::getMeshSize(const LLUUID& mesh_id, S32 lod)
}
-
-void LLMeshUploadThread::doUploadModel(LLMeshUploadData& data)
-{
- if(isDiscarded())
- {
- return ;
- }
-
- if (!data.mRSVP.empty())
- {
- std::stringstream ostr;
-
- LLModel::Decomposition& decomp =
- data.mModel[LLModel::LOD_PHYSICS].notNull() ?
- data.mModel[LLModel::LOD_PHYSICS]->mPhysics :
- data.mBaseModel->mPhysics;
-
- decomp.mBaseHull = mHullMap[data.mBaseModel];
-
- LLModel::writeModel(
- ostr,
- data.mModel[LLModel::LOD_PHYSICS],
- data.mModel[LLModel::LOD_HIGH],
- data.mModel[LLModel::LOD_MEDIUM],
- data.mModel[LLModel::LOD_LOW],
- data.mModel[LLModel::LOD_IMPOSTOR],
- decomp,
- mUploadSkin,
- mUploadJoints);
-
- data.mAssetData = ostr.str();
-
- LLCurlRequest::headers_t headers;
- mPendingUploads++;
-
- mCurlRequest->post(data.mRSVP, headers, data.mAssetData, new LLMeshUploadResponder(data, this));
- }
-}
-
-void LLMeshUploadThread::doUploadTexture(LLTextureUploadData& data)
-{
- if(isDiscarded())
- {
- return ;
- }
-
- if (!data.mRSVP.empty())
- {
- std::stringstream ostr;
-
- if (!data.mTexture->isRawImageValid())
- {
- data.mTexture->reloadRawImage(data.mTexture->getDiscardLevel());
- }
-
- if(data.mTexture->hasSavedRawImage())
- {
- LLPointer<LLImageJ2C> upload_file = LLViewerTextureList::convertToUploadFile(data.mTexture->getSavedRawImage());
-
- ostr.write((const char*) upload_file->getData(), upload_file->getDataSize());
- }
-
- data.mAssetData = ostr.str();
-
- LLCurlRequest::headers_t headers;
- mPendingUploads++;
-
- mCurlRequest->post(data.mRSVP, headers, data.mAssetData, new LLTextureUploadResponder(data, this));
- }
-}
-
-
-void LLMeshUploadThread::onModelUploaded(LLMeshUploadData& data)
-{
- createObjects(data);
-}
-
-void LLMeshUploadThread::onTextureUploaded(LLTextureUploadData& data)
-{
- mTextureMap[data.mTexture] = data;
-}
-
-
-void LLMeshUploadThread::createObjects(LLMeshUploadData& data)
-{
- instance_list& instances = mInstance[data.mBaseModel];
-
- for (instance_list::iterator iter = instances.begin(); iter != instances.end(); ++iter)
- { //create prims that reference given mesh
- LLModelInstance& instance = *iter;
- instance.mMeshID = data.mUUID;
- mInstanceQ.push(instance);
- }
-}
-
void LLMeshUploadThread::decomposeMeshMatrix(LLMatrix4& transformation,
LLVector3& result_pos,
LLQuaternion& result_rot,
@@ -2974,147 +2706,6 @@ void LLMeshUploadThread::decomposeMeshMatrix(LLMatrix4& transformation,
result_rot = quat_rotation;
}
-
-LLSD LLMeshUploadThread::createObject(LLModelInstance& instance)
-{
- LLMatrix4 transformation = instance.mTransform;
-
- llassert(instance.mMeshID.notNull());
-
- // check for reflection
- BOOL reflected = (transformation.determinant() < 0);
-
- // compute position
- LLVector3 position = LLVector3(0, 0, 0) * transformation;
-
- // compute scale
- LLVector3 x_transformed = LLVector3(1, 0, 0) * transformation - position;
- LLVector3 y_transformed = LLVector3(0, 1, 0) * transformation - position;
- LLVector3 z_transformed = LLVector3(0, 0, 1) * transformation - position;
- F32 x_length = x_transformed.normalize();
- F32 y_length = y_transformed.normalize();
- F32 z_length = z_transformed.normalize();
- LLVector3 scale = LLVector3(x_length, y_length, z_length);
-
- // adjust for "reflected" geometry
- LLVector3 x_transformed_reflected = x_transformed;
- if (reflected)
- {
- x_transformed_reflected *= -1.0;
- }
-
- // compute rotation
- LLMatrix3 rotation_matrix;
- rotation_matrix.setRows(x_transformed_reflected, y_transformed, z_transformed);
- LLQuaternion quat_rotation = rotation_matrix.quaternion();
- quat_rotation.normalize(); // the rotation_matrix might not have been orthoginal. make it so here.
- LLVector3 euler_rotation;
- quat_rotation.getEulerAngles(&euler_rotation.mV[VX], &euler_rotation.mV[VY], &euler_rotation.mV[VZ]);
-
- //
- // build parameter block to construct this prim
- //
-
- LLSD object_params;
-
- // create prim
-
- // set volume params
- U8 sculpt_type = LL_SCULPT_TYPE_MESH;
- if (reflected)
- {
- sculpt_type |= LL_SCULPT_FLAG_MIRROR;
- }
- LLVolumeParams volume_params;
- volume_params.setType( LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE );
- volume_params.setBeginAndEndS( 0.f, 1.f );
- volume_params.setBeginAndEndT( 0.f, 1.f );
- volume_params.setRatio ( 1, 1 );
- volume_params.setShear ( 0, 0 );
- volume_params.setSculptID(instance.mMeshID, sculpt_type);
- object_params["shape"] = volume_params.asLLSD();
-
- object_params["material"] = LL_MCODE_WOOD;
-
- object_params["group-id"] = gAgent.getGroupID();
- object_params["pos"] = ll_sd_from_vector3(position + mOrigin);
- object_params["rotation"] = ll_sd_from_quaternion(quat_rotation);
- object_params["scale"] = ll_sd_from_vector3(scale);
- object_params["name"] = instance.mLabel;
-
- // load material from dae file
- object_params["facelist"] = LLSD::emptyArray();
- for (S32 i = 0; i < instance.mMaterial.size(); i++)
- {
- LLTextureEntry te;
- LLImportMaterial& mat = instance.mMaterial[i];
-
- te.setColor(mat.mDiffuseColor);
-
- LLUUID diffuse_id = mTextureMap[mat.mDiffuseMap].mUUID;
-
- if (diffuse_id.notNull())
- {
- te.setID(diffuse_id);
- }
- else
- {
- te.setID(LLUUID("5748decc-f629-461c-9a36-a35a221fe21f")); // blank texture
- }
-
- te.setFullbright(mat.mFullbright);
-
- object_params["facelist"][i] = te.asLLSD();
- }
-
- // set extra parameters
- LLSculptParams sculpt_params;
- sculpt_params.setSculptTexture(instance.mMeshID);
- sculpt_params.setSculptType(sculpt_type);
- U8 buffer[MAX_OBJECT_PARAMS_SIZE+1];
- LLDataPackerBinaryBuffer dp(buffer, MAX_OBJECT_PARAMS_SIZE);
- sculpt_params.pack(dp);
- std::vector<U8> v(dp.getCurrentSize());
- memcpy(&v[0], buffer, dp.getCurrentSize());
- LLSD extra_parameter;
- extra_parameter["extra_parameter"] = sculpt_params.mType;
- extra_parameter["param_data"] = v;
- object_params["extra_parameters"].append(extra_parameter);
-
- LLPermissions perm;
- perm.setOwnerAndGroup(gAgent.getID(), gAgent.getID(), LLUUID::null, false);
- perm.setCreator(gAgent.getID());
-
- perm.initMasks(PERM_ITEM_UNRESTRICTED | PERM_MOVE, //base
- PERM_ITEM_UNRESTRICTED | PERM_MOVE, //owner
- LLFloaterPerms::getEveryonePerms(),
- LLFloaterPerms::getGroupPerms(),
- LLFloaterPerms::getNextOwnerPerms());
-
- object_params["permissions"] = ll_create_sd_from_permissions(perm);
-
- object_params["physics_shape_type"] = (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL);
-
- return object_params;
-}
-
-void LLMeshUploadThread::priceResult(LLMeshUploadData& data, const LLSD& content)
-{
- mPendingCost += content["upload_price"].asInteger();
- data.mRSVP = content["rsvp"].asString();
-
- mConfirmedQ.push(data);
-}
-
-void LLMeshUploadThread::priceResult(LLTextureUploadData& data, const LLSD& content)
-{
- mPendingCost += content["upload_price"].asInteger();
- data.mRSVP = content["rsvp"].asString();
-
- mConfirmedTextureQ.push(data);
-}
-
-
bool LLImportMaterial::operator<(const LLImportMaterial &rhs) const
{
if (mDiffuseMap != rhs.mDiffuseMap)
@@ -3137,6 +2728,11 @@ bool LLImportMaterial::operator<(const LLImportMaterial &rhs) const
return mDiffuseColor < rhs.mDiffuseColor;
}
+ if (mBinding != rhs.mBinding)
+ {
+ return mBinding < rhs.mBinding;
+ }
+
return mFullbright < rhs.mFullbright;
}
@@ -3158,55 +2754,66 @@ void LLMeshRepository::uploadError(LLSD& args)
//static
F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod)
{
- F32 dlowest = llmin(radius/0.03f, 256.f);
- F32 dlow = llmin(radius/0.06f, 256.f);
- F32 dmid = llmin(radius/0.24f, 256.f);
-
- F32 bytes_lowest = header["lowest_lod"]["size"].asReal()/1024.f;
- F32 bytes_low = header["low_lod"]["size"].asReal()/1024.f;
- F32 bytes_mid = header["medium_lod"]["size"].asReal()/1024.f;
- F32 bytes_high = header["high_lod"]["size"].asReal()/1024.f;
+ F32 max_distance = 512.f;
- if (bytes)
- {
- *bytes = 0;
- *bytes += header["lowest_lod"]["size"].asInteger();
- *bytes += header["low_lod"]["size"].asInteger();
- *bytes += header["medium_lod"]["size"].asInteger();
- *bytes += header["high_lod"]["size"].asInteger();
- }
+ F32 dlowest = llmin(radius/0.03f, max_distance);
+ F32 dlow = llmin(radius/0.06f, max_distance);
+ F32 dmid = llmin(radius/0.24f, max_distance);
+
+ F32 METADATA_DISCOUNT = (F32) gSavedSettings.getU32("MeshMetaDataDiscount"); //discount 128 bytes to cover the cost of LLSD tags and compression domain overhead
+ F32 MINIMUM_SIZE = (F32) gSavedSettings.getU32("MeshMinimumByteSize"); //make sure nothing is "free"
+ F32 bytes_per_triangle = (F32) gSavedSettings.getU32("MeshBytesPerTriangle");
- if (bytes_visible)
- {
- lod = LLMeshRepository::getActualMeshLOD(header, lod);
- if (lod >= 0 && lod <= 3)
- {
- *bytes_visible = header[header_lod[lod]]["size"].asInteger();
- }
- }
+ S32 bytes_lowest = header["lowest_lod"]["size"].asInteger();
+ S32 bytes_low = header["low_lod"]["size"].asInteger();
+ S32 bytes_mid = header["medium_lod"]["size"].asInteger();
+ S32 bytes_high = header["high_lod"]["size"].asInteger();
- if (bytes_high == 0.f)
+ if (bytes_high == 0)
{
return 0.f;
}
- if (bytes_mid == 0.f)
+ if (bytes_mid == 0)
{
bytes_mid = bytes_high;
}
- if (bytes_low == 0.f)
+ if (bytes_low == 0)
{
bytes_low = bytes_mid;
}
- if (bytes_lowest == 0.f)
+ if (bytes_lowest == 0)
{
bytes_lowest = bytes_low;
}
- F32 max_area = 65536.f;
+ F32 triangles_lowest = llmax((F32) bytes_lowest-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+ F32 triangles_low = llmax((F32) bytes_low-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+ F32 triangles_mid = llmax((F32) bytes_mid-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+ F32 triangles_high = llmax((F32) bytes_high-METADATA_DISCOUNT, MINIMUM_SIZE)/bytes_per_triangle;
+
+ if (bytes)
+ {
+ *bytes = 0;
+ *bytes += header["lowest_lod"]["size"].asInteger();
+ *bytes += header["low_lod"]["size"].asInteger();
+ *bytes += header["medium_lod"]["size"].asInteger();
+ *bytes += header["high_lod"]["size"].asInteger();
+ }
+
+ if (bytes_visible)
+ {
+ lod = LLMeshRepository::getActualMeshLOD(header, lod);
+ if (lod >= 0 && lod <= 3)
+ {
+ *bytes_visible = header[header_lod[lod]]["size"].asInteger();
+ }
+ }
+
+ F32 max_area = 102932.f; //area of circle that encompasses region
F32 min_area = 1.f;
F32 high_area = llmin(F_PI*dmid*dmid, max_area);
@@ -3229,12 +2836,12 @@ F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32
low_area /= total_area;
lowest_area /= total_area;
- F32 weighted_avg = bytes_high*high_area +
- bytes_mid*mid_area +
- bytes_low*low_area +
- bytes_lowest*lowest_area;
+ F32 weighted_avg = triangles_high*high_area +
+ triangles_mid*mid_area +
+ triangles_low*low_area +
+ triangles_lowest*lowest_area;
- return weighted_avg * gSavedSettings.getF32("MeshStreamingCostScaler");
+ return weighted_avg/gSavedSettings.getU32("MeshTriangleBudget")*15000.f;
}
@@ -3245,8 +2852,8 @@ LLPhysicsDecomp::LLPhysicsDecomp()
mQuitting = false;
mDone = false;
- mSignal = new LLCondition(NULL);
- mMutex = new LLMutex(NULL);
+ mSignal = new LLCondition();
+ mMutex = new LLMutex();
}
LLPhysicsDecomp::~LLPhysicsDecomp()
@@ -3291,24 +2898,27 @@ S32 LLPhysicsDecomp::llcdCallback(const char* status, S32 p1, S32 p2)
return 1;
}
-void LLPhysicsDecomp::setMeshData(LLCDMeshData& mesh)
+void LLPhysicsDecomp::setMeshData(LLCDMeshData& mesh, bool vertex_based)
{
mesh.mVertexBase = mCurRequest->mPositions[0].mV;
mesh.mVertexStrideBytes = 12;
mesh.mNumVertices = mCurRequest->mPositions.size();
- mesh.mIndexType = LLCDMeshData::INT_16;
- mesh.mIndexBase = &(mCurRequest->mIndices[0]);
- mesh.mIndexStrideBytes = 6;
+ if(!vertex_based)
+ {
+ mesh.mIndexType = LLCDMeshData::INT_16;
+ mesh.mIndexBase = &(mCurRequest->mIndices[0]);
+ mesh.mIndexStrideBytes = 6;
- mesh.mNumTriangles = mCurRequest->mIndices.size()/3;
+ mesh.mNumTriangles = mCurRequest->mIndices.size()/3;
+ }
- if (mesh.mNumTriangles > 0 && mesh.mNumVertices > 2)
+ if ((vertex_based || mesh.mNumTriangles > 0) && mesh.mNumVertices > 2)
{
LLCDResult ret = LLCD_OK;
if (LLConvexDecomposition::getInstance() != NULL)
{
- ret = LLConvexDecomposition::getInstance()->setMeshData(&mesh);
+ ret = LLConvexDecomposition::getInstance()->setMeshData(&mesh, vertex_based);
}
if (ret)
@@ -3332,7 +2942,7 @@ void LLPhysicsDecomp::doDecomposition()
//load data intoLLCD
if (stage == 0)
{
- setMeshData(mesh);
+ setMeshData(mesh, false);
}
//build parameter map
@@ -3506,11 +3116,54 @@ void make_box(LLPhysicsDecomp::Request * request)
void LLPhysicsDecomp::doDecompositionSingleHull()
{
- LLCDMeshData mesh;
+ LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance();
+
+ if (decomp == NULL)
+ {
+ //stub. do nothing.
+ return;
+ }
- setMeshData(mesh);
+ LLCDMeshData mesh;
+
+#if 1
+ setMeshData(mesh, true);
+
+ LLCDResult ret = decomp->buildSingleHull() ;
+ if(ret)
+ {
+ llwarns << "Could not execute decomposition stage when attempting to create single hull." << llendl;
+ make_box(mCurRequest);
+ }
+
+ mMutex->lock();
+ mCurRequest->mHull.clear();
+ mCurRequest->mHull.resize(1);
+ mCurRequest->mHullMesh.clear();
+ mMutex->unlock();
+
+ std::vector<LLVector3> p;
+ LLCDHull hull;
+
+ // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code
+ decomp->getSingleHull(&hull);
+
+ const F32* v = hull.mVertexBase;
+
+ for (S32 j = 0; j < hull.mNumVertices; ++j)
+ {
+ LLVector3 vert(v[0], v[1], v[2]);
+ p.push_back(vert);
+ v = (F32*) (((U8*) v) + hull.mVertexStrideBytes);
+ }
+
+ mMutex->lock();
+ mCurRequest->mHull[0] = p;
+ mMutex->unlock();
-
+#else
+ setMeshData(mesh, false);
+
//set all parameters to default
std::map<std::string, const LLCDParam*> param_map;
@@ -3519,23 +3172,15 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
if (!params)
{
- param_count = LLConvexDecomposition::getInstance()->getParameters(&params);
+ param_count = decomp->getParameters(&params);
}
- LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance();
-
- if (decomp == NULL)
- {
- //stub. do nothing.
- return;
- }
-
for (S32 i = 0; i < param_count; ++i)
{
decomp->setParam(params[i].mName, params[i].mDefault.mIntOrEnumValue);
}
- const S32 STAGE_DECOMPOSE = mStageID["Decompose"];
+ const S32 STAGE_DECOMPOSE = mStageID["Decompose"];
const S32 STAGE_SIMPLIFY = mStageID["Simplify"];
const S32 DECOMP_PREVIEW = 0;
const S32 SIMPLIFY_RETAIN = 0;
@@ -3597,7 +3242,7 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
}
}
}
-
+#endif
{
completeCurrent();
@@ -3760,7 +3405,8 @@ LLModelInstance::LLModelInstance(LLSD& data)
for (U32 i = 0; i < data["material"].size(); ++i)
{
- mMaterial.push_back(LLImportMaterial(data["material"][i]));
+ LLImportMaterial mat(data["material"][i]);
+ mMaterial[mat.mBinding] = mat;
}
}
@@ -3773,9 +3419,10 @@ LLSD LLModelInstance::asLLSD()
ret["label"] = mLabel;
ret["transform"] = mTransform.getValue();
- for (U32 i = 0; i < mMaterial.size(); ++i)
+ U32 i = 0;
+ for (std::map<std::string, LLImportMaterial>::iterator iter = mMaterial.begin(); iter != mMaterial.end(); ++iter)
{
- ret["material"][i] = mMaterial[i].asLLSD();
+ ret["material"][i++] = iter->second.asLLSD();
}
return ret;
@@ -3787,6 +3434,7 @@ LLImportMaterial::LLImportMaterial(LLSD& data)
mDiffuseMapLabel = data["diffuse"]["label"].asString();
mDiffuseColor.setValue(data["diffuse"]["color"]);
mFullbright = data["fullbright"].asBoolean();
+ mBinding = data["binding"].asString();
}
@@ -3798,7 +3446,8 @@ LLSD LLImportMaterial::asLLSD()
ret["diffuse"]["label"] = mDiffuseMapLabel;
ret["diffuse"]["color"] = mDiffuseColor.getValue();
ret["fullbright"] = mFullbright;
-
+ ret["binding"] = mBinding;
+
return ret;
}
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
index f237c3a60e..35a7314cd5 100644..100755
--- a/indra/newview/llmeshrepository.h
+++ b/indra/newview/llmeshrepository.h
@@ -36,6 +36,7 @@
#define LLCONVEXDECOMPINTER_STATIC 1
#include "llconvexdecomposition.h"
+#include "lluploadfloaterobservers.h"
class LLVOVolume;
class LLMeshResponder;
@@ -91,6 +92,7 @@ public:
LLPointer<LLViewerFetchedTexture> mDiffuseMap;
std::string mDiffuseMapFilename;
std::string mDiffuseMapLabel;
+ std::string mBinding;
LLColor4 mDiffuseColor;
bool mFullbright;
@@ -119,9 +121,9 @@ public:
S32 mLocalMeshID;
LLMatrix4 mTransform;
- std::vector<LLImportMaterial> mMaterial;
+ std::map<std::string, LLImportMaterial> mMaterial;
- LLModelInstance(LLModel* model, const std::string& label, LLMatrix4& transform, std::vector<LLImportMaterial>& materials)
+ LLModelInstance(LLModel* model, const std::string& label, LLMatrix4& transform, std::map<std::string, LLImportMaterial>& materials)
: mModel(model), mLabel(label), mTransform(transform), mMaterial(materials)
{
mLocalMeshID = -1;
@@ -189,7 +191,7 @@ public:
static S32 llcdCallback(const char*, S32, S32);
void cancel();
- void setMeshData(LLCDMeshData& mesh);
+ void setMeshData(LLCDMeshData& mesh, bool vertex_based);
void doDecomposition();
void doDecompositionSingleHull();
@@ -229,8 +231,7 @@ public:
mesh_header_map mMeshHeader;
std::map<LLUUID, U32> mMeshHeaderSize;
- std::map<LLUUID, U32> mMeshResourceCost;
-
+
class HeaderRequest
{
public:
@@ -333,8 +334,7 @@ public:
void notifyLoadedMeshes();
S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
- U32 getResourceCost(const LLUUID& mesh_params);
-
+
void loadMeshSkinInfo(const LLUUID& mesh_id);
void loadMeshDecomposition(const LLUUID& mesh_id);
void loadMeshPhysicsShape(const LLUUID& mesh_id);
@@ -356,6 +356,9 @@ public:
class LLMeshUploadThread : public LLThread
{
+private:
+ S32 mMeshUploadTimeOut ; //maximum time in seconds to execute an uploading request.
+
public:
class DecompRequest : public LLPhysicsDecomp::Request
{
@@ -385,9 +388,7 @@ public:
LLMutex* mMutex;
LLCurlRequest* mCurlRequest;
- S32 mPendingConfirmations;
S32 mPendingUploads;
- S32 mPendingCost;
LLVector3 mOrigin;
bool mFinished;
bool mUploadTextures;
@@ -399,38 +400,21 @@ public:
std::string mWholeModelFeeCapability;
std::string mWholeModelUploadURL;
- std::queue<LLMeshUploadData> mUploadQ;
- std::queue<LLMeshUploadData> mConfirmedQ;
- std::queue<LLModelInstance> mInstanceQ;
-
- std::queue<LLTextureUploadData> mTextureQ;
- std::queue<LLTextureUploadData> mConfirmedTextureQ;
-
- std::map<LLViewerFetchedTexture*, LLTextureUploadData> mTextureMap;
-
LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints);
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
+ LLHandle<LLWholeModelFeeObserver> fee_observer= (LLHandle<LLWholeModelFeeObserver>()), LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
~LLMeshUploadThread();
- void uploadTexture(LLTextureUploadData& data);
- void doUploadTexture(LLTextureUploadData& data);
- void priceResult(LLTextureUploadData& data, const LLSD& content);
- void onTextureUploaded(LLTextureUploadData& data);
-
- void uploadModel(LLMeshUploadData& data);
- void doUploadModel(LLMeshUploadData& data);
- void onModelUploaded(LLMeshUploadData& data);
- void createObjects(LLMeshUploadData& data);
- LLSD createObject(LLModelInstance& instance);
- void priceResult(LLMeshUploadData& data, const LLSD& content);
-
bool finished() { return mFinished; }
virtual void run();
void preStart();
void discard() ;
BOOL isDiscarded();
+ void generateHulls();
+
void doWholeModelUpload();
+ void requestWholeModelFee();
void wholeModelToLLSD(LLSD& dest, bool include_textures);
@@ -438,6 +422,15 @@ public:
LLVector3& result_pos,
LLQuaternion& result_rot,
LLVector3& result_scale);
+
+ void setFeeObserverHandle(LLHandle<LLWholeModelFeeObserver> observer_handle) { mFeeObserverHandle = observer_handle; }
+ void setUploadObserverHandle(LLHandle<LLWholeModelUploadObserver> observer_handle) { mUploadObserverHandle = observer_handle; }
+
+private:
+ LLHandle<LLWholeModelFeeObserver> mFeeObserverHandle;
+ LLHandle<LLWholeModelUploadObserver> mUploadObserverHandle;
+
+ bool mDoUpload; // if FALSE only model data will be requested, otherwise the model will be uploaded
};
class LLMeshRepository
@@ -471,8 +464,6 @@ public:
S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod);
static S32 getActualMeshLOD(LLSD& header, S32 lod);
- U32 calcResourceCost(LLSD& header);
- U32 getResourceCost(const LLUUID& mesh_params);
const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj);
LLModel::Decomposition* getDecomposition(const LLUUID& mesh_id);
void fetchPhysicsShape(const LLUUID& mesh_id);
@@ -488,7 +479,8 @@ public:
LLSD& getMeshHeader(const LLUUID& mesh_id);
void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
- bool upload_skin, bool upload_joints);
+ bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
+ LLHandle<LLWholeModelFeeObserver> fee_observer= (LLHandle<LLWholeModelFeeObserver>()), LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
S32 getMeshSize(const LLUUID& mesh_id, S32 lod);
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index b8832dfd8e..9d54ad7463 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -716,7 +716,7 @@ void LLNavigationBar::handleLoginComplete()
void LLNavigationBar::invokeSearch(std::string search_text)
{
- LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("id", LLSD(search_text)));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("query", LLSD(search_text)));
}
void LLNavigationBar::clearHistoryCache()
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index 11dc496311..957b6d5f94 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -268,6 +268,9 @@ bool LLNearbyChatScreenChannel::createPoolToast()
toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1));
+ // If the toast gets somehow prematurely destroyed, deactivate it to prevent crash (STORM-1352).
+ toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1, false));
+
LL_DEBUGS("NearbyChat") << "Creating and pooling toast" << llendl;
m_toast_pool.push_back(toast->getHandle());
return true;
@@ -369,8 +372,10 @@ void LLNearbyChatScreenChannel::arrangeToasts()
}
}
-int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
+static bool sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)
{
+ if (!first.get() || !second.get()) return false; // STORM-1352
+
F32 v1 = first.get()->getTimeLeftToLive();
F32 v2 = second.get()->getTimeLeftToLive();
return v1 > v2;
@@ -396,7 +401,11 @@ void LLNearbyChatScreenChannel::showToastsBottom()
for(toast_vec_t::iterator it = m_active_toasts.begin(); it != m_active_toasts.end(); ++it)
{
LLToast* toast = it->get();
- if (!toast) continue;
+ if (!toast)
+ {
+ llwarns << "NULL found in the active chat toasts list!" << llendl;
+ continue;
+ }
S32 toast_top = bottom + toast->getRect().getHeight() + margin;
@@ -472,7 +481,8 @@ void LLNearbyChatHandler::initChannel()
-void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
+void LLNearbyChatHandler::processChat(const LLChat& chat_msg, // WARNING - not really const, see hack below changing chat_msg.mText
+ const LLSD &args)
{
if(chat_msg.mMuted == TRUE)
return;
@@ -480,7 +490,17 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
if(chat_msg.mText.empty())
return;//don't process empty messages
+ // Handle irc styled messages for toast panel
+ // HACK ALERT - changes mText, stripping out IRC style "/me" prefixes
LLChat& tmp_chat = const_cast<LLChat&>(chat_msg);
+ std::string original_message = tmp_chat.mText; // Save un-modified version of chat text
+ if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
+ {
+ if(!tmp_chat.mFromName.empty())
+ tmp_chat.mText = tmp_chat.mFromName + tmp_chat.mText.substr(3);
+ else
+ tmp_chat.mText = tmp_chat.mText.substr(3);
+ }
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
{
@@ -531,7 +551,7 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
LLViewerChat::getChatColor(chat_msg,txt_color);
- LLFloaterScriptDebug::addScriptLine(chat_msg.mText,
+ LLFloaterScriptDebug::addScriptLine(original_message, // Send full message with "/me" style prefix
chat_msg.mFromName,
txt_color,
chat_msg.mFromID);
@@ -562,15 +582,6 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
|| !mChannel->getShowToasts() ) // to prevent toasts in Busy mode
return;//no need in toast if chat is visible or if bubble chat is enabled
- // Handle irc styled messages for toast panel
- if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
- {
- if(!tmp_chat.mFromName.empty())
- tmp_chat.mText = tmp_chat.mFromName + tmp_chat.mText.substr(3);
- else
- tmp_chat.mText = tmp_chat.mText.substr(3);
- }
-
// arrange a channel on a screen
if(!mChannel->getVisible())
{
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 6435126fc0..10887aa53a 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -364,8 +364,8 @@ LLOutfitsList::~LLOutfitsList()
if (gInventory.containsObserver(mCategoriesObserver))
{
gInventory.removeObserver(mCategoriesObserver);
- delete mCategoriesObserver;
}
+ delete mCategoriesObserver;
}
BOOL LLOutfitsList::postBuild()
diff --git a/indra/newview/llpanelappearancetab.cpp b/indra/newview/llpanelappearancetab.cpp
index 9910a3a2ac..8fa8867c69 100644
--- a/indra/newview/llpanelappearancetab.cpp
+++ b/indra/newview/llpanelappearancetab.cpp
@@ -31,6 +31,7 @@
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
+#include "llviewerinventory.h"
//virtual
bool LLPanelAppearanceTab::canTakeOffSelected()
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index bf3bf38863..a64b4ec94d 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -172,7 +172,7 @@ void LLPanelContents::onClickNewScript(void *userdata)
LLUUID::null,
LLAssetType::AT_LSL_TEXT,
LLInventoryType::IT_LSL,
- LLTrans::getString("PanelContentsNewScript"),
+ "New Script",
desc,
LLSaleInfo::DEFAULT,
LLInventoryItemFlags::II_FLAGS_NONE,
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 07c7f35989..a4f6921f98 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -30,6 +30,7 @@
#include "llpanelface.h"
// library includes
+#include "llcalc.h"
#include "llerror.h"
#include "llfocusmgr.h"
#include "llrect.h"
@@ -926,6 +927,16 @@ void LLPanelFace::getState()
getChildView("button apply")->setEnabled(enabled);
}
}
+
+ // Set variable values for numeric expressions
+ LLCalc* calcp = LLCalc::getInstance();
+ calcp->setVar(LLCalc::TEX_U_SCALE, childGetValue("TexScaleU").asReal());
+ calcp->setVar(LLCalc::TEX_V_SCALE, childGetValue("TexScaleV").asReal());
+ calcp->setVar(LLCalc::TEX_U_OFFSET, childGetValue("TexOffsetU").asReal());
+ calcp->setVar(LLCalc::TEX_V_OFFSET, childGetValue("TexOffsetV").asReal());
+ calcp->setVar(LLCalc::TEX_ROTATION, childGetValue("TexRot").asReal());
+ calcp->setVar(LLCalc::TEX_TRANSPARENCY, childGetValue("ColorTrans").asReal());
+ calcp->setVar(LLCalc::TEX_GLOW, childGetValue("glow").asReal());
}
else
{
@@ -961,6 +972,16 @@ void LLPanelFace::getState()
//getChildView("has media")->setEnabled(FALSE);
//getChildView("media info set")->setEnabled(FALSE);
+
+ // Set variable values for numeric expressions
+ LLCalc* calcp = LLCalc::getInstance();
+ calcp->clearVar(LLCalc::TEX_U_SCALE);
+ calcp->clearVar(LLCalc::TEX_V_SCALE);
+ calcp->clearVar(LLCalc::TEX_U_OFFSET);
+ calcp->clearVar(LLCalc::TEX_V_OFFSET);
+ calcp->clearVar(LLCalc::TEX_ROTATION);
+ calcp->clearVar(LLCalc::TEX_TRANSPARENCY);
+ calcp->clearVar(LLCalc::TEX_GLOW);
}
}
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 8d8d9bc1c4..eddd6e554d 100644
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -35,6 +35,7 @@
#include "llqueryflags.h"
#include "llagent.h"
+#include "lldateutil.h"
#include "lliconctrl.h"
#include "llfloaterreg.h"
#include "lllineeditor.h"
@@ -1056,6 +1057,14 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_CurrentInterval, current_interval );
msg->getStringFast(_PREHASH_MoneyData, _PREHASH_StartDate, start_date);
+ std::string time_str = LLTrans::getString("GroupMoneyDate");
+ LLSD substitution;
+
+ // We don't do time zone corrections of the calculated number of seconds
+ // because we don't have a full time stamp, only a date.
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%A %b %d, %Y", start_date);
+ LLStringUtil::format (time_str, substitution);
+
if ( interval_days != mImplementationp->mIntervalLength ||
current_interval != mImplementationp->mCurrentInterval )
{
@@ -1064,7 +1073,7 @@ void LLGroupMoneyDetailsTabEventHandler::processReply(LLMessageSystem* msg,
return;
}
- std::string text = start_date;
+ std::string text = time_str;
text.append("\n\n");
S32 total_amount = 0;
@@ -1203,7 +1212,15 @@ void LLGroupMoneySalesTabEventHandler::processReply(LLMessageSystem* msg,
// Start with the date.
if (text == mImplementationp->mLoadingText)
{
- text = start_date + "\n\n";
+ std::string time_str = LLTrans::getString("GroupMoneyDate");
+ LLSD substitution;
+
+ // We don't do time zone corrections of the calculated number of seconds
+ // because we don't have a full time stamp, only a date.
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%A %b %d, %Y", start_date);
+ LLStringUtil::format (time_str, substitution);
+
+ text = time_str + "\n\n";
}
S32 transactions = msg->getNumberOfBlocksFast(_PREHASH_HistoryData);
@@ -1408,12 +1425,26 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
}
text.append(LLTrans::getString("SummaryForTheWeek"));
- text.append(start_date);
+
+ std::string date_format_str = LLTrans::getString("GroupPlanningDate");
+ std::string time_str = date_format_str;
+ LLSD substitution;
+ // We don't do time zone corrections of the calculated number of seconds
+ // because we don't have a full time stamp, only a date.
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%m/%d/%Y", start_date);
+ LLStringUtil::format (time_str, substitution);
+
+ text.append(time_str);
if (current_interval == 0)
{
text.append(LLTrans::getString("NextStipendDay"));
- text.append(next_stipend_date);
+
+ time_str = date_format_str;
+ substitution["datetime"] = LLDateUtil::secondsSinceEpochFromString("%m/%d/%Y", next_stipend_date);
+ LLStringUtil::format (time_str, substitution);
+
+ text.append(time_str);
text.append("\n\n");
text.append(llformat("%-24sL$%6d\n", LLTrans::getString("GroupMoneyBalance").c_str(), balance ));
text.append(1, '\n');
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 0cc5dcda82..e370f2f622 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -71,7 +71,7 @@ void LLPanelChatControlPanel::onChange(EStatusType status, const std::string &ch
void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state)
{
- updateButtons(new_state >= LLVoiceChannel::STATE_CALL_STARTED);
+ updateButtons(new_state);
}
void LLPanelChatControlPanel::updateCallButton()
@@ -96,11 +96,15 @@ void LLPanelChatControlPanel::updateCallButton()
getChildView("call_btn")->setEnabled(enable_connect);
}
-void LLPanelChatControlPanel::updateButtons(bool is_call_started)
+void LLPanelChatControlPanel::updateButtons(LLVoiceChannel::EState state)
{
+ bool is_call_started = state >= LLVoiceChannel::STATE_CALL_STARTED;
getChildView("end_call_btn_panel")->setVisible( is_call_started);
- getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started);
+ getChildView("voice_ctrls_btn_panel")->setVisible( is_call_started && findChild<LLView>("voice_ctrls_btn_panel"));
getChildView("call_btn_panel")->setVisible( ! is_call_started);
+
+ getChildView("volume_ctrl_panel")->setVisible(state == LLVoiceChannel::STATE_CONNECTED);
+
updateCallButton();
}
@@ -135,7 +139,7 @@ void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id)
mVoiceChannelStateChangeConnection = voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
//call (either p2p, group or ad-hoc) can be already in started state
- updateButtons(voice_channel->getState() >= LLVoiceChannel::STATE_CALL_STARTED);
+ updateButtons(voice_channel->getState());
}
}
@@ -156,6 +160,13 @@ BOOL LLPanelIMControlPanel::postBuild()
childSetAction("share_btn", boost::bind(&LLPanelIMControlPanel::onShareButtonClicked, this));
childSetAction("teleport_btn", boost::bind(&LLPanelIMControlPanel::onTeleportButtonClicked, this));
childSetAction("pay_btn", boost::bind(&LLPanelIMControlPanel::onPayButtonClicked, this));
+
+ childSetAction("mute_btn", boost::bind(&LLPanelIMControlPanel::onClickMuteVolume, this));
+ childSetAction("block_btn", boost::bind(&LLPanelIMControlPanel::onClickBlock, this));
+ childSetAction("unblock_btn", boost::bind(&LLPanelIMControlPanel::onClickUnblock, this));
+
+ getChild<LLUICtrl>("volume_slider")->setCommitCallback(boost::bind(&LLPanelIMControlPanel::onVolumeChange, this, _2));
+
getChildView("add_friend_btn")->setEnabled(!LLAvatarActions::isFriend(getChild<LLAvatarIconCtrl>("avatar_icon")->getAvatarId()));
setFocusReceivedCallback(boost::bind(&LLPanelIMControlPanel::onFocusReceived, this));
@@ -163,6 +174,79 @@ BOOL LLPanelIMControlPanel::postBuild()
return LLPanelChatControlPanel::postBuild();
}
+void LLPanelIMControlPanel::draw()
+{
+ bool is_muted = LLMuteList::getInstance()->isMuted(mAvatarID);
+
+ getChild<LLUICtrl>("block_btn_panel")->setVisible(!is_muted);
+ getChild<LLUICtrl>("unblock_btn_panel")->setVisible(is_muted);
+
+ if (getChildView("volume_ctrl_panel")->getVisible())
+ {
+
+ bool is_muted_voice = LLMuteList::getInstance()->isMuted(mAvatarID, LLMute::flagVoiceChat);
+
+ LLUICtrl* mute_btn = getChild<LLUICtrl>("mute_btn");
+ mute_btn->setValue( is_muted_voice );
+
+ LLUICtrl* volume_slider = getChild<LLUICtrl>("volume_slider");
+ volume_slider->setEnabled( !is_muted_voice );
+
+ F32 volume;
+
+ if (is_muted_voice)
+ {
+ // it's clearer to display their volume as zero
+ volume = 0.f;
+ }
+ else
+ {
+ // actual volume
+ volume = LLVoiceClient::getInstance()->getUserVolume(mAvatarID);
+ }
+ volume_slider->setValue( (F64)volume );
+ }
+
+ LLPanelChatControlPanel::draw();
+}
+
+void LLPanelIMControlPanel::onClickMuteVolume()
+{
+ // By convention, we only display and toggle voice mutes, not all mutes
+ LLMuteList* mute_list = LLMuteList::getInstance();
+ bool is_muted = mute_list->isMuted(mAvatarID, LLMute::flagVoiceChat);
+
+ LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
+ if (!is_muted)
+ {
+ mute_list->add(mute, LLMute::flagVoiceChat);
+ }
+ else
+ {
+ mute_list->remove(mute, LLMute::flagVoiceChat);
+ }
+}
+
+void LLPanelIMControlPanel::onClickBlock()
+{
+ LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
+
+ LLMuteList::getInstance()->add(mute);
+}
+
+void LLPanelIMControlPanel::onClickUnblock()
+{
+ LLMute mute(mAvatarID, getChild<LLTextBox>("avatar_name")->getText(), LLMute::AGENT);
+
+ LLMuteList::getInstance()->remove(mute);
+}
+
+void LLPanelIMControlPanel::onVolumeChange(const LLSD& data)
+{
+ F32 volume = (F32)data.asReal();
+ LLVoiceClient::getInstance()->setUserVolume(mAvatarID, volume);
+}
+
void LLPanelIMControlPanel::onTeleportButtonClicked()
{
LLAvatarActions::offerTeleport(mAvatarID);
@@ -262,6 +346,9 @@ void LLPanelIMControlPanel::onNameCache(const LLUUID& id, const std::string& ful
std::string avatar_name = full_name;
getChild<LLTextBox>("avatar_name")->setValue(avatar_name);
getChild<LLTextBox>("avatar_name")->setToolTip(avatar_name);
+
+ bool is_linden = LLStringUtil::endsWith(full_name, " Linden");
+ getChild<LLUICtrl>("mute_btn")->setEnabled( !is_linden);
}
}
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index 3bbe24ecb9..bba847b5d4 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -54,7 +54,7 @@ public:
virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
- void updateButtons(bool is_call_started);
+ void updateButtons(LLVoiceChannel::EState state);
// Enables/disables call button depending on voice availability
void updateCallButton();
@@ -94,6 +94,12 @@ private:
void onPayButtonClicked();
void onFocusReceived();
+ void onClickMuteVolume();
+ void onClickBlock();
+ void onClickUnblock();
+ /*virtual*/ void draw();
+ void onVolumeChange(const LLSD& data);
+
LLUUID mAvatarID;
};
diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp
index f9730d9b71..e7bdc51b4a 100644
--- a/indra/newview/llpanellandaudio.cpp
+++ b/indra/newview/llpanellandaudio.cpp
@@ -91,6 +91,12 @@ BOOL LLPanelLandAudio::postBuild()
mMusicURLEdit = getChild<LLLineEditor>("music_url");
childSetCommitCallback("music_url", onCommitAny, this);
+ mCheckAVSoundAny = getChild<LLCheckBoxCtrl>("all av sound check");
+ childSetCommitCallback("all av sound check", onCommitAny, this);
+
+ mCheckAVSoundGroup = getChild<LLCheckBoxCtrl>("group av sound check");
+ childSetCommitCallback("group av sound check", onCommitAny, this);
+
return TRUE;
}
@@ -144,6 +150,13 @@ void LLPanelLandAudio::refresh()
mMusicURLEdit->setText(parcel->getMusicURL());
mMusicURLEdit->setEnabled( can_change_media );
+
+ BOOL can_change_av_sounds = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS) && parcel->getHaveNewParcelLimitData();
+ mCheckAVSoundAny->set(parcel->getAllowAnyAVSounds());
+ mCheckAVSoundAny->setEnabled(can_change_av_sounds);
+
+ mCheckAVSoundGroup->set(parcel->getAllowGroupAVSounds() || parcel->getAllowAnyAVSounds()); // On if "Everyone" is on
+ mCheckAVSoundGroup->setEnabled(can_change_av_sounds && !parcel->getAllowAnyAVSounds()); // Enabled if "Everyone" is off
}
}
// static
@@ -164,6 +177,13 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
BOOL voice_enabled = self->mCheckParcelEnableVoice->get();
BOOL voice_estate_chan = !self->mCheckParcelVoiceLocal->get();
+ BOOL any_av_sound = self->mCheckAVSoundAny->get();
+ BOOL group_av_sound = TRUE; // If set to "Everyone" then group is checked as well
+ if (!any_av_sound)
+ { // If "Everyone" is off, use the value from the checkbox
+ group_av_sound = self->mCheckAVSoundGroup->get();
+ }
+
// Remove leading/trailing whitespace (common when copying/pasting)
LLStringUtil::trim(music_url);
@@ -172,6 +192,8 @@ void LLPanelLandAudio::onCommitAny(LLUICtrl*, void *userdata)
parcel->setParcelFlag(PF_USE_ESTATE_VOICE_CHAN, voice_estate_chan);
parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local);
parcel->setMusicURL(music_url);
+ parcel->setAllowAnyAVSounds(any_av_sound);
+ parcel->setAllowGroupAVSounds(group_av_sound);
// Send current parcel data upstream to server
LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );
diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h
index 4b0953bdc1..32a45100f4 100644
--- a/indra/newview/llpanellandaudio.h
+++ b/indra/newview/llpanellandaudio.h
@@ -52,6 +52,8 @@ private:
LLCheckBoxCtrl* mCheckParcelVoiceLocal;
LLLineEditor* mMusicURLEdit;
LLCheckBoxCtrl* mMusicUrlCheck;
+ LLCheckBoxCtrl* mCheckAVSoundAny;
+ LLCheckBoxCtrl* mCheckAVSoundGroup;
LLSafeHandle<LLParcelSelection>& mParcel;
};
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index c2729fa19b..a9cc247d1b 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -46,6 +46,7 @@
#include "llfolderviewitem.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llinventorypanel.h"
+#include "llinventoryfunctions.h"
#include "lllandmarkactions.h"
#include "llmenubutton.h"
#include "llplacesinventorybridge.h"
@@ -529,7 +530,7 @@ void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id)
// virtual
void LLLandmarksPanel::setErrorStatus(U32 status, const std::string& reason)
{
- llerrs<< "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
+ llwarns << "Can't handle remote parcel request."<< " Http Status: "<< status << ". Reason : "<< reason<<llendl;
}
@@ -645,7 +646,7 @@ void LLLandmarksPanel::onAccordionExpandedCollapsed(const LLSD& param, LLPlacesI
// Start background fetch, mostly for My Inventory and Library
if (expanded)
{
- const LLUUID &cat_id = inventory_list->getStartFolderID();
+ const LLUUID &cat_id = inventory_list->getRootFolderID();
// Just because the category itself has been fetched, doesn't mean its child folders have.
/*
if (!gInventory.isCategoryComplete(cat_id))
@@ -1414,7 +1415,7 @@ static void filter_list(LLPlacesInventoryPanel* inventory_list, const std::strin
static bool category_has_descendents(LLPlacesInventoryPanel* inventory_list)
{
- LLViewerInventoryCategory* category = gInventory.getCategory(inventory_list->getStartFolderID());
+ LLViewerInventoryCategory* category = gInventory.getCategory(inventory_list->getRootFolderID());
if (category)
{
return category->getDescendentCount() > 0;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 27f341b4f6..db7d836799 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -1040,7 +1040,7 @@ void LLPanelLogin::onModeChangeConfirm(const LLSD& original_value, const LLSD& n
{
case 0:
gSavedSettings.getControl("SessionSettingsFile")->set(new_value);
- LLAppViewer::instance()->forceQuit();
+ LLAppViewer::instance()->requestQuit();
break;
case 1:
// revert to original value
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index 11273453ba..be9de884d1 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -87,6 +87,8 @@ private:
void reshapeBrowser();
void addFavoritesToStartLocation();
void addUsersWithFavoritesToUsername();
+ void onModeChange(const LLSD& original_value, const LLSD& new_value);
+ void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response);
static void onClickConnect(void*);
static void onClickNewAccount(void*);
static void onClickVersion(void*);
@@ -97,9 +99,6 @@ private:
static void onServerComboLostFocus(LLFocusableElement*);
static void updateServerCombo();
static void updateStartSLURL();
- void onModeChange(const LLSD& original_value, const LLSD& new_value);
- void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response);
-
static void updateLoginPanelLinks();
private:
@@ -115,7 +114,4 @@ private:
static BOOL sCapslockDidNotification;
};
-std::string load_password_from_disk(void);
-void save_password_to_disk(const char* hashed_password);
-
#endif
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index bc4998dd0c..858f5cf575 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -1,6 +1,6 @@
/**
- * @file llsidepanelmaininventory.cpp
- * @brief Implementation of llsidepanelmaininventory.
+ * @file llpanelmaininventory.cpp
+ * @brief Implementation of llpanelmaininventory.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
@@ -95,8 +95,8 @@ private:
/// LLPanelMainInventory
///----------------------------------------------------------------------------
-LLPanelMainInventory::LLPanelMainInventory()
- : LLPanel(),
+LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
+ : LLPanel(p),
mActivePanel(NULL),
mSavedFolderState(NULL),
mFilterText(""),
@@ -193,6 +193,9 @@ BOOL LLPanelMainInventory::postBuild()
mMenuAdd->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", upload_cost);
mMenuAdd->getChild<LLMenuItemGL>("Bulk Upload")->setLabelArg("[COST]", upload_cost);
+ // Trigger callback for focus received so we can deselect items in inbox/outbox
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMainInventory::onFocusReceived, this));
+
return TRUE;
}
@@ -569,9 +572,18 @@ void LLPanelMainInventory::updateItemcountText()
{
text = getString("ItemcountUnknown");
}
+
+ // *TODO: Cache the LLUICtrl* for the ItemcountText control
getChild<LLUICtrl>("ItemcountText")->setValue(text);
}
+void LLPanelMainInventory::onFocusReceived()
+{
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ sidepanel_inventory->clearSelections(false, true, true);
+}
+
void LLPanelMainInventory::setFilterTextFromFilter()
{
mFilterText = mActivePanel->getFilter()->getFilterText();
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
index 2b2ee1c0c9..899931aa89 100644
--- a/indra/newview/llpanelmaininventory.h
+++ b/indra/newview/llpanelmaininventory.h
@@ -57,7 +57,7 @@ class LLPanelMainInventory : public LLPanel, LLInventoryObserver
public:
friend class LLFloaterInventoryFinder;
- LLPanelMainInventory();
+ LLPanelMainInventory(const LLPanel::Params& p = getDefaultParams());
~LLPanelMainInventory();
BOOL postBuild();
@@ -114,6 +114,8 @@ protected:
bool isSaveTextureEnabled(const LLSD& userdata);
void updateItemcountText();
+ void onFocusReceived();
+
private:
LLFloaterInventoryFinder* getFinder();
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
new file mode 100644
index 0000000000..f17f36a977
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinbox.cpp
@@ -0,0 +1,236 @@
+/**
+ * @file llpanelmarketplaceinbox.cpp
+ * @brief Panel for marketplace inbox
+ *
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceinboxinventory.h"
+
+#include "llappviewer.h"
+#include "llbutton.h"
+#include "llinventorypanel.h"
+#include "llfolderview.h"
+#include "llsidepanelinventory.h"
+#include "llviewercontrol.h"
+
+
+static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
+
+const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams()
+{
+ return LLUICtrlFactory::getDefaultParams<LLPanelMarketplaceInbox>();
+}
+
+// protected
+LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p)
+ : LLPanel(p)
+ , mInventoryPanel(NULL)
+{
+}
+
+LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox()
+{
+ if (getChild<LLButton>("inbox_btn")->getToggleState())
+ {
+ gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString());
+ }
+}
+
+// virtual
+BOOL LLPanelMarketplaceInbox::postBuild()
+{
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLPanelMarketplaceInbox::handleLoginComplete, this));
+
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceInbox::onFocusReceived, this));
+
+ return TRUE;
+}
+
+void LLPanelMarketplaceInbox::onSelectionChange()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->updateVerbs();
+}
+
+
+void LLPanelMarketplaceInbox::handleLoginComplete()
+{
+ // Set us up as the class to drive the badge value for the sidebar_inventory button
+ LLSideTray::getInstance()->setTabButtonBadgeDriver("sidebar_inventory", this);
+}
+
+LLInventoryPanel * LLPanelMarketplaceInbox::setupInventoryPanel()
+{
+ LLView * inbox_inventory_placeholder = getChild<LLView>("inbox_inventory_placeholder");
+ LLView * inbox_inventory_parent = inbox_inventory_placeholder->getParent();
+
+ mInventoryPanel =
+ LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_inbox_inventory.xml",
+ inbox_inventory_parent,
+ LLInventoryPanel::child_registry_t::instance());
+
+ // Reshape the inventory to the proper size
+ LLRect inventory_placeholder_rect = inbox_inventory_placeholder->getRect();
+ mInventoryPanel->setShape(inventory_placeholder_rect);
+
+ // Set the sort order newest to oldest, and a selection change callback
+ mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE);
+ mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceInbox::onSelectionChange, this));
+
+ // Set up the note to display when the inbox is empty
+ mInventoryPanel->getFilter()->setEmptyLookupMessage("InventoryInboxNoItems");
+
+ // Hide the placeholder text
+ inbox_inventory_placeholder->setVisible(FALSE);
+
+ return mInventoryPanel;
+}
+
+void LLPanelMarketplaceInbox::onFocusReceived()
+{
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ sidepanel_inventory->clearSelections(true, false, true);
+}
+
+BOOL LLPanelMarketplaceInbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg)
+{
+ *accept = ACCEPT_NO;
+ return TRUE;
+}
+
+U32 LLPanelMarketplaceInbox::getFreshItemCount() const
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+
+ //
+ // NOTE: When turning this on, be sure to test the no inbox/outbox case because this code probably
+ // will return "2" for the Inventory and LIBRARY top-levels when that happens.
+ //
+
+ U32 fresh_item_count = 0;
+
+ if (mInventoryPanel)
+ {
+ const LLFolderViewFolder * inbox_folder = mInventoryPanel->getRootFolder();
+
+ if (inbox_folder)
+ {
+ LLFolderViewFolder::folders_t::const_iterator folders_it = inbox_folder->getFoldersBegin();
+ LLFolderViewFolder::folders_t::const_iterator folders_end = inbox_folder->getFoldersEnd();
+
+ for (; folders_it != folders_end; ++folders_it)
+ {
+ const LLFolderViewFolder * folder_view = *folders_it;
+ const LLInboxFolderViewFolder * inbox_folder_view = dynamic_cast<const LLInboxFolderViewFolder*>(folder_view);
+
+ if (inbox_folder_view && inbox_folder_view->isFresh())
+ {
+ fresh_item_count++;
+ }
+ }
+ }
+ }
+
+ return fresh_item_count;
+#else
+ return getTotalItemCount();
+#endif
+}
+
+U32 LLPanelMarketplaceInbox::getTotalItemCount() const
+{
+ U32 item_count = 0;
+
+ if (mInventoryPanel)
+ {
+ const LLFolderViewFolder * inbox_folder = mInventoryPanel->getRootFolder();
+
+ if (inbox_folder)
+ {
+ item_count += inbox_folder->getFoldersCount();
+ }
+ }
+
+ return item_count;
+}
+
+std::string LLPanelMarketplaceInbox::getBadgeString() const
+{
+ std::string item_count_str("");
+
+ // If the inbox is visible, and the side panel is collapsed or expanded and not the inventory panel
+ if (getParent()->getVisible() &&
+ (LLSideTray::getInstance()->getCollapsed() || !LLSideTray::getInstance()->isPanelActive("sidepanel_inventory")))
+ {
+ U32 item_count = getFreshItemCount();
+
+ if (item_count)
+ {
+ item_count_str = llformat("%d", item_count);
+ }
+ }
+
+ return item_count_str;
+}
+
+void LLPanelMarketplaceInbox::draw()
+{
+ U32 item_count = getTotalItemCount();
+
+ LLView * fresh_new_count_view = getChildView("inbox_fresh_new_count");
+
+ if (item_count > 0)
+ {
+ std::string item_count_str = llformat("%d", item_count);
+
+ LLStringUtil::format_map_t args;
+ args["[NUM]"] = item_count_str;
+ getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelWithArg", args));
+
+#if SUPPORTING_FRESH_ITEM_COUNT
+ // set green text to fresh item count
+ U32 fresh_item_count = getFreshItemCount();
+ fresh_new_count_view->setVisible((fresh_item_count > 0));
+
+ if (fresh_item_count > 0)
+ {
+ getChild<LLUICtrl>("inbox_fresh_new_count")->setTextArg("[NUM]", llformat("%d", fresh_item_count));
+ }
+#else
+ fresh_new_count_view->setVisible(FALSE);
+#endif
+ }
+ else
+ {
+ getChild<LLButton>("inbox_btn")->setLabel(getString("InboxLabelNoArg"));
+
+ fresh_new_count_view->setVisible(FALSE);
+ }
+
+ LLPanel::draw();
+}
diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h
new file mode 100644
index 0000000000..7b4ed137db
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinbox.h
@@ -0,0 +1,78 @@
+/**
+ * @file llpanelmarketplaceinbox.h
+ * @brief Panel for marketplace inbox
+ *
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELMARKETPLACEINBOX_H
+#define LL_LLPANELMARKETPLACEINBOX_H
+
+#include "llpanel.h"
+#include "llsidetray.h"
+
+class LLInventoryPanel;
+
+class LLPanelMarketplaceInbox : public LLPanel, public LLSideTrayTabBadgeDriver
+{
+public:
+
+ struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Params() {}
+ };
+
+ LOG_CLASS(LLPanelMarketplaceInbox);
+
+ // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8
+ static const LLPanelMarketplaceInbox::Params& getDefaultParams();
+
+ LLPanelMarketplaceInbox(const Params& p = getDefaultParams());
+ ~LLPanelMarketplaceInbox();
+
+ /*virtual*/ BOOL postBuild();
+
+ /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
+
+ /*virtual*/ void draw();
+
+ LLInventoryPanel * setupInventoryPanel();
+
+ U32 getFreshItemCount() const;
+ U32 getTotalItemCount() const;
+
+ std::string getBadgeString() const;
+
+private:
+ void handleLoginComplete();
+
+ void onSelectionChange();
+
+ void onFocusReceived();
+
+private:
+ LLInventoryPanel* mInventoryPanel;
+};
+
+
+#endif //LL_LLPANELMARKETPLACEINBOX_H
+
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
new file mode 100644
index 0000000000..2c97d539a1
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -0,0 +1,208 @@
+/**
+ * @file llpanelmarketplaceinboxinventory.cpp
+ * @brief LLInboxInventoryPanel class definition
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelmarketplaceinboxinventory.h"
+
+#include "llfolderview.h"
+#include "llfoldervieweventlistener.h"
+#include "llinventorybridge.h"
+#include "llinventoryfunctions.h"
+#include "llpanellandmarks.h"
+#include "llplacesinventorybridge.h"
+#include "llviewerfoldertype.h"
+
+
+//
+// statics
+//
+
+static LLDefaultChildRegistry::Register<LLInboxInventoryPanel> r1("inbox_inventory_panel");
+static LLDefaultChildRegistry::Register<LLInboxFolderViewFolder> r2("inbox_folder_view_folder");
+
+
+//
+// LLInboxInventoryPanel Implementation
+//
+
+LLInboxInventoryPanel::LLInboxInventoryPanel(const LLInboxInventoryPanel::Params& p)
+ : LLInventoryPanel(p)
+{
+}
+
+LLInboxInventoryPanel::~LLInboxInventoryPanel()
+{
+}
+
+// virtual
+void LLInboxInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
+{
+ // Determine the root folder in case specified, and
+ // build the views starting with that folder.
+
+ LLUUID root_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false);
+
+ // leslie -- temporary HACK to work around sim not creating inbox and outbox with proper system folder type
+ if (root_id.isNull())
+ {
+ std::string start_folder_name(params.start_folder());
+
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+
+ gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items);
+
+ if (cats)
+ {
+ for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it)
+ {
+ LLInventoryCategory* cat = *cat_it;
+
+ if (cat->getName() == start_folder_name)
+ {
+ root_id = cat->getUUID();
+ break;
+ }
+ }
+ }
+
+ if (root_id == LLUUID::null)
+ {
+ llwarns << "No category found that matches inbox inventory panel start_folder: " << start_folder_name << llendl;
+ }
+ }
+ // leslie -- end temporary HACK
+
+ if (root_id == LLUUID::null)
+ {
+ llwarns << "Inbox inventory panel has no root folder!" << llendl;
+ root_id = LLUUID::generateNewID();
+ }
+
+ LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY,
+ LLAssetType::AT_CATEGORY,
+ LLInventoryType::IT_CATEGORY,
+ this,
+ NULL,
+ root_id);
+
+ mFolderRoot = createFolderView(new_listener, params.use_label_suffix());
+}
+
+LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge)
+{
+ LLInboxFolderViewFolder::Params params;
+
+ params.name = bridge->getDisplayName();
+ params.icon = bridge->getIcon();
+ params.icon_open = bridge->getOpenIcon();
+
+ if (mShowItemLinkOverlays) // if false, then links show up just like normal items
+ {
+ params.icon_overlay = LLUI::getUIImage("Inv_Link");
+ }
+
+ params.root = mFolderRoot;
+ params.listener = bridge;
+ params.tool_tip = params.name;
+
+ return LLUICtrlFactory::create<LLInboxFolderViewFolder>(params);
+}
+
+
+//
+// LLInboxFolderViewFolder Implementation
+//
+
+LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p)
+ : LLFolderViewFolder(p)
+ , LLBadgeOwner(getHandle())
+ , mFresh(true)
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+ initBadgeParams(p.new_badge());
+#endif
+}
+
+LLInboxFolderViewFolder::~LLInboxFolderViewFolder()
+{
+}
+
+// virtual
+time_t LLInboxFolderViewFolder::getCreationDate() const
+{
+ time_t ret_val = LLFolderViewFolder::getCreationDate();
+
+ if (!mCreationDate)
+ {
+ updateFlag();
+ }
+
+ return ret_val;
+}
+
+// virtual
+void LLInboxFolderViewFolder::draw()
+{
+#if SUPPORTING_FRESH_ITEM_COUNT
+ if (!badgeHasParent())
+ {
+ addBadgeToParentPanel();
+ }
+
+ setBadgeVisibility(mFresh);
+#endif
+
+ LLFolderViewFolder::draw();
+}
+
+void LLInboxFolderViewFolder::updateFlag() const
+{
+ LLDate saved_freshness_date = LLDate(gSavedPerAccountSettings.getString("LastInventoryInboxExpand"));
+ mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch());
+}
+
+void LLInboxFolderViewFolder::selectItem()
+{
+ mFresh = false;
+ LLFolderViewFolder::selectItem();
+}
+
+void LLInboxFolderViewFolder::toggleOpen()
+{
+ mFresh = false;
+ LLFolderViewFolder::toggleOpen();
+}
+
+void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc) const
+{
+ mCreationDate = creation_date_utc;
+ updateFlag();
+}
+
+
+// eof
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
new file mode 100644
index 0000000000..8946b9dc98
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceinboxinventory.h
@@ -0,0 +1,92 @@
+/**
+ * @file llpanelmarketplaceinboxinventory.h
+ * @brief LLInboxInventoryPanel class declaration
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_INBOXINVENTORYPANEL_H
+#define LL_INBOXINVENTORYPANEL_H
+
+
+#include "llbadgeowner.h"
+#include "llinventorypanel.h"
+#include "llfolderviewitem.h"
+
+
+#define SUPPORTING_FRESH_ITEM_COUNT 0
+
+
+
+class LLInboxInventoryPanel : public LLInventoryPanel
+{
+public:
+ struct Params : public LLInitParam::Block<Params, LLInventoryPanel::Params>
+ {
+ Params() {}
+ };
+
+ LLInboxInventoryPanel(const Params& p);
+ ~LLInboxInventoryPanel();
+
+ // virtual
+ void buildFolderView(const LLInventoryPanel::Params& params);
+
+ // virtual
+ class LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge);
+};
+
+
+class LLInboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner
+{
+public:
+ struct Params : public LLInitParam::Block<Params, LLFolderViewFolder::Params>
+ {
+ Optional<LLBadge::Params> new_badge;
+
+ Params()
+ : new_badge("new_badge")
+ {
+ }
+ };
+
+ LLInboxFolderViewFolder(const Params& p);
+ ~LLInboxFolderViewFolder();
+
+ time_t getCreationDate() const;
+
+ void draw();
+
+ void updateFlag() const;
+ void selectItem();
+ void toggleOpen();
+
+ bool isFresh() const { return mFresh; }
+
+protected:
+ void setCreationDate(time_t creation_date_utc) const;
+
+ mutable bool mFresh;
+};
+
+
+#endif //LL_INBOXINVENTORYPANEL_H
diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp
new file mode 100644
index 0000000000..d51a0d78fe
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceoutbox.cpp
@@ -0,0 +1,194 @@
+/**
+ * @file llpanelmarketplaceoutbox.cpp
+ * @brief Panel for marketplace outbox
+ *
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelmarketplaceoutbox.h"
+
+#include "llappviewer.h"
+#include "llbutton.h"
+#include "llcoros.h"
+#include "lleventcoro.h"
+#include "llinventorypanel.h"
+#include "llloadingindicator.h"
+#include "llpanelmarketplaceinbox.h"
+#include "llsidepanelinventory.h"
+#include "llsidetray.h"
+#include "lltimer.h"
+
+
+static LLRegisterPanelClassWrapper<LLPanelMarketplaceOutbox> t_panel_marketplace_outbox("panel_marketplace_outbox");
+
+const LLPanelMarketplaceOutbox::Params& LLPanelMarketplaceOutbox::getDefaultParams()
+{
+ return LLUICtrlFactory::getDefaultParams<LLPanelMarketplaceOutbox>();
+}
+
+// protected
+LLPanelMarketplaceOutbox::LLPanelMarketplaceOutbox(const Params& p)
+ : LLPanel(p)
+ , mInventoryPanel(NULL)
+ , mSyncButton(NULL)
+ , mSyncIndicator(NULL)
+ , mSyncInProgress(false)
+{
+}
+
+LLPanelMarketplaceOutbox::~LLPanelMarketplaceOutbox()
+{
+}
+
+// virtual
+BOOL LLPanelMarketplaceOutbox::postBuild()
+{
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLPanelMarketplaceOutbox::handleLoginComplete, this));
+
+ LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMarketplaceOutbox::onFocusReceived, this));
+
+ return TRUE;
+}
+
+void LLPanelMarketplaceOutbox::handleLoginComplete()
+{
+ mSyncButton = getChild<LLButton>("outbox_sync_btn");
+ mSyncButton->setCommitCallback(boost::bind(&LLPanelMarketplaceOutbox::onSyncButtonClicked, this));
+ mSyncButton->setEnabled(!isOutboxEmpty());
+
+ mSyncIndicator = getChild<LLLoadingIndicator>("outbox_sync_indicator");
+}
+
+void LLPanelMarketplaceOutbox::onFocusReceived()
+{
+ LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel<LLSidepanelInventory>("sidepanel_inventory");
+
+ sidepanel_inventory->clearSelections(true, true, false);
+}
+
+void LLPanelMarketplaceOutbox::onSelectionChange()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->updateVerbs();
+}
+
+LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel()
+{
+ LLView * outbox_inventory_placeholder = getChild<LLView>("outbox_inventory_placeholder");
+ LLView * outbox_inventory_parent = outbox_inventory_placeholder->getParent();
+
+ mInventoryPanel =
+ LLUICtrlFactory::createFromFile<LLInventoryPanel>("panel_outbox_inventory.xml",
+ outbox_inventory_parent,
+ LLInventoryPanel::child_registry_t::instance());
+
+ // Reshape the inventory to the proper size
+ LLRect inventory_placeholder_rect = outbox_inventory_placeholder->getRect();
+ mInventoryPanel->setShape(inventory_placeholder_rect);
+
+ // Set the sort order newest to oldest, and a selection change callback
+ mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE);
+ mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceOutbox::onSelectionChange, this));
+
+ // Set up the note to display when the outbox is empty
+ mInventoryPanel->getFilter()->setEmptyLookupMessage("InventoryOutboxNoItems");
+
+ // Hide the placeholder text
+ outbox_inventory_placeholder->setVisible(FALSE);
+
+ return mInventoryPanel;
+}
+
+bool LLPanelMarketplaceOutbox::isOutboxEmpty() const
+{
+ // TODO: Check for contents of outbox
+
+ return false;
+}
+
+bool LLPanelMarketplaceOutbox::isSyncInProgress() const
+{
+ return mSyncInProgress;
+}
+
+
+std::string gTimeDelayDebugFunc = "";
+
+void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel)
+{
+ waitForEventOn(self, "mainloop");
+
+ LLTimer delayTimer;
+ delayTimer.reset();
+ delayTimer.setTimerExpirySec(5.0f);
+
+ while (!delayTimer.hasExpired())
+ {
+ waitForEventOn(self, "mainloop");
+ }
+
+ outboxPanel->onSyncComplete();
+
+ gTimeDelayDebugFunc = "";
+}
+
+void LLPanelMarketplaceOutbox::onSyncButtonClicked()
+{
+ // TODO: Actually trigger sync to marketplace
+
+ mSyncInProgress = true;
+ updateSyncButtonStatus();
+
+ // Set a timer (for testing only)
+
+ gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this));
+}
+
+void LLPanelMarketplaceOutbox::onSyncComplete()
+{
+ mSyncInProgress = false;
+
+ updateSyncButtonStatus();
+}
+
+void LLPanelMarketplaceOutbox::updateSyncButtonStatus()
+{
+ if (isSyncInProgress())
+ {
+ mSyncButton->setVisible(false);
+
+ mSyncIndicator->setVisible(true);
+ mSyncIndicator->reset();
+ mSyncIndicator->start();
+ }
+ else
+ {
+ mSyncIndicator->stop();
+ mSyncIndicator->setVisible(false);
+
+ mSyncButton->setVisible(true);
+ mSyncButton->setEnabled(!isOutboxEmpty());
+ }
+}
diff --git a/indra/newview/llpanelmarketplaceoutbox.h b/indra/newview/llpanelmarketplaceoutbox.h
new file mode 100644
index 0000000000..8e2c35914d
--- /dev/null
+++ b/indra/newview/llpanelmarketplaceoutbox.h
@@ -0,0 +1,82 @@
+/**
+ * @file llpanelmarketplaceoutbox.h
+ * @brief Panel for marketplace outbox
+ *
+* $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELMARKETPLACEOUTBOX_H
+#define LL_LLPANELMARKETPLACEOUTBOX_H
+
+#include "llpanel.h"
+
+
+class LLButton;
+class LLInventoryPanel;
+class LLLoadingIndicator;
+
+
+class LLPanelMarketplaceOutbox : public LLPanel
+{
+public:
+
+ struct Params : public LLInitParam::Block<Params, LLPanel::Params>
+ {
+ Params() {}
+ };
+
+ LOG_CLASS(LLPanelMarketplaceOutbox);
+
+ // RN: for some reason you can't just use LLUICtrlFactory::getDefaultParams as a default argument in VC8
+ static const LLPanelMarketplaceOutbox::Params& getDefaultParams();
+
+ LLPanelMarketplaceOutbox(const Params& p = getDefaultParams());
+ ~LLPanelMarketplaceOutbox();
+
+ /*virtual*/ BOOL postBuild();
+
+ LLInventoryPanel * setupInventoryPanel();
+
+ bool isOutboxEmpty() const;
+ bool isSyncInProgress() const;
+
+ void onSyncComplete();
+
+protected:
+ void onSyncButtonClicked();
+ void updateSyncButtonStatus();
+
+ void handleLoginComplete();
+ void onFocusReceived();
+ void onSelectionChange();
+
+private:
+ LLInventoryPanel * mInventoryPanel;
+
+ LLButton * mSyncButton;
+ LLLoadingIndicator * mSyncIndicator;
+ bool mSyncInProgress;
+};
+
+
+#endif //LL_LLPANELMARKETPLACEOUTBOX_H
+
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 52917ff20b..c222bbb191 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -41,6 +41,7 @@
// project includes
#include "llagent.h"
#include "llbutton.h"
+#include "llcalc.h"
#include "llcheckboxctrl.h"
#include "llcolorswatch.h"
#include "llcombobox.h"
@@ -318,6 +319,8 @@ void LLPanelObject::getState( )
}
}
+ LLCalc* calcp = LLCalc::getInstance();
+
LLVOVolume *volobjp = NULL;
if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME))
{
@@ -334,6 +337,7 @@ void LLPanelObject::getState( )
// Disable all text input fields
clearCtrls();
+ calcp->clearAllVariables();
return;
}
@@ -360,12 +364,18 @@ void LLPanelObject::getState( )
mCtrlPosX->set( vec.mV[VX] );
mCtrlPosY->set( vec.mV[VY] );
mCtrlPosZ->set( vec.mV[VZ] );
+ calcp->setVar(LLCalc::X_POS, vec.mV[VX]);
+ calcp->setVar(LLCalc::Y_POS, vec.mV[VY]);
+ calcp->setVar(LLCalc::Z_POS, vec.mV[VZ]);
}
else
{
mCtrlPosX->clear();
mCtrlPosY->clear();
mCtrlPosZ->clear();
+ calcp->clearVar(LLCalc::X_POS);
+ calcp->clearVar(LLCalc::Y_POS);
+ calcp->clearVar(LLCalc::Z_POS);
}
@@ -380,12 +390,18 @@ void LLPanelObject::getState( )
mCtrlScaleX->set( vec.mV[VX] );
mCtrlScaleY->set( vec.mV[VY] );
mCtrlScaleZ->set( vec.mV[VZ] );
+ calcp->setVar(LLCalc::X_SCALE, vec.mV[VX]);
+ calcp->setVar(LLCalc::Y_SCALE, vec.mV[VY]);
+ calcp->setVar(LLCalc::Z_SCALE, vec.mV[VZ]);
}
else
{
mCtrlScaleX->clear();
mCtrlScaleY->clear();
mCtrlScaleZ->clear();
+ calcp->setVar(LLCalc::X_SCALE, 0.f);
+ calcp->setVar(LLCalc::Y_SCALE, 0.f);
+ calcp->setVar(LLCalc::Z_SCALE, 0.f);
}
mLabelSize->setEnabled( enable_scale );
@@ -405,12 +421,18 @@ void LLPanelObject::getState( )
mCtrlRotX->set( mCurEulerDegrees.mV[VX] );
mCtrlRotY->set( mCurEulerDegrees.mV[VY] );
mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] );
+ calcp->setVar(LLCalc::X_ROT, mCurEulerDegrees.mV[VX]);
+ calcp->setVar(LLCalc::Y_ROT, mCurEulerDegrees.mV[VY]);
+ calcp->setVar(LLCalc::Z_ROT, mCurEulerDegrees.mV[VZ]);
}
else
{
mCtrlRotX->clear();
mCtrlRotY->clear();
mCtrlRotZ->clear();
+ calcp->clearVar(LLCalc::X_ROT);
+ calcp->clearVar(LLCalc::Y_ROT);
+ calcp->clearVar(LLCalc::Z_ROT);
}
mLabelRotation->setEnabled( enable_rotate );
@@ -625,9 +647,9 @@ void LLPanelObject::getState( )
F32 end_t = volume_params.getEndT();
// Hollowness
- F32 hollow = volume_params.getHollow();
- mSpinHollow->set( 100.f * hollow );
-
+ F32 hollow = 100.f * volume_params.getHollow();
+ mSpinHollow->set( hollow );
+ calcp->setVar(LLCalc::HOLLOW, hollow);
// All hollow objects allow a shape to be selected.
if (hollow > 0.f)
{
@@ -679,6 +701,10 @@ void LLPanelObject::getState( )
mSpinCutEnd ->set( cut_end );
mCtrlPathBegin ->set( adv_cut_begin );
mCtrlPathEnd ->set( adv_cut_end );
+ calcp->setVar(LLCalc::CUT_BEGIN, cut_begin);
+ calcp->setVar(LLCalc::CUT_END, cut_end);
+ calcp->setVar(LLCalc::PATH_BEGIN, adv_cut_begin);
+ calcp->setVar(LLCalc::PATH_END, adv_cut_end);
// Twist
F32 twist = volume_params.getTwist();
@@ -697,18 +723,24 @@ void LLPanelObject::getState( )
mSpinTwist ->set( twist );
mSpinTwistBegin ->set( twist_begin );
+ calcp->setVar(LLCalc::TWIST_END, twist);
+ calcp->setVar(LLCalc::TWIST_BEGIN, twist_begin);
// Shear
F32 shear_x = volume_params.getShearX();
F32 shear_y = volume_params.getShearY();
mSpinShearX->set( shear_x );
mSpinShearY->set( shear_y );
+ calcp->setVar(LLCalc::X_SHEAR, shear_x);
+ calcp->setVar(LLCalc::Y_SHEAR, shear_y);
// Taper
F32 taper_x = volume_params.getTaperX();
F32 taper_y = volume_params.getTaperY();
mSpinTaperX->set( taper_x );
mSpinTaperY->set( taper_y );
+ calcp->setVar(LLCalc::X_TAPER, taper_x);
+ calcp->setVar(LLCalc::Y_TAPER, taper_y);
// Radius offset.
F32 radius_offset = volume_params.getRadiusOffset();
@@ -738,10 +770,12 @@ void LLPanelObject::getState( )
}
}
mSpinRadiusOffset->set( radius_offset);
+ calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset);
// Revolutions
F32 revolutions = volume_params.getRevolutions();
mSpinRevolutions->set( revolutions );
+ calcp->setVar(LLCalc::REVOLUTIONS, revolutions);
// Skew
F32 skew = volume_params.getSkew();
@@ -766,6 +800,7 @@ void LLPanelObject::getState( )
}
}
mSpinSkew->set( skew );
+ calcp->setVar(LLCalc::SKEW, skew);
}
// Compute control visibility, label names, and twist range.
@@ -869,6 +904,8 @@ void LLPanelObject::getState( )
case MI_RING:
mSpinScaleX->set( scale_x );
mSpinScaleY->set( scale_y );
+ calcp->setVar(LLCalc::X_HOLE, scale_x);
+ calcp->setVar(LLCalc::Y_HOLE, scale_y);
mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE);
mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X);
mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE);
@@ -883,6 +920,14 @@ void LLPanelObject::getState( )
mSpinScaleX->setMaxValue(1.f);
mSpinScaleY->setMinValue(-1.f);
mSpinScaleY->setMaxValue(1.f);
+
+ // Torus' Hole Size is Box/Cyl/Prism's Taper
+ calcp->setVar(LLCalc::X_TAPER, 1.f - scale_x);
+ calcp->setVar(LLCalc::Y_TAPER, 1.f - scale_y);
+
+ // Box/Cyl/Prism have no hole size
+ calcp->setVar(LLCalc::X_HOLE, 0.f);
+ calcp->setVar(LLCalc::Y_HOLE, 0.f);
}
break;
}
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index bfe6cab52f..83ba8afbfc 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -44,6 +44,7 @@
#include "llcallbacklist.h"
#include "llbuycurrencyhtml.h"
#include "llfloaterreg.h"
+#include "llfolderview.h"
#include "llinventorybridge.h"
#include "llinventorydefines.h"
#include "llinventoryfilter.h"
@@ -58,8 +59,10 @@
#include "llselectmgr.h"
#include "llsidetray.h"
#include "llstatusbar.h"
+#include "lltooldraganddrop.h"
#include "lltrans.h"
#include "llviewerassettype.h"
+#include "llviewerinventory.h"
#include "llviewerregion.h"
#include "llviewerobjectlist.h"
#include "llviewermessage.h"
@@ -80,6 +83,7 @@ protected:
LLAssetType::EType mAssetType;
LLInventoryType::EType mInventoryType;
+ LLInventoryObject* findInvObject() const;
LLInventoryItem* findItem() const;
public:
@@ -159,16 +163,22 @@ LLTaskInvFVBridge::LLTaskInvFVBridge(
}
}
-LLInventoryItem* LLTaskInvFVBridge::findItem() const
+LLInventoryObject* LLTaskInvFVBridge::findInvObject() const
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
- if(object)
+ if (object)
{
- return dynamic_cast<LLInventoryItem*>(object->getInventoryObject(mUUID));
+ return object->getInventoryObject(mUUID);
}
return NULL;
}
+
+LLInventoryItem* LLTaskInvFVBridge::findItem() const
+{
+ return dynamic_cast<LLInventoryItem*>(findInvObject());
+}
+
void LLTaskInvFVBridge::showProperties()
{
show_task_item_profile(mUUID, mPanel->getTaskUUID());
@@ -292,21 +302,15 @@ const std::string& LLTaskInvFVBridge::getDisplayName() const
if(item)
{
- if(item->getParentUUID().isNull())
- {
- if(item->getName() == "Contents")
- {
- mDisplayName.assign(LLTrans::getString("ViewerObjectContents"));
- }
- else
- {
- mDisplayName.assign(item->getName());
- }
- }
- else
+ mDisplayName.assign(item->getName());
+
+ // Localize "New Script", "New Script 1", "New Script 2", etc.
+ if (item->getType() == LLAssetType::AT_LSL_TEXT &&
+ LLStringUtil::startsWith(item->getName(), "New Script"))
{
- mDisplayName.assign(item->getName());
+ LLStringUtil::replaceString(mDisplayName, "New Script", LLTrans::getString("PanelContentsNewScript"));
}
+
const LLPermissions& perm(item->getPermissions());
BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
BOOL mod = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
@@ -697,7 +701,7 @@ public:
const std::string& name);
virtual LLUIImagePtr getIcon() const;
- virtual const std::string& getDisplayName() const { return getName(); }
+ virtual const std::string& getDisplayName() const;
virtual BOOL isItemRenameable() const;
// virtual BOOL isItemCopyable() const { return FALSE; }
virtual BOOL renameItem(const std::string& new_name);
@@ -725,6 +729,27 @@ LLUIImagePtr LLTaskCategoryBridge::getIcon() const
return LLUI::getUIImage("Inv_FolderClosed");
}
+// virtual
+const std::string& LLTaskCategoryBridge::getDisplayName() const
+{
+ LLInventoryObject* cat = findInvObject();
+
+ if (cat)
+ {
+ // Localize "Contents" folder.
+ if (cat->getParentUUID().isNull() && cat->getName() == "Contents")
+ {
+ mDisplayName.assign(LLTrans::getString("ViewerObjectContents"));
+ }
+ else
+ {
+ mDisplayName.assign(cat->getName());
+ }
+ }
+
+ return mDisplayName;
+}
+
BOOL LLTaskCategoryBridge::isItemRenameable() const
{
return FALSE;
@@ -761,7 +786,7 @@ void LLTaskCategoryBridge::openItem()
BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const
{
//llinfos << "LLTaskInvFVBridge::startDrag()" << llendl;
- if(mPanel)
+ if(mPanel && mUUID.notNull())
{
LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID());
if(object)
@@ -1349,79 +1374,81 @@ LLTaskInvFVBridge* LLTaskInvFVBridge::createObjectBridge(LLPanelObjectInventory*
LLTaskInvFVBridge* new_bridge = NULL;
const LLInventoryItem* item = dynamic_cast<LLInventoryItem*>(object);
const U32 itemflags = ( NULL == item ? 0 : item->getFlags() );
- LLAssetType::EType type = object->getType();
+ LLAssetType::EType type = object ? object->getType() : LLAssetType::AT_CATEGORY;
+ LLUUID object_id = object ? object->getUUID() : LLUUID::null;
+ std::string object_name = object ? object->getName() : std::string();
switch(type)
{
case LLAssetType::AT_TEXTURE:
new_bridge = new LLTaskTextureBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_SOUND:
new_bridge = new LLTaskSoundBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_LANDMARK:
new_bridge = new LLTaskLandmarkBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_CALLINGCARD:
new_bridge = new LLTaskCallingCardBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_SCRIPT:
// OLD SCRIPTS DEPRECATED - JC
llwarns << "Old script" << llendl;
//new_bridge = new LLTaskOldScriptBridge(panel,
- // object->getUUID(),
- // object->getName());
+ // object_id,
+ // object_name);
break;
case LLAssetType::AT_OBJECT:
new_bridge = new LLTaskObjectBridge(panel,
- object->getUUID(),
- object->getName(),
+ object_id,
+ object_name,
itemflags);
break;
case LLAssetType::AT_NOTECARD:
new_bridge = new LLTaskNotecardBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_ANIMATION:
new_bridge = new LLTaskAnimationBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_GESTURE:
new_bridge = new LLTaskGestureBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_CLOTHING:
case LLAssetType::AT_BODYPART:
new_bridge = new LLTaskWearableBridge(panel,
- object->getUUID(),
- object->getName(),
+ object_id,
+ object_name,
itemflags);
break;
case LLAssetType::AT_CATEGORY:
new_bridge = new LLTaskCategoryBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_LSL_TEXT:
new_bridge = new LLTaskLSLBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
case LLAssetType::AT_MESH:
new_bridge = new LLTaskMeshBridge(panel,
- object->getUUID(),
- object->getName());
+ object_id,
+ object_name);
break;
default:
llinfos << "Unhandled inventory type (llassetstorage.h): "
@@ -1521,6 +1548,7 @@ void LLPanelObjectInventory::reset()
p.task_id = getTaskUUID();
p.parent_panel = this;
p.tool_tip= LLTrans::getString("PanelContentsTooltip");
+ p.listener = LLTaskInvFVBridge::createObjectBridge(this, NULL);
mFolders = LLUICtrlFactory::create<LLFolderView>(p);
// this ensures that we never say "searching..." or "no items found"
mFolders->getFilter()->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index 62f582c343..35e2e96bab 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -36,7 +36,7 @@
#include "lloutfitobserver.h"
#include "llcofwearables.h"
#include "llfilteredwearablelist.h"
-#include "llfolderviewitem.h"
+#include "llfolderview.h"
#include "llinventory.h"
#include "llinventoryitemslist.h"
#include "llviewercontrol.h"
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
index 68ecb0165c..ce8057eead 100644
--- a/indra/newview/llpanelplaceprofile.cpp
+++ b/indra/newview/llpanelplaceprofile.cpp
@@ -32,6 +32,7 @@
#include "llparcel.h"
#include "message.h"
+#include "llexpandabletextbox.h"
#include "lliconctrl.h"
#include "lllineeditor.h"
#include "lltextbox.h"
@@ -70,6 +71,8 @@ static std::string icon_scripts;
static std::string icon_scripts_no;
static std::string icon_damage;
static std::string icon_damage_no;
+static std::string icon_see_avs_on;
+static std::string icon_see_avs_off;
LLPanelPlaceProfile::LLPanelPlaceProfile()
: LLPanelPlaceInfo(),
@@ -114,6 +117,8 @@ BOOL LLPanelPlaceProfile::postBuild()
mScriptsText = getChild<LLTextBox>("scripts_value");
mDamageIcon = getChild<LLIconCtrl>("damage_icon");
mDamageText = getChild<LLTextBox>("damage_value");
+ mSeeAVsIcon = getChild<LLIconCtrl>("see_avatars_icon");
+ mSeeAVsText = getChild<LLTextBox>("see_avatars_value");
mRegionNameText = getChild<LLTextBox>("region_name");
mRegionTypeText = getChild<LLTextBox>("region_type");
@@ -153,6 +158,8 @@ BOOL LLPanelPlaceProfile::postBuild()
icon_scripts_no = getString("icon_ScriptsNo");
icon_damage = getString("icon_Damage");
icon_damage_no = getString("icon_DamageNo");
+ icon_see_avs_on = getString("icon_SeeAVs_On");
+ icon_see_avs_off = getString("icon_SeeAVs_Off");
return TRUE;
}
@@ -182,6 +189,8 @@ void LLPanelPlaceProfile::resetLocation()
mScriptsText->setText(loading);
mDamageIcon->setValue(loading);
mDamageText->setText(loading);
+ mSeeAVsIcon->setValue(loading);
+ mSeeAVsText->setText(loading);
mRegionNameText->setValue(loading);
mRegionTypeText->setValue(loading);
@@ -219,6 +228,34 @@ void LLPanelPlaceProfile::setInfoType(EInfoType type)
getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent);
+ // If we came from search we want larger description area, approx. 10 lines (see STORM-1311).
+ // Don't use the maximum available space because that leads to nasty artifacts
+ // in text editor and expandable text box.
+ {
+ const S32 SEARCH_DESC_HEIGHT = 150;
+
+ // Remember original geometry (once).
+ static const S32 sOrigDescVPad = getChildView("parcel_title")->getRect().mBottom - mDescEditor->getRect().mTop;
+ static const S32 sOrigDescHeight = mDescEditor->getRect().getHeight();
+ static const S32 sOrigMRIconVPad = mDescEditor->getRect().mBottom - mMaturityRatingIcon->getRect().mTop;
+ static const S32 sOrigMRTextVPad = mDescEditor->getRect().mBottom - mMaturityRatingText->getRect().mTop;
+
+ // Resize the description.
+ const S32 desc_height = is_info_type_agent ? sOrigDescHeight : SEARCH_DESC_HEIGHT;
+ const S32 desc_top = getChildView("parcel_title")->getRect().mBottom - sOrigDescVPad;
+ LLRect desc_rect = mDescEditor->getRect();
+ desc_rect.setOriginAndSize(desc_rect.mLeft, desc_top - desc_height, desc_rect.getWidth(), desc_height);
+ mDescEditor->reshape(desc_rect.getWidth(), desc_rect.getHeight());
+ mDescEditor->setRect(desc_rect);
+ mDescEditor->updateTextShape();
+
+ // Move the maturity rating icon/text accordingly.
+ const S32 mr_icon_bottom = mDescEditor->getRect().mBottom - sOrigMRIconVPad - mMaturityRatingIcon->getRect().getHeight();
+ const S32 mr_text_bottom = mDescEditor->getRect().mBottom - sOrigMRTextVPad - mMaturityRatingText->getRect().getHeight();
+ mMaturityRatingIcon->setOrigin(mMaturityRatingIcon->getRect().mLeft, mr_icon_bottom);
+ mMaturityRatingText->setOrigin(mMaturityRatingText->getRect().mLeft, mr_text_bottom);
+ }
+
switch(type)
{
case AGENT:
@@ -414,8 +451,19 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
mDamageText->setText(off);
}
+ if (parcel->getSeeAVs())
+ {
+ mSeeAVsIcon->setValue(icon_see_avs_on);
+ mSeeAVsText->setText(on);
+ }
+ else
+ {
+ mSeeAVsIcon->setValue(icon_see_avs_off);
+ mSeeAVsText->setText(off);
+ }
+
mRegionNameText->setText(region->getName());
- mRegionTypeText->setText(region->getSimProductName());
+ mRegionTypeText->setText(region->getLocalizedSimProductName());
// Determine parcel owner
if (parcel->isPublic())
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
index f28b3b3832..a33fc12ce4 100644
--- a/indra/newview/llpanelplaceprofile.h
+++ b/indra/newview/llpanelplaceprofile.h
@@ -91,6 +91,8 @@ private:
LLTextBox* mScriptsText;
LLIconCtrl* mDamageIcon;
LLTextBox* mDamageText;
+ LLIconCtrl* mSeeAVsIcon;
+ LLTextBox* mSeeAVsText;
LLTextBox* mRegionNameText;
LLTextBox* mRegionTypeText;
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
index 30949f8f02..7087541fc8 100644
--- a/indra/newview/llpaneltopinfobar.cpp
+++ b/indra/newview/llpaneltopinfobar.cpp
@@ -102,6 +102,7 @@ void LLPanelTopInfoBar::initParcelIcons()
mParcelIcon[BUILD_ICON] = getChild<LLIconCtrl>("build_icon");
mParcelIcon[SCRIPTS_ICON] = getChild<LLIconCtrl>("scripts_icon");
mParcelIcon[DAMAGE_ICON] = getChild<LLIconCtrl>("damage_icon");
+ mParcelIcon[SEE_AVATARS_ICON] = getChild<LLIconCtrl>("see_avatars_icon");
mParcelIcon[VOICE_ICON]->setToolTip(LLTrans::getString("LocationCtrlVoiceTooltip"));
mParcelIcon[FLY_ICON]->setToolTip(LLTrans::getString("LocationCtrlFlyTooltip"));
@@ -109,6 +110,7 @@ void LLPanelTopInfoBar::initParcelIcons()
mParcelIcon[BUILD_ICON]->setToolTip(LLTrans::getString("LocationCtrlBuildTooltip"));
mParcelIcon[SCRIPTS_ICON]->setToolTip(LLTrans::getString("LocationCtrlScriptsTooltip"));
mParcelIcon[DAMAGE_ICON]->setToolTip(LLTrans::getString("LocationCtrlDamageTooltip"));
+ mParcelIcon[SEE_AVATARS_ICON]->setToolTip(LLTrans::getString("LocationCtrlSeeAVsTooltip"));
mParcelIcon[VOICE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, VOICE_ICON));
mParcelIcon[FLY_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, FLY_ICON));
@@ -116,6 +118,7 @@ void LLPanelTopInfoBar::initParcelIcons()
mParcelIcon[BUILD_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, BUILD_ICON));
mParcelIcon[SCRIPTS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SCRIPTS_ICON));
mParcelIcon[DAMAGE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, DAMAGE_ICON));
+ mParcelIcon[SEE_AVATARS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SEE_AVATARS_ICON));
mDamageText->setText(LLStringExplicit("100%"));
}
@@ -295,6 +298,7 @@ void LLPanelTopInfoBar::updateParcelIcons()
bool allow_build = vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
bool allow_scripts = vpm->allowAgentScripts(agent_region, current_parcel);
bool allow_damage = vpm->allowAgentDamage(agent_region, current_parcel);
+ bool see_avs = current_parcel->getSeeAVs();
// Most icons are "block this ability"
mParcelIcon[VOICE_ICON]->setVisible( !allow_voice );
@@ -304,6 +308,7 @@ void LLPanelTopInfoBar::updateParcelIcons()
mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
mParcelIcon[DAMAGE_ICON]->setVisible( allow_damage );
mDamageText->setVisible(allow_damage);
+ mParcelIcon[SEE_AVATARS_ICON]->setVisible( !see_avs );
layoutParcelIcons();
}
@@ -409,6 +414,9 @@ void LLPanelTopInfoBar::onParcelIconClick(EParcelIcon icon)
case DAMAGE_ICON:
LLNotificationsUtil::add("NotSafe");
break;
+ case SEE_AVATARS_ICON:
+ LLNotificationsUtil::add("SeeAvatars");
+ break;
case ICON_COUNT:
break;
// no default to get compiler warning when a new icon gets added
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index db922ef424..583e91d15e 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -65,12 +65,13 @@ private:
enum EParcelIcon
{
VOICE_ICON = 0,
- FLY_ICON,
- PUSH_ICON,
- BUILD_ICON,
- SCRIPTS_ICON,
- DAMAGE_ICON,
- ICON_COUNT
+ FLY_ICON, // 1
+ PUSH_ICON, // 2
+ BUILD_ICON, // 3
+ SCRIPTS_ICON, // 4
+ DAMAGE_ICON, // 5
+ SEE_AVATARS_ICON, // 6
+ ICON_COUNT // 7 total
};
/**
diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp
index 4a80bbbe5e..6be2ea6481 100644
--- a/indra/newview/llpanelvoicedevicesettings.cpp
+++ b/indra/newview/llpanelvoicedevicesettings.cpp
@@ -41,6 +41,7 @@
static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
+static const std::string DEFAULT_DEVICE("Default");
LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings()
@@ -68,10 +69,17 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()
// set mic volume tuning slider based on last mic volume setting
volume_slider->setValue(mMicVolume);
- getChild<LLComboBox>("voice_input_device")->setCommitCallback(
+ mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
+ mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
+
+ mCtrlInputDevices->setCommitCallback(
boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this));
- getChild<LLComboBox>("voice_output_device")->setCommitCallback(
+ mCtrlOutputDevices->setCommitCallback(
boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this));
+
+ mLocalizedDeviceNames[DEFAULT_DEVICE] = getString("default_text");
+ mLocalizedDeviceNames["No Device"] = getString("name_no_device");
+ mLocalizedDeviceNames["Default System Device"] = getString("name_default_system_device");
return TRUE;
}
@@ -138,14 +146,14 @@ void LLPanelVoiceDeviceSettings::apply()
std::string s;
if(mCtrlInputDevices)
{
- s = mCtrlInputDevices->getSimple();
+ s = mCtrlInputDevices->getValue().asString();
gSavedSettings.setString("VoiceInputAudioDevice", s);
mInputDevice = s;
}
if(mCtrlOutputDevices)
{
- s = mCtrlOutputDevices->getSimple();
+ s = mCtrlOutputDevices->getValue().asString();
gSavedSettings.setString("VoiceOutputAudioDevice", s);
mOutputDevice = s;
}
@@ -166,10 +174,10 @@ void LLPanelVoiceDeviceSettings::cancel()
gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice);
if(mCtrlInputDevices)
- mCtrlInputDevices->setSimple(mInputDevice);
+ mCtrlInputDevices->setValue(mInputDevice);
if(mCtrlOutputDevices)
- mCtrlOutputDevices->setSimple(mOutputDevice);
+ mCtrlOutputDevices->setValue(mOutputDevice);
gSavedSettings.setF32("AudioLevelMic", mMicVolume);
LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider");
@@ -188,9 +196,6 @@ void LLPanelVoiceDeviceSettings::refresh()
LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume);
// Fill in popup menus
- mCtrlInputDevices = getChild<LLComboBox>("voice_input_device");
- mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device");
-
bool device_settings_available = LLVoiceClient::getInstance()->deviceSettingsAvailable();
if (mCtrlInputDevices)
@@ -212,14 +217,14 @@ void LLPanelVoiceDeviceSettings::refresh()
if(mCtrlInputDevices)
{
mCtrlInputDevices->removeall();
- mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM );
- mCtrlInputDevices->setSimple(mInputDevice);
+ mCtrlInputDevices->add(getLocalizedDeviceName(mInputDevice), mInputDevice, ADD_BOTTOM);
+ mCtrlInputDevices->setValue(mInputDevice);
}
if(mCtrlOutputDevices)
{
mCtrlOutputDevices->removeall();
- mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM );
- mCtrlOutputDevices->setSimple(mOutputDevice);
+ mCtrlOutputDevices->add(getLocalizedDeviceName(mOutputDevice), mOutputDevice, ADD_BOTTOM);
+ mCtrlOutputDevices->setValue(mOutputDevice);
}
mDevicesUpdated = FALSE;
}
@@ -230,35 +235,41 @@ void LLPanelVoiceDeviceSettings::refresh()
if(mCtrlInputDevices)
{
mCtrlInputDevices->removeall();
- mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM );
+ mCtrlInputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);
for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin();
iter != LLVoiceClient::getInstance()->getCaptureDevices().end();
iter++)
{
- mCtrlInputDevices->add( *iter, ADD_BOTTOM );
+ mCtrlInputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM);
}
- if(!mCtrlInputDevices->setSimple(mInputDevice))
+ // Fix invalid input audio device preference.
+ if (!mCtrlInputDevices->setSelectedByValue(mInputDevice, TRUE))
{
- mCtrlInputDevices->setSimple(getString("default_text"));
+ mCtrlInputDevices->setValue(DEFAULT_DEVICE);
+ gSavedSettings.setString("VoiceInputAudioDevice", DEFAULT_DEVICE);
+ mInputDevice = DEFAULT_DEVICE;
}
}
if(mCtrlOutputDevices)
{
mCtrlOutputDevices->removeall();
- mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM );
+ mCtrlOutputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);
for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin();
iter != LLVoiceClient::getInstance()->getRenderDevices().end(); iter++)
{
- mCtrlOutputDevices->add( *iter, ADD_BOTTOM );
+ mCtrlOutputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM);
}
- if(!mCtrlOutputDevices->setSimple(mOutputDevice))
+ // Fix invalid output audio device preference.
+ if (!mCtrlOutputDevices->setSelectedByValue(mOutputDevice, TRUE))
{
- mCtrlOutputDevices->setSimple(getString("default_text"));
+ mCtrlOutputDevices->setValue(DEFAULT_DEVICE);
+ gSavedSettings.setString("VoiceOutputAudioDevice", DEFAULT_DEVICE);
+ mOutputDevice = DEFAULT_DEVICE;
}
}
mDevicesUpdated = TRUE;
@@ -292,12 +303,19 @@ void LLPanelVoiceDeviceSettings::cleanup()
}
}
+// returns English name if no translation found
+std::string LLPanelVoiceDeviceSettings::getLocalizedDeviceName(const std::string& en_dev_name)
+{
+ std::map<std::string, std::string>::const_iterator it = mLocalizedDeviceNames.find(en_dev_name);
+ return it != mLocalizedDeviceNames.end() ? it->second : en_dev_name;
+}
+
void LLPanelVoiceDeviceSettings::onCommitInputDevice()
{
if(LLVoiceClient::getInstance())
{
LLVoiceClient::getInstance()->setCaptureDevice(
- getChild<LLComboBox>("voice_input_device")->getValue().asString());
+ mCtrlInputDevices->getValue().asString());
}
}
@@ -306,6 +324,6 @@ void LLPanelVoiceDeviceSettings::onCommitOutputDevice()
if(LLVoiceClient::getInstance())
{
LLVoiceClient::getInstance()->setRenderDevice(
- getChild<LLComboBox>("voice_output_device")->getValue().asString());
+ mCtrlInputDevices->getValue().asString());
}
}
diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h
index d09476d469..ba3bcad0dc 100644
--- a/indra/newview/llpanelvoicedevicesettings.h
+++ b/indra/newview/llpanelvoicedevicesettings.h
@@ -49,6 +49,8 @@ public:
void setUseTuningMode(bool use) { mUseTuningMode = use; };
protected:
+ std::string getLocalizedDeviceName(const std::string& en_dev_name);
+
void onCommitInputDevice();
void onCommitOutputDevice();
@@ -59,6 +61,7 @@ protected:
class LLComboBox *mCtrlOutputDevices;
BOOL mDevicesUpdated;
bool mUseTuningMode;
+ std::map<std::string, std::string> mLocalizedDeviceNames;
};
#endif // LL_LLPANELVOICEDEVICESETTINGS_H
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 911a9e5dda..f19b54c1d4 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -38,6 +38,8 @@
#include "llsidetray.h"
#include "llviewermenu.h"
#include "llwearableitemslist.h"
+#include "llsdserialize.h"
+#include "llclipboard.h"
// Context menu and Gear menu helper.
static void edit_outfit()
@@ -58,6 +60,7 @@ public:
registrar.add("Gear.Edit", boost::bind(&edit_outfit));
registrar.add("Gear.TakeOff", boost::bind(&LLWearingGearMenu::onTakeOff, this));
+ registrar.add("Gear.Copy", boost::bind(&LLPanelWearing::copyToClipboard, mPanelWearing));
enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2));
@@ -174,8 +177,8 @@ LLPanelWearing::~LLPanelWearing()
if (gInventory.containsObserver(mCategoriesObserver))
{
gInventory.removeObserver(mCategoriesObserver);
- delete mCategoriesObserver;
}
+ delete mCategoriesObserver;
}
BOOL LLPanelWearing::postBuild()
@@ -280,4 +283,25 @@ void LLPanelWearing::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const
mCOFItemsList->getSelectedUUIDs(selected_uuids);
}
+void LLPanelWearing::copyToClipboard()
+{
+ std::string text;
+ std::vector<LLSD> data;
+ mCOFItemsList->getValues(data);
+
+ for(std::vector<LLSD>::const_iterator iter = data.begin(); iter != data.end();)
+ {
+ LLSD uuid = (*iter);
+ LLViewerInventoryItem* item = gInventory.getItem(uuid);
+
+ iter++;
+ if (item != NULL)
+ {
+ // Append a newline to all but the last line
+ text += iter != data.end() ? item->getName() + "\n" : item->getName();
+ }
+ }
+
+ gClipboard.copyFromString(utf8str_to_wstring(text));
+}
// EOF
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index 157b2c4c5f..9a212b3cca 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -60,6 +60,8 @@ public:
/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;
+ /*virtual*/ void copyToClipboard();
+
boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb);
bool hasItemSelected();
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 54053cf89f..fb1153980a 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -798,11 +798,19 @@ void LLParticipantList::LLParticipantListMenu::toggleMuteVoice(const LLSD& userd
bool LLParticipantList::LLParticipantListMenu::isGroupModerator()
{
- // Agent is in Group Call
+ if (!mParent.mSpeakerMgr)
+ {
+ llwarns << "Speaker manager is missing" << llendl;
+ return false;
+ }
+
+ // Is session a group call/chat?
if(gAgent.isInGroup(mParent.mSpeakerMgr->getSessionID()))
{
- // Agent is Moderator
- return mParent.mSpeakerMgr->findSpeaker(gAgentID)->mIsModerator;
+ LLSpeaker* speaker = mParent.mSpeakerMgr->findSpeaker(gAgentID).get();
+
+ // Is agent a moderator?
+ return speaker && speaker->mIsModerator;
}
return false;
}
diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
index 29e262199e..f7823f4fe8 100644
--- a/indra/newview/llplacesinventorypanel.cpp
+++ b/indra/newview/llplacesinventorypanel.cpp
@@ -35,6 +35,7 @@
#include "llinventoryfunctions.h"
#include "llpanellandmarks.h"
#include "llplacesinventorybridge.h"
+#include "llviewerfoldertype.h"
static LLDefaultChildRegistry::Register<LLPlacesInventoryPanel> r("places_inventory_panel");
@@ -56,72 +57,44 @@ LLPlacesInventoryPanel::~LLPlacesInventoryPanel()
delete mSavedFolderState;
}
-BOOL LLPlacesInventoryPanel::postBuild()
+void LLPlacesInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params)
{
- LLInventoryPanel::postBuild();
+ // Determine the root folder in case specified, and
+ // build the views starting with that folder.
+ const LLFolderType::EType preferred_type = LLViewerFolderType::lookupTypeFromNewCategoryName(params.start_folder);
- // clear Contents();
- {
- mFolderRoot->destroyView();
- mFolderRoot->getParent()->removeChild(mFolderRoot);
- mFolderRoot->die();
-
- if( mScroller )
- {
- removeChild( mScroller );
- mScroller->die();
- mScroller = NULL;
- }
- mFolderRoot = NULL;
- }
-
-
- mCommitCallbackRegistrar.pushScope(); // registered as a widget; need to push callback scope ourselves
+ LLUUID root_id;
- // create root folder
+ if ("LIBRARY" == params.start_folder())
{
- LLRect folder_rect(0,
- 0,
- getRect().getWidth(),
- 0);
- LLPlacesFolderView::Params p;
- p.name = getName();
- p.title = getLabel();
- p.rect = folder_rect;
- p.parent_panel = this;
- mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p);
- mFolderRoot->setAllowMultiSelect(mAllowMultiSelect);
+ root_id = gInventory.getLibraryRootFolderID();
}
-
- mCommitCallbackRegistrar.popScope();
-
- mFolderRoot->setCallbackRegistrar(&mCommitCallbackRegistrar);
-
- // scroller
+ else
{
- LLRect scroller_view_rect = getRect();
- scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom);
- LLScrollContainer::Params p;
- p.name("Inventory Scroller");
- p.rect(scroller_view_rect);
- p.follows.flags(FOLLOWS_ALL);
- p.reserve_scroll_corner(true);
- p.tab_stop(true);
- mScroller = LLUICtrlFactory::create<LLScrollContainer>(p);
+ root_id = (preferred_type != LLFolderType::FT_NONE ? gInventory.findCategoryUUIDForType(preferred_type) : LLUUID::null);
}
- addChild(mScroller);
- mScroller->addChild(mFolderRoot);
-
- mFolderRoot->setScrollContainer(mScroller);
- mFolderRoot->addChild(mFolderRoot->mStatusTextBox);
-
- // cut subitems
- mFolderRoot->setUseEllipses(true);
-
- return TRUE;
+ LLRect folder_rect(0,
+ 0,
+ getRect().getWidth(),
+ 0);
+ LLPlacesFolderView::Params p;
+ p.name = getName();
+ p.title = getLabel();
+ p.rect = folder_rect;
+ p.listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY,
+ LLAssetType::AT_CATEGORY,
+ LLInventoryType::IT_CATEGORY,
+ this,
+ NULL,
+ root_id);
+ p.parent_panel = this;
+ p.allow_multiselect = mAllowMultiSelect;
+ p.use_ellipses = true; // truncate inventory item text so remove horizontal scroller
+ mFolderRoot = (LLFolderView*)LLUICtrlFactory::create<LLPlacesFolderView>(p);
}
+
// save current folder open state
void LLPlacesInventoryPanel::saveFolderState()
{
diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h
index 6641871a0b..f647e7f970 100644
--- a/indra/newview/llplacesinventorypanel.h
+++ b/indra/newview/llplacesinventorypanel.h
@@ -46,7 +46,7 @@ public:
LLPlacesInventoryPanel(const Params& p);
~LLPlacesInventoryPanel();
- /*virtual*/ BOOL postBuild();
+ /*virtual*/ void buildFolderView(const LLInventoryPanel::Params& params);
void saveFolderState();
void restoreFolderState();
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index a90f23d637..119fc95cf0 100644
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -444,18 +444,15 @@ void LLPreview::handleReshape(const LLRect& new_rect, bool by_user)
LLMultiPreview::LLMultiPreview()
: LLMultiFloater(LLSD())
{
- // *TODO: There should be a .xml file for this
- const LLRect& nextrect = LLFloaterReg::getFloaterRect("preview"); // place where the next preview should show up
- if (nextrect.getWidth() > 0)
- {
- setRect(nextrect);
- }
- else
+ // start with a rect in the top-left corner ; will get resized
+ LLRect rect;
+ rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 400);
+ setRect(rect);
+
+ LLFloater* last_floater = LLFloaterReg::getLastFloaterInGroup("preview");
+ if (last_floater)
{
- // start with a rect in the top-left corner ; will get resized
- LLRect rect;
- rect.setLeftTopAndSize(0, gViewerWindow->getWindowHeightScaled(), 200, 400);
- setRect(rect);
+ stackWith(*last_floater);
}
setTitle(LLTrans::getString("MultiPreviewTitle"));
buildTabContainer();
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 9f5c55bad1..f47928b131 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -42,6 +42,7 @@
#include "llinventoryfunctions.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
+#include "llkeyboard.h"
#include "llmultigesture.h"
#include "llnotificationsutil.h"
#include "llradiogroup.h"
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
index 31fde5d58a..a1f38f1854 100644
--- a/indra/newview/llprogressview.cpp
+++ b/indra/newview/llprogressview.cpp
@@ -50,28 +50,26 @@
#include "llappviewer.h"
#include "llweb.h"
#include "lluictrlfactory.h"
+#include "llpanellogin.h"
LLProgressView* LLProgressView::sInstance = NULL;
S32 gStartImageWidth = 1;
S32 gStartImageHeight = 1;
-const F32 FADE_IN_TIME = 1.f;
-
-const std::string ANIMATION_FILENAME = "Login Sequence ";
-const std::string ANIMATION_SUFFIX = ".jpg";
-const F32 TOTAL_LOGIN_TIME = 10.f; // seconds, wild guess at time from GL context to actual world view
-S32 gLastStartAnimationFrame = 0; // human-style indexing, first image = 1
-const S32 ANIMATION_FRAMES = 1; //13;
+const F32 FADE_TO_WORLD_TIME = 1.0f;
static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view");
-
// XUI: Translate
LLProgressView::LLProgressView()
: LLPanel(),
mPercentDone( 0.f ),
+ mMediaCtrl( NULL ),
mMouseDownInActiveArea( false ),
- mUpdateEvents("LLProgressView")
+ mUpdateEvents("LLProgressView"),
+ mFadeToWorldTimer(),
+ mFadeFromLoginTimer(),
+ mStartupComplete(false)
{
mUpdateEvents.listen("self", boost::bind(&LLProgressView::handleUpdate, this, _1));
}
@@ -80,9 +78,17 @@ BOOL LLProgressView::postBuild()
{
mProgressBar = getChild<LLProgressBar>("login_progress_bar");
+ // media control that is used to play intro video
+ mMediaCtrl = getChild<LLMediaCtrl>("login_media_panel");
+ mMediaCtrl->setVisible( false ); // hidden initially
+ mMediaCtrl->addObserver( this ); // watch events
+
+ LLViewerMedia::setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID());
+
mCancelBtn = getChild<LLButton>("cancel_btn");
mCancelBtn->setClickedCallback( LLProgressView::onCancelButtonClicked, NULL );
- mFadeTimer.stop();
+ mFadeToWorldTimer.stop();
+ mFadeFromLoginTimer.stop();
getChild<LLTextBox>("title_text")->setText(LLStringExplicit(LLAppViewer::instance()->getSecondLifeTitle()));
@@ -125,35 +131,68 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask)
return TRUE;
}
+void LLProgressView::revealIntroPanel()
+{
+ // if user hasn't yet seen intro video
+ std::string intro_url = gSavedSettings.getString("PostFirstLoginIntroURL");
+ if ( intro_url.length() > 0 &&
+ gSavedSettings.getBOOL("BrowserJavascriptEnabled") &&
+ gSavedSettings.getBOOL("PostFirstLoginIntroViewed" ) == FALSE )
+ {
+ // hide the progress bar
+ getChild<LLView>("stack1")->setVisible(false);
+
+ // navigate to intro URL and reveal widget
+ mMediaCtrl->navigateTo( intro_url );
+ mMediaCtrl->setVisible( TRUE );
+
+
+ // flag as having seen the new user post login intro
+ gSavedSettings.setBOOL("PostFirstLoginIntroViewed", TRUE );
+
+ mMediaCtrl->setFocus(TRUE);
+ }
+
+ mFadeFromLoginTimer.start();
+}
+
+void LLProgressView::setStartupComplete()
+{
+ mStartupComplete = true;
+
+ // if we are not showing a video, fade into world
+ if (!mMediaCtrl->getVisible())
+ {
+ mFadeFromLoginTimer.stop();
+ mFadeToWorldTimer.start();
+ }
+}
+
void LLProgressView::setVisible(BOOL visible)
{
// hiding progress view
if (getVisible() && !visible)
{
- mFadeTimer.start();
+ LLPanel::setVisible(FALSE);
}
// showing progress view
- else if (visible && (!getVisible() || mFadeTimer.getStarted()))
+ else if (visible && (!getVisible() || mFadeToWorldTimer.getStarted()))
{
setFocus(TRUE);
- mFadeTimer.stop();
- mProgressTimer.start();
+ mFadeToWorldTimer.stop();
LLPanel::setVisible(TRUE);
}
}
-void LLProgressView::draw()
+void LLProgressView::drawStartTexture(F32 alpha)
{
- static LLTimer timer;
-
- // Paint bitmap if we've got one
glPushMatrix();
if (gStartTexture)
{
LLGLSUIDefault gls_ui;
gGL.getTexUnit(0)->bind(gStartTexture.get());
- gGL.color4f(1.f, 1.f, 1.f, mFadeTimer.getStarted() ? clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, FADE_IN_TIME, 1.f, 0.f) : 1.f);
+ gGL.color4f(1.f, 1.f, 1.f, alpha);
F32 image_aspect = (F32)gStartImageWidth / (F32)gStartImageHeight;
S32 width = getRect().getWidth();
S32 height = getRect().getHeight();
@@ -179,23 +218,75 @@ void LLProgressView::draw()
gl_rect_2d(getRect());
}
glPopMatrix();
+}
+
+
+void LLProgressView::draw()
+{
+ static LLTimer timer;
+
+ if (mFadeFromLoginTimer.getStarted())
+ {
+ F32 alpha = clamp_rescale(mFadeFromLoginTimer.getElapsedTimeF32(), 0.f, FADE_TO_WORLD_TIME, 0.f, 1.f);
+ LLViewDrawContext context(alpha);
+
+ if (!mMediaCtrl->getVisible())
+ {
+ drawStartTexture(alpha);
+ }
+
+ LLPanel::draw();
+
+ if (mFadeFromLoginTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME )
+ {
+ mFadeFromLoginTimer.stop();
+ LLPanelLogin::closePanel();
+ }
- // Handle fade-in animation
- if (mFadeTimer.getStarted())
+ return;
+ }
+
+ // handle fade out to world view when we're asked to
+ if (mFadeToWorldTimer.getStarted())
{
+ // draw fading panel
+ F32 alpha = clamp_rescale(mFadeToWorldTimer.getElapsedTimeF32(), 0.f, FADE_TO_WORLD_TIME, 1.f, 0.f);
+ LLViewDrawContext context(alpha);
+
+ drawStartTexture(alpha);
LLPanel::draw();
- if (mFadeTimer.getElapsedTimeF32() > FADE_IN_TIME)
+
+ // faded out completely - remove panel and reveal world
+ if (mFadeToWorldTimer.getElapsedTimeF32() > FADE_TO_WORLD_TIME )
{
+ mFadeToWorldTimer.stop();
+
+ LLViewerMedia::setOnlyAudibleMediaTextureID(LLUUID::null);
+
// Fade is complete, release focus
gFocusMgr.releaseFocusIfNeeded( this );
+
+ // turn off panel that hosts intro so we see the world
LLPanel::setVisible(FALSE);
- mFadeTimer.stop();
+
+ // stop observing events since we no longer care
+ mMediaCtrl->remObserver( this );
+
+ // hide the intro
+ mMediaCtrl->setVisible( false );
+
+ // navigate away from intro page to something innocuous since 'unload' is broken right now
+ //mMediaCtrl->navigateTo( "about:blank" );
+
+ // FIXME: this causes a crash that i haven't been able to fix
+ mMediaCtrl->unloadMediaSource();
gStartTexture = NULL;
}
return;
}
+ drawStartTexture(1.0f);
// draw children
LLPanel::draw();
}
@@ -307,3 +398,29 @@ bool LLProgressView::onAlertModal(const LLSD& notify)
}
return false;
}
+
+void LLProgressView::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
+{
+ // the intro web content calls javascript::window.close() when it's done
+ if( event == MEDIA_EVENT_CLOSE_REQUEST )
+ {
+ if (mStartupComplete)
+ {
+ //make sure other timer has stopped
+ mFadeFromLoginTimer.stop();
+ mFadeToWorldTimer.start();
+ }
+ else
+ {
+ // hide the media ctrl and wait for startup to be completed before fading to world
+ mMediaCtrl->setVisible(false);
+ if (mMediaCtrl->getMediaPlugin())
+ {
+ mMediaCtrl->getMediaPlugin()->stop();
+ }
+
+ // show the progress bar
+ getChild<LLView>("stack1")->setVisible(true);
+ }
+ }
+}
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
index be1744f08a..fac00ad04d 100644
--- a/indra/newview/llprogressview.h
+++ b/indra/newview/llprogressview.h
@@ -28,6 +28,7 @@
#define LL_LLPROGRESSVIEW_H
#include "llpanel.h"
+#include "llmediactrl.h"
#include "llframetimer.h"
#include "llevents.h"
@@ -35,7 +36,10 @@ class LLImageRaw;
class LLButton;
class LLProgressBar;
-class LLProgressView : public LLPanel
+class LLProgressView :
+ public LLPanel,
+ public LLViewerMediaObserver
+
{
public:
LLProgressView();
@@ -44,32 +48,47 @@ public:
BOOL postBuild();
/*virtual*/ void draw();
+ void drawStartTexture(F32 alpha);
/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
/*virtual*/ void setVisible(BOOL visible);
+ // inherited from LLViewerMediaObserver
+ /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+
void setText(const std::string& text);
void setPercent(const F32 percent);
// Set it to NULL when you want to eliminate the message.
void setMessage(const std::string& msg);
+ // turns on (under certain circumstances) the into video after login
+ void revealIntroPanel();
+
+ void setStartupComplete();
+
void setCancelButtonVisible(BOOL b, const std::string& label);
static void onCancelButtonClicked( void* );
static void onClickMessage(void*);
bool onAlertModal(const LLSD& sd);
+ // note - this is not just hiding the intro panel - it also hides the parent panel
+ // and is used when the intro is finished and we want to show the world
+ void removeIntroPanel();
+
protected:
LLProgressBar* mProgressBar;
+ LLMediaCtrl* mMediaCtrl;
F32 mPercentDone;
std::string mMessage;
LLButton* mCancelBtn;
- LLFrameTimer mFadeTimer;
- LLFrameTimer mProgressTimer;
+ LLFrameTimer mFadeToWorldTimer;
+ LLFrameTimer mFadeFromLoginTimer;
LLRect mOutlineRect;
bool mMouseDownInActiveArea;
+ bool mStartupComplete;
// The LLEventStream mUpdateEvents depends upon this class being a singleton
// to avoid pump name conflicts.
diff --git a/indra/newview/llregioninfomodel.cpp b/indra/newview/llregioninfomodel.cpp
new file mode 100644
index 0000000000..698c4f9bb9
--- /dev/null
+++ b/indra/newview/llregioninfomodel.cpp
@@ -0,0 +1,217 @@
+/**
+ * @file llregioninfomodel.cpp
+ * @brief Region info model
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llregioninfomodel.h"
+
+// libs
+#include "message.h"
+#include "llregionflags.h"
+
+// viewer
+#include "llagent.h"
+#include "llviewerregion.h"
+
+void LLRegionInfoModel::reset()
+{
+ mSimAccess = 0;
+ mAgentLimit = 0;
+
+ mRegionFlags = 0;
+ mEstateID = 0;
+ mParentEstateID = 0;
+
+ mPricePerMeter = 0;
+ mRedirectGridX = 0;
+ mRedirectGridY = 0;
+
+ mBillableFactor = 0.0f;
+ mObjectBonusFactor = 0.0f;
+ mWaterHeight = 0.0f;
+ mTerrainRaiseLimit = 0.0f;
+ mTerrainLowerLimit = 0.0f;
+ mSunHour = 0.0f;
+
+ mUseEstateSun = false;
+
+ mSimType.clear();
+ mSimName.clear();
+}
+
+LLRegionInfoModel::LLRegionInfoModel()
+{
+ reset();
+}
+
+boost::signals2::connection LLRegionInfoModel::setUpdateCallback(const update_signal_t::slot_type& cb)
+{
+ return mUpdateSignal.connect(cb);
+}
+
+void LLRegionInfoModel::sendRegionTerrain(const LLUUID& invoice) const
+{
+ std::string buffer;
+ std::vector<std::string> strings;
+
+ // ==========================================
+ // Assemble and send setregionterrain message
+ // "setregionterrain"
+ // strings[0] = float water height
+ // strings[1] = float terrain raise
+ // strings[2] = float terrain lower
+ // strings[3] = 'Y' use estate time
+ // strings[4] = 'Y' fixed sun
+ // strings[5] = float sun_hour
+ // strings[6] = from estate, 'Y' use global time
+ // strings[7] = from estate, 'Y' fixed sun
+ // strings[8] = from estate, float sun_hour
+
+ // *NOTE: this resets estate sun info.
+ BOOL estate_global_time = true;
+ BOOL estate_fixed_sun = false;
+ F32 estate_sun_hour = 0.f;
+
+ buffer = llformat("%f", mWaterHeight);
+ strings.push_back(buffer);
+ buffer = llformat("%f", mTerrainRaiseLimit);
+ strings.push_back(buffer);
+ buffer = llformat("%f", mTerrainLowerLimit);
+ strings.push_back(buffer);
+ buffer = llformat("%s", (mUseEstateSun ? "Y" : "N"));
+ strings.push_back(buffer);
+ buffer = llformat("%s", (getUseFixedSun() ? "Y" : "N"));
+ strings.push_back(buffer);
+ buffer = llformat("%f", mSunHour);
+ strings.push_back(buffer);
+ buffer = llformat("%s", (estate_global_time ? "Y" : "N") );
+ strings.push_back(buffer);
+ buffer = llformat("%s", (estate_fixed_sun ? "Y" : "N") );
+ strings.push_back(buffer);
+ buffer = llformat("%f", estate_sun_hour);
+ strings.push_back(buffer);
+
+ sendEstateOwnerMessage(gMessageSystem, "setregionterrain", invoice, strings);
+}
+
+bool LLRegionInfoModel::getUseFixedSun() const
+{
+ return mRegionFlags & REGION_FLAGS_SUN_FIXED;
+}
+
+void LLRegionInfoModel::setUseFixedSun(bool fixed)
+{
+ if (fixed)
+ {
+ mRegionFlags |= REGION_FLAGS_SUN_FIXED;
+ }
+ else
+ {
+ mRegionFlags &= ~REGION_FLAGS_SUN_FIXED;
+ }
+}
+
+void LLRegionInfoModel::update(LLMessageSystem* msg)
+{
+ reset();
+
+ msg->getStringFast(_PREHASH_RegionInfo, _PREHASH_SimName, mSimName);
+ msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_EstateID, mEstateID);
+ msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_ParentEstateID, mParentEstateID);
+ msg->getU32Fast(_PREHASH_RegionInfo, _PREHASH_RegionFlags, mRegionFlags);
+ msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_SimAccess, mSimAccess);
+ msg->getU8Fast(_PREHASH_RegionInfo, _PREHASH_MaxAgents, mAgentLimit);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_ObjectBonusFactor, mObjectBonusFactor);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_BillableFactor, mBillableFactor);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_WaterHeight, mWaterHeight);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainRaiseLimit, mTerrainRaiseLimit);
+ msg->getF32Fast(_PREHASH_RegionInfo, _PREHASH_TerrainLowerLimit, mTerrainLowerLimit);
+ msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_PricePerMeter, mPricePerMeter);
+ msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridX, mRedirectGridX);
+ msg->getS32Fast(_PREHASH_RegionInfo, _PREHASH_RedirectGridY, mRedirectGridY);
+
+ msg->getBOOL(_PREHASH_RegionInfo, _PREHASH_UseEstateSun, mUseEstateSun);
+
+ // actually the "last set" sun hour, not the current sun hour. JC
+ msg->getF32(_PREHASH_RegionInfo, _PREHASH_SunHour, mSunHour);
+ LL_DEBUGS("Windlight Sync") << "Got region sun hour: " << mSunHour << LL_ENDL;
+
+ // the only reasonable way to decide if we actually have any data is to
+ // check to see if any of these fields have nonzero sizes
+ if (msg->getSize(_PREHASH_RegionInfo2, _PREHASH_ProductSKU) > 0 ||
+ msg->getSize(_PREHASH_RegionInfo2, "ProductName") > 0)
+ {
+ msg->getString(_PREHASH_RegionInfo2, "ProductName", mSimType);
+ }
+
+ // Let interested parties know that region info has been updated.
+ mUpdateSignal();
+}
+
+// static
+void LLRegionInfoModel::sendEstateOwnerMessage(
+ LLMessageSystem* msg,
+ const std::string& request,
+ const LLUUID& invoice,
+ const std::vector<std::string>& strings)
+{
+ LLViewerRegion* cur_region = gAgent.getRegion();
+
+ if (!cur_region)
+ {
+ llwarns << "Agent region not set" << llendl;
+ return;
+ }
+
+ llinfos << "Sending estate request '" << request << "'" << llendl;
+ msg->newMessage("EstateOwnerMessage");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
+ msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
+ msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used
+ msg->nextBlock("MethodData");
+ msg->addString("Method", request);
+ msg->addUUID("Invoice", invoice);
+
+ if (strings.empty())
+ {
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", NULL);
+ }
+ else
+ {
+ std::vector<std::string>::const_iterator it = strings.begin();
+ std::vector<std::string>::const_iterator end = strings.end();
+ for (unsigned i = 0; it != end; ++it, ++i)
+ {
+ lldebugs << "- [" << i << "] " << (*it) << llendl;
+ msg->nextBlock("ParamList");
+ msg->addString("Parameter", *it);
+ }
+ }
+
+ msg->sendReliable(cur_region->getHost());
+}
diff --git a/indra/newview/llregioninfomodel.h b/indra/newview/llregioninfomodel.h
new file mode 100644
index 0000000000..89efd82767
--- /dev/null
+++ b/indra/newview/llregioninfomodel.h
@@ -0,0 +1,99 @@
+/**
+ * @file llregioninfomodel.h
+ * @brief Region info model
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLREGIONINFOMODEL_H
+#define LL_LLREGIONINFOMODEL_H
+
+class LLMessageSystem;
+
+#include "llsingleton.h"
+
+/**
+ * Contains region info, notifies interested parties of its changes.
+ */
+class LLRegionInfoModel : public LLSingleton<LLRegionInfoModel>
+{
+ LOG_CLASS(LLRegionInfoModel);
+
+public:
+ typedef boost::signals2::signal<void()> update_signal_t;
+ boost::signals2::connection setUpdateCallback(const update_signal_t::slot_type& cb);
+
+ void sendRegionTerrain(const LLUUID& invoice) const; /// upload region terrain data
+
+ bool getUseFixedSun() const;
+
+ void setUseFixedSun(bool fixed);
+
+ // *TODO: Add getters and make the data private.
+ U8 mSimAccess;
+ U8 mAgentLimit;
+
+ U32 mRegionFlags;
+ U32 mEstateID;
+ U32 mParentEstateID;
+
+ S32 mPricePerMeter;
+ S32 mRedirectGridX;
+ S32 mRedirectGridY;
+
+ F32 mBillableFactor;
+ F32 mObjectBonusFactor;
+ F32 mWaterHeight;
+ F32 mTerrainRaiseLimit;
+ F32 mTerrainLowerLimit;
+ F32 mSunHour; // 6..30
+
+ BOOL mUseEstateSun;
+
+ std::string mSimName;
+ std::string mSimType;
+
+protected:
+ friend class LLSingleton<LLRegionInfoModel>;
+ friend class LLViewerRegion;
+
+ LLRegionInfoModel();
+
+ /**
+ * Refresh model with data from the incoming server message.
+ */
+ void update(LLMessageSystem* msg);
+
+private:
+ void reset();
+
+ // *FIXME: Duplicated code from LLPanelRegionInfo
+ static void sendEstateOwnerMessage(
+ LLMessageSystem* msg,
+ const std::string& request,
+ const LLUUID& invoice,
+ const std::vector<std::string>& strings);
+
+ update_signal_t mUpdateSignal;
+};
+
+#endif // LL_LLREGIONINFOMODEL_H
diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp
index 8e8fc9dd25..09e799e4f7 100644
--- a/indra/newview/llsceneview.cpp
+++ b/indra/newview/llsceneview.cpp
@@ -83,6 +83,9 @@ void LLSceneView::draw()
S32 total_visible_triangles[] = {0, 0};
S32 total_triangles[] = {0, 0};
+ S32 total_visible_bytes[] = {0, 0};
+ S32 total_bytes[] = {0, 0};
+
//streaming cost
std::vector<F32> streaming_cost[2];
F32 total_streaming[] = { 0.f, 0.f };
@@ -122,13 +125,19 @@ void LLSceneView::draw()
visible_triangles[idx].push_back(visible);
triangles[idx].push_back(high_triangles);
- F32 streaming = object->getStreamingCost();
+ S32 bytes = 0;
+ S32 visible_bytes = 0;
+
+ F32 streaming = object->getStreamingCost(&bytes, &visible_bytes);
total_streaming[idx] += streaming;
streaming_cost[idx].push_back(streaming);
F32 physics = object->getPhysicsCost();
total_physics[idx] += physics;
physics_cost[idx].push_back(physics);
+
+ total_bytes[idx] += bytes;
+ total_visible_bytes[idx] += visible_bytes;
}
}
}
@@ -279,8 +288,8 @@ void LLSceneView::draw()
total_visible += tri_count;
}
- std::string label = llformat("%s Object Triangle Counts (Ktris) -- [%.2f, %.2f] Mean: %.2f Median: %.2f Visible: %.2f/%.2f",
- category[idx], tri_domain[0]/1024.f, tri_domain[1]/1024.f, (total/count)/1024.f, triangles[idx][count/2]/1024.f, total_visible_triangles[idx]/1024.f, total_triangles[idx]/1024.f);
+ std::string label = llformat("%s Object Triangle Counts (Ktris) -- Visible: %.2f/%.2f (%.2f KB Visible)",
+ category[idx], total_visible_triangles[idx]/1024.f, total_triangles[idx]/1024.f, total_visible_bytes[idx]/1024.f);
LLFontGL::getFontMonospace()->renderUTF8(label,
0 , tri_rect.mLeft, tri_rect.mTop+margin, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
diff --git a/indra/newview/llsecapi.h b/indra/newview/llsecapi.h
index b65cf37e7f..0935a0005b 100644
--- a/indra/newview/llsecapi.h
+++ b/indra/newview/llsecapi.h
@@ -160,7 +160,7 @@ public:
// base class for a list of certificates.
-class LLCertificateVector : public LLRefCount
+class LLCertificateVector : public LLThreadSafeRefCount
{
public:
@@ -286,8 +286,8 @@ bool operator!=(const LLCertificateVector::iterator& _lhs, const LLCertificateVe
#define CRED_AUTHENTICATOR_TYPE_HASH "hash"
//
// LLCredential - interface for credentials providing the following functionality:
-// * persistance of credential information based on grid (for saving username/password)
-// * serialization to an OGP identifier/authenticator pair
+// * Persistence of credential information based on grid (for saving username/password)
+// * Serialization to an OGP identifier/authenticator pair
//
class LLCredential : public LLRefCount
{
diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp
index 90e8ff0aae..8d64c8c04f 100644
--- a/indra/newview/llsechandler_basic.cpp
+++ b/indra/newview/llsechandler_basic.cpp
@@ -1005,6 +1005,8 @@ void LLBasicCertificateStore::validate(int validation_policy,
LLPointer<LLCertificateChain> cert_chain,
const LLSD& validation_params)
{
+ // If --no-verify-ssl-cert was passed on the command line, stop right now.
+ if (gSavedSettings.getBOOL("NoVerifySSLCert")) return;
if(cert_chain->size() < 1)
{
@@ -1209,12 +1211,12 @@ void LLSecAPIBasicHandler::init()
// with the product
std::string ca_file_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "CA.pem");
llinfos << "app path " << ca_file_path << llendl;
- LLBasicCertificateStore app_ca_store = LLBasicCertificateStore(ca_file_path);
+ LLPointer<LLBasicCertificateStore> app_ca_store = new LLBasicCertificateStore(ca_file_path);
// push the applicate CA files into the store, therefore adding any new CA certs that
// updated
- for(LLCertificateVector::iterator i = app_ca_store.begin();
- i != app_ca_store.end();
+ for(LLCertificateVector::iterator i = app_ca_store->begin();
+ i != app_ca_store->end();
i++)
{
mStore->add(*i);
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 8fa4065fa6..26b2b0f5c3 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -5123,7 +5123,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
gGL.getTexUnit(0)->bind(mSilhouetteImagep);
LLGLSPipelineSelection gls_select;
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
LLGLEnable blend(GL_BLEND);
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
@@ -5250,7 +5249,6 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
}
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point)
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 16729f045a..28ec11d1c7 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -32,6 +32,7 @@
#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
+#include "llfolderview.h"
#include "llinventorypanel.h"
#include "llfiltereditor.h"
#include "llfloaterreg.h"
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 31ea542743..a800611aac 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -29,33 +29,147 @@
#include "llagent.h"
#include "llappearancemgr.h"
+#include "llappviewer.h"
#include "llavataractions.h"
#include "llbutton.h"
+#include "lldate.h"
#include "llfirstuse.h"
+#include "llfoldertype.h"
+#include "llhttpclient.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
+#include "llinventorymodel.h"
+#include "llinventorymodelbackgroundfetch.h"
+#include "llinventoryobserver.h"
#include "llinventorypanel.h"
+#include "lllayoutstack.h"
#include "lloutfitobserver.h"
#include "llpanelmaininventory.h"
+#include "llpanelmarketplaceinbox.h"
+#include "llpanelmarketplaceoutbox.h"
+#include "llselectmgr.h"
#include "llsidepaneliteminfo.h"
#include "llsidepaneltaskinfo.h"
+#include "llstring.h"
#include "lltabcontainer.h"
-#include "llselectmgr.h"
+#include "llviewermedia.h"
#include "llweb.h"
static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
-LLSidepanelInventory::LLSidepanelInventory()
- : LLPanel(),
- mItemPanel(NULL),
- mPanelMainInventory(NULL)
+//
+// Constants
+//
+
+static const char * const INBOX_BUTTON_NAME = "inbox_btn";
+static const char * const OUTBOX_BUTTON_NAME = "outbox_btn";
+
+static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel";
+static const char * const OUTBOX_LAYOUT_PANEL_NAME = "outbox_layout_panel";
+static const char * const MAIN_INVENTORY_LAYOUT_PANEL_NAME = "main_inventory_layout_panel";
+
+static const char * const INBOX_INVENTORY_PANEL = "inventory_inbox";
+static const char * const OUTBOX_INVENTORY_PANEL = "inventory_outbox";
+
+static const char * const INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack";
+
+static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";
+static const char * const MARKETPLACE_OUTBOX_PANEL = "marketplace_outbox";
+
+//
+// Helpers
+//
+
+class LLInboxOutboxAddedObserver : public LLInventoryCategoryAddedObserver
{
+public:
+ LLInboxOutboxAddedObserver(LLSidepanelInventory * sidepanelInventory)
+ : LLInventoryCategoryAddedObserver()
+ , mSidepanelInventory(sidepanelInventory)
+ {
+ }
+
+ void done()
+ {
+ for (cat_vec_t::iterator it = mAddedCategories.begin(); it != mAddedCategories.end(); ++it)
+ {
+ LLViewerInventoryCategory* added_category = *it;
+
+ LLFolderType::EType added_category_type = added_category->getPreferredType();
+
+ switch (added_category_type)
+ {
+ case LLFolderType::FT_INBOX:
+ mSidepanelInventory->observeInboxModifications(added_category->getUUID());
+ break;
+ case LLFolderType::FT_OUTBOX:
+ mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
+ break;
+ case LLFolderType::FT_NONE:
+ // HACK until sim update to properly create folder with system type
+ if (added_category->getName() == "Received Items")
+ {
+ mSidepanelInventory->observeInboxModifications(added_category->getUUID());
+ }
+ else if (added_category->getName() == "Merchant Outbox")
+ {
+ mSidepanelInventory->observeOutboxModifications(added_category->getUUID());
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+private:
+ LLSidepanelInventory * mSidepanelInventory;
+};
+
+//
+// Implementation
+//
+LLSidepanelInventory::LLSidepanelInventory()
+ : LLPanel()
+ , mItemPanel(NULL)
+ , mInventoryPanelInbox(NULL)
+ , mInventoryPanelOutbox(NULL)
+ , mPanelMainInventory(NULL)
+ , mInboxEnabled(false)
+ , mOutboxEnabled(false)
+ , mCategoriesObserver(NULL)
+ , mInboxOutboxAddedObserver(NULL)
+{
//buildFromFile( "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
}
LLSidepanelInventory::~LLSidepanelInventory()
{
+ if (mCategoriesObserver && gInventory.containsObserver(mCategoriesObserver))
+ {
+ gInventory.removeObserver(mCategoriesObserver);
+ }
+ delete mCategoriesObserver;
+
+ if (mInboxOutboxAddedObserver && gInventory.containsObserver(mInboxOutboxAddedObserver))
+ {
+ gInventory.removeObserver(mInboxOutboxAddedObserver);
+ }
+ delete mInboxOutboxAddedObserver;
+}
+
+void handleInventoryDisplayInboxChanged()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox"));
+}
+
+void handleInventoryDisplayOutboxChanged()
+{
+ LLSidepanelInventory* sidepanel_inventory = dynamic_cast<LLSidepanelInventory*>(LLSideTray::getInstance()->getPanel("sidepanel_inventory"));
+
+ sidepanel_inventory->enableOutbox(gSavedSettings.getBOOL("InventoryDisplayOutbox"));
}
BOOL LLSidepanelInventory::postBuild()
@@ -85,7 +199,7 @@ BOOL LLSidepanelInventory::postBuild()
mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
- mPanelMainInventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+ mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
LLTabContainer* tabs = mPanelMainInventory->getChild<LLTabContainer>("inventory filter tabs");
tabs->setCommitCallback(boost::bind(&LLSidepanelInventory::updateVerbs, this));
@@ -103,7 +217,7 @@ BOOL LLSidepanelInventory::postBuild()
// UI elements from item panel
{
- mItemPanel = findChild<LLSidepanelItemInfo>("sidepanel__item_panel");
+ mItemPanel = getChild<LLSidepanelItemInfo>("sidepanel__item_panel");
LLButton* back_btn = mItemPanel->getChild<LLButton>("back_btn");
back_btn->setClickedCallback(boost::bind(&LLSidepanelInventory::onBackButtonClicked, this));
@@ -119,13 +233,259 @@ BOOL LLSidepanelInventory::postBuild()
}
}
+ // Marketplace inbox/outbox setup
+ {
+ LLLayoutStack* stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
+
+ // Disable user_resize on main inventory panel by default
+ stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, false);
+ stack->setPanelUserResize(INBOX_LAYOUT_PANEL_NAME, false);
+ stack->setPanelUserResize(OUTBOX_LAYOUT_PANEL_NAME, false);
+
+ // Collapse both inbox and outbox panels
+ stack->collapsePanel(getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME), true);
+ stack->collapsePanel(getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME), true);
+
+ // Set up button states and callbacks
+ LLButton * inbox_button = getChild<LLButton>(INBOX_BUTTON_NAME);
+ LLButton * outbox_button = getChild<LLButton>(OUTBOX_BUTTON_NAME);
+
+ inbox_button->setToggleState(false);
+ outbox_button->setToggleState(false);
+
+ inbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleInboxBtn, this));
+ outbox_button->setCommitCallback(boost::bind(&LLSidepanelInventory::onToggleOutboxBtn, this));
+
+ // Set the inbox and outbox visible based on debug settings (final setting comes from http request below)
+ enableInbox(gSavedSettings.getBOOL("InventoryDisplayInbox"));
+ enableOutbox(gSavedSettings.getBOOL("InventoryDisplayOutbox"));
+
+ // Trigger callback for after login so we can setup to track inbox and outbox changes after initial inventory load
+ LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&LLSidepanelInventory::handleLoginComplete, this));
+ }
+
+ gSavedSettings.getControl("InventoryDisplayInbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayInboxChanged));
+ gSavedSettings.getControl("InventoryDisplayOutbox")->getCommitSignal()->connect(boost::bind(&handleInventoryDisplayOutboxChanged));
+
return TRUE;
}
+void LLSidepanelInventory::handleLoginComplete()
+{
+ //
+ // Track inbox and outbox folder changes
+ //
+
+ const bool do_not_create_folder = false;
+ const bool do_not_find_in_library = false;
+
+ const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, do_not_create_folder, do_not_find_in_library);
+ const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, do_not_create_folder, do_not_find_in_library);
+
+ // Set up observer to listen for creation of inbox and outbox if at least one of them doesn't exist
+ if (inbox_id.isNull() || outbox_id.isNull())
+ {
+ observeInboxOutboxCreation();
+ }
+
+ // Set up observer for inbox changes, if we have an inbox already
+ if (!inbox_id.isNull())
+ {
+ observeInboxModifications(inbox_id);
+
+ // Enable the display of the inbox if it exists
+ enableInbox(true);
+ }
+
+ // Set up observer for outbox changes, if we have an outbox already
+ if (!outbox_id.isNull())
+ {
+ observeOutboxModifications(outbox_id);
+
+ // Enable the display of the outbox if it exists
+ //enableOutbox(true);
+ // leslie NOTE: Disabling outbox until we support it officially.
+ }
+}
+
+void LLSidepanelInventory::observeInboxOutboxCreation()
+{
+ //
+ // Set up observer to track inbox and outbox folder creation
+ //
+
+ if (mInboxOutboxAddedObserver == NULL)
+ {
+ mInboxOutboxAddedObserver = new LLInboxOutboxAddedObserver(this);
+
+ gInventory.addObserver(mInboxOutboxAddedObserver);
+ }
+}
+
+void LLSidepanelInventory::observeInboxModifications(const LLUUID& inboxID)
+{
+ //
+ // Track inbox and outbox folder changes
+ //
+
+ if (inboxID.isNull())
+ {
+ llwarns << "Attempting to track modifications to non-existant inbox" << llendl;
+ return;
+ }
+
+ if (mCategoriesObserver == NULL)
+ {
+ mCategoriesObserver = new LLInventoryCategoriesObserver();
+ gInventory.addObserver(mCategoriesObserver);
+ }
+
+ mCategoriesObserver->addCategory(inboxID, boost::bind(&LLSidepanelInventory::onInboxChanged, this, inboxID));
+
+ //
+ // Trigger a load for the entire contents of the Inbox
+ //
+
+ LLInventoryModelBackgroundFetch::instance().start(inboxID);
+
+ //
+ // Set up the inbox inventory view
+ //
+
+ LLPanelMarketplaceInbox * inbox = getChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
+ mInventoryPanelInbox = inbox->setupInventoryPanel();
+}
+
+
+void LLSidepanelInventory::observeOutboxModifications(const LLUUID& outboxID)
+{
+ //
+ // Track outbox folder changes
+ //
+
+ if (outboxID.isNull())
+ {
+ llwarns << "Attempting to track modifications to non-existant outbox" << llendl;
+ return;
+ }
+
+ if (mCategoriesObserver == NULL)
+ {
+ mCategoriesObserver = new LLInventoryCategoriesObserver();
+ gInventory.addObserver(mCategoriesObserver);
+ }
+
+ mCategoriesObserver->addCategory(outboxID, boost::bind(&LLSidepanelInventory::onOutboxChanged, this, outboxID));
+
+ //
+ // Set up the outbox inventory view
+ //
+
+ LLPanelMarketplaceOutbox * outbox = getChild<LLPanelMarketplaceOutbox>(MARKETPLACE_OUTBOX_PANEL);
+ mInventoryPanelOutbox = outbox->setupInventoryPanel();
+}
+
+void LLSidepanelInventory::enableInbox(bool enabled)
+{
+ mInboxEnabled = enabled;
+ getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME)->setVisible(enabled);
+}
+
+void LLSidepanelInventory::enableOutbox(bool enabled)
+{
+ mOutboxEnabled = enabled;
+ getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME)->setVisible(enabled);
+}
+
+void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id)
+{
+ // Trigger a load of the entire inbox so we always know the contents and their creation dates for sorting
+ LLInventoryModelBackgroundFetch::instance().start(inbox_id);
+
+ // Expand the inbox since we have fresh items
+ LLPanelMarketplaceInbox * inbox = findChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
+ if (inbox)
+ {
+ getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
+ onToggleInboxBtn();
+ }
+}
+
+void LLSidepanelInventory::onOutboxChanged(const LLUUID& outbox_id)
+{
+ // Perhaps use this to track outbox changes?
+}
+
+bool manageInboxOutboxPanels(LLLayoutStack * stack,
+ LLButton * pressedButton, LLLayoutPanel * pressedPanel,
+ LLButton * otherButton, LLLayoutPanel * otherPanel)
+{
+ bool expand = pressedButton->getToggleState();
+ bool otherExpanded = otherButton->getToggleState();
+
+ //
+ // NOTE: Ideally we could have two panel sizes stored for a collapsed and expanded minimum size.
+ // For now, leave this code disabled because it creates some bad artifacts when expanding
+ // and collapsing the inbox/outbox.
+ //
+ //S32 smallMinSize = (expand ? pressedPanel->getMinDim() : otherPanel->getMinDim());
+ //S32 pressedMinSize = (expand ? 2 * smallMinSize : smallMinSize);
+ //otherPanel->setMinDim(smallMinSize);
+ //pressedPanel->setMinDim(pressedMinSize);
+
+ if (expand && otherExpanded)
+ {
+ // Reshape pressedPanel to the otherPanel's height so we preserve the marketplace panel size
+ pressedPanel->reshape(pressedPanel->getRect().getWidth(), otherPanel->getRect().getHeight());
+
+ stack->collapsePanel(otherPanel, true);
+ otherButton->setToggleState(false);
+ }
+
+ stack->collapsePanel(pressedPanel, !expand);
+
+ // Enable user_resize on main inventory panel only when a marketplace box is expanded
+ stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, expand);
+
+ return expand;
+}
+
+void LLSidepanelInventory::onToggleInboxBtn()
+{
+ LLLayoutStack* stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
+ LLButton* pressedButton = getChild<LLButton>(INBOX_BUTTON_NAME);
+ LLLayoutPanel* pressedPanel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
+ LLButton* otherButton = getChild<LLButton>(OUTBOX_BUTTON_NAME);
+ LLLayoutPanel* otherPanel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
+
+ manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel);
+
+ gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString());
+}
+
+void LLSidepanelInventory::onToggleOutboxBtn()
+{
+ LLLayoutStack* stack = getChild<LLLayoutStack>(INVENTORY_LAYOUT_STACK_NAME);
+ LLButton* pressedButton = getChild<LLButton>(OUTBOX_BUTTON_NAME);
+ LLLayoutPanel* pressedPanel = getChild<LLLayoutPanel>(OUTBOX_LAYOUT_PANEL_NAME);
+ LLButton* otherButton = getChild<LLButton>(INBOX_BUTTON_NAME);
+ LLLayoutPanel* otherPanel = getChild<LLLayoutPanel>(INBOX_LAYOUT_PANEL_NAME);
+
+ manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel);
+}
+
void LLSidepanelInventory::onOpen(const LLSD& key)
{
LLFirstUse::newInventory(false);
+ // Expand the inbox if we have fresh items
+ LLPanelMarketplaceInbox * inbox = findChild<LLPanelMarketplaceInbox>(MARKETPLACE_INBOX_PANEL);
+ if (inbox && (inbox->getFreshItemCount() > 0))
+ {
+ getChild<LLButton>(INBOX_BUTTON_NAME)->setToggleState(true);
+ onToggleInboxBtn();
+ }
+
if(key.size() == 0)
return;
@@ -171,26 +531,27 @@ void LLSidepanelInventory::onShopButtonClicked()
void LLSidepanelInventory::performActionOnSelection(const std::string &action)
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+ LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
if (!current_item)
{
- return;
+ if (mInventoryPanelInbox)
+ {
+ current_item = mInventoryPanelInbox->getRootFolder()->getCurSelectedItem();
+ }
+
+ if (!current_item)
+ {
+ return;
+ }
}
- current_item->getListener()->performAction(panel_main_inventory->getActivePanel()->getModel(), action);
+
+ current_item->getListener()->performAction(mPanelMainInventory->getActivePanel()->getModel(), action);
}
void LLSidepanelInventory::onWearButtonClicked()
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- if (!panel_main_inventory)
- {
- llassert(panel_main_inventory != NULL);
- return;
- }
-
// Get selected items set.
- const std::set<LLUUID> selected_uuids_set = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
+ const std::set<LLUUID> selected_uuids_set = LLAvatarActions::getInventorySelectedUUIDs();
if (selected_uuids_set.empty()) return; // nothing selected
// Convert the set to a vector.
@@ -326,34 +687,28 @@ void LLSidepanelInventory::updateVerbs()
bool LLSidepanelInventory::canShare()
{
- LLPanelMainInventory* panel_main_inventory =
- mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
+ LLInventoryPanel* inbox = mInventoryPanelInbox;
- if (!panel_main_inventory)
+ // Avoid flicker in the Recent tab while inventory is being loaded.
+ if ( (!inbox || inbox->getRootFolder()->getSelectionList().empty())
+ && (mPanelMainInventory && !mPanelMainInventory->getActivePanel()->getRootFolder()->hasVisibleChildren()) )
{
- llwarns << "Failed to get the main inventory panel" << llendl;
return false;
}
- LLInventoryPanel* active_panel = panel_main_inventory->getActivePanel();
- // Avoid flicker in the Recent tab while inventory is being loaded.
- if (!active_panel->getRootFolder()->hasVisibleChildren()) return false;
-
- return LLAvatarActions::canShareSelectedItems(active_panel);
+ return ( (mPanelMainInventory ? LLAvatarActions::canShareSelectedItems(mPanelMainInventory->getActivePanel()) : false)
+ || (inbox ? LLAvatarActions::canShareSelectedItems(inbox) : false) );
}
+
bool LLSidepanelInventory::canWearSelected()
{
- LLPanelMainInventory* panel_main_inventory =
- mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- if (!panel_main_inventory)
- {
- llassert(panel_main_inventory != NULL);
+ std::set<LLUUID> selected_uuids = LLAvatarActions::getInventorySelectedUUIDs();
+
+ if (selected_uuids.empty())
return false;
- }
- std::set<LLUUID> selected_uuids = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
for (std::set<LLUUID>::const_iterator it = selected_uuids.begin();
it != selected_uuids.end();
++it)
@@ -366,11 +721,19 @@ bool LLSidepanelInventory::canWearSelected()
LLInventoryItem *LLSidepanelInventory::getSelectedItem()
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- LLFolderViewItem* current_item = panel_main_inventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+ LLFolderViewItem* current_item = mPanelMainInventory->getActivePanel()->getRootFolder()->getCurSelectedItem();
+
if (!current_item)
{
- return NULL;
+ if (mInventoryPanelInbox)
+ {
+ current_item = mInventoryPanelInbox->getRootFolder()->getCurSelectedItem();
+ }
+
+ if (!current_item)
+ {
+ return NULL;
+ }
}
const LLUUID &item_id = current_item->getListener()->getUUID();
LLInventoryItem *item = gInventory.getItem(item_id);
@@ -379,9 +742,26 @@ LLInventoryItem *LLSidepanelInventory::getSelectedItem()
U32 LLSidepanelInventory::getSelectedCount()
{
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->findChild<LLPanelMainInventory>("panel_main_inventory");
- std::set<LLUUID> selection_list = panel_main_inventory->getActivePanel()->getRootFolder()->getSelectionList();
- return selection_list.size();
+ int count = 0;
+
+ std::set<LLUUID> selection_list = mPanelMainInventory->getActivePanel()->getRootFolder()->getSelectionList();
+ count += selection_list.size();
+
+ if ((count == 0) && mInboxEnabled && (mInventoryPanelInbox != NULL))
+ {
+ selection_list = mInventoryPanelInbox->getRootFolder()->getSelectionList();
+
+ count += selection_list.size();
+ }
+
+ if ((count == 0) && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
+ {
+ selection_list = mInventoryPanelOutbox->getRootFolder()->getSelectionList();
+
+ count += selection_list.size();
+ }
+
+ return count;
}
LLInventoryPanel *LLSidepanelInventory::getActivePanel()
@@ -401,3 +781,45 @@ BOOL LLSidepanelInventory::isMainInventoryPanelActive() const
{
return mInventoryPanel->getVisible();
}
+
+void LLSidepanelInventory::clearSelections(bool clearMain, bool clearInbox, bool clearOutbox)
+{
+ if (clearMain)
+ {
+ LLInventoryPanel * inv_panel = getActivePanel();
+
+ if (inv_panel)
+ {
+ inv_panel->clearSelection();
+ }
+ }
+
+ if (clearInbox && mInboxEnabled && (mInventoryPanelInbox != NULL))
+ {
+ mInventoryPanelInbox->clearSelection();
+ }
+
+ if (clearOutbox && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
+ {
+ mInventoryPanelOutbox->clearSelection();
+ }
+
+ updateVerbs();
+}
+
+std::set<LLUUID> LLSidepanelInventory::getInboxOrOutboxSelectionList()
+{
+ std::set<LLUUID> inventory_selected_uuids;
+
+ if (mInboxEnabled && (mInventoryPanelInbox != NULL))
+ {
+ inventory_selected_uuids = mInventoryPanelInbox->getRootFolder()->getSelectionList();
+ }
+
+ if (inventory_selected_uuids.empty() && mOutboxEnabled && (mInventoryPanelOutbox != NULL))
+ {
+ inventory_selected_uuids = mInventoryPanelOutbox->getRootFolder()->getSelectionList();
+ }
+
+ return inventory_selected_uuids;
+}
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 32c98bc034..f80a3a9dd3 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -30,6 +30,8 @@
#include "llpanel.h"
class LLFolderViewItem;
+class LLInboxOutboxAddedObserver;
+class LLInventoryCategoriesObserver;
class LLInventoryItem;
class LLInventoryPanel;
class LLPanelMainInventory;
@@ -42,12 +44,23 @@ public:
LLSidepanelInventory();
virtual ~LLSidepanelInventory();
+private:
+ void handleLoginComplete();
+
+public:
+ void observeInboxOutboxCreation();
+ void observeInboxModifications(const LLUUID& inboxID);
+ void observeOutboxModifications(const LLUUID& outboxID);
+
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
LLInventoryPanel* getActivePanel(); // Returns an active inventory panel, if any.
LLPanelMainInventory* getMainInventoryPanel() const { return mPanelMainInventory; }
BOOL isMainInventoryPanelActive() const;
+
+ void clearSelections(bool clearMain, bool clearInbox, bool clearOutbox);
+ std::set<LLUUID> getInboxOrOutboxSelectionList();
void showItemInfoPanel();
void showTaskInfoPanel();
@@ -56,6 +69,17 @@ public:
// checks can share selected item(s)
bool canShare();
+ void onToggleInboxBtn();
+ void onToggleOutboxBtn();
+
+ void enableInbox(bool enabled);
+ void enableOutbox(bool enabled);
+
+ bool isInboxEnabled() const { return mInboxEnabled; }
+ bool isOutboxEnabled() const { return mOutboxEnabled; }
+
+ void updateVerbs();
+
protected:
// Tracks highlighted (selected) item in inventory panel.
LLInventoryItem *getSelectedItem();
@@ -63,15 +87,19 @@ protected:
void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
// "wear", "teleport", etc.
void performActionOnSelection(const std::string &action);
- void updateVerbs();
bool canWearSelected(); // check whether selected items can be worn
+ void onInboxChanged(const LLUUID& inbox_id);
+ void onOutboxChanged(const LLUUID& outbox_id);
+
//
// UI Elements
//
private:
LLPanel* mInventoryPanel; // Main inventory view
+ LLInventoryPanel* mInventoryPanelInbox;
+ LLInventoryPanel* mInventoryPanelOutbox;
LLSidepanelItemInfo* mItemPanel; // Individual item view
LLSidepanelTaskInfo* mTaskPanel; // Individual in-world object view
LLPanelMainInventory* mPanelMainInventory;
@@ -85,6 +113,7 @@ protected:
void onTeleportButtonClicked();
void onOverflowButtonClicked();
void onBackButtonClicked();
+
private:
LLButton* mInfoBtn;
LLButton* mShareBtn;
@@ -94,6 +123,11 @@ private:
LLButton* mOverflowBtn;
LLButton* mShopBtn;
+ bool mInboxEnabled;
+ bool mOutboxEnabled;
+
+ LLInventoryCategoriesObserver* mCategoriesObserver;
+ LLInboxOutboxAddedObserver* mInboxOutboxAddedObserver;
};
#endif //LL_LLSIDEPANELINVENTORY_H
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
index 37b10b592f..2918bb388a 100644
--- a/indra/newview/llsidepanelinventorysubpanel.cpp
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -46,8 +46,8 @@
///----------------------------------------------------------------------------
// Default constructor
-LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel()
- : LLPanel(),
+LLSidepanelInventorySubpanel::LLSidepanelInventorySubpanel(const LLPanel::Params& p)
+ : LLPanel(p),
mIsDirty(TRUE),
mIsEditing(FALSE),
mCancelBtn(NULL),
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h
index b2de7d3b0b..b5cf3aaf17 100644
--- a/indra/newview/llsidepanelinventorysubpanel.h
+++ b/indra/newview/llsidepanelinventorysubpanel.h
@@ -40,7 +40,7 @@ class LLInventoryItem;
class LLSidepanelInventorySubpanel : public LLPanel
{
public:
- LLSidepanelInventorySubpanel();
+ LLSidepanelInventorySubpanel(const LLPanel::Params& p = getDefaultParams());
virtual ~LLSidepanelInventorySubpanel();
/*virtual*/ void setVisible(BOOL visible);
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index fbd2f7ca83..1ce05da849 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -130,9 +130,10 @@ void LLObjectInventoryObserver::inventoryChanged(LLViewerObject* object,
static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
// Default constructor
-LLSidepanelItemInfo::LLSidepanelItemInfo()
- : mItemID(LLUUID::null)
- , mObjectInventoryObserver(NULL)
+LLSidepanelItemInfo::LLSidepanelItemInfo(const LLPanel::Params& p)
+ : LLSidepanelInventorySubpanel(p)
+ , mItemID(LLUUID::null)
+ , mObjectInventoryObserver(NULL)
{
mPropertiesObserver = new LLItemPropertiesObserver(this);
}
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 25be145f64..12aaca923e 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -44,7 +44,7 @@ class LLPermissions;
class LLSidepanelItemInfo : public LLSidepanelInventorySubpanel
{
public:
- LLSidepanelItemInfo();
+ LLSidepanelItemInfo(const LLPanel::Params& p = getDefaultParams());
virtual ~LLSidepanelItemInfo();
/*virtual*/ BOOL postBuild();
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index 631b244785..a7c4057846 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -30,6 +30,7 @@
#include "llagentcamera.h"
#include "llappviewer.h"
+#include "llbadge.h"
#include "llbottomtray.h"
#include "llfloaterreg.h"
#include "llfirstuse.h"
@@ -40,6 +41,7 @@
#include "llfocusmgr.h"
#include "llrootview.h"
#include "llnavigationbar.h"
+#include "llpanelmarketplaceinbox.h"
#include "llaccordionctrltab.h"
@@ -113,11 +115,14 @@ public:
Optional<std::string> image_selected;
Optional<std::string> tab_title;
Optional<std::string> description;
+ Optional<LLBadge::Params> badge;
+
Params()
: image("image"),
image_selected("image_selected"),
tab_title("tab_title","no title"),
- description("description","no description")
+ description("description","no description"),
+ badge("badge")
{};
};
protected:
@@ -140,7 +145,6 @@ public:
static LLSideTrayTab* createInstance ();
const std::string& getDescription () const { return mDescription;}
- const std::string& getTabTitle() const { return mTabTitle;}
void onOpen (const LLSD& key);
@@ -150,7 +154,10 @@ public:
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
- LLPanel *getPanel();
+ LLPanel* getPanel();
+
+ LLButton* createButton(bool allowTearOff, LLUICtrl::commit_callback_t callback);
+
private:
std::string mTabTitle;
std::string mImage;
@@ -158,6 +165,9 @@ private:
std::string mDescription;
LLView* mMainPanel;
+
+ bool mHasBadge;
+ LLBadge::Params mBadgeParams;
};
LLSideTrayTab::LLSideTrayTab(const Params& p)
@@ -166,8 +176,10 @@ LLSideTrayTab::LLSideTrayTab(const Params& p)
mImage(p.image),
mImageSelected(p.image_selected),
mDescription(p.description),
- mMainPanel(NULL)
+ mMainPanel(NULL),
+ mBadgeParams(p.badge)
{
+ mHasBadge = p.badge.isProvided();
}
LLSideTrayTab::~LLSideTrayTab()
@@ -182,8 +194,6 @@ bool LLSideTrayTab::addChild(LLView* view, S32 tab_group)
//return res;
}
-
-
//virtual
BOOL LLSideTrayTab::postBuild()
{
@@ -196,7 +206,7 @@ BOOL LLSideTrayTab::postBuild()
getChild<LLButton>("undock")->setCommitCallback(boost::bind(&LLSideTrayTab::setDocked, this, false));
getChild<LLButton>("dock")->setCommitCallback(boost::bind(&LLSideTrayTab::setDocked, this, true));
- return true;
+ return LLPanel::postBuild();
}
static const S32 splitter_margin = 1;
@@ -486,7 +496,7 @@ public:
LLSideTray* side_tray = LLSideTray::getInstance();
// Check if the tab we are dragging is docked.
- if (!side_tray->isTabAttached(getName())) return FALSE;
+ if (!side_tray->isTabAttached(mTabName)) return FALSE;
// Same value is hardcoded in LLDragHandle::handleHover().
const S32 undock_threshold = 12;
@@ -495,7 +505,7 @@ public:
if (delta_x <= -undock_threshold || delta_x >= undock_threshold ||
delta_y <= -undock_threshold || delta_y >= undock_threshold)
{
- LLSideTrayTab* tab = side_tray->getTab(getName());
+ LLSideTrayTab* tab = side_tray->getTab(mTabName);
if (!tab) return FALSE;
tab->setDocked(false);
@@ -523,18 +533,42 @@ public:
return FALSE;
}
+ void setBadgeDriver(LLSideTrayTabBadgeDriver* driver)
+ {
+ mBadgeDriver = driver;
+ }
+
protected:
LLSideTrayButton(const LLButton::Params& p)
- : LLButton(p)
- , mDragLastScreenX(0)
- , mDragLastScreenY(0)
- {}
+ : LLButton(p)
+ , mDragLastScreenX(0)
+ , mDragLastScreenY(0)
+ , mBadgeDriver(NULL)
+ {
+ // Find out the tab name to use in handleHover().
+ size_t pos = getName().find("_button");
+ llassert(pos != std::string::npos);
+ mTabName = getName().substr(0, pos);
+ }
friend class LLUICtrlFactory;
+ void draw()
+ {
+ if (mBadgeDriver)
+ {
+ setBadgeLabel(mBadgeDriver->getBadgeString());
+ }
+
+ LLButton::draw();
+ }
+
private:
S32 mDragLastScreenX;
S32 mDragLastScreenY;
+
+ std::string mTabName;
+ LLSideTrayTabBadgeDriver* mBadgeDriver;
};
//////////////////////////////////////////////////////////////////////////////
@@ -615,11 +649,31 @@ BOOL LLSideTray::postBuild()
return true;
}
+void LLSideTray::setTabButtonBadgeDriver(std::string tabName, LLSideTrayTabBadgeDriver* driver)
+{
+ mTabButtonBadgeDrivers[tabName] = driver;
+}
+
void LLSideTray::handleLoginComplete()
{
//reset tab to "home" tab if it was changesd during login process
selectTabByName("sidebar_home");
+ for (badge_map_t::iterator it = mTabButtonBadgeDrivers.begin(); it != mTabButtonBadgeDrivers.end(); ++it)
+ {
+ LLButton* button = mTabButtons[it->first];
+ LLSideTrayButton* side_button = dynamic_cast<LLSideTrayButton*>(button);
+
+ if (side_button)
+ {
+ side_button->setBadgeDriver(it->second);
+ }
+ else
+ {
+ llwarns << "Unable to find button " << it->first << " to set the badge driver. " << llendl;
+ }
+ }
+
detachTabs();
}
@@ -631,6 +685,7 @@ LLSideTrayTab* LLSideTray::getTab(const std::string& name)
bool LLSideTray::isTabAttached(const std::string& name)
{
LLSideTrayTab* tab = getTab(name);
+ llassert(tab);
if (!tab) return false;
return std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end();
@@ -766,51 +821,6 @@ bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible
return true;
}
-LLButton* LLSideTray::createButton (const std::string& name,const std::string& image,const std::string& tooltip,
- LLUICtrl::commit_callback_t callback)
-{
- static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
-
- LLButton::Params bparams;
-
- LLRect rect;
- rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height);
-
- bparams.name(name);
- bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
- bparams.rect (rect);
- bparams.tab_stop(false);
- bparams.image_unselected(sidetray_params.tab_btn_image_normal);
- bparams.image_selected(sidetray_params.tab_btn_image_selected);
- bparams.image_disabled(sidetray_params.tab_btn_image_normal);
- bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected);
-
- LLButton* button;
- if (name == "sidebar_openclose")
- {
- // "Open/Close" button shouldn't allow "tear off"
- // hence it is created as LLButton instance.
- button = LLUICtrlFactory::create<LLButton>(bparams);
- }
- else
- {
- button = LLUICtrlFactory::create<LLSideTrayButton>(bparams);
- }
-
- button->setClickedCallback(callback);
-
- button->setToolTip(tooltip);
-
- if(image.length())
- {
- button->setImageOverlay(image);
- }
-
- mButtonsPanel->addChildInBack(button);
-
- return button;
-}
-
bool LLSideTray::addChild(LLView* view, S32 tab_group)
{
LLSideTrayTab* tab_panel = dynamic_cast<LLSideTrayTab*>(view);
@@ -938,7 +948,56 @@ bool LLSideTray::addTab(LLSideTrayTab* tab)
return true;
}
-void LLSideTray::createButtons ()
+LLButton* LLSideTrayTab::createButton(bool allowTearOff, LLUICtrl::commit_callback_t callback)
+{
+ static LLSideTray::Params sidetray_params(LLUICtrlFactory::getDefaultParams<LLSideTray>());
+
+ LLRect rect;
+ rect.setOriginAndSize(0, 0, sidetray_params.default_button_width, sidetray_params.default_button_height);
+
+ LLButton::Params bparams;
+
+ // Append "_button" to the side tray tab name
+ std::string button_name = getName() + "_button";
+ bparams.name(button_name);
+ bparams.follows.flags (FOLLOWS_LEFT | FOLLOWS_TOP);
+ bparams.rect (rect);
+ bparams.tab_stop(false);
+ bparams.image_unselected(sidetray_params.tab_btn_image_normal);
+ bparams.image_selected(sidetray_params.tab_btn_image_selected);
+ bparams.image_disabled(sidetray_params.tab_btn_image_normal);
+ bparams.image_disabled_selected(sidetray_params.tab_btn_image_selected);
+
+ if (mHasBadge)
+ {
+ bparams.badge = mBadgeParams;
+ }
+
+ LLButton* button;
+ if (allowTearOff)
+ {
+ button = LLUICtrlFactory::create<LLSideTrayButton>(bparams);
+ }
+ else
+ {
+ // "Open/Close" button shouldn't allow "tear off"
+ // hence it is created as LLButton instance.
+ button = LLUICtrlFactory::create<LLButton>(bparams);
+ }
+
+ button->setClickedCallback(callback);
+
+ button->setToolTip(mTabTitle);
+
+ if(mImage.length())
+ {
+ button->setImageOverlay(mImage);
+ }
+
+ return button;
+}
+
+void LLSideTray::createButtons()
{
//create buttons for tabs
child_vector_const_iter_t child_it = mTabs.begin();
@@ -951,17 +1010,22 @@ void LLSideTray::createButtons ()
// The "OpenClose" button will open/close the whole panel
if (name == "sidebar_openclose")
{
- mCollapseButton = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(),
- boost::bind(&LLSideTray::onToggleCollapse, this));
+ mCollapseButton = sidebar_tab->createButton(false, boost::bind(&LLSideTray::onToggleCollapse, this));
+
+ mButtonsPanel->addChildInBack(mCollapseButton);
+
LLHints::registerHintTarget("side_panel_btn", mCollapseButton->getHandle());
}
else
{
- LLButton* button = createButton(name,sidebar_tab->mImage,sidebar_tab->getTabTitle(),
- boost::bind(&LLSideTray::onTabButtonClick, this, name));
+ LLButton* button = sidebar_tab->createButton(true, boost::bind(&LLSideTray::onTabButtonClick, this, name));
+
+ mButtonsPanel->addChildInBack(button);
+
mTabButtons[name] = button;
}
}
+
LLHints::registerHintTarget("inventory_btn", mTabButtons["sidebar_inventory"]->getHandle());
}
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 24882411f4..17158329dc 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -33,6 +33,13 @@
class LLAccordionCtrl;
class LLSideTrayTab;
+// Define an interface for side tab button badge values
+class LLSideTrayTabBadgeDriver
+{
+public:
+ virtual std::string getBadgeString() const = 0;
+};
+
// Deal with LLSideTrayTab being opaque. Generic do-nothing cast...
template <class T>
T tab_cast(LLSideTrayTab* tab) { return tab; }
@@ -166,6 +173,8 @@ public:
bool getCollapsed() { return mCollapsed; }
+ void setTabButtonBadgeDriver(std::string tabName, LLSideTrayTabBadgeDriver* driver);
+
public:
virtual ~LLSideTray(){};
@@ -204,8 +213,6 @@ protected:
void createButtons ();
- LLButton* createButton (const std::string& name,const std::string& image,const std::string& tooltip,
- LLUICtrl::commit_callback_t callback);
void arrange ();
void detachTabs ();
void reflectCollapseChange();
@@ -234,6 +241,8 @@ private:
LLPanel* mButtonsPanel;
typedef std::map<std::string,LLButton*> button_map_t;
button_map_t mTabButtons;
+ typedef std::map<std::string,LLSideTrayTabBadgeDriver*> badge_map_t;
+ badge_map_t mTabButtonBadgeDrivers;
child_vector_t mTabs;
child_vector_t mDetachedTabs;
tab_order_vector_t mOriginalTabOrder;
diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
index 4cf1df1655..a853726dea 100644
--- a/indra/newview/llslurl.cpp
+++ b/indra/newview/llslurl.cpp
@@ -273,11 +273,11 @@ LLSLURL::LLSLURL(const std::string& slurl)
mRegion = LLURI::unescape(path_array[0].asString());
path_array.erase(0);
- // parse the x, y, z
- if(path_array.size() >= 3)
+ // parse the x, y, and optionally z
+ if(path_array.size() >= 2)
{
- mPosition = LLVector3(path_array);
+ mPosition = LLVector3(path_array); // this construction handles LLSD without all components (values default to 0.f)
if((F32(mPosition[VX]) < 0.f) ||
(mPosition[VX] > REGION_WIDTH_METERS) ||
(F32(mPosition[VY]) < 0.f) ||
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index a5b91729e8..fd17781a2e 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -47,6 +47,7 @@
#include "llvoavatar.h"
#include "llvolumemgr.h"
#include "lltextureatlas.h"
+#include "llglslshader.h"
static LLFastTimer::DeclareTimer FTM_FRUSTUM_CULL("Frustum Culling");
static LLFastTimer::DeclareTimer FTM_CULL_REBOUND("Cull Rebound");
@@ -522,6 +523,11 @@ void LLSpatialGroup::clearDrawMap()
mDrawMap.clear();
}
+BOOL LLSpatialGroup::isHUDGroup()
+{
+ return mSpatialPartition && mSpatialPartition->isHUDPartition() ;
+}
+
BOOL LLSpatialGroup::isRecentlyVisible() const
{
return (LLDrawable::getCurrentFrame() - mVisible[LLViewerCamera::sCurCameraID]) < LLDrawable::getMinVisFrameRange() ;
@@ -2785,7 +2791,7 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE)
gGL.color4f(0,1,1,1);
break;
case LLViewerObject::LL_VO_CLOUDS:
- gGL.color4f(0.5f,0.5f,0.5f,1.0f);
+ // no longer used
break;
case LLViewerObject::LL_VO_PART_GROUP:
case LLViewerObject::LL_VO_HUD_PART_GROUP:
@@ -3176,6 +3182,8 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)
glColor4fv(line_color.mV);
LLVertexBuffer::unbind();
+ llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0);
+
glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);
glDrawElements(GL_TRIANGLES, phys_volume->mNumHullIndices, GL_UNSIGNED_SHORT, phys_volume->mHullIndices);
@@ -3257,7 +3265,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)
if (phys_volume->mHullPoints && phys_volume->mHullIndices)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
-
+ llassert(!LLGLSLShader::sNoFixedFunction || LLGLSLShader::sCurBoundShader != 0);
LLVertexBuffer::unbind();
glVertexPointer(3, GL_FLOAT, 16, phys_volume->mHullPoints);
glColor4fv(line_color.mV);
@@ -4152,6 +4160,10 @@ void LLSpatialGroup::drawObjectBox(LLColor4 col)
drawBox(mObjectBounds[0], size);
}
+bool LLSpatialPartition::isHUDPartition()
+{
+ return mPartitionType == LLViewerRegion::PARTITION_HUD ;
+}
BOOL LLSpatialPartition::isVisible(const LLVector3& v)
{
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
index db8a0c2992..11955540c6 100644
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -282,6 +282,7 @@ public:
LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part);
+ BOOL isHUDGroup() ;
BOOL isDead() { return isState(DEAD); }
BOOL isState(U32 state) const;
BOOL isOcclusionState(U32 state) const { return mOcclusionState[LLViewerCamera::sCurCameraID] & state ? TRUE : FALSE; }
@@ -470,6 +471,7 @@ public:
S32 cull(LLCamera &camera, std::vector<LLDrawable *>* results = NULL, BOOL for_select = FALSE); // Cull on arbitrary frustum
BOOL isVisible(const LLVector3& v);
+ bool isHUDPartition() ;
virtual LLSpatialBridge* asBridge() { return NULL; }
virtual BOOL isBridge() { return asBridge() != NULL; }
@@ -664,13 +666,6 @@ public:
LLGrassPartition();
};
-//spatial partition for clouds (implemented in LLVOClouds.cpp)
-class LLCloudPartition : public LLParticlePartition
-{
-public:
- LLCloudPartition();
-};
-
//class for wrangling geometry out of volumes (implemented in LLVOVolume.cpp)
class LLVolumeGeometryManager: public LLGeometryManager
{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 86b09473ab..749acea6c1 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -76,6 +76,7 @@
#include "lluserrelations.h"
#include "llversioninfo.h"
#include "llviewercontrol.h"
+#include "llviewerhelp.h"
#include "llvfs.h"
#include "llxorcipher.h" // saved password, MAC address
#include "llwindow.h"
@@ -125,6 +126,7 @@
#include "llpanelgroupnotices.h"
#include "llpreview.h"
#include "llpreviewscript.h"
+#include "llproxy.h"
#include "llproductinforequest.h"
#include "llsecondlifeurls.h"
#include "llselectmgr.h"
@@ -163,7 +165,6 @@
#include "llviewerwindow.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
-#include "llvoclouds.h"
#include "llweb.h"
#include "llworld.h"
#include "llworldmapmessage.h"
@@ -386,6 +387,14 @@ bool idle_startup()
LLNotificationsUtil::add(gViewerWindow->getInitAlert());
}
+ //-------------------------------------------------
+ // Init the SOCKS 5 proxy if the user has configured
+ // one. We need to do this early in case the user
+ // is using SOCKS for HTTP so we get the login
+ // screen and HTTP tables via SOCKS.
+ //-------------------------------------------------
+ LLStartUp::startLLProxy();
+
gSavedSettings.setS32("LastFeatureVersion", LLFeatureManager::getInstance()->getVersion());
gSavedSettings.setS32("LastGPUClass", LLFeatureManager::getInstance()->getGPUClass());
@@ -591,7 +600,7 @@ bool idle_startup()
}
LL_INFOS("AppInit") << "Message System Initialized." << LL_ENDL;
-
+
//-------------------------------------------------
// Init audio, which may be needed for prefs dialog
// or audio cues in connection UI.
@@ -720,7 +729,13 @@ bool idle_startup()
timeout_count = 0;
+ // Login screen needs menus for preferences, but we can enter
+ // this startup phase more than once.
+ if (gLoginMenuBarView == NULL)
+ {
initialize_edit_menu();
+ init_menus();
+ }
if (show_connect_box)
{
@@ -755,19 +770,6 @@ bool idle_startup()
LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
}
- // *NOTE: This is where LLViewerParcelMgr::getInstance() used to get allocated before becoming LLViewerParcelMgr::getInstance().
-
- // *NOTE: This is where gHUDManager used to bet allocated before becoming LLHUDManager::getInstance().
-
- // *NOTE: This is where gMuteList used to get allocated before becoming LLMuteList::getInstance().
-
- // Login screen needs menus for preferences, but we can enter
- // this startup phase more than once.
- if (gLoginMenuBarView == NULL)
- {
- init_menus();
- }
-
gViewerWindow->setNormalControlsVisible( FALSE );
gLoginMenuBarView->setVisible( TRUE );
gLoginMenuBarView->setEnabled( TRUE );
@@ -807,7 +809,21 @@ bool idle_startup()
if (STATE_LOGIN_CLEANUP == LLStartUp::getStartupState())
{
- //reset the values that could have come in from a slurl
+ // Post login screen, we should see if any settings have changed that may
+ // require us to either start/stop or change the socks proxy. As various communications
+ // past this point may require the proxy to be up.
+ if (!LLStartUp::startLLProxy())
+ {
+ // Proxy start up failed, we should now bail the state machine
+ // startLLProxy() will have reported an error to the user
+ // already, so we just go back to the login screen. The user
+ // could then change the preferences to fix the issue.
+
+ LLStartUp::setStartupState(STATE_LOGIN_SHOW);
+ return FALSE;
+ }
+
+ // reset the values that could have come in from a slurl
// DEV-42215: Make sure they're not empty -- gUserCredential
// might already have been set from gSavedSettings, and it's too bad
// to overwrite valid values with empty strings.
@@ -897,7 +913,7 @@ bool idle_startup()
if (show_connect_box)
{
LLSLURL slurl;
- LLPanelLogin::closePanel();
+ //LLPanelLogin::closePanel();
}
@@ -944,6 +960,8 @@ bool idle_startup()
gViewerWindow->setShowProgress(TRUE);
gViewerWindow->setProgressCancelButtonVisible(TRUE, LLTrans::getString("Quit"));
+ gViewerWindow->revealIntroPanel();
+
// Poke the VFS, which could potentially block for a while if
// Windows XP is acting up
set_startup_status(0.07f, LLTrans::getString("LoginVerifyingCache"), LLStringUtil::null);
@@ -1171,8 +1189,6 @@ bool idle_startup()
// init the shader managers
LLPostProcess::initClass();
- LLWLParamManager::initClass();
- LLWaterParamManager::initClass();
LLViewerObject::initVOClasses();
@@ -1244,6 +1260,25 @@ bool idle_startup()
//---------------------------------------------------------------------
if(STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
{
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(gFirstSimHandle);
+ if (regionp->capabilitiesReceived())
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+ else
+ {
+ U32 num_retries = regionp->getNumSeedCapRetries();
+ if (num_retries > 0)
+ {
+ LLStringUtil::format_map_t args;
+ args["[NUMBER]"] = llformat("%d", num_retries + 1);
+ set_startup_status(0.4f, LLTrans::getString("LoginRetrySeedCapGrant", args), gAgent.mMOTD);
+ }
+ else
+ {
+ set_startup_status(0.4f, LLTrans::getString("LoginRequestSeedCapGrant"), gAgent.mMOTD);
+ }
+ }
return FALSE;
}
@@ -1543,6 +1578,12 @@ bool idle_startup()
}
}
+ LLSD inv_basic = response["inventory-basic"];
+ if(inv_basic.isDefined())
+ {
+ llinfos << "Basic inventory root folder id is " << inv_basic["folder_id"] << llendl;
+ }
+
LLSD buddy_list = response["buddy-list"];
if(buddy_list.isDefined())
{
@@ -1692,11 +1733,22 @@ bool idle_startup()
gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f);
}
+ if (gSavedSettings.getBOOL("ShowHelpOnFirstLogin"))
+ {
+ gSavedSettings.setBOOL("HelpFloaterOpen", TRUE);
+ }
+
// Set the show start location to true, now that the user has logged
// on with this install.
gSavedSettings.setBOOL("ShowStartLocation", TRUE);
}
+ if (gSavedSettings.getBOOL("HelpFloaterOpen"))
+ {
+ // show default topic
+ LLViewerHelp::instance().showTopic("");
+ }
+
// We're successfully logged in.
gSavedSettings.setBOOL("FirstLoginThisInstall", FALSE);
@@ -1953,7 +2005,8 @@ bool idle_startup()
gViewerWindow->getWindow()->resetBusyCount();
gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
LL_DEBUGS("AppInit") << "Done releasing bitmap" << LL_ENDL;
- gViewerWindow->setShowProgress(FALSE);
+ //gViewerWindow->revealIntroPanel();
+ gViewerWindow->setStartupComplete();
gViewerWindow->setProgressCancelButtonVisible(FALSE);
// We're not away from keyboard, even though login might have taken
@@ -2526,22 +2579,32 @@ void init_start_screen(S32 location_id)
else if(!start_image_bmp->load(temp_str) )
{
LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
- return;
+ gStartTexture = NULL;
}
+ else
+ {
+ gStartImageWidth = start_image_bmp->getWidth();
+ gStartImageHeight = start_image_bmp->getHeight();
- gStartImageWidth = start_image_bmp->getWidth();
- gStartImageHeight = start_image_bmp->getHeight();
+ LLPointer<LLImageRaw> raw = new LLImageRaw;
+ if (!start_image_bmp->decode(raw, 0.0f))
+ {
+ LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
+ gStartTexture = NULL;
+ }
+ else
+ {
+ raw->expandToPowerOfTwo();
+ gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE) ;
+ }
+ }
- LLPointer<LLImageRaw> raw = new LLImageRaw;
- if (!start_image_bmp->decode(raw, 0.0f))
+ if(gStartTexture.isNull())
{
- LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
- gStartTexture = NULL;
- return;
+ gStartTexture = LLViewerTexture::sBlackImagep ;
+ gStartImageWidth = gStartTexture->getWidth() ;
+ gStartImageHeight = gStartTexture->getHeight() ;
}
-
- raw->expandToPowerOfTwo();
- gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE) ;
}
@@ -2728,6 +2791,171 @@ void LLStartUp::setStartSLURL(const LLSLURL& slurl)
}
}
+/**
+ * Read all proxy configuration settings and set up both the HTTP proxy and
+ * SOCKS proxy as needed.
+ *
+ * Any errors that are encountered will result in showing the user a notification.
+ * When an error is encountered,
+ *
+ * @return Returns true if setup was successful, false if an error was encountered.
+ */
+bool LLStartUp::startLLProxy()
+{
+ bool proxy_ok = true;
+ std::string httpProxyType = gSavedSettings.getString("HttpProxyType");
+
+ // Set up SOCKS proxy (if needed)
+ if (gSavedSettings.getBOOL("Socks5ProxyEnabled"))
+ {
+ // Determine and update LLProxy with the saved authentication system
+ std::string auth_type = gSavedSettings.getString("Socks5AuthType");
+
+ if (auth_type.compare("UserPass") == 0)
+ {
+ LLPointer<LLCredential> socks_cred = gSecAPIHandler->loadCredential("SOCKS5");
+ std::string socks_user = socks_cred->getIdentifier()["username"].asString();
+ std::string socks_password = socks_cred->getAuthenticator()["creds"].asString();
+
+ bool ok = LLProxy::getInstance()->setAuthPassword(socks_user, socks_password);
+
+ if (!ok)
+ {
+ LLNotificationsUtil::add("SOCKS_BAD_CREDS");
+ proxy_ok = false;
+ }
+ }
+ else if (auth_type.compare("None") == 0)
+ {
+ LLProxy::getInstance()->setAuthNone();
+ }
+ else
+ {
+ LL_WARNS("Proxy") << "Invalid SOCKS 5 authentication type."<< LL_ENDL;
+
+ // Unknown or missing setting.
+ gSavedSettings.setString("Socks5AuthType", "None");
+
+ // Clear the SOCKS credentials.
+ LLPointer<LLCredential> socks_cred = new LLCredential("SOCKS5");
+ gSecAPIHandler->deleteCredential(socks_cred);
+
+ LLProxy::getInstance()->setAuthNone();
+ }
+
+ if (proxy_ok)
+ {
+ // Start the proxy and check for errors
+ // If status != SOCKS_OK, stopSOCKSProxy() will already have been called when startSOCKSProxy() returns.
+ LLHost socks_host;
+ socks_host.setHostByName(gSavedSettings.getString("Socks5ProxyHost"));
+ socks_host.setPort(gSavedSettings.getU32("Socks5ProxyPort"));
+ int status = LLProxy::getInstance()->startSOCKSProxy(socks_host);
+
+ if (status != SOCKS_OK)
+ {
+ LLSD subs;
+ subs["HOST"] = gSavedSettings.getString("Socks5ProxyHost");
+ subs["PORT"] = (S32)gSavedSettings.getU32("Socks5ProxyPort");
+
+ std::string error_string;
+
+ switch(status)
+ {
+ case SOCKS_CONNECT_ERROR: // TCP Fail
+ error_string = "SOCKS_CONNECT_ERROR";
+ break;
+
+ case SOCKS_NOT_PERMITTED: // SOCKS 5 server rule set refused connection
+ error_string = "SOCKS_NOT_PERMITTED";
+ break;
+
+ case SOCKS_NOT_ACCEPTABLE: // Selected authentication is not acceptable to server
+ error_string = "SOCKS_NOT_ACCEPTABLE";
+ break;
+
+ case SOCKS_AUTH_FAIL: // Authentication failed
+ error_string = "SOCKS_AUTH_FAIL";
+ break;
+
+ case SOCKS_UDP_FWD_NOT_GRANTED: // UDP forward request failed
+ error_string = "SOCKS_UDP_FWD_NOT_GRANTED";
+ break;
+
+ case SOCKS_HOST_CONNECT_FAILED: // Failed to open a TCP channel to the socks server
+ error_string = "SOCKS_HOST_CONNECT_FAILED";
+ break;
+
+ case SOCKS_INVALID_HOST: // Improperly formatted host address or port.
+ error_string = "SOCKS_INVALID_HOST";
+ break;
+
+ default:
+ error_string = "SOCKS_UNKNOWN_STATUS"; // Something strange happened,
+ LL_WARNS("Proxy") << "Unknown return from LLProxy::startProxy(): " << status << LL_ENDL;
+ break;
+ }
+
+ LLNotificationsUtil::add(error_string, subs);
+ proxy_ok = false;
+ }
+ }
+ }
+ else
+ {
+ LLProxy::getInstance()->stopSOCKSProxy(); // ensure no UDP proxy is running and it's all cleaned up
+ }
+
+ if (proxy_ok)
+ {
+ // Determine the HTTP proxy type (if any)
+ if ((httpProxyType.compare("Web") == 0) && gSavedSettings.getBOOL("BrowserProxyEnabled"))
+ {
+ LLHost http_host;
+ http_host.setHostByName(gSavedSettings.getString("BrowserProxyAddress"));
+ http_host.setPort(gSavedSettings.getS32("BrowserProxyPort"));
+ if (!LLProxy::getInstance()->enableHTTPProxy(http_host, LLPROXY_HTTP))
+ {
+ LLSD subs;
+ subs["HOST"] = http_host.getIPString();
+ subs["PORT"] = (S32)http_host.getPort();
+ LLNotificationsUtil::add("PROXY_INVALID_HTTP_HOST", subs);
+ proxy_ok = false;
+ }
+ }
+ else if ((httpProxyType.compare("Socks") == 0) && gSavedSettings.getBOOL("Socks5ProxyEnabled"))
+ {
+ LLHost socks_host;
+ socks_host.setHostByName(gSavedSettings.getString("Socks5ProxyHost"));
+ socks_host.setPort(gSavedSettings.getU32("Socks5ProxyPort"));
+ if (!LLProxy::getInstance()->enableHTTPProxy(socks_host, LLPROXY_SOCKS))
+ {
+ LLSD subs;
+ subs["HOST"] = socks_host.getIPString();
+ subs["PORT"] = (S32)socks_host.getPort();
+ LLNotificationsUtil::add("PROXY_INVALID_SOCKS_HOST", subs);
+ proxy_ok = false;
+ }
+ }
+ else if (httpProxyType.compare("None") == 0)
+ {
+ LLProxy::getInstance()->disableHTTPProxy();
+ }
+ else
+ {
+ LL_WARNS("Proxy") << "Invalid other HTTP proxy configuration."<< LL_ENDL;
+
+ // Set the missing or wrong configuration back to something valid.
+ gSavedSettings.setString("HttpProxyType", "None");
+ LLProxy::getInstance()->disableHTTPProxy();
+
+ // Leave proxy_ok alone, since this isn't necessarily fatal.
+ }
+ }
+
+ return proxy_ok;
+}
+
bool login_alert_done(const LLSD& notification, const LLSD& response)
{
LLPanelLogin::giveFocus();
@@ -3150,11 +3378,6 @@ bool process_login_success_response()
gMoonTextureID = id;
}
- id = global_textures["cloud_texture_id"];
- if(id.notNull())
- {
- gCloudTextureID = id;
- }
}
// Set the location of the snapshot sharing config endpoint
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
index b3d9ef1dcc..99a644eb9c 100644
--- a/indra/newview/llstartup.h
+++ b/indra/newview/llstartup.h
@@ -113,6 +113,8 @@ public:
static void setStartSLURL(const LLSLURL& slurl);
static LLSLURL& getStartSLURL() { return sStartSLURL; }
+ static bool startLLProxy(); // Initialize the SOCKS 5 proxy
+
private:
static LLSLURL sStartSLURL;
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 1b8be7a5b2..0a00885843 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -162,6 +162,8 @@ BOOL LLStatusBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
BOOL LLStatusBar::postBuild()
{
+ LLControlVariablePtr mode_control = gSavedSettings.getControl("SessionSettingsFile");
+
gMenuBarView->setRightMouseDownCallback(boost::bind(&show_navbar_context_menu, _1, _2, _3));
mTextTime = getChild<LLTextBox>("TimeText" );
@@ -233,9 +235,40 @@ BOOL LLStatusBar::postBuild()
mScriptOut = getChildView("scriptout");
+ LLUICtrl& mode_combo = getChildRef<LLUICtrl>("mode_combo");
+ mode_combo.setValue(gSavedSettings.getString("SessionSettingsFile"));
+ mode_combo.setCommitCallback(boost::bind(&LLStatusBar::onModeChange, this, getChild<LLUICtrl>("mode_combo")->getValue(), _2));
+
+
return TRUE;
}
+void LLStatusBar::onModeChange(const LLSD& original_value, const LLSD& new_value)
+{
+ if (original_value.asString() != new_value.asString())
+ {
+ LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(&LLStatusBar::onModeChangeConfirm, this, original_value, new_value, _1, _2));
+ }
+}
+
+void LLStatusBar::onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ switch (option)
+ {
+ case 0:
+ gSavedSettings.getControl("SessionSettingsFile")->set(new_value);
+ LLAppViewer::instance()->requestQuit();
+ break;
+ case 1:
+ // revert to original value
+ getChild<LLUICtrl>("mode_combo")->setValue(original_value);
+ break;
+ default:
+ break;
+ }
+}
+
// Per-frame updates of visibility
void LLStatusBar::refresh()
{
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 4ea3183d18..e1e1f5459b 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -92,6 +92,8 @@ private:
void onMouseEnterVolume();
void onMouseEnterNearbyMedia();
void onClickScreen(S32 x, S32 y);
+ void onModeChange(const LLSD& original_value, const LLSD& new_value);
+ void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response);
static void onClickMediaToggle(void* data);
static void onClickBalance(void* data);
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index bccabe21a8..66df7dae3e 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -334,6 +334,17 @@ void LLSurface::setOriginGlobal(const LLVector3d &origin_global)
}
}
+void LLSurface::getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions )
+{
+ S32 i;
+ for (i = 0; i < 8; i++)
+ {
+ if ( mNeighbors[i] != NULL )
+ {
+ uniqueRegions.push_back( mNeighbors[i]->getRegion() );
+ }
+ }
+}
void LLSurface::connectNeighbor(LLSurface *neighborp, U32 direction)
{
diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h
index 673ee83fe3..a4ef4fe2de 100644
--- a/indra/newview/llsurface.h
+++ b/indra/newview/llsurface.h
@@ -140,6 +140,9 @@ public:
friend class LLSurfacePatch;
friend std::ostream& operator<<(std::ostream &s, const LLSurface &S);
+
+ void getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions );
+
public:
// Number of grid points on one side of a region, including +1 buffer for
// north and east edge.
diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp
index 500c2a7b86..e8abee2fb7 100644
--- a/indra/newview/lltexlayer.cpp
+++ b/indra/newview/lltexlayer.cpp
@@ -45,12 +45,16 @@
#include "llagentwearables.h"
#include "llwearable.h"
#include "llviewercontrol.h"
+#include "llviewershadermgr.h"
#include "llviewervisualparam.h"
//#include "../tools/imdebug/imdebug.h"
using namespace LLVOAvatarDefines;
+static const S32 BAKE_UPLOAD_ATTEMPTS = 7;
+static const F32 BAKE_UPLOAD_RETRY_DELAY = 2.f; // actual delay grows by power of 2 each attempt
+
class LLTexLayerInfo
{
friend class LLTexLayer;
@@ -93,11 +97,13 @@ private:
//-----------------------------------------------------------------------------
LLBakedUploadData::LLBakedUploadData(const LLVOAvatarSelf* avatar,
LLTexLayerSet* layerset,
- const LLUUID& id) :
+ const LLUUID& id,
+ bool highest_res) :
mAvatar(avatar),
mTexLayerSet(layerset),
mID(id),
- mStartTime(LLFrameTimer::getTotalTime()) // Record starting time
+ mStartTime(LLFrameTimer::getTotalTime()), // Record starting time
+ mIsHighestRes(highest_res)
{
}
@@ -116,6 +122,7 @@ LLTexLayerSetBuffer::LLTexLayerSetBuffer(LLTexLayerSet* const owner,
mUploadPending(FALSE), // Not used for any logic here, just to sync sending of updates
mNeedsUpload(FALSE),
mNumLowresUploads(0),
+ mUploadFailCount(0),
mNeedsUpdate(TRUE),
mNumLowresUpdates(0),
mTexLayerSet(owner)
@@ -204,6 +211,7 @@ void LLTexLayerSetBuffer::cancelUpload()
mNeedsUpload = FALSE;
mUploadPending = FALSE;
mNeedsUploadTimer.pause();
+ mUploadRetryTimer.reset();
}
void LLTexLayerSetBuffer::pushProjection() const
@@ -287,11 +295,17 @@ BOOL LLTexLayerSetBuffer::render()
BOOL success = TRUE;
+ //hack to use fixed function when updating tex layer sets
+ bool no_ff = LLGLSLShader::sNoFixedFunction;
+ LLGLSLShader::sNoFixedFunction = false;
+
// Composite the color data
LLGLSUIDefault gls_ui;
success &= mTexLayerSet->render( mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight );
gGL.flush();
+ LLGLSLShader::sNoFixedFunction = no_ff;
+
if(upload_now)
{
if (!success)
@@ -356,25 +370,38 @@ BOOL LLTexLayerSetBuffer::isReadyToUpload() const
if (!gAgentQueryManager.hasNoPendingQueries()) return FALSE; // Can't upload if there are pending queries.
if (isAgentAvatarValid() && !gAgentAvatarp->isUsingBakedTextures()) return FALSE; // Don't upload if avatar is using composites.
- // If we requested an upload and have the final LOD ready, then upload.
- if (mTexLayerSet->isLocalTextureDataFinal()) return TRUE;
-
- // Upload if we've hit a timeout. Upload is a pretty expensive process so we need to make sure
- // we aren't doing uploads too frequently.
- const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout");
- if (texture_timeout != 0)
+ BOOL ready = FALSE;
+ if (mTexLayerSet->isLocalTextureDataFinal())
+ {
+ // If we requested an upload and have the final LOD ready, upload (or wait a while if this is a retry)
+ if (mUploadFailCount == 0)
+ {
+ ready = TRUE;
+ }
+ else
+ {
+ ready = mUploadRetryTimer.getElapsedTimeF32() >= BAKE_UPLOAD_RETRY_DELAY * (1 << (mUploadFailCount - 1));
+ }
+ }
+ else
{
- // The timeout period increases exponentially between every lowres upload in order to prevent
- // spamming the server with frequent uploads.
- const U32 texture_timeout_threshold = texture_timeout*(1 << mNumLowresUploads);
+ // Upload if we've hit a timeout. Upload is a pretty expensive process so we need to make sure
+ // we aren't doing uploads too frequently.
+ const U32 texture_timeout = gSavedSettings.getU32("AvatarBakedTextureUploadTimeout");
+ if (texture_timeout != 0)
+ {
+ // The timeout period increases exponentially between every lowres upload in order to prevent
+ // spamming the server with frequent uploads.
+ const U32 texture_timeout_threshold = texture_timeout*(1 << mNumLowresUploads);
- // If we hit our timeout and have textures available at even lower resolution, then upload.
- const BOOL is_upload_textures_timeout = mNeedsUploadTimer.getElapsedTimeF32() >= texture_timeout_threshold;
- const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable();
- if (has_lower_lod && is_upload_textures_timeout) return TRUE;
+ // If we hit our timeout and have textures available at even lower resolution, then upload.
+ const BOOL is_upload_textures_timeout = mNeedsUploadTimer.getElapsedTimeF32() >= texture_timeout_threshold;
+ const BOOL has_lower_lod = mTexLayerSet->isLocalTextureDataAvailable();
+ ready = has_lower_lod && is_upload_textures_timeout;
+ }
}
- return FALSE;
+ return ready;
}
BOOL LLTexLayerSetBuffer::isReadyToUpdate() const
@@ -482,17 +509,20 @@ void LLTexLayerSetBuffer::doUpload()
if (valid)
{
+ const bool highest_lod = mTexLayerSet->isLocalTextureDataFinal();
// Baked_upload_data is owned by the responder and deleted after the request completes.
LLBakedUploadData* baked_upload_data = new LLBakedUploadData(gAgentAvatarp,
this->mTexLayerSet,
- asset_id);
+ asset_id,
+ highest_lod);
// upload ID is used to avoid overlaps, e.g. when the user rapidly makes two changes outside of Face Edit.
mUploadID = asset_id;
// Upload the image
const std::string url = gAgent.getRegion()->getCapability("UploadBakedTexture");
if(!url.empty()
- && !LLPipeline::sForceOldBakedUpload) // toggle debug setting UploadBakedTexOld to change between the new caps method and old method
+ && !LLPipeline::sForceOldBakedUpload // toggle debug setting UploadBakedTexOld to change between the new caps method and old method
+ && (mUploadFailCount < (BAKE_UPLOAD_ATTEMPTS - 1))) // Try last ditch attempt via asset store if cap upload is failing.
{
LLSD body = LLSD::emptyMap();
// The responder will call LLTexLayerSetBuffer::onTextureUploadComplete()
@@ -511,7 +541,6 @@ void LLTexLayerSetBuffer::doUpload()
llinfos << "Baked texture upload via Asset Store." << llendl;
}
- const BOOL highest_lod = mTexLayerSet->isLocalTextureDataFinal();
if (highest_lod)
{
// Sending the final LOD for the baked texture. All done, pause
@@ -603,14 +632,15 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
{
LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata;
- if ((result == 0) &&
- isAgentAvatarValid() &&
+ if (isAgentAvatarValid() &&
!gAgentAvatarp->isDead() &&
(baked_upload_data->mAvatar == gAgentAvatarp) && // Sanity check: only the user's avatar should be uploading textures.
(baked_upload_data->mTexLayerSet->hasComposite()))
{
LLTexLayerSetBuffer* layerset_buffer = baked_upload_data->mTexLayerSet->getComposite();
-
+ S32 failures = layerset_buffer->mUploadFailCount;
+ layerset_buffer->mUploadFailCount = 0;
+
if (layerset_buffer->mUploadID.isNull())
{
// The upload got canceled, we should be in the
@@ -626,20 +656,28 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,
{
// This is the upload we're currently waiting for.
layerset_buffer->mUploadID.setNull();
+ const std::string name(baked_upload_data->mTexLayerSet->getBodyRegionName());
+ const std::string resolution = baked_upload_data->mIsHighestRes ? " full res " : " low res ";
if (result >= 0)
{
- layerset_buffer->mUploadPending = FALSE;
+ layerset_buffer->mUploadPending = FALSE; // Allows sending of AgentSetAppearance later
LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatarp->getBakedTE(layerset_buffer->mTexLayerSet);
// Update baked texture info with the new UUID
U64 now = LLFrameTimer::getTotalTime(); // Record starting time
- llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl;
+ llinfos << "Baked" << resolution << "texture upload for " << name << " took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl;
gAgentAvatarp->setNewBakedTexture(baked_te, uuid);
}
else
{
- // Avatar appearance is changing, ignore the upload results
- llinfos << "Baked upload failed. Reason: " << result << llendl;
- // *FIX: retry upload after n seconds, asset server could be busy
+ ++failures;
+ S32 max_attempts = baked_upload_data->mIsHighestRes ? BAKE_UPLOAD_ATTEMPTS : 1; // only retry final bakes
+ llwarns << "Baked" << resolution << "texture upload for " << name << " failed (attempt " << failures << "/" << max_attempts << ")" << llendl;
+ if (failures < max_attempts)
+ {
+ layerset_buffer->mUploadFailCount = failures;
+ layerset_buffer->mUploadRetryTimer.start();
+ layerset_buffer->requestUpload();
+ }
}
}
else
diff --git a/indra/newview/lltexlayer.h b/indra/newview/lltexlayer.h
index 2d710d2dce..85dadb213c 100644
--- a/indra/newview/lltexlayer.h
+++ b/indra/newview/lltexlayer.h
@@ -312,6 +312,8 @@ private:
BOOL mUploadPending; // Whether we have received back the new baked textures
LLUUID mUploadID; // The current upload process (null if none).
LLFrameTimer mNeedsUploadTimer; // Tracks time since upload was requested and performed.
+ S32 mUploadFailCount; // Number of consecutive upload failures
+ LLFrameTimer mUploadRetryTimer; // Tracks time since last upload failure.
//--------------------------------------------------------------------
// Updates
@@ -363,12 +365,14 @@ struct LLBakedUploadData
{
LLBakedUploadData(const LLVOAvatarSelf* avatar,
LLTexLayerSet* layerset,
- const LLUUID& id);
+ const LLUUID& id,
+ bool highest_res);
~LLBakedUploadData() {}
const LLUUID mID;
const LLVOAvatarSelf* mAvatar; // note: backlink only; don't LLPointer
LLTexLayerSet* mTexLayerSet;
const U64 mStartTime; // for measuring baked texture upload time
+ const bool mIsHighestRes; // whether this is a "final" bake, or intermediate low res
};
#endif // LL_LLTEXLAYER_H
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index 9b417307fd..87b6304f9d 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -113,7 +113,7 @@ public:
~LLTextureCacheWorker()
{
llassert_always(!haveWork());
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
}
// override this interface
@@ -176,7 +176,7 @@ private:
bool LLTextureCacheLocalFileWorker::doRead()
{
- S32 local_size = LLAPRFile::size(mFileName, mCache->getLocalAPRFilePool());
+ S32 local_size = LLAPRFile::size(mFileName);
if (local_size > 0 && mFileName.size() > 4)
{
@@ -215,7 +215,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
mDataSize = 0;
return true;
}
- mReadData = new U8[mDataSize];
+ mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
mBytesRead = -1;
mBytesToRead = mDataSize;
setPriority(LLWorkerThread::PRIORITY_LOW | mPriority);
@@ -233,7 +233,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
// << " Bytes: " << mDataSize << " Offset: " << mOffset
// << " / " << mDataSize << llendl;
mDataSize = 0; // failed
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
return true;
@@ -248,9 +248,9 @@ bool LLTextureCacheLocalFileWorker::doRead()
{
mDataSize = local_size;
}
- mReadData = new U8[mDataSize];
+ mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
- S32 bytes_read = LLAPRFile::readEx(mFileName, mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool());
+ S32 bytes_read = LLAPRFile::readEx(mFileName, mReadData, mOffset, mDataSize);
if (bytes_read != mDataSize)
{
@@ -258,7 +258,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
// << " Bytes: " << mDataSize << " Offset: " << mOffset
// << " / " << mDataSize << llendl;
mDataSize = 0;
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
else
@@ -331,7 +331,7 @@ bool LLTextureCacheRemoteWorker::doRead()
// Is it a JPEG2000 file?
{
local_filename = filename + ".j2c";
- local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
mImageFormat = IMG_CODEC_J2C;
@@ -341,7 +341,7 @@ bool LLTextureCacheRemoteWorker::doRead()
if (local_size == 0)
{
local_filename = filename + ".jpg";
- local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
mImageFormat = IMG_CODEC_JPEG;
@@ -352,7 +352,7 @@ bool LLTextureCacheRemoteWorker::doRead()
if (local_size == 0)
{
local_filename = filename + ".tga";
- local_size = LLAPRFile::size(local_filename, mCache->getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
mImageFormat = IMG_CODEC_TGA;
@@ -377,16 +377,15 @@ bool LLTextureCacheRemoteWorker::doRead()
mDataSize = local_size;
}
// Allocate read buffer
- mReadData = new U8[mDataSize];
- S32 bytes_read = LLAPRFile::readEx(local_filename,
- mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool());
+ mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
+ S32 bytes_read = LLAPRFile::readEx(local_filename, mReadData, mOffset, mDataSize);
if (bytes_read != mDataSize)
{
llwarns << "Error reading file from local cache: " << local_filename
<< " Bytes: " << mDataSize << " Offset: " << mOffset
<< " / " << mDataSize << llendl;
mDataSize = 0;
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
else
@@ -429,15 +428,14 @@ bool LLTextureCacheRemoteWorker::doRead()
S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
size = llmin(size, mDataSize);
// Allocate the read buffer
- mReadData = new U8[size];
- S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName,
- mReadData, offset, size, mCache->getLocalAPRFilePool());
+ mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), size);
+ S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName, mReadData, offset, size);
if (bytes_read != size)
{
llwarns << "LLTextureCacheWorker: " << mID
<< " incorrect number of bytes read from header: " << bytes_read
<< " / " << size << llendl;
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
mDataSize = -1; // failed
done = true;
@@ -457,7 +455,7 @@ bool LLTextureCacheRemoteWorker::doRead()
if (!done && (mState == BODY))
{
std::string filename = mCache->getTextureFileName(mID);
- S32 filesize = LLAPRFile::size(filename, mCache->getLocalAPRFilePool());
+ S32 filesize = LLAPRFile::size(filename);
if (filesize && (filesize + TEXTURE_CACHE_ENTRY_SIZE) > mOffset)
{
@@ -467,7 +465,7 @@ bool LLTextureCacheRemoteWorker::doRead()
S32 data_offset, file_size, file_offset;
// Reserve the whole data buffer first
- U8* data = new U8[mDataSize];
+ U8* data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
// Set the data file pointers taking the read offset into account. 2 cases:
if (mOffset < TEXTURE_CACHE_ENTRY_SIZE)
@@ -480,7 +478,7 @@ bool LLTextureCacheRemoteWorker::doRead()
// Copy the raw data we've been holding from the header cache into the new sized buffer
llassert_always(mReadData);
memcpy(data, mReadData, data_offset);
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
else
@@ -499,14 +497,13 @@ bool LLTextureCacheRemoteWorker::doRead()
// Read the data at last
S32 bytes_read = LLAPRFile::readEx(filename,
mReadData + data_offset,
- file_offset, file_size,
- mCache->getLocalAPRFilePool());
+ file_offset, file_size);
if (bytes_read != file_size)
{
llwarns << "LLTextureCacheWorker: " << mID
<< " incorrect number of bytes read from body: " << bytes_read
<< " / " << file_size << llendl;
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
mDataSize = -1; // failed
done = true;
@@ -598,16 +595,16 @@ bool LLTextureCacheRemoteWorker::doWrite()
{
// We need to write a full record in the header cache so, if the amount of data is smaller
// than a record, we need to transfer the data to a buffer padded with 0 and write that
- U8* padBuffer = new U8[TEXTURE_CACHE_ENTRY_SIZE];
+ U8* padBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), TEXTURE_CACHE_ENTRY_SIZE);
memset(padBuffer, 0, TEXTURE_CACHE_ENTRY_SIZE); // Init with zeros
memcpy(padBuffer, mWriteData, mDataSize); // Copy the write buffer
- bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size, mCache->getLocalAPRFilePool());
- delete [] padBuffer;
+ bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size);
+ FREE_MEM(LLImageBase::getPrivatePool(), padBuffer);
}
else
{
// Write the header record (== first TEXTURE_CACHE_ENTRY_SIZE bytes of the raw file) in the header file
- bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size, mCache->getLocalAPRFilePool());
+ bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, mWriteData, offset, size);
}
if (bytes_written <= 0)
@@ -642,8 +639,7 @@ bool LLTextureCacheRemoteWorker::doWrite()
// llinfos << "Writing Body: " << filename << " Bytes: " << file_offset+file_size << llendl;
S32 bytes_written = LLAPRFile::writeEx( filename,
mWriteData + TEXTURE_CACHE_ENTRY_SIZE,
- 0, file_size,
- mCache->getLocalAPRFilePool());
+ 0, file_size);
if (bytes_written <= 0)
{
llwarns << "LLTextureCacheWorker: " << mID
@@ -698,7 +694,7 @@ void LLTextureCacheWorker::finishWork(S32 param, bool completed)
}
else
{
- delete[] mReadData;
+ FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
mReadData = NULL;
}
}
@@ -740,9 +736,6 @@ void LLTextureCacheWorker::endWork(S32 param, bool aborted)
LLTextureCache::LLTextureCache(bool threaded)
: LLWorkerThread("TextureCache", threaded),
- mWorkersMutex(NULL),
- mHeaderMutex(NULL),
- mListMutex(NULL),
mHeaderAPRFile(NULL),
mReadOnly(TRUE), //do not allow to change the texture cache until setReadOnly() is called.
mTexturesSizeTotal(0),
@@ -846,7 +839,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
// Is it a JPEG2000 file?
{
local_filename = filename + ".j2c";
- local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
return TRUE ;
@@ -856,7 +849,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
// If not, is it a jpeg file?
{
local_filename = filename + ".jpg";
- local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
return TRUE ;
@@ -866,7 +859,7 @@ BOOL LLTextureCache::isInLocal(const LLUUID& id)
// Hmm... What about a targa file? (used for UI texture mostly)
{
local_filename = filename + ".tga";
- local_size = LLAPRFile::size(local_filename, getLocalAPRFilePool());
+ local_size = LLAPRFile::size(local_filename);
if (local_size > 0)
{
return TRUE ;
@@ -912,10 +905,10 @@ void LLTextureCache::purgeCache(ELLPath location)
if(LLFile::isdir(mTexturesDirName))
{
std::string file_name = gDirUtilp->getExpandedFilename(location, entries_filename);
- LLAPRFile::remove(file_name, getLocalAPRFilePool());
+ LLAPRFile::remove(file_name);
file_name = gDirUtilp->getExpandedFilename(location, cache_filename);
- LLAPRFile::remove(file_name, getLocalAPRFilePool());
+ LLAPRFile::remove(file_name);
purgeAllTextures(true);
}
@@ -991,7 +984,9 @@ LLAPRFile* LLTextureCache::openHeaderEntriesFile(bool readonly, S32 offset)
{
llassert_always(mHeaderAPRFile == NULL);
apr_int32_t flags = readonly ? APR_READ|APR_BINARY : APR_READ|APR_WRITE|APR_BINARY;
- mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags, getLocalAPRFilePool());
+ // All code calling openHeaderEntriesFile, immediately calls closeHeaderEntriesFile,
+ // so this file is very short-lived.
+ mHeaderAPRFile = new LLAPRFile(mHeaderEntriesFileName, flags);
if(offset > 0)
{
mHeaderAPRFile->seek(APR_SET, offset);
@@ -1014,10 +1009,9 @@ void LLTextureCache::readEntriesHeader()
{
// mHeaderEntriesInfo initializes to default values so safe not to read it
llassert_always(mHeaderAPRFile == NULL);
- if (LLAPRFile::isExist(mHeaderEntriesFileName, getLocalAPRFilePool()))
+ if (LLAPRFile::isExist(mHeaderEntriesFileName))
{
- LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
- getLocalAPRFilePool());
+ LLAPRFile::readEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo));
}
else //create an empty entries header.
{
@@ -1032,8 +1026,7 @@ void LLTextureCache::writeEntriesHeader()
llassert_always(mHeaderAPRFile == NULL);
if (!mReadOnly)
{
- LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo),
- getLocalAPRFilePool());
+ LLAPRFile::writeEx(mHeaderEntriesFileName, (U8*)&mHeaderEntriesInfo, 0, sizeof(EntriesInfo));
}
}
@@ -1622,7 +1615,7 @@ void LLTextureCache::purgeTextures(bool validate)
if (uuididx == validate_idx)
{
LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mBodySize << LL_ENDL;
- S32 bodysize = LLAPRFile::size(filename, getLocalAPRFilePool());
+ S32 bodysize = LLAPRFile::size(filename);
if (bodysize != entries[idx].mBodySize)
{
LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mBodySize
@@ -1857,7 +1850,7 @@ void LLTextureCache::removeCachedTexture(const LLUUID& id)
mTexturesSizeMap.erase(id);
}
mHeaderIDMap.erase(id);
- LLAPRFile::remove(getTextureFileName(id), getLocalAPRFilePool());
+ LLAPRFile::remove(getTextureFileName(id));
}
//called after mHeaderMutex is locked.
@@ -1869,7 +1862,7 @@ void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename)
{
if (entry.mBodySize == 0) // Always attempt to remove when mBodySize > 0.
{
- if (LLAPRFile::isExist(filename, getLocalAPRFilePool())) // Sanity check. Shouldn't exist when body size is 0.
+ if (LLAPRFile::isExist(filename)) // Sanity check. Shouldn't exist when body size is 0.
{
LL_WARNS("TextureCache") << "Entry has body size of zero but file " << filename << " exists. Deleting this file, too." << LL_ENDL;
}
@@ -1890,7 +1883,7 @@ void LLTextureCache::removeEntry(S32 idx, Entry& entry, std::string& filename)
if (file_maybe_exists)
{
- LLAPRFile::remove(filename, getLocalAPRFilePool());
+ LLAPRFile::remove(filename);
}
}
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index 64e3a2658c..79f5ba5835 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -142,9 +142,6 @@ protected:
std::string getTextureFileName(const LLUUID& id);
void addCompleted(Responder* responder, bool success);
-protected:
- //void setFileAPRPool(apr_pool_t* pool) { mFileAPRPool = pool ; }
-
private:
void setDirNames(ELLPath location);
void readHeaderCache();
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index 1023a4339b..de22f2ae6b 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -420,7 +420,6 @@ BOOL LLFloaterTexturePicker::postBuild()
mInventoryPanel->setFilterPermMask(mImmediateFilterPermMask);
mInventoryPanel->setSelectCallback(boost::bind(&LLFloaterTexturePicker::onSelectionChange, this, _1, _2));
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
- mInventoryPanel->setAllowMultiSelect(FALSE);
// Disable auto selecting first filtered item because it takes away
// selection from the item set by LLTextureCtrl owning this floater.
@@ -1093,7 +1092,7 @@ public:
BOOL LLTextureCtrl::handleHover(S32 x, S32 y, MASK mask)
{
- getWindow()->setCursor(UI_CURSOR_HAND);
+ getWindow()->setCursor(mBorder->parentPointInView(x,y) ? UI_CURSOR_HAND : UI_CURSOR_ARROW);
return TRUE;
}
@@ -1102,7 +1101,7 @@ BOOL LLTextureCtrl::handleMouseDown(S32 x, S32 y, MASK mask)
{
BOOL handled = LLUICtrl::handleMouseDown( x, y , mask );
- if( !handled )
+ if (!handled && mBorder->parentPointInView(x, y))
{
showPicker(FALSE);
//grab textures first...
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 18c3a3b87d..e9be45ffd0 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -674,7 +674,6 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
mRetryAttempt(0),
mActiveCount(0),
mGetStatus(0),
- mWorkMutex(NULL),
mFirstPacket(0),
mLastPacket(-1),
mTotalPackets(0),
@@ -817,7 +816,7 @@ void LLTextureFetchWorker::setImagePriority(F32 priority)
void LLTextureFetchWorker::resetFormattedData()
{
- delete[] mBuffer;
+ FREE_MEM(LLImageBase::getPrivatePool(), mBuffer);
mBuffer = NULL;
mBufferSize = 0;
if (mFormattedImage.notNull())
@@ -888,7 +887,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
mSentRequest = UNSENT;
mDecoded = FALSE;
mWritten = FALSE;
- delete[] mBuffer;
+ FREE_MEM(LLImageBase::getPrivatePool(), mBuffer);
mBuffer = NULL;
mBufferSize = 0;
mHaveAllData = FALSE;
@@ -1284,7 +1283,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
llassert_always(mBufferSize == cur_size + mRequestedSize);
if(!mBufferSize)//no data received.
{
- delete[] mBuffer;
+ FREE_MEM(LLImageBase::getPrivatePool(), mBuffer);
mBuffer = NULL;
//abort.
@@ -1312,7 +1311,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
mFileSize = mBufferSize + 1 ; //flag the file is not fully loaded.
}
- U8* buffer = new U8[mBufferSize];
+ U8* buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mBufferSize);
if (cur_size > 0)
{
memcpy(buffer, mFormattedImage->getData(), cur_size);
@@ -1321,7 +1320,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
// NOTE: setData releases current data and owns new data (buffer)
mFormattedImage->setData(buffer, mBufferSize);
// delete temp data
- delete[] mBuffer; // Note: not 'buffer' (assigned in setData())
+ FREE_MEM(LLImageBase::getPrivatePool(), mBuffer); // Note: not 'buffer' (assigned in setData())
mBuffer = NULL;
mBufferSize = 0;
mLoadedDiscard = mRequestedDiscard;
@@ -1618,7 +1617,7 @@ bool LLTextureFetchWorker::processSimulatorPackets()
if (buffer_size > cur_size)
{
/// We have new data
- U8* buffer = new U8[buffer_size];
+ U8* buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), buffer_size);
S32 offset = 0;
if (cur_size > 0 && mFirstPacket > 0)
{
@@ -1670,7 +1669,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels,
if (data_size > 0)
{
// *TODO: set the formatted image data here directly to avoid the copy
- mBuffer = new U8[data_size];
+ mBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), data_size);
buffer->readAfter(channels.in(), NULL, mBuffer, data_size);
mBufferSize += data_size;
if (data_size < mRequestedSize && mRequestedDiscard == 0)
@@ -1816,8 +1815,6 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
mDebugPause(FALSE),
mPacketCount(0),
mBadPacketCount(0),
- mQueueMutex(getAPRPool()),
- mNetworkQueueMutex(getAPRPool()),
mTextureCache(cache),
mImageDecodeThread(imagedecodethread),
mTextureBandwidth(0),
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index fa91f129b8..6873cf058a 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -307,8 +307,14 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
S32 bottom_offset = mIsScriptDialog ? (BTN_HEIGHT + IGNORE_BTN_TOP_DELTA + BOTTOM_PAD) : BOTTOM_PAD;
S32 max_width = mControlPanel->getRect().getWidth();
LLButton* ignore_btn = NULL;
+ LLButton* mute_btn = NULL;
for (std::vector<index_button_pair_t>::const_iterator it = buttons.begin(); it != buttons.end(); it++)
{
+ if (-2 == it->first)
+ {
+ mute_btn = it->second;
+ continue;
+ }
if (it->first == -1)
{
ignore_btn = it->second;
@@ -328,6 +334,8 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
left = btn_rect.mLeft + btn_rect.getWidth() + h_pad;
mControlPanel->addChild(btn, -1);
}
+
+ U32 ignore_btn_width = 0;
if (mIsScriptDialog && ignore_btn != NULL)
{
LLRect ignore_btn_rect(ignore_btn->getRect());
@@ -340,8 +348,25 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair
ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom
ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());
ignore_btn->setRect(ignore_btn_rect);
+ ignore_btn_width = ignore_btn_rect.getWidth();
mControlPanel->addChild(ignore_btn, -1);
}
+
+ if (mIsScriptDialog && mute_btn != NULL)
+ {
+ LLRect mute_btn_rect(mute_btn->getRect());
+ S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH
+ // Place mute (Block) button to the left of the ignore button.
+ S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2);
+ if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel
+ {
+ mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD;
+ }
+ mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom
+ mute_btn_rect.getWidth(), mute_btn_rect.getHeight());
+ mute_btn->setRect(mute_btn_rect);
+ mControlPanel->addChild(mute_btn);
+ }
}
void LLToastNotifyPanel::adjustPanelForScriptNotice(S32 button_panel_width, S32 button_panel_height)
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index d23d2b3abd..14f17e8917 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -613,6 +613,7 @@ BOOL LLToolDragAndDrop::handleToolTip(S32 x, S32 y, MASK mask)
{
if (!mToolTipMsg.empty())
{
+ LLToolTipMgr::instance().unblockToolTips();
LLToolTipMgr::instance().show(LLToolTip::Params()
.message(mToolTipMsg)
.delay_time(gSavedSettings.getF32( "DragAndDropToolTipDelay" )));
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 9ec4d33036..c38c8bad80 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -639,6 +639,7 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
if (click_action == CLICK_ACTION_NONE // not doing 1-click action
&& gSavedSettings.getBOOL("ClickToWalk") // click to walk enabled
&& !gAgent.getFlying() // don't auto-navigate while flying until that works
+ && gAgentAvatarp
&& !gAgentAvatarp->isSitting()
&& !mBlockClickToWalk // another behavior hasn't cancelled click to walk
&& !mPick.mPosGlobal.isExactlyZero() // valid coordinates for pick
diff --git a/indra/newview/lluploadfloaterobservers.cpp b/indra/newview/lluploadfloaterobservers.cpp
new file mode 100644
index 0000000000..5a6a17fbca
--- /dev/null
+++ b/indra/newview/lluploadfloaterobservers.cpp
@@ -0,0 +1,56 @@
+/**
+ * @file lluploadfloaterobservers.cpp
+ * @brief LLUploadModelPremissionsResponder definition
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lluploadfloaterobservers.h"
+
+LLUploadModelPremissionsResponder::LLUploadModelPremissionsResponder(const LLHandle<LLUploadPermissionsObserver>& observer)
+:mObserverHandle(observer)
+{
+}
+
+void LLUploadModelPremissionsResponder::error(U32 status, const std::string& reason)
+{
+ llwarns << "LLUploadModelPremissionsResponder::error("<< status << ": " << reason << ")" << llendl;
+
+ LLUploadPermissionsObserver* observer = mObserverHandle.get();
+
+ if (observer)
+ {
+ observer->setPermissonsErrorStatus(status, reason);
+ }
+}
+
+void LLUploadModelPremissionsResponder::result(const LLSD& content)
+{
+ LLUploadPermissionsObserver* observer = mObserverHandle.get();
+
+ if (observer)
+ {
+ observer->onPermissionsReceived(content);
+ }
+}
diff --git a/indra/newview/lluploadfloaterobservers.h b/indra/newview/lluploadfloaterobservers.h
new file mode 100644
index 0000000000..79aad282d7
--- /dev/null
+++ b/indra/newview/lluploadfloaterobservers.h
@@ -0,0 +1,97 @@
+/**
+ * @file lluploadfloaterobservers.h
+ * @brief LLUploadModelPremissionsResponder declaration
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLUPLOADFLOATEROBSERVERS_H
+#define LL_LLUPLOADFLOATEROBSERVERS_H
+
+#include "llfloater.h"
+#include "llhttpclient.h"
+#include "llhandle.h"
+
+class LLUploadPermissionsObserver
+{
+public:
+
+ LLUploadPermissionsObserver(){mUploadPermObserverHandle.bind(this);}
+ virtual ~LLUploadPermissionsObserver() {}
+
+ virtual void onPermissionsReceived(const LLSD& result) = 0;
+ virtual void setPermissonsErrorStatus(U32 status, const std::string& reason) = 0;
+
+ LLHandle<LLUploadPermissionsObserver> getPermObserverHandle() const {return mUploadPermObserverHandle;}
+
+protected:
+ LLRootHandle<LLUploadPermissionsObserver> mUploadPermObserverHandle;
+};
+
+class LLWholeModelFeeObserver
+{
+public:
+ LLWholeModelFeeObserver() { mWholeModelFeeObserverHandle.bind(this); }
+ virtual ~LLWholeModelFeeObserver() {}
+
+ virtual void onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url) = 0;
+ virtual void setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason) = 0;
+
+ LLHandle<LLWholeModelFeeObserver> getWholeModelFeeObserverHandle() const { return mWholeModelFeeObserverHandle; }
+
+protected:
+ LLRootHandle<LLWholeModelFeeObserver> mWholeModelFeeObserverHandle;
+};
+
+
+class LLWholeModelUploadObserver
+{
+public:
+ LLWholeModelUploadObserver() { mWholeModelUploadObserverHandle.bind(this); }
+ virtual ~LLWholeModelUploadObserver() {}
+
+ virtual void onModelUploadSuccess() = 0;
+
+ virtual void onModelUploadFailure() = 0;
+
+ LLHandle<LLWholeModelUploadObserver> getWholeModelUploadObserverHandle() const { return mWholeModelUploadObserverHandle; }
+
+protected:
+ LLRootHandle<LLWholeModelUploadObserver> mWholeModelUploadObserverHandle;
+};
+
+
+class LLUploadModelPremissionsResponder : public LLHTTPClient::Responder
+{
+public:
+
+ LLUploadModelPremissionsResponder(const LLHandle<LLUploadPermissionsObserver>& observer);
+
+ void error(U32 status, const std::string& reason);
+
+ void result(const LLSD& content);
+
+private:
+ LLHandle<LLUploadPermissionsObserver> mObserverHandle;
+};
+
+#endif /* LL_LLUPLOADFLOATEROBSERVERS_H */
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
index b19c738ed2..f7fa5690d6 100644
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -36,6 +36,7 @@
#include "llviewerwindow.h"
#include "llvoiceclient.h"
#include "llviewermedia.h"
+#include "llprogressview.h"
/////////////////////////////////////////////////////////
@@ -101,7 +102,16 @@ void audio_update_volume(bool force_update)
{
F32 master_volume = gSavedSettings.getF32("AudioLevelMaster");
BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio");
- if (!gViewerWindow->getActive() && (gSavedSettings.getBOOL("MuteWhenMinimized")))
+
+ LLProgressView* progress = gViewerWindow->getProgressView();
+ BOOL progress_view_visible = FALSE;
+
+ if (progress)
+ {
+ progress_view_visible = progress->getVisible();
+ }
+
+ if (!gViewerWindow->getActive() && gSavedSettings.getBOOL("MuteWhenMinimized"))
{
mute_audio = TRUE;
}
@@ -114,7 +124,7 @@ void audio_update_volume(bool force_update)
gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler"));
gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));
- gAudiop->setMuted(mute_audio);
+ gAudiop->setMuted(mute_audio || progress_view_visible);
if (force_update)
{
@@ -136,7 +146,7 @@ void audio_update_volume(bool force_update)
F32 music_volume = gSavedSettings.getF32("AudioLevelMusic");
BOOL music_muted = gSavedSettings.getBOOL("MuteMusic");
music_volume = mute_volume * master_volume * music_volume;
- gAudiop->setInternetStreamGain ( music_muted ? 0.f : music_volume );
+ gAudiop->setInternetStreamGain ( music_muted || progress_view_visible ? 0.f : music_volume );
}
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 87ca80260f..b87ca1eaec 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -566,7 +566,7 @@ bool toggle_show_object_render_cost(const LLSD& newvalue)
return true;
}
-void toggle_updater_service_active(LLControlVariable* control, const LLSD& new_value)
+void toggle_updater_service_active(const LLSD& new_value)
{
if(new_value.asInteger())
{
@@ -735,7 +735,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("ShowNavbarFavoritesPanel")->getSignal()->connect(boost::bind(&toggle_show_favorites_panel, _2));
gSavedSettings.getControl("ShowMiniLocationPanel")->getSignal()->connect(boost::bind(&toggle_show_mini_location_panel, _2));
gSavedSettings.getControl("ShowObjectRenderingCost")->getSignal()->connect(boost::bind(&toggle_show_object_render_cost, _2));
- gSavedSettings.getControl("UpdaterServiceSetting")->getSignal()->connect(&toggle_updater_service_active);
+ gSavedSettings.getControl("UpdaterServiceSetting")->getSignal()->connect(boost::bind(&toggle_updater_service_active, _2));
gSavedSettings.getControl("ForceShowGrid")->getSignal()->connect(boost::bind(&handleForceShowGrid, _2));
gSavedSettings.getControl("RenderTransparentWater")->getSignal()->connect(boost::bind(&handleRenderTransparentWaterChanged, _2));
}
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index f725f0fe86..6142ee0dd6 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -178,8 +178,8 @@ void display_update_camera()
gViewerWindow->setup3DRender();
// update all the sky/atmospheric/water settings
- LLWLParamManager::instance()->update(LLViewerCamera::getInstance());
- LLWaterParamManager::instance()->update(LLViewerCamera::getInstance());
+ LLWLParamManager::getInstance()->update(LLViewerCamera::getInstance());
+ LLWaterParamManager::getInstance()->update(LLViewerCamera::getInstance());
// Update land visibility too
LLWorld::getInstance()->setLandFarClip(final_far);
@@ -202,6 +202,7 @@ void display_stats()
gMemoryAllocated = LLMemory::getCurrentRSS();
U32 memory = (U32)(gMemoryAllocated / (1024*1024));
llinfos << llformat("MEMORY: %d MB", memory) << llendl;
+ LLMemory::logMemoryInfo() ;
gRecentMemoryTime.reset();
}
}
@@ -616,6 +617,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
&& LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")
&& gSavedSettings.getBOOL("UseOcclusion")
&& gGLManager.mHasOcclusionQuery) ? 2 : 0;
+ LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
/*if (LLPipeline::sUseOcclusion && LLPipeline::sRenderDeferred)
{ //force occlusion on for all render types if doing deferred render (tighter shadow frustum)
@@ -691,7 +693,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
glh::matrix4f mod = glh_get_current_modelview();
glViewport(0,0,512,512);
LLVOAvatar::updateFreezeCounter() ;
- LLVOAvatar::updateImpostors();
+
+ if(!LLPipeline::sMemAllocationThrottled)
+ {
+ LLVOAvatar::updateImpostors();
+ }
glh_set_current_projection(proj);
glh_set_current_modelview(mod);
@@ -709,6 +715,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
//if (!for_snapshot)
{
LLMemType mt_gw(LLMemType::MTYPE_DISPLAY_GEN_REFLECTION);
@@ -717,6 +726,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
gPipeline.generateHighlight(*LLViewerCamera::getInstance());
}
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
//////////////////////////////////////
//
// Update images, using the image stats generated during object update/culling
@@ -743,6 +755,10 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLImageGL::deleteDeadTextures();
stop_glerror();
}
+
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
///////////////////////////////////
//
// StateSort
@@ -770,6 +786,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
}
}
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
LLPipeline::sUseOcclusion = occlusion;
{
@@ -828,6 +847,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
LLPipeline::refreshRenderDeferred();
+ LLGLState::checkStates();
+ LLGLState::checkClientArrays();
+
stop_glerror();
if (to_texture)
@@ -878,6 +900,14 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
stop_glerror();
}
+ for (U32 i = 0; i < gGLManager.mNumTextureImageUnits; i++)
+ { //dummy cleanup of any currently bound textures
+ if (gGL.getTexUnit(i)->getCurrType() != LLTexUnit::TT_NONE)
+ {
+ gGL.getTexUnit(i)->unbind(gGL.getTexUnit(i)->getCurrType());
+ gGL.getTexUnit(i)->disable();
+ }
+ }
LLAppViewer::instance()->pingMainloopTimeout("Display:RenderFlush");
if (to_texture)
@@ -1339,7 +1369,7 @@ void render_ui_2d()
}
stop_glerror();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ //gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
// render outline for HUD
if (isAgentAvatarValid() && gAgentCamera.mHUDCurZoom < 0.98f)
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index a1c2c926af..fecc6d91bd 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -48,11 +48,14 @@
#include "llfloaterbulkpermission.h"
#include "llfloaterbump.h"
#include "llfloatercamera.h"
-#include "llfloaterdaycycle.h"
+#include "llfloaterdeleteenvpreset.h"
#include "llfloaterdisplayname.h"
+#include "llfloatereditdaycycle.h"
+#include "llfloatereditsky.h"
+#include "llfloatereditwater.h"
+#include "llfloaterenvironmentsettings.h"
#include "llfloaterevent.h"
#include "llfloatersearch.h"
-#include "llfloaterenvsettings.h"
#include "llfloaterfonttest.h"
#include "llfloatergesture.h"
#include "llfloatergodtools.h"
@@ -101,9 +104,7 @@
#include "llfloatertopobjects.h"
#include "llfloateruipreview.h"
#include "llfloatervoiceeffect.h"
-#include "llfloaterwater.h"
#include "llfloaterwhitelistentry.h"
-#include "llfloaterwindlight.h"
#include "llfloaterwindowsize.h"
#include "llfloaterworldmap.h"
#include "llimfloatercontainer.h"
@@ -129,12 +130,12 @@
// *NOTE: Please add files in alphabetical order to keep merges easy.
-// handle secondlife:///app/floater/{NAME} URLs
+// handle secondlife:///app/openfloater/{NAME} URLs
class LLFloaterOpenHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
- LLFloaterOpenHandler() : LLCommandHandler("floater", UNTRUSTED_THROTTLE) { }
+ LLFloaterOpenHandler() : LLCommandHandler("openfloater", UNTRUSTED_THROTTLE) { }
bool handle(const LLSD& params, const LLSD& query_map,
LLMediaCtrl* web)
@@ -179,11 +180,12 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>);
- LLFloaterReg::add("env_day_cycle", "floater_day_cycle_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDayCycle>);
LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostProcess>);
- LLFloaterReg::add("env_settings", "floater_env_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEnvSettings>);
- LLFloaterReg::add("env_water", "floater_water.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWater>);
- LLFloaterReg::add("env_windlight", "floater_windlight_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWindLight>);
+ LLFloaterReg::add("env_settings", "floater_environment_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEnvironmentSettings>);
+ LLFloaterReg::add("env_delete_preset", "floater_delete_env_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeleteEnvPreset>);
+ LLFloaterReg::add("env_edit_sky", "floater_edit_sky_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditSky>);
+ LLFloaterReg::add("env_edit_water", "floater_edit_water_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditWater>);
+ LLFloaterReg::add("env_edit_day_cycle", "floater_edit_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditDayCycle>);
LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>);
@@ -230,6 +232,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("postcard", "floater_postcard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostcard>);
LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
+ LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreferenceProxy>);
LLFloaterReg::add("prefs_hardware_settings", "floater_hardware_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHardwareSettings>);
LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
@@ -244,15 +247,11 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build<LLFloaterTelehub>);
- LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml",
- &LLFloaterReg::build<LLFloaterTestInspectors>);
+ LLFloaterReg::add("test_inspectors", "floater_test_inspectors.xml", &LLFloaterReg::build<LLFloaterTestInspectors>);
//LLFloaterReg::add("test_list_view", "floater_test_list_view.xml",&LLFloaterReg::build<LLFloaterTestListView>);
- LLFloaterReg::add("test_textbox", "floater_test_textbox.xml",
- &LLFloaterReg::build<LLFloater>);
- LLFloaterReg::add("test_text_editor", "floater_test_text_editor.xml",
- &LLFloaterReg::build<LLFloater>);
- LLFloaterReg::add("test_widgets", "floater_test_widgets.xml",
- &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_textbox", "floater_test_textbox.xml", &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_text_editor", "floater_test_text_editor.xml", &LLFloaterReg::build<LLFloater>);
+ LLFloaterReg::add("test_widgets", "floater_test_widgets.xml", &LLFloaterReg::build<LLFloater>);
LLFloaterReg::add("top_objects", "floater_top_objects.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterTopObjects>);
LLFloaterReg::add("reporter", "floater_report_abuse.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterReporter>);
@@ -272,7 +271,9 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("start_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterRunQueue>);
LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
- LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
+ LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
+ LLFloaterReg::add("profile", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWebContent>);
+
LLFloaterUIPreviewUtil::registerFloater();
LLFloaterReg::add("upload_anim", "floater_animation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAnimPreview>, "upload");
diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp
index 42f780a8a3..9101222393 100644
--- a/indra/newview/llviewerfoldertype.cpp
+++ b/indra/newview/llviewerfoldertype.cpp
@@ -128,8 +128,10 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()
addEntry(LLFolderType::FT_MY_OUTFITS, new ViewerFolderEntry("My Outfits", "Inv_SysOpen", "Inv_SysClosed", TRUE));
addEntry(LLFolderType::FT_MESH, new ViewerFolderEntry("Meshes", "Inv_SysOpen", "Inv_SysClosed", FALSE));
-
addEntry(LLFolderType::FT_INBOX, new ViewerFolderEntry("Inbox", "Inv_SysOpen", "Inv_SysClosed", FALSE));
+ addEntry(LLFolderType::FT_OUTBOX, new ViewerFolderEntry("Outbox", "Inv_SysOpen", "Inv_SysClosed", FALSE));
+
+ addEntry(LLFolderType::FT_BASIC_ROOT, new ViewerFolderEntry("Basic Root", "Inv_SysOpen", "Inv_SysClosed", FALSE));
addEntry(LLFolderType::FT_NONE, new ViewerFolderEntry("New Folder", "Inv_FolderOpen", "Inv_FolderClosed", FALSE, "default"));
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index 9fe8c142b9..3a3d4f3881 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -101,8 +101,9 @@ void LLViewerHelp::showTopic(const std::string &topic)
// work out the URL for this topic and display it
showHelp();
+
std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic );
- setRawURL( helpURL );
+ setRawURL(helpURL);
}
std::string LLViewerHelp::defaultTopic()
@@ -148,18 +149,7 @@ std::string LLViewerHelp::getTopicFromFocus()
// static
void LLViewerHelp::showHelp()
{
- LLFloaterHelpBrowser* helpbrowser = dynamic_cast<LLFloaterHelpBrowser*>(LLFloaterReg::getInstance("help_browser"));
- if (helpbrowser)
- {
- BOOL visible = TRUE;
- BOOL take_focus = TRUE;
- helpbrowser->setVisible(visible);
- helpbrowser->setFrontmost(take_focus);
- }
- else
- {
- llwarns << "Eep, help_browser floater not found" << llendl;
- }
+ LLFloaterReg::showInstance("help_browser");
}
// static
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 9e58acdcd3..ad65a8846c 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -139,7 +139,35 @@ public:
mInventoryItemsDict["Female - Shrug"] = LLTrans::getString("Female - Shrug");
mInventoryItemsDict["Female - Stick tougue out"]= LLTrans::getString("Female - Stick tougue out");
mInventoryItemsDict["Female - Wow"] = LLTrans::getString("Female - Wow");
-
+
+ //common
+ mInventoryItemsDict["/bow1"] = LLTrans::getString("/bow1");
+ mInventoryItemsDict["/clap"] = LLTrans::getString("/clap");
+ mInventoryItemsDict["/count"] = LLTrans::getString("/count");
+ mInventoryItemsDict["/extinguish"] = LLTrans::getString("/extinguish");
+ mInventoryItemsDict["/kmb"] = LLTrans::getString("/kmb");
+ mInventoryItemsDict["/muscle"] = LLTrans::getString("/muscle");
+ mInventoryItemsDict["/no"] = LLTrans::getString("/no");
+ mInventoryItemsDict["/no!"] = LLTrans::getString("/no!");
+ mInventoryItemsDict["/paper"] = LLTrans::getString("/paper");
+ mInventoryItemsDict["/pointme"] = LLTrans::getString("/pointme");
+ mInventoryItemsDict["/pointyou"] = LLTrans::getString("/pointyou");
+ mInventoryItemsDict["/rock"] = LLTrans::getString("/rock");
+ mInventoryItemsDict["/scissor"] = LLTrans::getString("/scissor");
+ mInventoryItemsDict["/smoke"] = LLTrans::getString("/smoke");
+ mInventoryItemsDict["/stretch"] = LLTrans::getString("/stretch");
+ mInventoryItemsDict["/whistle"] = LLTrans::getString("/whistle");
+ mInventoryItemsDict["/yes"] = LLTrans::getString("/yes");
+ mInventoryItemsDict["/yes!"] = LLTrans::getString("/yes!");
+ mInventoryItemsDict["afk"] = LLTrans::getString("afk");
+ mInventoryItemsDict["dance1"] = LLTrans::getString("dance1");
+ mInventoryItemsDict["dance2"] = LLTrans::getString("dance2");
+ mInventoryItemsDict["dance3"] = LLTrans::getString("dance3");
+ mInventoryItemsDict["dance4"] = LLTrans::getString("dance4");
+ mInventoryItemsDict["dance5"] = LLTrans::getString("dance5");
+ mInventoryItemsDict["dance6"] = LLTrans::getString("dance6");
+ mInventoryItemsDict["dance7"] = LLTrans::getString("dance7");
+ mInventoryItemsDict["dance8"] = LLTrans::getString("dance8");
}
/**
@@ -418,6 +446,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const
BOOL LLViewerInventoryItem::unpackMessage(LLSD item)
{
BOOL rv = LLInventoryItem::fromLLSD(item);
+
+ LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName);
+
mIsComplete = TRUE;
return rv;
}
@@ -1269,7 +1300,7 @@ void menu_create_inventory_item(LLFolderView* root, LLFolderBridge *bridge, cons
{
std::string type_name = userdata.asString();
- if (("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
+ if (("inbox" == type_name) || ("outbox" == type_name) || ("category" == type_name) || ("current" == type_name) || ("outfit" == type_name) || ("my_otfts" == type_name))
{
LLFolderType::EType preferred_type = LLFolderType::lookup(type_name);
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 1e53274cd6..31b22119cb 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -64,8 +64,10 @@
#include "llappviewer.h"
#include "lllogininstance.h"
//#include "llfirstuse.h"
+#include "llviewernetwork.h"
#include "llwindow.h"
+
#include "llfloatermediabrowser.h" // for handling window close requests and geometry change requests in media browser windows.
#include "llfloaterwebcontent.h" // for handling window close requests and geometry change requests in media browser windows.
@@ -342,6 +344,8 @@ static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap;
static LLTimer sMediaCreateTimer;
static const F32 LLVIEWERMEDIA_CREATE_DELAY = 1.0f;
static F32 sGlobalVolume = 1.0f;
+static bool sForceUpdate = false;
+static LLUUID sOnlyAudibleTextureID = LLUUID::null;
static F64 sLowestLoadableImplInterest = 0.0f;
static bool sAnyMediaShowing = false;
static boost::signals2::connection sTeleportFinishConnection;
@@ -604,7 +608,7 @@ bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id)
// static
void LLViewerMedia::setVolume(F32 volume)
{
- if(volume != sGlobalVolume)
+ if(volume != sGlobalVolume || sForceUpdate)
{
sGlobalVolume = volume;
impl_list::iterator iter = sViewerMediaImplList.begin();
@@ -615,6 +619,8 @@ void LLViewerMedia::setVolume(F32 volume)
LLViewerMediaImpl* pimpl = *iter;
pimpl->updateVolume();
}
+
+ sForceUpdate = false;
}
}
@@ -1360,6 +1366,34 @@ void LLViewerMedia::removeCookie(const std::string &name, const std::string &dom
}
+class LLInventoryUserStatusResponder : public LLHTTPClient::Responder
+{
+public:
+ LLInventoryUserStatusResponder()
+ : LLCurl::Responder()
+ {
+ }
+
+ void completed(U32 status, const std::string& reason, const LLSD& content)
+ {
+ if (isGoodStatus(status))
+ {
+ // Complete success
+ gSavedSettings.setBOOL("InventoryDisplayInbox", true);
+ }
+ else if (status == 401)
+ {
+ // API is available for use but OpenID authorization failed
+ gSavedSettings.setBOOL("InventoryDisplayInbox", true);
+ }
+ else
+ {
+ // API in unavailable
+ llinfos << "Marketplace API is unavailable -- Inbox may be disabled, status = " << status << ", reason = " << reason << llendl;
+ }
+ }
+};
+
/////////////////////////////////////////////////////////////////////////////////////////
// static
void LLViewerMedia::setOpenIDCookie()
@@ -1406,6 +1440,25 @@ void LLViewerMedia::setOpenIDCookie()
LLHTTPClient::get(profile_url,
new LLViewerMediaWebProfileResponder(raw_profile_url.getAuthority()),
headers);
+
+ std::string url = "https://marketplace.secondlife.com/";
+
+ if (!LLGridManager::getInstance()->isInProductionGrid())
+ {
+ std::string gridLabel = LLGridManager::getInstance()->getGridLabel();
+ url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str());
+ }
+
+ url += "api/1/users/";
+ url += gAgent.getID().getString();
+ url += "/user_status";
+
+ headers = LLSD::emptyMap();
+ headers["Accept"] = "*/*";
+ headers["Cookie"] = sOpenIDCookie;
+ headers["User-Agent"] = getCurrentUserAgent();
+
+ LLHTTPClient::get(url, new LLInventoryUserStatusResponder(), headers);
}
}
@@ -1577,6 +1630,15 @@ void LLViewerMedia::onTeleportFinished()
gSavedSettings.setBOOL("MediaTentativeAutoPlay", true);
}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
+void LLViewerMedia::setOnlyAudibleMediaTextureID(const LLUUID& texture_id)
+{
+ sOnlyAudibleTextureID = texture_id;
+ sForceUpdate = true;
+}
+
//////////////////////////////////////////////////////////////////////////////////////////
// LLViewerMediaImpl
//////////////////////////////////////////////////////////////////////////////////////////
@@ -1714,6 +1776,7 @@ void LLViewerMediaImpl::createMediaSource()
LL_WARNS("Media") << "Failed to initialize media for mime type " << mMimeType << LL_ENDL;
}
}
+
}
//////////////////////////////////////////////////////////////////////////////////////////
@@ -1818,7 +1881,10 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_
// collect 'javascript enabled' setting from prefs and send to embedded browser
bool javascript_enabled = gSavedSettings.getBOOL( "BrowserJavascriptEnabled" );
media_source->setJavascriptEnabled( javascript_enabled );
-
+
+ bool media_plugin_debugging_enabled = gSavedSettings.getBOOL("MediaPluginDebugging");
+ media_source->enableMediaPluginDebugging( media_plugin_debugging_enabled );
+
media_source->setTarget(target);
const std::string plugin_dir = gDirUtilp->getLLPluginDir();
@@ -2139,7 +2205,14 @@ void LLViewerMediaImpl::updateVolume()
}
}
- mMediaSource->setVolume(volume);
+ if (sOnlyAudibleTextureID == LLUUID::null || sOnlyAudibleTextureID == mTextureId)
+ {
+ mMediaSource->setVolume(volume);
+ }
+ else
+ {
+ mMediaSource->setVolume(0.0f);
+ }
}
}
@@ -2349,15 +2422,13 @@ void LLViewerMediaImpl::updateJavascriptObject()
if ( mMediaSource )
{
// flag to expose this information to internal browser or not.
- bool expose_javascript_object = gSavedSettings.getBOOL("BrowserEnableJSObject");
- mMediaSource->jsExposeObjectEvent( expose_javascript_object );
+ bool enable = gSavedSettings.getBOOL("BrowserEnableJSObject");
+ mMediaSource->jsEnableObject( enable );
- // indicate if the values we have are valid (currently do this blanket-fashion for
- // everything depending on whether you are logged in or not - this may require a
- // more granular approach once variables are added that ARE valid before login
+ // these values are only menaingful after login so don't set them before
bool logged_in = LLLoginInstance::getInstance()->authSuccess();
- mMediaSource->jsValuesValidEvent( logged_in );
-
+ if ( logged_in )
+ {
// current location within a region
LLVector3 agent_pos = gAgent.getPositionAgent();
double x = agent_pos.mV[ VX ];
@@ -2386,6 +2457,7 @@ void LLViewerMediaImpl::updateJavascriptObject()
region_name = region->getName();
};
mMediaSource->jsAgentRegionEvent( region_name );
+ }
// language code the viewer is set to
mMediaSource->jsAgentLanguageEvent( LLUI::getLanguage() );
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index a70c6f4887..aeac6ba29a 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -160,6 +160,8 @@ public:
static void createSpareBrowserMediaSource();
static LLPluginClassMedia* getSpareBrowserMediaSource();
+
+ static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id);
private:
static void setOpenIDCookie();
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 41d8b57f36..26599f557e 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -44,7 +44,9 @@
#include "llbottomtray.h"
#include "llcompilequeue.h"
#include "llconsole.h"
+#include "lldaycyclemanager.h"
#include "lldebugview.h"
+#include "llenvmanager.h"
#include "llfilepicker.h"
#include "llfirstuse.h"
#include "llfloaterbuy.h"
@@ -60,6 +62,7 @@
#include "llfloatersnapshot.h"
#include "llfloatertools.h"
#include "llfloaterworldmap.h"
+#include "llfloaterbuildoptions.h"
#include "llavataractions.h"
#include "lllandmarkactions.h"
#include "llgroupmgr.h"
@@ -99,6 +102,7 @@
#include "llworldmap.h"
#include "pipeline.h"
#include "llviewerjoystick.h"
+#include "llwaterparammanager.h"
#include "llwlanimator.h"
#include "llwlparammanager.h"
#include "llfloatercamera.h"
@@ -107,10 +111,13 @@
#include "lltrans.h"
#include "lleconomy.h"
#include "lltoolgrab.h"
+#include "llwindow.h"
#include "boost/unordered_map.hpp"
using namespace LLVOAvatarDefines;
+typedef LLPointer<LLViewerObject> LLViewerObjectPtr;
+
static boost::unordered_map<std::string, LLStringExplicit> sDefaultItemLabels;
BOOL enable_land_build(void*);
@@ -827,7 +834,8 @@ U32 feature_from_string(std::string feature)
};
-class LLAdvancedToggleFeature : public view_listener_t{
+class LLAdvancedToggleFeature : public view_listener_t
+{
bool handleEvent(const LLSD& userdata)
{
U32 feature = feature_from_string( userdata.asString() );
@@ -840,7 +848,8 @@ class LLAdvancedToggleFeature : public view_listener_t{
};
class LLAdvancedCheckFeature : public view_listener_t
-{bool handleEvent(const LLSD& userdata)
+{
+ bool handleEvent(const LLSD& userdata)
{
U32 feature = feature_from_string( userdata.asString() );
bool new_value = false;
@@ -4003,23 +4012,21 @@ void handle_god_request_avatar_geometry(void *)
}
}
-
-void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
+static bool get_derezzable_objects(
+ EDeRezDestination dest,
+ std::string& error,
+ LLViewerRegion*& first_region,
+ LLDynamicArray<LLViewerObjectPtr>* derez_objectsp,
+ bool only_check = false)
{
- if(gAgentCamera.cameraMouselook())
- {
- gAgentCamera.changeCameraToDefault();
- }
- //gInventoryView->setPanelOpen(TRUE);
+ bool found = false;
- std::string error;
- LLDynamicArray<LLViewerObject*> derez_objects;
+ LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
// Check conditions that we can't deal with, building a list of
// everything that we'll actually be derezzing.
- LLViewerRegion* first_region = NULL;
- for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin();
- iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++)
+ for (LLObjectSelection::valid_root_iterator iter = selection->valid_root_begin();
+ iter != selection->valid_root_end(); iter++)
{
LLSelectNode* node = *iter;
LLViewerObject* object = node->getObject();
@@ -4086,10 +4093,55 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
}
if(can_derez_current)
{
- derez_objects.put(object);
+ found = true;
+
+ if (only_check)
+ // one found, no need to traverse to the end
+ break;
+
+ if (derez_objectsp)
+ derez_objectsp->put(object);
+
}
}
+ return found;
+}
+
+static bool can_derez(EDeRezDestination dest)
+{
+ LLViewerRegion* first_region = NULL;
+ std::string error;
+ return get_derezzable_objects(dest, error, first_region, NULL, true);
+}
+
+static void derez_objects(
+ EDeRezDestination dest,
+ const LLUUID& dest_id,
+ LLViewerRegion*& first_region,
+ std::string& error,
+ LLDynamicArray<LLViewerObjectPtr>* objectsp)
+{
+ LLDynamicArray<LLViewerObjectPtr> derez_objects;
+
+ if (!objectsp) // if objects to derez not specified
+ {
+ // get them from selection
+ if (!get_derezzable_objects(dest, error, first_region, &derez_objects, false))
+ {
+ llwarns << "No objects to derez" << llendl;
+ return;
+ }
+
+ objectsp = &derez_objects;
+ }
+
+
+ if(gAgentCamera.cameraMouselook())
+ {
+ gAgentCamera.changeCameraToDefault();
+ }
+
// This constant is based on (1200 - HEADER_SIZE) / 4 bytes per
// root. I lopped off a few (33) to provide a bit
// pad. HEADER_SIZE is currently 67 bytes, most of which is UUIDs.
@@ -4097,13 +4149,13 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
// satisfy anybody.
const S32 MAX_ROOTS_PER_PACKET = 250;
const S32 MAX_PACKET_COUNT = 254;
- F32 packets = ceil((F32)derez_objects.count() / (F32)MAX_ROOTS_PER_PACKET);
+ F32 packets = ceil((F32)objectsp->count() / (F32)MAX_ROOTS_PER_PACKET);
if(packets > (F32)MAX_PACKET_COUNT)
{
error = "AcquireErrorTooManyObjects";
}
- if(error.empty() && derez_objects.count() > 0)
+ if(error.empty() && objectsp->count() > 0)
{
U8 d = (U8)dest;
LLUUID tid;
@@ -4128,11 +4180,11 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
msg->addU8Fast(_PREHASH_PacketCount, packet_count);
msg->addU8Fast(_PREHASH_PacketNumber, packet_number);
objects_in_packet = 0;
- while((object_index < derez_objects.count())
+ while((object_index < objectsp->count())
&& (objects_in_packet++ < MAX_ROOTS_PER_PACKET))
{
- LLViewerObject* object = derez_objects.get(object_index++);
+ LLViewerObject* object = objectsp->get(object_index++);
msg->nextBlockFast(_PREHASH_ObjectData);
msg->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID());
// VEFFECT: DerezObject
@@ -4157,6 +4209,13 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
}
}
+static void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
+{
+ LLViewerRegion* first_region = NULL;
+ std::string error;
+ derez_objects(dest, dest_id, first_region, error, NULL);
+}
+
void handle_take_copy()
{
if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return;
@@ -4168,12 +4227,19 @@ void handle_take_copy()
// You can return an object to its owner if it is on your land.
class LLObjectReturn : public view_listener_t
{
+public:
+ LLObjectReturn() : mFirstRegion(NULL) {}
+
+private:
bool handleEvent(const LLSD& userdata)
{
if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true;
mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
+ // Save selected objects, so that we still know what to return after the confirmation dialog resets selection.
+ get_derezzable_objects(DRD_RETURN_TO_OWNER, mError, mFirstRegion, &mReturnableObjects);
+
LLNotificationsUtil::add("ReturnToOwner", LLSD(), LLSD(), boost::bind(&LLObjectReturn::onReturnToOwner, this, _1, _2));
return true;
}
@@ -4184,16 +4250,23 @@ class LLObjectReturn : public view_listener_t
if (0 == option)
{
// Ignore category ID for this derez destination.
- derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null);
+ derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null, mFirstRegion, mError, &mReturnableObjects);
}
+ mReturnableObjects.clear();
+ mError.clear();
+ mFirstRegion = NULL;
+
// drop reference to current selection
mObjectSelection = NULL;
return false;
}
-protected:
LLObjectSelectionHandle mObjectSelection;
+
+ LLDynamicArray<LLViewerObjectPtr> mReturnableObjects;
+ std::string mError;
+ LLViewerRegion* mFirstRegion;
};
@@ -4218,29 +4291,7 @@ class LLObjectEnableReturn : public view_listener_t
}
else
{
- LLViewerRegion* region = gAgent.getRegion();
- if (region)
- {
- // Estate owners and managers can always return objects.
- if (region->canManageEstate())
- {
- new_value = true;
- }
- else
- {
- struct f : public LLSelectedObjectFunctor
- {
- virtual bool apply(LLViewerObject* obj)
- {
- return
- obj->permModify() ||
- obj->isReturnable();
- }
- } func;
- const bool firstonly = true;
- new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly);
- }
- }
+ new_value = can_derez(DRD_RETURN_TO_OWNER);
}
#endif
return new_value;
@@ -7159,9 +7210,11 @@ class LLToolsUseSelectionForGrid : public view_listener_t
} func;
LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func);
LLSelectMgr::getInstance()->setGridMode(GRID_MODE_REF_OBJECT);
- if (gFloaterTools)
+
+ LLFloaterBuildOptions* build_options_floater = LLFloaterReg::getTypedInstance<LLFloaterBuildOptions>("build_options");
+ if (build_options_floater && build_options_floater->getVisible())
{
- gFloaterTools->mComboGridMode->setCurrentByIndex((S32)GRID_MODE_REF_OBJECT);
+ build_options_floater->setGridMode(GRID_MODE_REF_OBJECT);
}
return true;
}
@@ -7582,94 +7635,129 @@ class LLWorldEnvSettings : public view_listener_t
bool handleEvent(const LLSD& userdata)
{
std::string tod = userdata.asString();
- LLVector3 sun_direction;
if (tod == "editor")
{
- // if not there or is hidden, show it
LLFloaterReg::toggleInstance("env_settings");
return true;
}
-
+
if (tod == "sunrise")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.25);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Sunrise");
}
else if (tod == "noon")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.567);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Midday");
}
else if (tod == "sunset")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.75);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Sunset");
}
else if (tod == "midnight")
{
- // set the value, turn off animation
- LLWLParamManager::instance()->mAnimator.setDayTime(0.0);
- LLWLParamManager::instance()->mAnimator.mIsRunning = false;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = false;
-
- // then call update once
- LLWLParamManager::instance()->mAnimator.update(
- LLWLParamManager::instance()->mCurParams);
+ LLEnvManagerNew::instance().setUseSkyPreset("Midnight");
}
else
{
- LLWLParamManager::instance()->mAnimator.mIsRunning = true;
- LLWLParamManager::instance()->mAnimator.mUseLindenTime = true;
+ LLEnvManagerNew::instance().setUseDayCycle(LLEnvManagerNew::instance().getDayCycleName());
}
+
return true;
}
};
-/// Water Menu callbacks
-class LLWorldWaterSettings : public view_listener_t
-{
+class LLWorldEnvPreset : public view_listener_t
+{
bool handleEvent(const LLSD& userdata)
{
- LLFloaterReg::toggleInstance("env_water");
+ std::string item = userdata.asString();
+
+ if (item == "new_water")
+ {
+ LLFloaterReg::showInstance("env_edit_water", "new");
+ }
+ else if (item == "edit_water")
+ {
+ LLFloaterReg::showInstance("env_edit_water", "edit");
+ }
+ else if (item == "delete_water")
+ {
+ LLFloaterReg::showInstance("env_delete_preset", "water");
+ }
+ else if (item == "new_sky")
+ {
+ LLFloaterReg::showInstance("env_edit_sky", "new");
+ }
+ else if (item == "edit_sky")
+ {
+ LLFloaterReg::showInstance("env_edit_sky", "edit");
+ }
+ else if (item == "delete_sky")
+ {
+ LLFloaterReg::showInstance("env_delete_preset", "sky");
+ }
+ else if (item == "new_day_cycle")
+ {
+ LLFloaterReg::showInstance("env_edit_day_cycle", "new");
+ }
+ else if (item == "edit_day_cycle")
+ {
+ LLFloaterReg::showInstance("env_edit_day_cycle", "edit");
+ }
+ else if (item == "delete_day_cycle")
+ {
+ LLFloaterReg::showInstance("env_delete_preset", "day_cycle");
+ }
+ else
+ {
+ llwarns << "Unknown item selected" << llendl;
+ }
+
return true;
}
};
-/// Post-Process callbacks
-class LLWorldPostProcess : public view_listener_t
+class LLWorldEnableEnvPreset : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLFloaterReg::showInstance("env_post_process");
- return true;
+ std::string item = userdata.asString();
+
+ if (item == "delete_water")
+ {
+ LLWaterParamManager::preset_name_list_t user_waters;
+ LLWaterParamManager::instance().getUserPresetNames(user_waters);
+ return !user_waters.empty();
+ }
+ else if (item == "delete_sky")
+ {
+ LLWLParamManager::preset_name_list_t user_skies;
+ LLWLParamManager::instance().getUserPresetNames(user_skies);
+ return !user_skies.empty();
+ }
+ else if (item == "delete_day_cycle")
+ {
+ LLDayCycleManager::preset_name_list_t user_days;
+ LLDayCycleManager::instance().getUserPresetNames(user_days);
+ return !user_days.empty();
+ }
+ else
+ {
+ llwarns << "Unknown item" << llendl;
+ }
+
+ return false;
}
};
-/// Day Cycle callbacks
-class LLWorldDayCycle : public view_listener_t
+
+/// Post-Process callbacks
+class LLWorldPostProcess : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLFloaterReg::showInstance("env_day_cycle");
+ LLFloaterReg::showInstance("env_post_process");
return true;
}
};
@@ -7735,6 +7823,55 @@ class LLToggleUIHints : public view_listener_t
}
};
+class LLCheckSessionsSettings : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ std::string expected = userdata.asString();
+ return gSavedSettings.getString("SessionSettingsFile") == expected;
+ }
+};
+
+class LLChangeMode : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ std::string mode = userdata.asString();
+ if (mode == "basic")
+ {
+ if (gSavedSettings.getString("SessionSettingsFile") != "settings_minimal.xml")
+ {
+ LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(onModeChangeConfirm, "settings_minimal.xml", _1, _2));
+ }
+ return true;
+ }
+ else if (mode == "advanced")
+ {
+ if (gSavedSettings.getString("SessionSettingsFile") != "")
+ {
+ LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(onModeChangeConfirm, "", _1, _2));
+ }
+ return true;
+ }
+ return false;
+ }
+
+ static void onModeChangeConfirm(const std::string& new_session_settings_file, const LLSD& notification, const LLSD& response)
+ {
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ switch (option)
+ {
+ case 0:
+ gSavedSettings.getControl("SessionSettingsFile")->set(new_session_settings_file);
+ LLAppViewer::instance()->requestQuit();
+ break;
+ case 1:
+ default:
+ break;
+ }
+ }
+};
+
void LLUploadCostCalculator::calculateCost()
{
S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
@@ -7902,9 +8039,9 @@ void initialize_menus()
view_listener_t::addMenu(new LLWorldCheckAlwaysRun(), "World.CheckAlwaysRun");
view_listener_t::addMenu(new LLWorldEnvSettings(), "World.EnvSettings");
- view_listener_t::addMenu(new LLWorldWaterSettings(), "World.WaterSettings");
+ view_listener_t::addMenu(new LLWorldEnvPreset(), "World.EnvPreset");
+ view_listener_t::addMenu(new LLWorldEnableEnvPreset(), "World.EnableEnvPreset");
view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess");
- view_listener_t::addMenu(new LLWorldDayCycle(), "World.DayCycle");
view_listener_t::addMenu(new LLWorldToggleMovementControls(), "World.Toggle.MovementControls");
view_listener_t::addMenu(new LLWorldToggleCameraControls(), "World.Toggle.CameraControls");
@@ -8224,6 +8361,8 @@ void initialize_menus()
view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono");
view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints");
+ view_listener_t::addMenu(new LLCheckSessionsSettings(), "CheckSessionSettings");
+ view_listener_t::addMenu(new LLChangeMode(), "ChangeMode");
commit.add("Destination.show", boost::bind(&toggle_destination_and_avatar_picker, 0));
commit.add("Avatar.show", boost::bind(&toggle_destination_and_avatar_picker, 1));
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index b9293b3b31..8139f7deda 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -149,7 +149,7 @@ void LLFilePickerThread::run()
//static
void LLFilePickerThread::initClass()
{
- sMutex = new LLMutex(NULL);
+ sMutex = new LLMutex();
}
//static
@@ -816,8 +816,7 @@ LLUUID upload_new_resource(
uuid = tid.makeAssetID(gAgent.getSecureSessionID());
// copy this file into the vfs for upload
S32 file_size;
- LLAPRFile infile ;
- infile.open(filename, LL_APR_RB, NULL, &file_size);
+ LLAPRFile infile(filename, LL_APR_RB, &file_size);
if (infile.getFileHandle())
{
LLVFile file(gVFS, uuid, asset_type, LLVFile::WRITE);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 7ab335314a..68745d5aeb 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -37,6 +37,7 @@
#include "lleconomy.h"
#include "lleventtimer.h"
#include "llfloaterreg.h"
+#include "llfolderview.h"
#include "llfollowcamparams.h"
#include "llinventorydefines.h"
#include "lllslconstants.h"
@@ -87,6 +88,7 @@
#include "lluri.h"
#include "llviewergenericmessage.h"
#include "llviewermenu.h"
+#include "llviewerinventory.h"
#include "llviewerjoystick.h"
#include "llviewerobjectlist.h"
#include "llviewerparcelmgr.h"
@@ -694,7 +696,7 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
return false;
}
-static void highlight_inventory_items_in_panel(const std::vector<LLUUID>& items, LLInventoryPanel *inventory_panel)
+static void highlight_inventory_objects_in_panel(const std::vector<LLUUID>& items, LLInventoryPanel *inventory_panel)
{
if (NULL == inventory_panel) return;
@@ -708,7 +710,7 @@ static void highlight_inventory_items_in_panel(const std::vector<LLUUID>& items,
continue;
}
- LLInventoryItem* item = gInventory.getItem(item_id);
+ LLInventoryObject* item = gInventory.getObject(item_id);
llassert(item);
if (!item) {
continue;
@@ -787,7 +789,6 @@ class LLViewerInventoryMoveFromWorldObserver : public LLInventoryAddItemByAssetO
public:
LLViewerInventoryMoveFromWorldObserver()
: LLInventoryAddItemByAssetObserver()
- , mActivePanel(NULL)
{
}
@@ -798,13 +799,16 @@ private:
/*virtual */void onAssetAdded(const LLUUID& asset_id)
{
// Store active Inventory panel.
- mActivePanel = LLInventoryPanel::getActiveInventoryPanel();
+ if (LLInventoryPanel::getActiveInventoryPanel())
+ {
+ mActivePanel = LLInventoryPanel::getActiveInventoryPanel()->getHandle();
+ }
// Store selected items (without destination folder)
mSelectedItems.clear();
- if (mActivePanel)
+ if (LLInventoryPanel::getActiveInventoryPanel())
{
- mSelectedItems = mActivePanel->getRootFolder()->getSelectionList();
+ mSelectedItems = LLInventoryPanel::getActiveInventoryPanel()->getRootFolder()->getSelectionList();
}
mSelectedItems.erase(mMoveIntoFolderID);
}
@@ -815,12 +819,14 @@ private:
*/
void done()
{
+ LLInventoryPanel* active_panel = dynamic_cast<LLInventoryPanel*>(mActivePanel.get());
+
// if selection is not changed since watch started lets hightlight new items.
- if (mActivePanel && !isSelectionChanged())
+ if (active_panel && !isSelectionChanged())
{
LL_DEBUGS("Inventory_Move") << "Selecting new items..." << LL_ENDL;
- mActivePanel->clearSelection();
- highlight_inventory_items_in_panel(mAddedItems, mActivePanel);
+ active_panel->clearSelection();
+ highlight_inventory_objects_in_panel(mAddedItems, active_panel);
}
}
@@ -828,16 +834,16 @@ private:
* Returns true if selected inventory items were changed since moved inventory items were started to watch.
*/
bool isSelectionChanged()
- {
- const LLInventoryPanel * const current_active_panel = LLInventoryPanel::getActiveInventoryPanel();
+ {
+ LLInventoryPanel* active_panel = dynamic_cast<LLInventoryPanel*>(mActivePanel.get());
- if (NULL == mActivePanel || current_active_panel != mActivePanel)
+ if (NULL == active_panel)
{
return true;
}
// get selected items (without destination folder)
- selected_items_t selected_items = mActivePanel->getRootFolder()->getSelectionList();
+ selected_items_t selected_items = active_panel->getRootFolder()->getSelectionList();
selected_items.erase(mMoveIntoFolderID);
// compare stored & current sets of selected items
@@ -851,7 +857,7 @@ private:
return different_items.size() > 0;
}
- LLInventoryPanel *mActivePanel;
+ LLHandle<LLPanel> mActivePanel;
typedef std::set<LLUUID> selected_items_t;
selected_items_t mSelectedItems;
@@ -880,6 +886,75 @@ void set_dad_inventory_item(LLInventoryItem* inv_item, const LLUUID& into_folder
gInventoryMoveObserver->watchAsset(inv_item->getAssetUUID());
}
+
+/**
+ * Class to observe moving of items and to select them in inventory.
+ *
+ * Used currently for dragging from inbox to regular inventory folders
+ */
+
+class LLViewerInventoryMoveObserver : public LLInventoryObserver
+{
+public:
+
+ LLViewerInventoryMoveObserver(const LLUUID& object_id)
+ : LLInventoryObserver()
+ , mObjectID(object_id)
+ {
+ if (LLInventoryPanel::getActiveInventoryPanel())
+ {
+ mActivePanel = LLInventoryPanel::getActiveInventoryPanel()->getHandle();
+ }
+ }
+
+ virtual ~LLViewerInventoryMoveObserver() {}
+ virtual void changed(U32 mask);
+
+private:
+ LLUUID mObjectID;
+ LLHandle<LLPanel> mActivePanel;
+
+};
+
+void LLViewerInventoryMoveObserver::changed(U32 mask)
+{
+ LLInventoryPanel* active_panel = dynamic_cast<LLInventoryPanel*>(mActivePanel.get());
+
+ if (NULL == active_panel)
+ {
+ gInventory.removeObserver(this);
+ return;
+ }
+
+ if((mask & (LLInventoryObserver::STRUCTURE)) != 0)
+ {
+ const std::set<LLUUID>& changed_items = gInventory.getChangedIDs();
+
+ std::set<LLUUID>::const_iterator id_it = changed_items.begin();
+ std::set<LLUUID>::const_iterator id_end = changed_items.end();
+ for (;id_it != id_end; ++id_it)
+ {
+ if ((*id_it) == mObjectID)
+ {
+ active_panel->clearSelection();
+ std::vector<LLUUID> items;
+ items.push_back(mObjectID);
+ highlight_inventory_objects_in_panel(items, active_panel);
+ active_panel->getRootFolder()->scrollToShowSelection();
+
+ gInventory.removeObserver(this);
+ break;
+ }
+ }
+ }
+}
+
+void set_dad_inbox_object(const LLUUID& object_id)
+{
+ LLViewerInventoryMoveObserver* move_observer = new LLViewerInventoryMoveObserver(object_id);
+ gInventory.addObserver(move_observer);
+}
+
//unlike the FetchObserver for AgentOffer, we only make one
//instance of the AddedObserver for TaskOffers
//and it never dies. We do this because we don't know the UUID of
@@ -936,7 +1011,6 @@ protected:
//one global instance to bind them
LLOpenTaskOffer* gNewInventoryObserver=NULL;
-
class LLNewInventoryHintObserver : public LLInventoryAddedObserver
{
protected:
@@ -946,6 +1020,8 @@ protected:
}
};
+LLNewInventoryHintObserver* gNewInventoryHintObserver=NULL;
+
void start_new_inventory_observer()
{
if (!gNewInventoryObserver) //task offer observer
@@ -962,54 +1038,37 @@ void start_new_inventory_observer()
gInventory.addObserver(gInventoryMoveObserver);
}
- gInventory.addObserver(new LLNewInventoryHintObserver());
+ if (!gNewInventoryHintObserver)
+ {
+ // Observer is deleted by gInventory
+ gNewInventoryHintObserver = new LLNewInventoryHintObserver();
+ gInventory.addObserver(gNewInventoryHintObserver);
+ }
}
class LLDiscardAgentOffer : public LLInventoryFetchItemsObserver
{
LOG_CLASS(LLDiscardAgentOffer);
+
public:
LLDiscardAgentOffer(const LLUUID& folder_id, const LLUUID& object_id) :
LLInventoryFetchItemsObserver(object_id),
mFolderID(folder_id),
mObjectID(object_id) {}
- virtual ~LLDiscardAgentOffer() {}
+
virtual void done()
{
LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- bool notify = false;
- if(trash_id.notNull() && mObjectID.notNull())
- {
- LLInventoryModel::update_list_t update;
- LLInventoryModel::LLCategoryUpdate old_folder(mFolderID, -1);
- update.push_back(old_folder);
- LLInventoryModel::LLCategoryUpdate new_folder(trash_id, 1);
- update.push_back(new_folder);
- gInventory.accountForUpdate(update);
- gInventory.moveObject(mObjectID, trash_id);
- LLInventoryObject* obj = gInventory.getObject(mObjectID);
- if(obj)
- {
- // no need to restamp since this is already a freshly
- // stamped item.
- obj->updateParentOnServer(FALSE);
- notify = true;
- }
- }
- else
- {
- LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: "
- << (trash_id.isNull() ? "trash " : "")
- << (mObjectID.isNull() ? "object" : "") << LL_ENDL;
- }
+
+ // We're invoked from LLInventoryModel::notifyObservers().
+ // If we now try to remove the inventory item, it will cause a nested
+ // notifyObservers() call, which won't work.
+ // So defer moving the item to trash until viewer gets idle (in a moment).
+ LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID));
gInventory.removeObserver(this);
- if(notify)
- {
- gInventory.notifyObservers();
- }
delete this;
}
+
protected:
LLUUID mFolderID;
LLUUID mObjectID;
@@ -1414,7 +1473,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
LLChat chat;
std::string log_message;
S32 button = LLNotificationsUtil::getSelectedOption(notification, response);
-
+
LLInventoryObserver* opener = NULL;
LLViewerInventoryCategory* catp = NULL;
catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID);
@@ -1446,7 +1505,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
// TODO: when task inventory offers can also be handled the new way, migrate the code that sets these strings here:
from_string = chatHistory_string = mFromName;
- bool busy=FALSE;
+ bool busy = gAgent.getBusy();
switch(button)
{
@@ -1501,13 +1560,10 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
LLSD args;
args["MESSAGE"] = log_message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
break;
- case IOR_BUSY:
- //Busy falls through to decline. Says to make busy message.
- busy=TRUE;
case IOR_MUTE:
// MUTE falls through to decline
case IOR_DECLINE:
@@ -1653,7 +1709,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
from_string = chatHistory_string = mFromName;
}
- bool busy=FALSE;
+ bool busy = gAgent.getBusy();
switch(button)
{
@@ -1675,7 +1731,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
log_message = chatHistory_string + " " + LLTrans::getString("InvOfferGaveYou") + " " + mDesc + LLTrans::getString(".");
LLSD args;
args["MESSAGE"] = log_message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
// we will want to open this item when it comes back.
@@ -1699,9 +1755,6 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
} // end switch (mIM)
break;
- case IOR_BUSY:
- //Busy falls through to decline. Says to make busy message.
- busy=TRUE;
case IOR_MUTE:
// MUTE falls through to decline
case IOR_DECLINE:
@@ -1726,7 +1779,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
LLSD args;
args["MESSAGE"] = log_message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
if (busy && (!mFromGroup && !mFromObject))
@@ -1771,14 +1824,6 @@ void LLOfferInfo::initRespondFunctionMap()
void inventory_offer_handler(LLOfferInfo* info)
{
- //Until throttling is implmented, busy mode should reject inventory instead of silently
- //accepting it. SEE SL-39554
- if (gAgent.getBusy())
- {
- info->forceResponse(IOR_BUSY);
- return;
- }
-
//If muted, don't even go through the messaging stuff. Just curtail the offer here.
if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName))
{
@@ -2590,6 +2635,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// Same as closing window
info->forceResponse(IOR_DECLINE);
}
+ else if (is_busy && dialog != IM_TASK_INVENTORY_OFFERED) // busy mode must not affect interaction with objects (STORM-565)
+ {
+ // Until throttling is implemented, busy mode should reject inventory instead of silently
+ // accepting it. SEE SL-39554
+ info->forceResponse(IOR_DECLINE);
+ }
else
{
inventory_offer_handler(info);
@@ -4265,8 +4316,7 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
- //LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
- // << ", " << phase << LL_ENDL;
+ LL_DEBUGS("Windlight Sync") << "Sun phase: " << phase << " rad = " << fmodf(phase / F_TWO_PI + 0.25, 1.f) * 24.f << " h" << LL_ENDL;
gSky.setSunPhase(phase);
gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
@@ -4324,10 +4374,13 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
{
return;
}
-
- // Don't play sounds from gestures if they are not enabled.
- if (!gSavedSettings.getBOOL("EnableGestureSounds")) return;
+ // Don't play sounds from gestures if they are not enabled.
+ if (object_id == owner_id && !gSavedSettings.getBOOL("EnableGestureSounds"))
+ {
+ return;
+ }
+
gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
}
@@ -6261,6 +6314,18 @@ void send_group_notice(const LLUUID& group_id,
bool handle_lure_callback(const LLSD& notification, const LLSD& response)
{
+ static const unsigned OFFER_RECIPIENT_LIMIT = 250;
+ if(notification["payload"]["ids"].size() > OFFER_RECIPIENT_LIMIT)
+ {
+ // More than OFFER_RECIPIENT_LIMIT targets will overload the message
+ // producing an llerror.
+ LLSD args;
+ args["OFFERS"] = notification["payload"]["ids"].size();
+ args["LIMIT"] = static_cast<int>(OFFER_RECIPIENT_LIMIT);
+ LLNotificationsUtil::add("TooManyTeleportOffers", args);
+ return false;
+ }
+
std::string text = response["message"].asString();
LLSLURL slurl;
LLAgentUI::buildSLURL(slurl);
@@ -6451,8 +6516,24 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)
rtn_text = LLNotification::getSelectedOptionName(response);
}
- // Didn't click "Ignore"
- if (button_idx != -1)
+ // Button -2 = Mute
+ // Button -1 = Ignore - no processing needed for this button
+ // Buttons 0 and above = dialog choices
+
+ if (-2 == button_idx)
+ {
+ std::string object_name = notification["payload"]["object_name"].asString();
+ LLUUID object_id = notification["payload"]["object_id"].asUUID();
+ LLMute mute(object_id, object_name, LLMute::OBJECT);
+ if (LLMuteList::getInstance()->add(mute))
+ {
+ // This call opens the sidebar, displays the block list, and highlights the newly blocked
+ // object in the list so the user can see that their block click has taken effect.
+ LLPanelBlockedList::showPanelAndSelect(object_id);
+ }
+ }
+
+ if (0 <= button_idx)
{
LLMessageSystem* msg = gMessageSystem;
msg->newMessage("ScriptDialogReply");
@@ -6484,7 +6565,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
LLUUID owner_id;
if (gMessageSystem->getNumberOfBlocks("OwnerData") > 0)
{
- msg->getUUID("OwnerData", "OwnerID", owner_id);
+ msg->getUUID("OwnerData", "OwnerID", owner_id);
}
if (LLMuteList::getInstance()->isMuted(object_id) || LLMuteList::getInstance()->isMuted(owner_id))
@@ -6495,12 +6576,12 @@ void process_script_dialog(LLMessageSystem* msg, void**)
std::string message;
std::string first_name;
std::string last_name;
- std::string title;
+ std::string object_name;
S32 chat_channel;
msg->getString("Data", "FirstName", first_name);
msg->getString("Data", "LastName", last_name);
- msg->getString("Data", "ObjectName", title);
+ msg->getString("Data", "ObjectName", object_name);
msg->getString("Data", "Message", message);
msg->getS32("Data", "ChatChannel", chat_channel);
@@ -6511,6 +6592,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
payload["sender"] = msg->getSender().getIPandPort();
payload["object_id"] = object_id;
payload["chat_channel"] = chat_channel;
+ payload["object_name"] = object_name;
// build up custom form
S32 button_count = msg->getNumberOfBlocks("Buttons");
@@ -6529,7 +6611,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)
}
LLSD args;
- args["TITLE"] = title;
+ args["TITLE"] = object_name;
args["MESSAGE"] = message;
LLNotificationPtr notification;
if (!first_name.empty())
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
index b4a9b8e677..d8acd99953 100644
--- a/indra/newview/llviewermessage.h
+++ b/indra/newview/llviewermessage.h
@@ -57,7 +57,6 @@ enum InventoryOfferResponse
IOR_ACCEPT,
IOR_DECLINE,
IOR_MUTE,
- IOR_BUSY,
IOR_SHOW
};
@@ -203,6 +202,8 @@ void open_inventory_offer(const uuid_vec_t& items, const std::string& from_name)
bool highlight_offered_object(const LLUUID& obj_id);
void set_dad_inventory_item(LLInventoryItem* inv_item, const LLUUID& into_folder_uuid);
+void set_dad_inbox_object(const LLUUID& object_id);
+
class LLOfferInfo : public LLNotificationResponderInterface
{
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index a59afdc28a..ef5c65eb87 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -35,7 +35,7 @@
#include "llweb.h"
-const char* DEFAULT_LOGIN_PAGE = "http://secondlife.com/app/login/";
+const char* DEFAULT_LOGIN_PAGE = "http://viewer-login.agni.lindenlab.com/";
const char* SYSTEM_GRID_SLURL_BASE = "secondlife://%s/secondlife/";
const char* MAIN_GRID_SLURL_BASE = "http://maps.secondlife.com/secondlife/";
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index be9ff872c0..cd71b6d42a 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -81,7 +81,6 @@
#include "llviewerwindow.h" // For getSpinAxis
#include "llvoavatar.h"
#include "llvoavatarself.h"
-#include "llvoclouds.h"
#include "llvograss.h"
#include "llvoground.h"
#include "llvolume.h"
@@ -167,8 +166,6 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
// llwarns << "Creating new tree!" << llendl;
// res = new LLVOTree(id, pcode, regionp); break;
res = NULL; break;
- case LL_VO_CLOUDS:
- res = new LLVOClouds(id, pcode, regionp); break;
case LL_VO_SURFACE_PATCH:
res = new LLVOSurfacePatch(id, pcode, regionp); break;
case LL_VO_SKY:
@@ -519,7 +516,6 @@ void LLViewerObject::setNameValueList(const std::string& name_value_list)
}
}
-
// This method returns true if the object is over land owned by the
// agent.
bool LLViewerObject::isReturnable()
@@ -528,17 +524,108 @@ bool LLViewerObject::isReturnable()
{
return false;
}
+
std::vector<LLBBox> boxes;
boxes.push_back(LLBBox(getPositionRegion(), getRotationRegion(), getScale() * -0.5f, getScale() * 0.5f).getAxisAligned());
for (child_list_t::iterator iter = mChildList.begin();
iter != mChildList.end(); iter++)
{
LLViewerObject* child = *iter;
- boxes.push_back(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
+ boxes.push_back( LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
+ }
+
+ bool result = (mRegionp && mRegionp->objectIsReturnable(getPositionRegion(), boxes)) ? 1 : 0;
+
+ if ( !result )
+ {
+ //Get list of neighboring regions relative to this vo's region
+ std::vector<LLViewerRegion*> uniqueRegions;
+ mRegionp->getNeighboringRegions( uniqueRegions );
+
+ //Build aabb's - for root and all children
+ std::vector<PotentialReturnableObject> returnables;
+ typedef std::vector<LLViewerRegion*>::iterator RegionIt;
+ RegionIt regionStart = uniqueRegions.begin();
+ RegionIt regionEnd = uniqueRegions.end();
+
+ for (; regionStart != regionEnd; ++regionStart )
+ {
+ LLViewerRegion* pTargetRegion = *regionStart;
+ //Add the root vo as there may be no children and we still want
+ //to test for any edge overlap
+ buildReturnablesForChildrenVO( returnables, this, pTargetRegion );
+ //Add it's children
+ for (child_list_t::iterator iter = mChildList.begin(); iter != mChildList.end(); iter++)
+ {
+ LLViewerObject* pChild = *iter;
+ buildReturnablesForChildrenVO( returnables, pChild, pTargetRegion );
+ }
+ }
+
+ //TBD#Eventually create a region -> box list map
+ typedef std::vector<PotentialReturnableObject>::iterator ReturnablesIt;
+ ReturnablesIt retCurrentIt = returnables.begin();
+ ReturnablesIt retEndIt = returnables.end();
+
+ for ( ; retCurrentIt !=retEndIt; ++retCurrentIt )
+ {
+ boxes.clear();
+ LLViewerRegion* pRegion = (*retCurrentIt).pRegion;
+ boxes.push_back( (*retCurrentIt).box );
+ bool retResult = pRegion
+ && pRegion->childrenObjectReturnable( boxes )
+ && pRegion->canManageEstate();
+ if ( retResult )
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+void LLViewerObject::buildReturnablesForChildrenVO( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion )
+{
+ if ( !pChild )
+ {
+ llerrs<<"child viewerobject is NULL "<<llendl;
}
+
+ constructAndAddReturnable( returnables, pChild, pTargetRegion );
+
+ //We want to handle any children VO's as well
+ for (child_list_t::iterator iter = pChild->mChildList.begin(); iter != pChild->mChildList.end(); iter++)
+ {
+ LLViewerObject* pChildofChild = *iter;
+ buildReturnablesForChildrenVO( returnables, pChildofChild, pTargetRegion );
+ }
+}
- return mRegionp
- && mRegionp->objectIsReturnable(getPositionRegion(), boxes);
+void LLViewerObject::constructAndAddReturnable( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion )
+{
+
+ LLVector3 targetRegionPos;
+ targetRegionPos.setVec( pChild->getPositionGlobal() );
+
+ LLBBox childBBox = LLBBox( targetRegionPos, pChild->getRotationRegion(), pChild->getScale() * -0.5f,
+ pChild->getScale() * 0.5f).getAxisAligned();
+
+ LLVector3 edgeA = targetRegionPos + childBBox.getMinLocal();
+ LLVector3 edgeB = targetRegionPos + childBBox.getMaxLocal();
+
+ LLVector3d edgeAd, edgeBd;
+ edgeAd.setVec(edgeA);
+ edgeBd.setVec(edgeB);
+
+ //Only add the box when either of the extents are in a neighboring region
+ if ( pTargetRegion->pointInRegionGlobal( edgeAd ) || pTargetRegion->pointInRegionGlobal( edgeBd ) )
+ {
+ PotentialReturnableObject returnableObj;
+ returnableObj.box = childBBox;
+ returnableObj.pRegion = pTargetRegion;
+ returnables.push_back( returnableObj );
+ }
}
BOOL LLViewerObject::setParent(LLViewerObject* parent)
@@ -2663,7 +2750,7 @@ void LLViewerObject::processTaskInv(LLMessageSystem* msg, void** user_data)
LLPointer<LLInventoryObject> obj;
obj = new LLInventoryObject(object->mID, LLUUID::null,
LLAssetType::AT_CATEGORY,
- LLTrans::getString("ViewerObjectContents").c_str());
+ "Contents");
object->mInventory->push_front(obj);
object->doInventoryCallback();
delete ft;
@@ -2730,7 +2817,7 @@ void LLViewerObject::loadTaskInvFile(const std::string& filename)
{
LLPointer<LLInventoryObject> inv = new LLInventoryObject;
inv->importLegacyStream(ifs);
- inv->rename(LLTrans::getString("ViewerObjectContents").c_str());
+ inv->rename("Contents");
mInventory->push_front(inv);
}
else
@@ -4790,6 +4877,10 @@ void LLViewerObject::adjustAudioGain(const F32 gain)
bool LLViewerObject::unpackParameterEntry(U16 param_type, LLDataPacker *dp)
{
+ if (LLNetworkData::PARAMS_MESH == param_type)
+ {
+ param_type = LLNetworkData::PARAMS_SCULPT;
+ }
ExtraParameter* param = getExtraParameterEntryCreate(param_type);
if (param)
{
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index a0ad52df6b..1828a64917 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -44,11 +44,11 @@
#include "v3math.h"
#include "llvertexbuffer.h"
#include "llaccountingquota.h"
+#include "llbbox.h"
class LLAgent; // TODO: Get rid of this.
class LLAudioSource;
class LLAudioSourceVO;
-class LLBBox;
class LLDataPacker;
class LLColor4;
class LLFrameTimer;
@@ -112,6 +112,12 @@ public:
LLColor4 mColor;
};
+struct PotentialReturnableObject
+{
+ LLBBox box;
+ LLViewerRegion* pRegion;
+};
+
//============================================================================
class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
@@ -234,6 +240,9 @@ public:
// anti-encroachment is enabled
bool isReturnable();
+ void buildReturnablesForChildrenVO( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion );
+ void constructAndAddReturnable( std::vector<PotentialReturnableObject>& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion );
+
/*
// This method will scan through this object, and then query the
// selection manager to see if the local agent probably has the
@@ -547,7 +556,7 @@ public:
//
typedef enum e_vo_types
{
- LL_VO_CLOUDS = LL_PCODE_APP | 0x20,
+ LL_VO_CLOUDS = LL_PCODE_APP | 0x20, // no longer used
LL_VO_SURFACE_PATCH = LL_PCODE_APP | 0x30,
LL_VO_WL_SKY = LL_PCODE_APP | 0x40,
LL_VO_SQUARE_TORUS = LL_PCODE_APP | 0x50,
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 45c6777ae8..db5684665b 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -957,8 +957,7 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world)
iter != idle_list.end(); iter++)
{
objectp = *iter;
- if (objectp->getPCode() == LLViewerObject::LL_VO_CLOUDS ||
- objectp->isAvatar())
+ if (objectp->isAvatar())
{
objectp->idleUpdate(agent, world, frame_time);
}
@@ -1072,10 +1071,12 @@ void LLViewerObjectList::fetchObjectCosts()
LLSD id_list;
U32 object_index = 0;
+ U32 count = 0;
+
for (
std::set<LLUUID>::iterator iter = mStaleObjectCost.begin();
iter != mStaleObjectCost.end();
- ++iter)
+ )
{
// Check to see if a request for this object
// has already been made.
@@ -1085,13 +1086,15 @@ void LLViewerObjectList::fetchObjectCosts()
mPendingObjectCost.insert(*iter);
id_list[object_index++] = *iter;
}
- }
- // id_list should now contain all
- // requests in mStaleObjectCost before, so clear
- // it now
- mStaleObjectCost.clear();
+ mStaleObjectCost.erase(iter++);
+ if (count++ >= 450)
+ {
+ break;
+ }
+ }
+
if ( id_list.size() > 0 )
{
LLSD post_data = LLSD::emptyMap();
@@ -1340,18 +1343,29 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
S32 num_removed = 0;
LLViewerObject *objectp;
- for (vobj_list_t::iterator iter = mObjects.begin(); iter != mObjects.end(); )
+
+ vobj_list_t::reverse_iterator target = mObjects.rbegin();
+
+ vobj_list_t::iterator iter = mObjects.begin();
+ for ( ; iter != mObjects.end(); )
{
- // Scan for all of the dead objects and remove any "global" references to them.
+ // Scan for all of the dead objects and put them all on the end of the list with no ref count ops
objectp = *iter;
+ if (objectp == NULL)
+ { //we caught up to the dead tail
+ break;
+ }
+
if (objectp->isDead())
{
- iter = mObjects.erase(iter);
+ LLPointer<LLViewerObject>::swap(*iter, *target);
+ *target = NULL;
+ ++target;
num_removed++;
- if (num_removed == mNumDeadObjects)
+ if (num_removed == mNumDeadObjects || iter->isNull())
{
- // We've cleaned up all of the dead objects.
+ // We've cleaned up all of the dead objects or caught up to the dead tail
break;
}
}
@@ -1361,6 +1375,11 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer)
}
}
+ llassert(num_removed == mNumDeadObjects);
+
+ //erase as a block
+ mObjects.erase(mObjects.begin()+(mObjects.size()-mNumDeadObjects), mObjects.end());
+
// We've cleaned the global object list, now let's do some paranoia testing on objects
// before blowing away the dead list.
mDeadObjects.clear();
@@ -1395,6 +1414,10 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)
void LLViewerObjectList::updateObjectCost(LLViewerObject* object)
{
+ if (!object->isRoot())
+ { //always fetch cost for the parent when fetching cost for children
+ mStaleObjectCost.insert(((LLViewerObject*)object->getParent())->getID());
+ }
mStaleObjectCost.insert(object->getID());
}
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index dfa35edef4..90fbc41daa 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -485,6 +485,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
{
switch(event)
{
+ case MEDIA_EVENT_DEBUG_MESSAGE:
+ {
+ // LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_DEBUG_MESSAGE " << LL_ENDL;
+ };
+ break;
+
case MEDIA_EVENT_CONTENT_UPDATED:
{
// LL_DEBUGS("Media") << "Media event: MEDIA_EVENT_CONTENT_UPDATED " << LL_ENDL;
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
index 26765bdd01..eff16b6a6e 100644
--- a/indra/newview/llviewerparceloverlay.cpp
+++ b/indra/newview/llviewerparceloverlay.cpp
@@ -173,6 +173,33 @@ bool LLViewerParcelOverlay::encroachesOwned(const std::vector<LLBBox>& boxes) co
}
return false;
}
+bool LLViewerParcelOverlay::encroachesOnUnowned(const std::vector<LLBBox>& boxes) const
+{
+ // boxes are expected to already be axis aligned
+ for (U32 i = 0; i < boxes.size(); ++i)
+ {
+ LLVector3 min = boxes[i].getMinAgent();
+ LLVector3 max = boxes[i].getMaxAgent();
+
+ S32 left = S32(llclamp((min.mV[VX] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1));
+ S32 right = S32(llclamp((max.mV[VX] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1));
+ S32 top = S32(llclamp((min.mV[VY] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1));
+ S32 bottom = S32(llclamp((max.mV[VY] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1));
+
+ for (S32 row = top; row <= bottom; row++)
+ {
+ for (S32 column = left; column <= right; column++)
+ {
+ U8 type = ownership(row, column);
+ if ((PARCEL_SELF != type))
+ {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
BOOL LLViewerParcelOverlay::isSoundLocal(const LLVector3& pos) const
{
diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h
index c80baedda6..3c6794e7d0 100644
--- a/indra/newview/llviewerparceloverlay.h
+++ b/indra/newview/llviewerparceloverlay.h
@@ -60,6 +60,7 @@ public:
// might be in another parcel. for now, we simply test axis aligned
// bounding boxes which isn't perfect, but is close
bool encroachesOwned(const std::vector<LLBBox>& boxes) const;
+ bool encroachesOnUnowned(const std::vector<LLBBox>& boxes) const;
BOOL isSoundLocal(const LLVector3& pos) const;
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
index faa86d43dd..12f6a0dd1c 100644
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -33,6 +33,8 @@
// in viewer.
// It is used to precompile headers for improved build speed.
+#include <boost/coroutine/coroutine.hpp>
+
#include "linden_common.h"
// Work around stupid Microsoft STL warning
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 002e0567e4..17f908d73f 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -54,6 +54,7 @@
#include "llfloaterreporter.h"
#include "llfloaterregioninfo.h"
#include "llhttpnode.h"
+#include "llregioninfomodel.h"
#include "llsdutil.h"
#include "llstartup.h"
#include "lltrans.h"
@@ -64,7 +65,6 @@
#include "llvlmanager.h"
#include "llvlcomposition.h"
#include "llvocache.h"
-#include "llvoclouds.h"
#include "llworld.h"
#include "llspatialpartition.h"
#include "stringize.h"
@@ -77,6 +77,13 @@
const F32 WATER_TEXTURE_SCALE = 8.f; // Number of times to repeat the water texture across a region
const S16 MAX_MAP_DIST = 10;
+// The server only keeps our pending agent info for 60 seconds.
+// We want to allow for seed cap retry, but its not useful after that 60 seconds.
+// Give it 3 chances, each at 18 seconds to give ourselves a few seconds to connect anyways if we give up.
+const S32 MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN = 3;
+const F32 CAP_REQUEST_TIMEOUT = 18;
+// Even though we gave up on login, keep trying for caps after we are logged in:
+const S32 MAX_CAP_REQUEST_ATTEMPTS = 30;
typedef std::map<std::string, std::string> CapabilityMap;
@@ -86,6 +93,10 @@ public:
: mHost(host),
mCompositionp(NULL),
mEventPoll(NULL),
+ mSeedCapMaxAttempts(MAX_CAP_REQUEST_ATTEMPTS),
+ mSeedCapMaxAttemptsBeforeLogin(MAX_SEED_CAP_ATTEMPTS_BEFORE_LOGIN),
+ mSeedCapAttempts(0),
+ mHttpResponderID(0),
// I'd prefer to set the LLCapabilityListener name to match the region
// name -- it's disappointing that's not available at construction time.
// We could instead store an LLCapabilityListener*, making
@@ -100,6 +111,8 @@ public:
{
}
+ void buildCapabilityNames(LLSD& capabilityNames);
+
// The surfaces and other layers
LLSurface* mLandp;
@@ -132,6 +145,12 @@ public:
LLEventPoll* mEventPoll;
+ S32 mSeedCapMaxAttempts;
+ S32 mSeedCapMaxAttemptsBeforeLogin;
+ S32 mSeedCapAttempts;
+
+ S32 mHttpResponderID;
+
/// Post an event to this LLCapabilityListener to invoke a capability message on
/// this LLViewerRegion's server
/// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
@@ -139,8 +158,6 @@ public:
//spatial partitions for objects in this region
std::vector<LLSpatialPartition*> mObjectPartition;
-
- LLHTTPClient::ResponderPtr mHttpResponderPtr ;
};
// support for secondlife:///app/region/{REGION} SLapps
@@ -186,54 +203,51 @@ class BaseCapabilitiesComplete : public LLHTTPClient::Responder
{
LOG_CLASS(BaseCapabilitiesComplete);
public:
- BaseCapabilitiesComplete(LLViewerRegion* region)
- : mRegion(region)
+ BaseCapabilitiesComplete(U64 region_handle, S32 id)
+ : mRegionHandle(region_handle), mID(id)
{ }
virtual ~BaseCapabilitiesComplete()
- {
- if(mRegion)
- {
- mRegion->setHttpResponderPtrNULL() ;
- }
- }
-
- void setRegion(LLViewerRegion* region)
- {
- mRegion = region ;
- }
+ { }
void error(U32 statusNum, const std::string& reason)
{
LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
-
- if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if (regionp)
{
- LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ regionp->failedSeedCapability();
}
}
void result(const LLSD& content)
{
- if(!mRegion || LLHTTPClient::ResponderPtr(this) != mRegion->getHttpResponderPtr()) //region is removed or responder is not created.
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if(!regionp) //region was removed
{
+ LL_WARNS2("AppInit", "Capabilities") << "Received results for region that no longer exists!" << LL_ENDL;
+ return ;
+ }
+ if( mID != regionp->getHttpResponderID() ) // region is no longer referring to this responder
+ {
+ LL_WARNS2("AppInit", "Capabilities") << "Received results for a stale http responder!" << LL_ENDL;
return ;
}
LLSD::map_const_iterator iter;
for(iter = content.beginMap(); iter != content.endMap(); ++iter)
{
- mRegion->setCapability(iter->first, iter->second);
+ regionp->setCapability(iter->first, iter->second);
LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
<< iter->first << LL_ENDL;
/* HACK we're waiting for the ServerReleaseNotes */
- if (iter->first == "ServerReleaseNotes" && mRegion->getReleaseNotesRequested())
+ if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested())
{
- mRegion->showReleaseNotes();
+ regionp->showReleaseNotes();
}
}
- mRegion->setCapabilitiesReceived(true);
+ regionp->setCapabilitiesReceived(true);
if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
{
@@ -241,15 +255,15 @@ public:
}
}
- static boost::intrusive_ptr<BaseCapabilitiesComplete> build(
- LLViewerRegion* region)
+ static boost::intrusive_ptr<BaseCapabilitiesComplete> build( U64 region_handle, S32 id )
{
- return boost::intrusive_ptr<BaseCapabilitiesComplete>(
- new BaseCapabilitiesComplete(region));
+ return boost::intrusive_ptr<BaseCapabilitiesComplete>(
+ new BaseCapabilitiesComplete(region_handle, id) );
}
private:
- LLViewerRegion* mRegion;
+ U64 mRegionHandle;
+ S32 mID;
};
@@ -315,7 +329,6 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mImpl->mObjectPartition.push_back(new LLWaterPartition()); //PARTITION_WATER
mImpl->mObjectPartition.push_back(new LLTreePartition()); //PARTITION_TREE
mImpl->mObjectPartition.push_back(new LLParticlePartition()); //PARTITION_PARTICLE
- mImpl->mObjectPartition.push_back(new LLCloudPartition()); //PARTITION_CLOUD
mImpl->mObjectPartition.push_back(new LLGrassPartition()); //PARTITION_GRASS
mImpl->mObjectPartition.push_back(new LLVolumePartition()); //PARTITION_VOLUME
mImpl->mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE
@@ -341,16 +354,10 @@ void LLViewerRegion::initStats()
LLViewerRegion::~LLViewerRegion()
{
- if(mImpl->mHttpResponderPtr)
- {
- (static_cast<BaseCapabilitiesComplete*>(mImpl->mHttpResponderPtr.get()))->setRegion(NULL) ;
- }
-
gVLManager.cleanupData(this);
// Can't do this on destruction, because the neighbor pointers might be invalid.
// This should be reference counted...
disconnectAllNeighbors();
- mCloudLayer.destroy();
LLViewerPartSim::getInstance()->cleanupRegion(this);
gObjectList.killObjects(this);
@@ -486,7 +493,6 @@ void LLViewerRegion::setOriginGlobal(const LLVector3d &origin_global)
updateRenderMatrix();
mImpl->mLandp->setOriginGlobal(origin_global);
mWind.setOriginGlobal(origin_global);
- mCloudLayer.setOriginGlobal(origin_global);
calculateCenterGlobal();
}
@@ -561,6 +567,11 @@ const std::string LLViewerRegion::getSimAccessString() const
return accessToString(mSimAccess);
}
+std::string LLViewerRegion::getLocalizedSimProductName() const
+{
+ std::string localized_spn;
+ return LLTrans::findString(localized_spn, mProductName) ? localized_spn : mProductName;
+}
// static
std::string LLViewerRegion::regionFlagsToString(U32 flags)
@@ -647,6 +658,9 @@ std::string LLViewerRegion::accessToShortString(U8 sim_access)
void LLViewerRegion::processRegionInfo(LLMessageSystem* msg, void**)
{
// send it to 'observers'
+ // *TODO: switch the floaters to using LLRegionInfoModel
+ llinfos << "Processing region info" << llendl;
+ LLRegionInfoModel::instance().update(msg);
LLFloaterGodTools::processRegionInfo(msg);
LLFloaterRegionInfo::processRegionInfo(msg);
LLFloaterReporter::processRegionInfo(msg);
@@ -709,14 +723,12 @@ void LLViewerRegion::forceUpdate()
void LLViewerRegion::connectNeighbor(LLViewerRegion *neighborp, U32 direction)
{
mImpl->mLandp->connectNeighbor(neighborp->mImpl->mLandp, direction);
- mCloudLayer.connectNeighbor(&(neighborp->mCloudLayer), direction);
}
void LLViewerRegion::disconnectAllNeighbors()
{
mImpl->mLandp->disconnectAllNeighbors();
- mCloudLayer.disconnectAllNeighbors();
}
LLVLComposition * LLViewerRegion::getComposition() const
@@ -893,14 +905,9 @@ U32 LLViewerRegion::getPacketsLost() const
}
}
-void LLViewerRegion::setHttpResponderPtrNULL()
-{
- mImpl->mHttpResponderPtr = NULL;
-}
-
-const LLHTTPClient::ResponderPtr LLViewerRegion::getHttpResponderPtr() const
+S32 LLViewerRegion::getHttpResponderID() const
{
- return mImpl->mHttpResponderPtr;
+ return mImpl->mHttpResponderID;
}
BOOL LLViewerRegion::pointInRegionGlobal(const LLVector3d &point_global) const
@@ -1186,6 +1193,7 @@ LLViewerRegion::eCacheUpdateResult LLViewerRegion::cacheFullUpdate(LLViewerObjec
eCacheUpdateResult result = CACHE_UPDATE_ADDED;
if (mImpl->mCacheMap.size() > MAX_OBJECT_CACHE_ENTRIES)
{
+ delete mImpl->mCacheMap.begin()->second ;
mImpl->mCacheMap.erase(mImpl->mCacheMap.begin());
result = CACHE_UPDATE_REPLACED;
@@ -1479,22 +1487,9 @@ void LLViewerRegion::unpackRegionHandshake()
msg->sendReliable(host);
}
-void LLViewerRegion::setSeedCapability(const std::string& url)
-{
- if (getCapability("Seed") == url)
- {
- // llwarns << "Ignoring duplicate seed capability" << llendl;
- return;
- }
-
- delete mImpl->mEventPoll;
- mImpl->mEventPoll = NULL;
-
- mImpl->mCapabilities.clear();
- setCapability("Seed", url);
-
- LLSD capabilityNames = LLSD::emptyArray();
+void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
+{
capabilityNames.append("AccountingParcel");
capabilityNames.append("AccountingSelection");
capabilityNames.append("AttachmentResources");
@@ -1504,6 +1499,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("DispatchRegionInfo");
capabilityNames.append("EstateChangeInfo");
capabilityNames.append("EventQueueGet");
+ capabilityNames.append("EnvironmentSettings");
capabilityNames.append("ObjectMedia");
capabilityNames.append("ObjectMediaNavigate");
@@ -1525,6 +1521,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("LandResources");
capabilityNames.append("MapLayer");
capabilityNames.append("MapLayerGod");
+ capabilityNames.append("MeshUploadFlag");
capabilityNames.append("NewFileAgentInventory");
capabilityNames.append("ParcelPropertiesUpdate");
capabilityNames.append("ParcelMediaURLFilterList");
@@ -1566,46 +1563,118 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
// Please add new capabilities alphabetically to reduce
// merge conflicts.
+}
+
+void LLViewerRegion::setSeedCapability(const std::string& url)
+{
+ if (getCapability("Seed") == url)
+ {
+ // llwarns << "Ignoring duplicate seed capability" << llendl;
+ return;
+ }
+
+ delete mImpl->mEventPoll;
+ mImpl->mEventPoll = NULL;
+
+ mImpl->mCapabilities.clear();
+ setCapability("Seed", url);
+
+ LLSD capabilityNames = LLSD::emptyArray();
+ mImpl->buildCapabilityNames(capabilityNames);
llinfos << "posting to seed " << url << llendl;
- mImpl->mHttpResponderPtr = BaseCapabilitiesComplete::build(this) ;
- LLHTTPClient::post(url, capabilityNames, mImpl->mHttpResponderPtr);
+ S32 id = ++mImpl->mHttpResponderID;
+ LLHTTPClient::post(url, capabilityNames,
+ BaseCapabilitiesComplete::build(getHandle(), id),
+ LLSD(), CAP_REQUEST_TIMEOUT);
+}
+
+S32 LLViewerRegion::getNumSeedCapRetries()
+{
+ return mImpl->mSeedCapAttempts;
+}
+
+void LLViewerRegion::failedSeedCapability()
+{
+ // Should we retry asking for caps?
+ mImpl->mSeedCapAttempts++;
+ std::string url = getCapability("Seed");
+ if ( url.empty() )
+ {
+ LL_WARNS2("AppInit", "Capabilities") << "Failed to get seed capabilities, and can not determine url for retries!" << LL_ENDL;
+ return;
+ }
+ // After a few attempts, continue login. We will keep trying once in-world:
+ if ( mImpl->mSeedCapAttempts >= mImpl->mSeedCapMaxAttemptsBeforeLogin &&
+ STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState() )
+ {
+ LLStartUp::setStartupState( STATE_SEED_CAP_GRANTED );
+ }
+
+ if ( mImpl->mSeedCapAttempts < mImpl->mSeedCapMaxAttempts)
+ {
+ LLSD capabilityNames = LLSD::emptyArray();
+ mImpl->buildCapabilityNames(capabilityNames);
+
+ llinfos << "posting to seed " << url << " (retry "
+ << mImpl->mSeedCapAttempts << ")" << llendl;
+
+ S32 id = ++mImpl->mHttpResponderID;
+ LLHTTPClient::post(url, capabilityNames,
+ BaseCapabilitiesComplete::build(getHandle(), id),
+ LLSD(), CAP_REQUEST_TIMEOUT);
+ }
+ else
+ {
+ // *TODO: Give a user pop-up about this error?
+ LL_WARNS2("AppInit", "Capabilities") << "Failed to get seed capabilities from '" << url << "' after " << mImpl->mSeedCapAttempts << " attempts. Giving up!" << LL_ENDL;
+ }
}
class SimulatorFeaturesReceived : public LLHTTPClient::Responder
{
LOG_CLASS(SimulatorFeaturesReceived);
public:
- SimulatorFeaturesReceived(LLViewerRegion* region)
- : mRegion(region)
+ SimulatorFeaturesReceived(const std::string& retry_url, U64 region_handle,
+ S32 attempt = 0, S32 max_attempts = MAX_CAP_REQUEST_ATTEMPTS)
+ : mRetryURL(retry_url), mRegionHandle(region_handle), mAttempt(attempt), mMaxAttempts(max_attempts)
{ }
void error(U32 statusNum, const std::string& reason)
{
LL_WARNS2("AppInit", "SimulatorFeatures") << statusNum << ": " << reason << LL_ENDL;
+ retry();
}
-
+
void result(const LLSD& content)
{
- if(!mRegion) //region is removed or responder is not created.
+ LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
+ if(!regionp) //region is removed or responder is not created.
{
+ LL_WARNS2("AppInit", "SimulatorFeatures") << "Received results for region that no longer exists!" << LL_ENDL;
return ;
}
- mRegion->setSimulatorFeatures(content);
+ regionp->setSimulatorFeatures(content);
}
-
- static boost::intrusive_ptr<SimulatorFeaturesReceived> build(
- LLViewerRegion* region)
- {
- return boost::intrusive_ptr<SimulatorFeaturesReceived>(
- new SimulatorFeaturesReceived(region));
- }
-
+
private:
- LLViewerRegion* mRegion;
+ void retry()
+ {
+ if (mAttempt < mMaxAttempts)
+ {
+ mAttempt++;
+ LL_WARNS2("AppInit", "SimulatorFeatures") << "Re-trying '" << mRetryURL << "'. Retry #" << mAttempt << LL_ENDL;
+ LLHTTPClient::get(mRetryURL, new SimulatorFeaturesReceived(*this), LLSD(), CAP_REQUEST_TIMEOUT);
+ }
+ }
+
+ std::string mRetryURL;
+ U64 mRegionHandle;
+ S32 mAttempt;
+ S32 mMaxAttempts;
};
@@ -1624,7 +1693,7 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u
else if (name == "SimulatorFeatures")
{
// kick off a request for simulator features
- LLHTTPClient::get(url, new SimulatorFeaturesReceived(this));
+ LLHTTPClient::get(url, new SimulatorFeaturesReceived(url, getHandle()), LLSD(), CAP_REQUEST_TIMEOUT);
}
else
{
@@ -1660,6 +1729,21 @@ bool LLViewerRegion::capabilitiesReceived() const
void LLViewerRegion::setCapabilitiesReceived(bool received)
{
mCapabilitiesReceived = received;
+
+ // Tell interested parties that we've received capabilities,
+ // so that they can safely use getCapability().
+ if (received)
+ {
+ mCapabilitiesReceivedSignal(getRegionID());
+
+ // This is a single-shot signal. Forget callbacks to save resources.
+ mCapabilitiesReceivedSignal.disconnect_all_slots();
+ }
+}
+
+boost::signals2::connection LLViewerRegion::setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb)
+{
+ return mCapabilitiesReceivedSignal.connect(cb);
}
void LLViewerRegion::logActiveCapabilities() const
@@ -1699,6 +1783,18 @@ bool LLViewerRegion::objectIsReturnable(const LLVector3& pos, const std::vector<
&& mParcelOverlay->encroachesOwned(boxes)) );
}
+bool LLViewerRegion::childrenObjectReturnable( const std::vector<LLBBox>& boxes ) const
+{
+ bool result = false;
+ result = ( mParcelOverlay && mParcelOverlay->encroachesOnUnowned( boxes ) ) ? 1 : 0;
+ return result;
+}
+
+void LLViewerRegion::getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions )
+{
+ mImpl->mLandp->getNeighboringRegions( uniqueRegions );
+}
+
void LLViewerRegion::showReleaseNotes()
{
std::string url = this->getCapability("ServerReleaseNotes");
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 3811b989e7..ef1a6d285c 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -30,10 +30,10 @@
// A ViewerRegion is a class that contains a bunch of objects and surfaces
// that are in to a particular region.
#include <string>
+#include <boost/signals2.hpp>
#include "lldarray.h"
#include "llwind.h"
-#include "llcloud.h"
#include "llstat.h"
#include "v3dmath.h"
#include "llstring.h"
@@ -81,7 +81,6 @@ public:
PARTITION_WATER,
PARTITION_TREE,
PARTITION_PARTICLE,
- PARTITION_CLOUD,
PARTITION_GRASS,
PARTITION_VOLUME,
PARTITION_BRIDGE,
@@ -90,6 +89,8 @@ public:
NUM_PARTITIONS
} eObjectPartitions;
+ typedef boost::signals2::signal<void(const LLUUID& region_id)> caps_received_signal_t;
+
LLViewerRegion(const U64 &handle,
const LLHost &host,
const U32 surface_grid_width,
@@ -191,7 +192,7 @@ public:
S32 getSimCPURatio() const { return mCPURatio; }
const std::string& getSimColoName() const { return mColoName; }
const std::string& getSimProductSKU() const { return mProductSKU; }
- const std::string& getSimProductName() const { return mProductName; }
+ std::string getLocalizedSimProductName() const;
// Returns "Sandbox", "Expensive", etc.
static std::string regionFlagsToString(U32 flags);
@@ -225,11 +226,12 @@ public:
U32 getPacketsLost() const;
- void setHttpResponderPtrNULL();
- const LLHTTPClient::ResponderPtr getHttpResponderPtr() const;
+ S32 getHttpResponderID() const;
// Get/set named capability URLs for this region.
void setSeedCapability(const std::string& url);
+ void failedSeedCapability();
+ S32 getNumSeedCapRetries();
void setCapability(const std::string& name, const std::string& url);
// implements LLCapabilityProvider
virtual std::string getCapability(const std::string& name) const;
@@ -237,6 +239,7 @@ public:
// has region received its final (not seed) capability list?
bool capabilitiesReceived() const;
void setCapabilitiesReceived(bool received);
+ boost::signals2::connection setCapabilitiesReceivedCallback(const caps_received_signal_t::slot_type& cb);
static bool isSpecialCapabilityName(const std::string &name);
void logActiveCapabilities() const;
@@ -318,6 +321,10 @@ public:
LLSpatialPartition* getSpatialPartition(U32 type);
bool objectIsReturnable(const LLVector3& pos, const std::vector<LLBBox>& boxes) const;
+ bool childrenObjectReturnable( const std::vector<LLBBox>& boxes ) const;
+
+ void getNeighboringRegions( std::vector<LLViewerRegion*>& uniqueRegions );
+
public:
struct CompareDistance
{
@@ -336,7 +343,6 @@ protected:
public:
LLWind mWind;
- LLCloudLayer mCloudLayer;
LLViewerParcelOverlay *mParcelOverlay;
LLStat mBitStat;
@@ -404,6 +410,7 @@ private:
bool mAlive; // can become false if circuit disconnects
bool mCapabilitiesReceived;
+ caps_received_signal_t mCapabilitiesReceivedSignal;
BOOL mReleaseNotesRequested;
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
index da4d0548d0..36106752a2 100644
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -61,18 +61,31 @@ BOOL LLViewerShaderMgr::sInitialized = FALSE;
LLVector4 gShinyOrigin;
+//utility shaders
+LLGLSLShader gOcclusionProgram;
+LLGLSLShader gCustomAlphaProgram;
+LLGLSLShader gGlowCombineProgram;
+LLGLSLShader gTwoTextureAddProgram;
+
//object shaders
LLGLSLShader gObjectSimpleProgram;
LLGLSLShader gObjectSimpleWaterProgram;
+LLGLSLShader gObjectSimpleAlphaMaskProgram;
+LLGLSLShader gObjectSimpleWaterAlphaMaskProgram;
LLGLSLShader gObjectFullbrightProgram;
LLGLSLShader gObjectFullbrightWaterProgram;
+LLGLSLShader gObjectFullbrightAlphaMaskProgram;
+LLGLSLShader gObjectFullbrightWaterAlphaMaskProgram;
LLGLSLShader gObjectFullbrightShinyProgram;
LLGLSLShader gObjectFullbrightShinyWaterProgram;
LLGLSLShader gObjectShinyProgram;
LLGLSLShader gObjectShinyWaterProgram;
+LLGLSLShader gObjectBumpProgram;
LLGLSLShader gObjectSimpleNonIndexedProgram;
LLGLSLShader gObjectSimpleNonIndexedWaterProgram;
+LLGLSLShader gObjectAlphaMaskNonIndexedProgram;
+LLGLSLShader gObjectAlphaMaskNonIndexedWaterProgram;
LLGLSLShader gObjectFullbrightNonIndexedProgram;
LLGLSLShader gObjectFullbrightNonIndexedWaterProgram;
LLGLSLShader gObjectFullbrightShinyNonIndexedProgram;
@@ -105,6 +118,7 @@ LLGLSLShader gAvatarProgram;
LLGLSLShader gAvatarWaterProgram;
LLGLSLShader gAvatarEyeballProgram;
LLGLSLShader gAvatarPickProgram;
+LLGLSLShader gImpostorProgram;
// WindLight shader handles
LLGLSLShader gWLSkyProgram;
@@ -121,7 +135,9 @@ LLGLSLShader gDeferredImpostorProgram;
LLGLSLShader gDeferredEdgeProgram;
LLGLSLShader gDeferredWaterProgram;
LLGLSLShader gDeferredDiffuseProgram;
+LLGLSLShader gDeferredDiffuseAlphaMaskProgram;
LLGLSLShader gDeferredNonIndexedDiffuseProgram;
+LLGLSLShader gDeferredNonIndexedDiffuseAlphaMaskProgram;
LLGLSLShader gDeferredSkinnedDiffuseProgram;
LLGLSLShader gDeferredSkinnedBumpProgram;
LLGLSLShader gDeferredSkinnedAlphaProgram;
@@ -138,6 +154,7 @@ LLGLSLShader gDeferredSunProgram;
LLGLSLShader gDeferredBlurLightProgram;
LLGLSLShader gDeferredSoftenProgram;
LLGLSLShader gDeferredShadowProgram;
+LLGLSLShader gDeferredShadowAlphaMaskProgram;
LLGLSLShader gDeferredAvatarShadowProgram;
LLGLSLShader gDeferredAttachmentShadowProgram;
LLGLSLShader gDeferredAlphaProgram;
@@ -166,14 +183,29 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gWLCloudProgram);
mShaderList.push_back(&gAvatarProgram);
mShaderList.push_back(&gObjectShinyProgram);
+ mShaderList.push_back(&gObjectShinyNonIndexedProgram);
mShaderList.push_back(&gWaterProgram);
mShaderList.push_back(&gAvatarEyeballProgram);
mShaderList.push_back(&gObjectSimpleProgram);
+ mShaderList.push_back(&gImpostorProgram);
+ mShaderList.push_back(&gObjectSimpleAlphaMaskProgram);
+ mShaderList.push_back(&gObjectBumpProgram);
+ mShaderList.push_back(&gUIProgram);
+ mShaderList.push_back(&gCustomAlphaProgram);
+ mShaderList.push_back(&gGlowCombineProgram);
+ mShaderList.push_back(&gTwoTextureAddProgram);
+ mShaderList.push_back(&gSolidColorProgram);
+ mShaderList.push_back(&gOcclusionProgram);
mShaderList.push_back(&gObjectFullbrightProgram);
+ mShaderList.push_back(&gObjectFullbrightAlphaMaskProgram);
mShaderList.push_back(&gObjectFullbrightShinyProgram);
mShaderList.push_back(&gObjectFullbrightShinyWaterProgram);
mShaderList.push_back(&gObjectSimpleNonIndexedProgram);
+ mShaderList.push_back(&gObjectSimpleNonIndexedWaterProgram);
+ mShaderList.push_back(&gObjectAlphaMaskNonIndexedProgram);
+ mShaderList.push_back(&gObjectAlphaMaskNonIndexedWaterProgram);
mShaderList.push_back(&gObjectFullbrightNonIndexedProgram);
+ mShaderList.push_back(&gObjectFullbrightNonIndexedWaterProgram);
mShaderList.push_back(&gObjectFullbrightShinyNonIndexedProgram);
mShaderList.push_back(&gObjectFullbrightShinyNonIndexedWaterProgram);
mShaderList.push_back(&gSkinnedObjectSimpleProgram);
@@ -188,8 +220,11 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
mShaderList.push_back(&gTerrainWaterProgram);
mShaderList.push_back(&gObjectSimpleWaterProgram);
mShaderList.push_back(&gObjectFullbrightWaterProgram);
+ mShaderList.push_back(&gObjectSimpleWaterAlphaMaskProgram);
+ mShaderList.push_back(&gObjectFullbrightWaterAlphaMaskProgram);
mShaderList.push_back(&gAvatarWaterProgram);
mShaderList.push_back(&gObjectShinyWaterProgram);
+ mShaderList.push_back(&gObjectShinyNonIndexedWaterProgram);
mShaderList.push_back(&gUnderWaterProgram);
mShaderList.push_back(&gDeferredSunProgram);
mShaderList.push_back(&gDeferredBlurLightProgram);
@@ -410,9 +445,13 @@ void LLViewerShaderMgr::setShaders()
}
mMaxAvatarShaderLevel = 0;
+ LLGLSLShader::sNoFixedFunction = false;
if (LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable")
&& gSavedSettings.getBOOL("VertexShaderEnable"))
{
+ //using shaders, disable fixed function
+ LLGLSLShader::sNoFixedFunction = true;
+
S32 light_class = 2;
S32 env_class = 2;
S32 obj_class = 2;
@@ -554,6 +593,7 @@ void LLViewerShaderMgr::setShaders()
}
else
{
+ LLGLSLShader::sNoFixedFunction = false;
gPipeline.mVertexShadersEnabled = FALSE;
gPipeline.mVertexShadersLoaded = 0;
mVertexShaderLevel[SHADER_LIGHTING] = 0;
@@ -568,6 +608,7 @@ void LLViewerShaderMgr::setShaders()
}
else
{
+ LLGLSLShader::sNoFixedFunction = false;
gPipeline.mVertexShadersEnabled = FALSE;
gPipeline.mVertexShadersLoaded = 0;
mVertexShaderLevel[SHADER_LIGHTING] = 0;
@@ -591,10 +632,23 @@ void LLViewerShaderMgr::setShaders()
void LLViewerShaderMgr::unloadShaders()
{
+ gOcclusionProgram.unload();
+ gUIProgram.unload();
+ gCustomAlphaProgram.unload();
+ gGlowCombineProgram.unload();
+ gTwoTextureAddProgram.unload();
+ gSolidColorProgram.unload();
+
gObjectSimpleProgram.unload();
+ gImpostorProgram.unload();
+ gObjectSimpleAlphaMaskProgram.unload();
+ gObjectBumpProgram.unload();
gObjectSimpleWaterProgram.unload();
+ gObjectSimpleWaterAlphaMaskProgram.unload();
gObjectFullbrightProgram.unload();
gObjectFullbrightWaterProgram.unload();
+ gObjectFullbrightAlphaMaskProgram.unload();
+ gObjectFullbrightWaterAlphaMaskProgram.unload();
gObjectShinyProgram.unload();
gObjectFullbrightShinyProgram.unload();
@@ -603,6 +657,8 @@ void LLViewerShaderMgr::unloadShaders()
gObjectSimpleNonIndexedProgram.unload();
gObjectSimpleNonIndexedWaterProgram.unload();
+ gObjectAlphaMaskNonIndexedProgram.unload();
+ gObjectAlphaMaskNonIndexedWaterProgram.unload();
gObjectFullbrightNonIndexedProgram.unload();
gObjectFullbrightNonIndexedWaterProgram.unload();
@@ -641,6 +697,8 @@ void LLViewerShaderMgr::unloadShaders()
gPostNightVisionProgram.unload();
gDeferredDiffuseProgram.unload();
+ gDeferredDiffuseAlphaMaskProgram.unload();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.unload();
gDeferredNonIndexedDiffuseProgram.unload();
gDeferredSkinnedDiffuseProgram.unload();
gDeferredSkinnedBumpProgram.unload();
@@ -722,6 +780,11 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
shaders.reserve(13);
S32 ch = gGLManager.mNumTextureImageUnits-1;
+ if (gGLManager.mGLVersion < 3.1f)
+ { //force to 1 texture index channel for old drivers
+ ch = 1;
+ }
+
std::vector<S32> index_channels;
index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/atmosphericsVarsF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/gammaF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT]) );
@@ -729,17 +792,25 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
index_channels.push_back(-1); shaders.push_back( make_pair( "windlight/transportF.glsl", mVertexShaderLevel[SHADER_WINDLIGHT] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "environment/waterFogF.glsl", mVertexShaderLevel[SHADER_WATER] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightAlphaMaskNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightNonIndexedAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightWaterAlphaMaskNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightShinyNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightShinyNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightShinyWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(-1); shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterNonIndexedF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightWaterAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
+ index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightWaterAlphaMaskF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightFullbrightShinyF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
index_channels.push_back(ch); shaders.push_back( make_pair( "lighting/lightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
@@ -985,6 +1056,8 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
gDeferredTreeProgram.unload();
gDeferredDiffuseProgram.unload();
+ gDeferredDiffuseAlphaMaskProgram.unload();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.unload();
gDeferredNonIndexedDiffuseProgram.unload();
gDeferredSkinnedDiffuseProgram.unload();
gDeferredSkinnedBumpProgram.unload();
@@ -1000,6 +1073,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
gDeferredBlurLightProgram.unload();
gDeferredSoftenProgram.unload();
gDeferredShadowProgram.unload();
+ gDeferredShadowAlphaMaskProgram.unload();
gDeferredAvatarShadowProgram.unload();
gDeferredAttachmentShadowProgram.unload();
gDeferredAvatarProgram.unload();
@@ -1040,6 +1114,27 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredDiffuseAlphaMaskProgram.mName = "Deferred Diffuse Alpha Mask Shader";
+ gDeferredDiffuseAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseAlphaMaskIndexedF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredDiffuseAlphaMaskProgram.mFeatures.mIndexedTextureChannels = gGLManager.mNumTextureImageUnits;
+ gDeferredDiffuseAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredDiffuseAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mName = "Deferred Diffuse Non-Indexed Alpha Mask Shader";
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/diffuseAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredNonIndexedDiffuseAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredNonIndexedDiffuseAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gDeferredNonIndexedDiffuseProgram.mName = "Non Indexed Deferred Diffuse Shader";
gDeferredNonIndexedDiffuseProgram.mShaderFiles.clear();
gDeferredNonIndexedDiffuseProgram.mShaderFiles.push_back(make_pair("deferred/diffuseV.glsl", GL_VERTEX_SHADER_ARB));
@@ -1209,7 +1304,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
if (multisample)
{
- fragment = "deferred/sunlightSSAOMSF.glsl";
+ fragment = "deferred/sunLightSSAOMSF.glsl";
}
else
{
@@ -1220,7 +1315,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
{
if (multisample)
{
- fragment = "deferred/sunlightMSF.glsl";
+ fragment = "deferred/sunLightMSF.glsl";
}
else
{
@@ -1364,6 +1459,16 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
if (success)
{
+ gDeferredShadowAlphaMaskProgram.mName = "Deferred Shadow Alpha Mask Shader";
+ gDeferredShadowAlphaMaskProgram.mShaderFiles.clear();
+ gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskV.glsl", GL_VERTEX_SHADER_ARB));
+ gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gDeferredShadowAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+ success = gDeferredShadowAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gDeferredAvatarShadowProgram.mName = "Deferred Avatar Shadow Shader";
gDeferredAvatarShadowProgram.mFeatures.hasSkinning = true;
gDeferredAvatarShadowProgram.mShaderFiles.clear();
@@ -1576,15 +1681,23 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectFullbrightShinyWaterProgram.unload();
gObjectShinyWaterProgram.unload();
gObjectSimpleProgram.unload();
+ gImpostorProgram.unload();
+ gObjectSimpleAlphaMaskProgram.unload();
+ gObjectBumpProgram.unload();
gObjectSimpleWaterProgram.unload();
+ gObjectSimpleWaterAlphaMaskProgram.unload();
gObjectFullbrightProgram.unload();
+ gObjectFullbrightAlphaMaskProgram.unload();
gObjectFullbrightWaterProgram.unload();
+ gObjectFullbrightWaterAlphaMaskProgram.unload();
gObjectShinyNonIndexedProgram.unload();
gObjectFullbrightShinyNonIndexedProgram.unload();
gObjectFullbrightShinyNonIndexedWaterProgram.unload();
gObjectShinyNonIndexedWaterProgram.unload();
gObjectSimpleNonIndexedProgram.unload();
gObjectSimpleNonIndexedWaterProgram.unload();
+ gObjectAlphaMaskNonIndexedProgram.unload();
+ gObjectAlphaMaskNonIndexedWaterProgram.unload();
gObjectFullbrightNonIndexedProgram.unload();
gObjectFullbrightNonIndexedWaterProgram.unload();
gSkinnedObjectSimpleProgram.unload();
@@ -1634,6 +1747,41 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectAlphaMaskNonIndexedProgram.mName = "Non indexed alpha mask Shader";
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.calculatesLighting = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasGamma = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasAtmospherics = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasLighting = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.disableTextureIndex = true;
+ gObjectAlphaMaskNonIndexedProgram.mFeatures.hasAlphaMask = true;
+ gObjectAlphaMaskNonIndexedProgram.mShaderFiles.clear();
+ gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectAlphaMaskNonIndexedProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gObjectAlphaMaskNonIndexedWaterProgram.mName = "Non indexed alpha mask Water Shader";
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.calculatesLighting = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasWaterFog = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasAtmospherics = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasLighting = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.disableTextureIndex = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mFeatures.hasAlphaMask = true;
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.clear();
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ gObjectAlphaMaskNonIndexedWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ success = gObjectAlphaMaskNonIndexedWaterProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectFullbrightNonIndexedProgram.mName = "Non Indexed Fullbright Shader";
gObjectFullbrightNonIndexedProgram.mFeatures.calculatesAtmospherics = true;
gObjectFullbrightNonIndexedProgram.mFeatures.hasGamma = true;
@@ -1732,6 +1880,17 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gImpostorProgram.mName = "Impostor Shader";
+ gImpostorProgram.mFeatures.disableTextureIndex = true;
+ gImpostorProgram.mShaderFiles.clear();
+ gImpostorProgram.mShaderFiles.push_back(make_pair("objects/impostorV.glsl", GL_VERTEX_SHADER_ARB));
+ gImpostorProgram.mShaderFiles.push_back(make_pair("objects/impostorF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gImpostorProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gImpostorProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectSimpleProgram.mName = "Simple Shader";
gObjectSimpleProgram.mFeatures.calculatesLighting = true;
gObjectSimpleProgram.mFeatures.calculatesAtmospherics = true;
@@ -1745,6 +1904,39 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectSimpleProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
success = gObjectSimpleProgram.createShader(NULL, NULL);
}
+
+ if (success)
+ {
+ gObjectSimpleAlphaMaskProgram.mName = "Simple Alpha Mask Shader";
+ gObjectSimpleAlphaMaskProgram.mFeatures.calculatesLighting = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasGamma = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasAtmospherics = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasLighting = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectSimpleAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectSimpleAlphaMaskProgram.mShaderFiles.clear();
+ gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectSimpleAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectSimpleAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectSimpleAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gObjectBumpProgram.mName = "Bump Shader";
+ /*gObjectBumpProgram.mFeatures.calculatesLighting = true;
+ gObjectBumpProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectBumpProgram.mFeatures.hasGamma = true;
+ gObjectBumpProgram.mFeatures.hasAtmospherics = true;
+ gObjectBumpProgram.mFeatures.hasLighting = true;
+ gObjectBumpProgram.mFeatures.mIndexedTextureChannels = 0;*/
+ gObjectBumpProgram.mShaderFiles.clear();
+ gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectBumpProgram.mShaderFiles.push_back(make_pair("objects/bumpF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectBumpProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectBumpProgram.createShader(NULL, NULL);
+ }
if (success)
{
@@ -1765,6 +1957,24 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectSimpleWaterAlphaMaskProgram.mName = "Simple Water Alpha Mask Shader";
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.calculatesLighting = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasWaterFog = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasAtmospherics = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasLighting = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectSimpleWaterAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectSimpleWaterAlphaMaskProgram.mShaderFiles.clear();
+ gObjectSimpleWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectSimpleWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/simpleWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectSimpleWaterAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ gObjectSimpleWaterAlphaMaskProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ success = gObjectSimpleWaterAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectFullbrightProgram.mName = "Fullbright Shader";
gObjectFullbrightProgram.mFeatures.calculatesAtmospherics = true;
gObjectFullbrightProgram.mFeatures.hasGamma = true;
@@ -1796,6 +2006,39 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success)
{
+ gObjectFullbrightAlphaMaskProgram.mName = "Fullbright Alpha Mask Shader";
+ gObjectFullbrightAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.hasGamma = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.hasTransport = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.isFullbright = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectFullbrightAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectFullbrightAlphaMaskProgram.mShaderFiles.clear();
+ gObjectFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectFullbrightAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ success = gObjectFullbrightAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gObjectFullbrightWaterAlphaMaskProgram.mName = "Fullbright Water Shader";
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.isFullbright = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.hasWaterFog = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.hasTransport = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.hasAlphaMask = true;
+ gObjectFullbrightWaterAlphaMaskProgram.mFeatures.mIndexedTextureChannels = 0;
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderFiles.clear();
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderFiles.push_back(make_pair("objects/fullbrightWaterF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+ gObjectFullbrightWaterAlphaMaskProgram.mShaderGroup = LLGLSLShader::SG_WATER;
+ success = gObjectFullbrightWaterAlphaMaskProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
gObjectShinyProgram.mName = "Shiny Shader";
gObjectShinyProgram.mFeatures.calculatesAtmospherics = true;
gObjectShinyProgram.mFeatures.calculatesLighting = true;
@@ -2038,6 +2281,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarProgram.mFeatures.hasGamma = true;
gAvatarProgram.mFeatures.hasAtmospherics = true;
gAvatarProgram.mFeatures.hasLighting = true;
+ gAvatarProgram.mFeatures.hasAlphaMask = true;
gAvatarProgram.mFeatures.disableTextureIndex = true;
gAvatarProgram.mShaderFiles.clear();
gAvatarProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2054,6 +2298,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarWaterProgram.mFeatures.hasWaterFog = true;
gAvatarWaterProgram.mFeatures.hasAtmospherics = true;
gAvatarWaterProgram.mFeatures.hasLighting = true;
+ gAvatarWaterProgram.mFeatures.hasAlphaMask = true;
gAvatarWaterProgram.mFeatures.disableTextureIndex = true;
gAvatarWaterProgram.mShaderFiles.clear();
gAvatarWaterProgram.mShaderFiles.push_back(make_pair("avatar/avatarV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2092,6 +2337,7 @@ BOOL LLViewerShaderMgr::loadShadersAvatar()
gAvatarEyeballProgram.mFeatures.hasGamma = true;
gAvatarEyeballProgram.mFeatures.hasAtmospherics = true;
gAvatarEyeballProgram.mFeatures.hasLighting = true;
+ gAvatarEyeballProgram.mFeatures.hasAlphaMask = true;
gAvatarEyeballProgram.mFeatures.disableTextureIndex = true;
gAvatarEyeballProgram.mShaderFiles.clear();
gAvatarEyeballProgram.mShaderFiles.push_back(make_pair("avatar/eyeballV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2130,6 +2376,85 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
success = gHighlightProgram.createShader(NULL, NULL);
}
+ if (success)
+ {
+ gUIProgram.mName = "UI Shader";
+ gUIProgram.mShaderFiles.clear();
+ gUIProgram.mShaderFiles.push_back(make_pair("interface/uiV.glsl", GL_VERTEX_SHADER_ARB));
+ gUIProgram.mShaderFiles.push_back(make_pair("interface/uiF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gUIProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gUIProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gCustomAlphaProgram.mName = "Custom Alpha Shader";
+ gCustomAlphaProgram.mShaderFiles.clear();
+ gCustomAlphaProgram.mShaderFiles.push_back(make_pair("interface/customalphaV.glsl", GL_VERTEX_SHADER_ARB));
+ gCustomAlphaProgram.mShaderFiles.push_back(make_pair("interface/customalphaF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gCustomAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gCustomAlphaProgram.createShader(NULL, NULL);
+ }
+
+ if (success)
+ {
+ gGlowCombineProgram.mName = "Glow Combine Shader";
+ gGlowCombineProgram.mShaderFiles.clear();
+ gGlowCombineProgram.mShaderFiles.push_back(make_pair("interface/glowcombineV.glsl", GL_VERTEX_SHADER_ARB));
+ gGlowCombineProgram.mShaderFiles.push_back(make_pair("interface/glowcombineF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gGlowCombineProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gGlowCombineProgram.createShader(NULL, NULL);
+ if (success)
+ {
+ gGlowCombineProgram.bind();
+ gGlowCombineProgram.uniform1i("glowMap", 0);
+ gGlowCombineProgram.uniform1i("screenMap", 1);
+ gGlowCombineProgram.unbind();
+ }
+ }
+
+ if (success)
+ {
+ gTwoTextureAddProgram.mName = "Two Texture Add Shader";
+ gTwoTextureAddProgram.mShaderFiles.clear();
+ gTwoTextureAddProgram.mShaderFiles.push_back(make_pair("interface/twotextureaddV.glsl", GL_VERTEX_SHADER_ARB));
+ gTwoTextureAddProgram.mShaderFiles.push_back(make_pair("interface/twotextureaddF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gTwoTextureAddProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gTwoTextureAddProgram.createShader(NULL, NULL);
+ if (success)
+ {
+ gTwoTextureAddProgram.bind();
+ gTwoTextureAddProgram.uniform1i("tex0", 0);
+ gTwoTextureAddProgram.uniform1i("tex1", 1);
+ }
+ }
+
+ if (success)
+ {
+ gSolidColorProgram.mName = "Solid Color Shader";
+ gSolidColorProgram.mShaderFiles.clear();
+ gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorV.glsl", GL_VERTEX_SHADER_ARB));
+ gSolidColorProgram.mShaderFiles.push_back(make_pair("interface/solidcolorF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gSolidColorProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gSolidColorProgram.createShader(NULL, NULL);
+ if (success)
+ {
+ gSolidColorProgram.bind();
+ gSolidColorProgram.uniform1i("tex0", 0);
+ gSolidColorProgram.unbind();
+ }
+ }
+
+ if (success)
+ {
+ gOcclusionProgram.mName = "Occlusion Shader";
+ gOcclusionProgram.mShaderFiles.clear();
+ gOcclusionProgram.mShaderFiles.push_back(make_pair("interface/occlusionV.glsl", GL_VERTEX_SHADER_ARB));
+ gOcclusionProgram.mShaderFiles.push_back(make_pair("interface/occlusionF.glsl", GL_FRAGMENT_SHADER_ARB));
+ gOcclusionProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+ success = gOcclusionProgram.createShader(NULL, NULL);
+ }
+
if( !success )
{
mVertexShaderLevel[SHADER_INTERFACE] = 0;
@@ -2184,6 +2509,16 @@ std::string LLViewerShaderMgr::getShaderDirPrefix(void)
void LLViewerShaderMgr::updateShaderUniforms(LLGLSLShader * shader)
{
- LLWLParamManager::instance()->updateShaderUniforms(shader);
- LLWaterParamManager::instance()->updateShaderUniforms(shader);
+ LLWLParamManager::getInstance()->updateShaderUniforms(shader);
+ LLWaterParamManager::getInstance()->updateShaderUniforms(shader);
+}
+
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::beginShaders() const
+{
+ return mShaderList.begin();
+}
+
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::endShaders() const
+{
+ return mShaderList.end();
}
diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h
index 6ecba65470..d4040f11e1 100644
--- a/indra/newview/llviewershadermgr.h
+++ b/indra/newview/llviewershadermgr.h
@@ -241,20 +241,12 @@ public:
base_iter_t mIter;
};
- shader_iter beginShaders() const
- {
- return mShaderList.begin();
- }
-
- shader_iter endShaders() const
- {
- return mShaderList.end();
- }
+ shader_iter beginShaders() const;
+ shader_iter endShaders() const;
+ /* virtual */ std::string getShaderDirPrefix(void);
- /* virtual */ std::string getShaderDirPrefix(void); // Virtual
-
- /* virtual */ void updateShaderUniforms(LLGLSLShader * shader); // Virtual
+ /* virtual */ void updateShaderUniforms(LLGLSLShader * shader);
private:
@@ -295,15 +287,30 @@ inline bool operator != (LLViewerShaderMgr::shader_iter const & a, LLViewerShade
extern LLVector4 gShinyOrigin;
+//utility shaders
+extern LLGLSLShader gOcclusionProgram;
+extern LLGLSLShader gCustomAlphaProgram;
+extern LLGLSLShader gGlowCombineProgram;
+
+//output tex0[tc0] + tex1[tc1]
+extern LLGLSLShader gTwoTextureAddProgram;
+
//object shaders
extern LLGLSLShader gObjectSimpleProgram;
+extern LLGLSLShader gObjectSimpleAlphaMaskProgram;
extern LLGLSLShader gObjectSimpleWaterProgram;
+extern LLGLSLShader gObjectSimpleWaterAlphaMaskProgram;
extern LLGLSLShader gObjectSimpleNonIndexedProgram;
extern LLGLSLShader gObjectSimpleNonIndexedWaterProgram;
+extern LLGLSLShader gObjectAlphaMaskNonIndexedProgram;
+extern LLGLSLShader gObjectAlphaMaskNonIndexedWaterProgram;
extern LLGLSLShader gObjectFullbrightProgram;
extern LLGLSLShader gObjectFullbrightWaterProgram;
+extern LLGLSLShader gObjectFullbrightAlphaMaskProgram;
+extern LLGLSLShader gObjectFullbrightWaterAlphaMaskProgram;
extern LLGLSLShader gObjectFullbrightNonIndexedProgram;
extern LLGLSLShader gObjectFullbrightNonIndexedWaterProgram;
+extern LLGLSLShader gObjectBumpProgram;
extern LLGLSLShader gObjectSimpleLODProgram;
extern LLGLSLShader gObjectFullbrightLODProgram;
@@ -344,6 +351,7 @@ extern LLGLSLShader gAvatarProgram;
extern LLGLSLShader gAvatarWaterProgram;
extern LLGLSLShader gAvatarEyeballProgram;
extern LLGLSLShader gAvatarPickProgram;
+extern LLGLSLShader gImpostorProgram;
// WindLight shader handles
extern LLGLSLShader gWLSkyProgram;
@@ -358,6 +366,8 @@ extern LLGLSLShader gDeferredImpostorProgram;
extern LLGLSLShader gDeferredEdgeProgram;
extern LLGLSLShader gDeferredWaterProgram;
extern LLGLSLShader gDeferredDiffuseProgram;
+extern LLGLSLShader gDeferredDiffuseAlphaMaskProgram;
+extern LLGLSLShader gDeferredNonIndexedDiffuseAlphaMaskProgram;
extern LLGLSLShader gDeferredNonIndexedDiffuseProgram;
extern LLGLSLShader gDeferredSkinnedDiffuseProgram;
extern LLGLSLShader gDeferredSkinnedBumpProgram;
@@ -376,6 +386,7 @@ extern LLGLSLShader gDeferredBlurLightProgram;
extern LLGLSLShader gDeferredAvatarProgram;
extern LLGLSLShader gDeferredSoftenProgram;
extern LLGLSLShader gDeferredShadowProgram;
+extern LLGLSLShader gDeferredShadowAlphaMaskProgram;
extern LLGLSLShader gDeferredPostGIProgram;
extern LLGLSLShader gDeferredPostProgram;
extern LLGLSLShader gDeferredPostNoDoFProgram;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 4da0f80a00..280337be0f 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -66,6 +66,7 @@
// statics
LLPointer<LLViewerTexture> LLViewerTexture::sNullImagep = NULL;
+LLPointer<LLViewerTexture> LLViewerTexture::sBlackImagep = NULL;
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sMissingAssetImagep = NULL;
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sWhiteImagep = NULL;
LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultImagep = NULL;
@@ -295,17 +296,23 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const
void LLViewerTextureManager::init()
{
- LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,3);
- raw->clear(0x77, 0x77, 0x77, 0xFF);
- LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ;
-
-#if 1
- LLPointer<LLViewerFetchedTexture> imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT);
- LLViewerFetchedTexture::sDefaultImagep = imagep;
+ {
+ LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,3);
+ raw->clear(0x77, 0x77, 0x77, 0xFF);
+ LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ;
+ }
const S32 dim = 128;
LLPointer<LLImageRaw> image_raw = new LLImageRaw(dim,dim,3);
U8* data = image_raw->getData();
+
+ memset(data, 0, dim * dim * 3) ;
+ LLViewerTexture::sBlackImagep = LLViewerTextureManager::getLocalTexture(image_raw.get(), TRUE) ;
+
+#if 1
+ LLPointer<LLViewerFetchedTexture> imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT);
+ LLViewerFetchedTexture::sDefaultImagep = imagep;
+
for (S32 i = 0; i<dim; i++)
{
for (S32 j = 0; j<dim; j++)
@@ -359,6 +366,7 @@ void LLViewerTextureManager::cleanup()
LLImageGL::sDefaultGLTexture = NULL ;
LLViewerTexture::sNullImagep = NULL;
+ LLViewerTexture::sBlackImagep = NULL;
LLViewerFetchedTexture::sDefaultImagep = NULL;
LLViewerFetchedTexture::sSmokeImagep = NULL;
LLViewerFetchedTexture::sMissingAssetImagep = NULL;
@@ -599,7 +607,7 @@ bool LLViewerTexture::bindDefaultImage(S32 stage)
}
if (!res && LLViewerTexture::sNullImagep.notNull() && (this != LLViewerTexture::sNullImagep))
{
- res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sNullImagep) ;
+ res = gGL.getTexUnit(stage)->bind(LLViewerTexture::sNullImagep);
}
if (!res)
{
@@ -3101,9 +3109,16 @@ void LLViewerLODTexture::processTextureStats()
{
mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ;
}
+ else if(LLPipeline::sMemAllocationThrottled)//release memory of large textures by decrease their resolutions.
+ {
+ if(scaleDown())
+ {
+ mDesiredDiscardLevel = mCachedRawDiscardLevel ;
+ }
+ }
}
-void LLViewerLODTexture::scaleDown()
+bool LLViewerLODTexture::scaleDown()
{
if(hasGLTexture() && mCachedRawDiscardLevel > getDiscardLevel())
{
@@ -3114,7 +3129,10 @@ void LLViewerLODTexture::scaleDown()
{
tester->setStablizingTime() ;
}
+
+ return true ;
}
+ return false ;
}
//----------------------------------------------------------------------------------------------
//end of LLViewerLODTexture
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index c5b8c8923a..a4a5ae0a5b 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -330,6 +330,7 @@ public:
static BOOL sUseTextureAtlas ;
static LLPointer<LLViewerTexture> sNullImagep; // Null texture for non-textured objects.
+ static LLPointer<LLViewerTexture> sBlackImagep; // Texture to show NOTHING (pure black)
};
@@ -596,7 +597,7 @@ public:
private:
void init(bool firstinit) ;
- void scaleDown() ;
+ bool scaleDown() ;
private:
F32 mDiscardVirtualSize; // Virtual size used to calculate desired discard
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index a1d9434d44..30ef8b8a29 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -76,7 +76,6 @@ LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE);
LLViewerTextureList gTextureList;
static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images");
-U32 LLViewerTextureList::sRenderThreadID = 0 ;
///////////////////////////////////////////////////////////////////////////////
LLViewerTextureList::LLViewerTextureList()
@@ -90,7 +89,6 @@ LLViewerTextureList::LLViewerTextureList()
void LLViewerTextureList::init()
{
- sRenderThreadID = LLThread::currentID() ;
mInitialized = TRUE ;
sNumImages = 0;
mUpdateStats = TRUE;
@@ -117,7 +115,7 @@ void LLViewerTextureList::doPreloadImages()
// Set the "white" image
LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
-
+ LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
LLUIImageList* image_list = LLUIImageList::getInstance();
image_list->initFromFile();
@@ -502,10 +500,9 @@ LLViewerFetchedTexture *LLViewerTextureList::findImage(const LLUUID &image_id)
return iter->second;
}
-void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thread_id)
+void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
{
llassert_always(mInitialized) ;
- llassert_always(sRenderThreadID == thread_id);
llassert(image);
if (image->isInImageList())
{
@@ -519,10 +516,9 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thre
image->setInImageList(TRUE) ;
}
-void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id)
+void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
{
llassert_always(mInitialized) ;
- llassert_always(sRenderThreadID == thread_id);
llassert(image);
if (!image->isInImageList())
{
@@ -659,10 +655,7 @@ void LLViewerTextureList::updateImagesDecodePriorities()
const F32 LAZY_FLUSH_TIMEOUT = 30.f; // stop decoding
const F32 MAX_INACTIVE_TIME = 50.f; // actually delete
S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference
- if (imagep->hasCallbacks())
- {
- min_refs++; // Add an extra reference if we're on the loaded callback list
- }
+
S32 num_refs = imagep->getNumRefs();
if (num_refs == min_refs)
{
@@ -719,9 +712,9 @@ void LLViewerTextureList::updateImagesDecodePriorities()
if ((decode_priority_test < old_priority_test * .8f) ||
(decode_priority_test > old_priority_test * 1.25f))
{
- removeImageFromList(imagep, sRenderThreadID);
+ removeImageFromList(imagep);
imagep->setDecodePriority(decode_priority);
- addImageToList(imagep, sRenderThreadID);
+ addImageToList(imagep);
}
update_counter--;
}
@@ -893,8 +886,6 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
{
LLTimer timer;
- llassert_always(sRenderThreadID == LLThread::currentID());
-
// Update texture stats and priorities
std::vector<LLPointer<LLViewerFetchedTexture> > image_list;
for (image_priority_list_t::iterator iter = mImageList.begin();
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index d02b6be6b5..7f4dd0ae88 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -121,8 +121,8 @@ private:
void addImage(LLViewerFetchedTexture *image);
void deleteImage(LLViewerFetchedTexture *image);
- void addImageToList(LLViewerFetchedTexture *image, U32 thread_id = LLThread::currentID());
- void removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id = LLThread::currentID());
+ void addImageToList(LLViewerFetchedTexture *image);
+ void removeImageFromList(LLViewerFetchedTexture *image);
LLViewerFetchedTexture * getImage(const LLUUID &image_id,
BOOL usemipmap = TRUE,
@@ -208,9 +208,6 @@ public:
private:
static S32 sNumImages;
static void (*sUUIDCallback)(void**, const LLUUID &);
-
- //debug use
- static U32 sRenderThreadID;
};
class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList>
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index b1441cc281..5893259d96 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -528,8 +528,8 @@ public:
addText(xpos,ypos, llformat("%s streaming cost: %.1f", label, cost));
ypos += y_inc;
- addText(xpos, ypos, llformat(" %.1f KTris, %.1f/%.1f KB, %d objects",
- count/1024.f, visible_bytes/1024.f, total_bytes/1024.f, object_count));
+ addText(xpos, ypos, llformat(" %.3f KTris, %.1f/%.1f KB, %d objects",
+ count/1000.f, visible_bytes/1024.f, total_bytes/1024.f, object_count));
ypos += y_inc;
}
@@ -662,6 +662,17 @@ public:
addText(xpos, ypos, llformat("%d %d %d %d", color[0], color[1], color[2], color[3]));
ypos += y_inc;
}
+
+ if (gSavedSettings.getBOOL("DebugShowPrivateMem"))
+ {
+ LLPrivateMemoryPoolManager::getInstance()->updateStatistics() ;
+ addText(xpos, ypos, llformat("Total Reserved(KB): %d", LLPrivateMemoryPoolManager::getInstance()->mTotalReservedSize / 1024));
+ ypos += y_inc;
+
+ addText(xpos, ypos, llformat("Total Allocated(KB): %d", LLPrivateMemoryPoolManager::getInstance()->mTotalAllocatedSize / 1024));
+ ypos += y_inc;
+ }
+
// only display these messages if we are actually rendering beacons at this moment
if (LLPipeline::getRenderBeacons(NULL) && LLFloaterReg::instanceVisible("beacons"))
{
@@ -726,19 +737,6 @@ public:
}
}
- if (gSavedSettings.getBOOL("DebugShowUploadCost"))
- {
- addText(xpos, ypos, llformat(" Meshes: L$%d", gPipeline.mDebugMeshUploadCost));
- ypos += y_inc/2;
- addText(xpos, ypos, llformat(" Sculpties: L$%d", gPipeline.mDebugSculptUploadCost));
- ypos += y_inc/2;
- addText(xpos, ypos, llformat(" Textures: L$%d", gPipeline.mDebugTextureUploadCost));
- ypos += y_inc/2;
- addText(xpos, ypos, "Upload Cost: ");
-
- ypos += y_inc;
- }
-
//temporary hack to give feedback on mesh upload progress
if (!gMeshRepo.mUploads.empty())
{
@@ -747,10 +745,8 @@ public:
{
LLMeshUploadThread* thread = *iter;
- addText(xpos, ypos, llformat("Mesh Upload -- price quote: %d:%d | upload: %d:%d | create: %d",
- thread->mPendingConfirmations, thread->mUploadQ.size()+thread->mTextureQ.size(),
- thread->mPendingUploads, thread->mConfirmedQ.size()+thread->mConfirmedTextureQ.size(),
- thread->mInstanceQ.size()));
+ addText(xpos, ypos, llformat("Mesh Uploads: %d",
+ thread->mPendingUploads));
ypos += y_inc;
}
}
@@ -1578,6 +1574,25 @@ LLViewerWindow::LLViewerWindow(
ignore_pixel_depth,
gSavedSettings.getBOOL("RenderDeferred") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled
+ if (NULL == mWindow)
+ {
+ LLSplashScreen::update(LLTrans::getString("StartupRequireDriverUpdate"));
+
+ LL_WARNS("Window") << "Failed to create window, to be shutting Down, be sure your graphics driver is updated." << llendl ;
+
+ ms_sleep(5000) ; //wait for 5 seconds.
+
+ LLSplashScreen::update(LLTrans::getString("ShuttingDown"));
+#if LL_LINUX || LL_SOLARIS
+ llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
+ << llendl;
+#else
+ LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings"
+ << LL_ENDL;
+#endif
+ LLAppViewer::instance()->fastQuit(1);
+ }
+
if (!LLAppViewer::instance()->restoreErrorTrap())
{
LL_WARNS("Window") << " Someone took over my signal/exception handler (post createWindow)!" << LL_ENDL;
@@ -1593,19 +1608,6 @@ LLViewerWindow::LLViewerWindow(
gSavedSettings.setS32("FullScreenHeight",scr.mY);
}
- if (NULL == mWindow)
- {
- LLSplashScreen::update(LLTrans::getString("ShuttingDown"));
-#if LL_LINUX || LL_SOLARIS
- llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
- << llendl;
-#else
- LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings"
- << LL_ENDL;
-#endif
- LLAppViewer::instance()->fastQuit(1);
- }
-
// Get the real window rect the window was created with (since there are various OS-dependent reasons why
// the size of a window or fullscreen context may have been adjusted slightly...)
F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor");
@@ -1639,6 +1641,7 @@ LLViewerWindow::LLViewerWindow(
}
LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable"), gSavedSettings.getBOOL("RenderVBOMappingDisable"));
LL_INFOS("RenderInit") << "LLVertexBuffer initialization done." << LL_ENDL ;
+ gGL.init() ;
if (LLFeatureManager::getInstance()->isSafe()
|| (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion())
@@ -1979,7 +1982,10 @@ void LLViewerWindow::shutdownViews()
// destroy the nav bar, not currently part of gViewerWindow
// *TODO: Make LLNavigationBar part of gViewerWindow
+ if (LLNavigationBar::instanceExists())
+ {
delete LLNavigationBar::getInstance();
+ }
// destroy menus after instantiating navbar above, as it needs
// access to gMenuHolder
@@ -2032,15 +2038,17 @@ void LLViewerWindow::shutdownGL()
llinfos << "All textures and llimagegl images are destroyed!" << llendl ;
llinfos << "Cleaning up select manager" << llendl;
- LLSelectMgr::getInstance()->cleanup();
-
- LLVertexBuffer::cleanupClass();
+ LLSelectMgr::getInstance()->cleanup();
llinfos << "Stopping GL during shutdown" << llendl;
stopGL(FALSE);
stop_glerror();
gGL.shutdown();
+
+ LLVertexBuffer::cleanupClass();
+
+ llinfos << "LLVertexBuffer cleaned." << llendl ;
}
// shutdownViews() and shutdownGL() need to be called first
@@ -2293,6 +2301,11 @@ void LLViewerWindow::draw()
// Draw all nested UI views.
// No translation needed, this view is glued to 0,0
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+
gGL.pushMatrix();
LLUI::pushMatrix();
{
@@ -2367,6 +2380,11 @@ void LLViewerWindow::draw()
LLUI::popMatrix();
gGL.popMatrix();
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.unbind();
+ }
+
//#if LL_DEBUG
LLView::sIsDrawing = FALSE;
//#endif
@@ -3142,6 +3160,12 @@ void LLViewerWindow::updateLayout()
//gMenuBarView->setItemVisible("BuildTools", gFloaterTools->getVisible());
}
+ LLFloaterBuildOptions* build_options_floater = LLFloaterReg::getTypedInstance<LLFloaterBuildOptions>("build_options");
+ if (build_options_floater && build_options_floater->getVisible())
+ {
+ build_options_floater->updateGridMode();
+ }
+
// Always update console
if(gConsole)
{
@@ -4138,6 +4162,19 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
{
return FALSE;
}
+ //check if there is enough memory for the snapshot image
+ if(LLPipeline::sMemAllocationThrottled)
+ {
+ return FALSE ; //snapshot taking is disabled due to memory restriction.
+ }
+ if(image_width * image_height > (1 << 22)) //if snapshot image is larger than 2K by 2K
+ {
+ if(!LLMemory::tryToAlloc(NULL, image_width * image_height * 3))
+ {
+ llwarns << "No enough memory to take the snapshot with size (w : h): " << image_width << " : " << image_height << llendl ;
+ return FALSE ; //there is no enough memory for taking this snapshot.
+ }
+ }
// PRE SNAPSHOT
gDisplaySwapBuffers = FALSE;
@@ -4512,6 +4549,14 @@ void LLViewerWindow::setup3DViewport(S32 x_offset, S32 y_offset)
glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
}
+void LLViewerWindow::revealIntroPanel()
+{
+ if (mProgressView)
+ {
+ mProgressView->revealIntroPanel();
+ }
+}
+
void LLViewerWindow::setShowProgress(const BOOL show)
{
if (mProgressView)
@@ -4520,6 +4565,14 @@ void LLViewerWindow::setShowProgress(const BOOL show)
}
}
+void LLViewerWindow::setStartupComplete()
+{
+ if (mProgressView)
+ {
+ mProgressView->setStartupComplete();
+ }
+}
+
BOOL LLViewerWindow::getShowProgress() const
{
return (mProgressView && mProgressView->getVisible());
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index df6928aa1d..edd241a742 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -271,6 +271,8 @@ public:
void setProgressMessage(const std::string& msg);
void setProgressCancelButtonVisible( BOOL b, const std::string& label = LLStringUtil::null );
LLProgressView *getProgressView() const;
+ void revealIntroPanel();
+ void setStartupComplete();
void updateObjectUnderCursor();
diff --git a/indra/newview/llvlmanager.cpp b/indra/newview/llvlmanager.cpp
index 25f2687fe2..d8de979f56 100644
--- a/indra/newview/llvlmanager.cpp
+++ b/indra/newview/llvlmanager.cpp
@@ -94,7 +94,7 @@ void LLVLManager::unpackData(const S32 num_packets)
}
else if (CLOUD_LAYER_CODE == datap->mType)
{
- datap->mRegionp->mCloudLayer.decompress(bit_pack, &goph);
+
}
}
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 1b53348b43..7c6a815def 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1123,14 +1123,20 @@ void LLVOAvatar::initClass()
// Process XML data
// avatar_skeleton.xml
- llassert(!sAvatarSkeletonInfo);
+ if (sAvatarSkeletonInfo)
+ { //this can happen if a login attempt failed
+ delete sAvatarSkeletonInfo;
+ }
sAvatarSkeletonInfo = new LLVOAvatarSkeletonInfo;
if (!sAvatarSkeletonInfo->parseXml(sSkeletonXMLTree.getRoot()))
{
llerrs << "Error parsing skeleton XML file: " << skeleton_path << llendl;
}
// parse avatar_lad.xml
- llassert(!sAvatarXmlInfo);
+ if (sAvatarXmlInfo)
+ { //this can happen if a login attempt failed
+ deleteAndClear(sAvatarXmlInfo);
+ }
sAvatarXmlInfo = new LLVOAvatarXmlInfo;
if (!sAvatarXmlInfo->parseXmlSkeletonNode(root))
{
@@ -4219,7 +4225,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
bool should_alpha_mask = shouldAlphaMask();
LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
- if (should_alpha_mask)
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
{
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
@@ -4248,7 +4254,10 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
}
}
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
if (!LLDrawPoolAvatar::sSkipTransparent || LLPipeline::sImpostorRender)
{
@@ -4331,7 +4340,7 @@ U32 LLVOAvatar::renderRigid()
bool should_alpha_mask = shouldAlphaMask();
LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
- if (should_alpha_mask)
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
{
gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
}
@@ -4342,7 +4351,10 @@ U32 LLVOAvatar::renderRigid()
num_indices += mMeshLOD[MESH_ID_EYEBALL_RIGHT]->render(mAdjustedPixelArea, TRUE, mIsDummy);
}
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ if (should_alpha_mask && !LLGLSLShader::sNoFixedFunction)
+ {
+ gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+ }
return num_indices;
}
@@ -7270,9 +7282,9 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
llinfos << "Re-requesting AvatarAppearance for object: " << getID() << llendl;
LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(getID());
mRuthTimer.reset();
- }
- else
- {
+ }
+ else
+ {
llinfos << "That's okay, we already have a non-default shape for object: " << getID() << llendl;
// we don't really care.
}
@@ -7494,8 +7506,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
// static
void LLVOAvatar::dumpArchetypeXML( void* )
{
- LLAPRFile outfile;
- outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB );
+ LLAPRFile outfile(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER, "new archetype.xml"), LL_APR_WB);
apr_file_t* file = outfile.getFileHandle() ;
if (!file)
{
@@ -8242,6 +8253,8 @@ U32 LLVOAvatar::getPartitionType() const
//static
void LLVOAvatar::updateImpostors()
{
+ LLCharacter::sAllowInstancesChange = FALSE ;
+
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
iter != LLCharacter::sInstances.end(); ++iter)
{
@@ -8251,6 +8264,8 @@ void LLVOAvatar::updateImpostors()
gPipeline.generateImpostor(avatar);
}
}
+
+ LLCharacter::sAllowInstancesChange = TRUE ;
}
BOOL LLVOAvatar::isImpostor() const
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
index f0b5b50feb..baf01ec066 100644
--- a/indra/newview/llvocache.cpp
+++ b/indra/newview/llvocache.cpp
@@ -268,7 +268,6 @@ LLVOCache::LLVOCache():
mCacheSize(1)
{
mEnabled = gSavedSettings.getBOOL("ObjectCacheEnabled");
- mLocalAPRFilePoolp = new LLVolatileAPRPool() ;
}
LLVOCache::~LLVOCache()
@@ -278,7 +277,6 @@ LLVOCache::~LLVOCache()
writeCacheHeader();
clearCacheInMemory();
}
- delete mLocalAPRFilePoolp;
}
void LLVOCache::setDirNames(ELLPath location)
@@ -435,7 +433,7 @@ void LLVOCache::removeFromCache(HeaderEntryInfo* entry)
std::string filename;
getObjectCacheFilename(entry->mHandle, filename);
- LLAPRFile::remove(filename, mLocalAPRFilePoolp);
+ LLAPRFile::remove(filename);
entry->mTime = INVALID_TIME ;
updateEntry(entry) ; //update the head file.
}
@@ -452,9 +450,9 @@ void LLVOCache::readCacheHeader()
clearCacheInMemory();
bool success = true ;
- if (LLAPRFile::isExist(mHeaderFileName, mLocalAPRFilePoolp))
+ if (LLAPRFile::isExist(mHeaderFileName))
{
- LLAPRFile apr_file(mHeaderFileName, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(mHeaderFileName, APR_READ|APR_BINARY);
//read the meta element
success = check_read(&apr_file, &mMetaInfo, sizeof(HeaderMetaInfo)) ;
@@ -539,7 +537,7 @@ void LLVOCache::writeCacheHeader()
bool success = true ;
{
- LLAPRFile apr_file(mHeaderFileName, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(mHeaderFileName, APR_CREATE|APR_WRITE|APR_BINARY);
//write the meta element
success = check_write(&apr_file, &mMetaInfo, sizeof(HeaderMetaInfo)) ;
@@ -577,7 +575,7 @@ void LLVOCache::writeCacheHeader()
BOOL LLVOCache::updateEntry(const HeaderEntryInfo* entry)
{
- LLAPRFile apr_file(mHeaderFileName, APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(mHeaderFileName, APR_WRITE|APR_BINARY);
apr_file.seek(APR_SET, entry->mIndex * sizeof(HeaderEntryInfo) + sizeof(HeaderMetaInfo)) ;
return check_write(&apr_file, (void*)entry, sizeof(HeaderEntryInfo)) ;
@@ -603,7 +601,7 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
{
std::string filename;
getObjectCacheFilename(handle, filename);
- LLAPRFile apr_file(filename, APR_READ|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(filename, APR_READ|APR_BINARY);
LLUUID cache_id ;
success = check_read(&apr_file, cache_id.mData, UUID_BYTES) ;
@@ -621,16 +619,20 @@ void LLVOCache::readFromCache(U64 handle, const LLUUID& id, LLVOCacheEntry::voca
S32 num_entries;
success = check_read(&apr_file, &num_entries, sizeof(S32)) ;
- for (S32 i = 0; success && i < num_entries; i++)
+ if(success)
{
- LLVOCacheEntry* entry = new LLVOCacheEntry(&apr_file);
- if (!entry->getLocalID())
+ for (S32 i = 0; i < num_entries; i++)
{
- llwarns << "Aborting cache file load for " << filename << ", cache file corruption!" << llendl;
- delete entry ;
- success = false ;
+ LLVOCacheEntry* entry = new LLVOCacheEntry(&apr_file);
+ if (!entry->getLocalID())
+ {
+ llwarns << "Aborting cache file load for " << filename << ", cache file corruption!" << llendl;
+ delete entry ;
+ success = false ;
+ break ;
+ }
+ cache_entry_map[entry->getLocalID()] = entry;
}
- cache_entry_map[entry->getLocalID()] = entry;
}
}
}
@@ -722,7 +724,7 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry:
{
std::string filename;
getObjectCacheFilename(handle, filename);
- LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY, mLocalAPRFilePoolp);
+ LLAPRFile apr_file(filename, APR_CREATE|APR_WRITE|APR_BINARY);
success = check_write(&apr_file, (void*)id.mData, UUID_BYTES) ;
@@ -747,4 +749,3 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry:
return ;
}
-
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
index 14e3b4c793..13651c6779 100644
--- a/indra/newview/llvocache.h
+++ b/indra/newview/llvocache.h
@@ -142,7 +142,6 @@ private:
U32 mNumEntries;
std::string mHeaderFileName ;
std::string mObjectCacheDirName;
- LLVolatileAPRPool* mLocalAPRFilePoolp ;
header_entry_queue_t mHeaderEntryQueue;
handle_entry_map_t mHandleEntryMap;
diff --git a/indra/newview/llvoclouds.cpp b/indra/newview/llvoclouds.cpp
deleted file mode 100644
index 478708cd78..0000000000
--- a/indra/newview/llvoclouds.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-/**
- * @file llvoclouds.cpp
- * @brief Implementation of LLVOClouds class which is a derivation fo LLViewerObject
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#include "llviewerprecompiledheaders.h"
-
-#include "llvoclouds.h"
-
-#include "lldrawpoolalpha.h"
-
-#include "llviewercontrol.h"
-
-#include "llagent.h" // to get camera position
-#include "lldrawable.h"
-#include "llface.h"
-#include "llprimitive.h"
-#include "llsky.h"
-#include "llviewercamera.h"
-#include "llviewertexturelist.h"
-#include "llviewerobjectlist.h"
-#include "llviewerregion.h"
-#include "llvosky.h"
-#include "llworld.h"
-#include "pipeline.h"
-#include "llspatialpartition.h"
-
-LLUUID gCloudTextureID = IMG_CLOUD_POOF;
-
-
-LLVOClouds::LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
-: LLAlphaObject(id, LL_VO_CLOUDS, regionp)
-{
- mCloudGroupp = NULL;
- mbCanSelect = FALSE;
- setNumTEs(1);
- LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture(gCloudTextureID);
- image->setBoostLevel(LLViewerTexture::BOOST_CLOUDS);
- setTEImage(0, image);
-}
-
-
-LLVOClouds::~LLVOClouds()
-{
-}
-
-
-BOOL LLVOClouds::isActive() const
-{
- return TRUE;
-}
-
-BOOL LLVOClouds::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
-{
- static LLFastTimer::DeclareTimer ftm("Idle Clouds");
- LLFastTimer t(ftm);
-
- if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
- {
- return TRUE;
- }
-
- // Set dirty flag (so renderer will rebuild primitive)
- if (mDrawable)
- {
- gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_VOLUME, TRUE);
- }
-
- return TRUE;
-}
-
-
-void LLVOClouds::setPixelAreaAndAngle(LLAgent &agent)
-{
- mAppAngle = 50;
- mPixelArea = 1500*100;
-}
-
-void LLVOClouds::updateTextures()
-{
- getTEImage(0)->addTextureStats(mPixelArea);
-}
-
-LLDrawable* LLVOClouds::createDrawable(LLPipeline *pipeline)
-{
- pipeline->allocDrawable(this);
- mDrawable->setLit(FALSE);
- mDrawable->setRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
-
- return mDrawable;
-}
-
-static LLFastTimer::DeclareTimer FTM_UPDATE_CLOUDS("Update Clouds");
-
-BOOL LLVOClouds::updateGeometry(LLDrawable *drawable)
-{
- LLFastTimer ftm(FTM_UPDATE_CLOUDS);
- if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)))
- {
- return TRUE;
- }
-
- if (drawable->isVisible())
- {
- dirtySpatialGroup(TRUE);
- }
-
- LLFace *facep;
-
- S32 num_faces = mCloudGroupp->getNumPuffs();
-
- if (num_faces > drawable->getNumFaces())
- {
- drawable->setNumFacesFast(num_faces, NULL, getTEImage(0));
- }
-
- mDepth = (getPositionAgent()-LLViewerCamera::getInstance()->getOrigin())*LLViewerCamera::getInstance()->getAtAxis();
-
- S32 face_indx = 0;
- for ( ; face_indx < num_faces; face_indx++)
- {
- facep = drawable->getFace(face_indx);
- if (!facep)
- {
- llwarns << "No facep for index " << face_indx << llendl;
- continue;
- }
-
- facep->setSize(4, 6);
-
- facep->setTEOffset(face_indx);
- facep->setTexture(getTEImage(0));
- const LLCloudPuff &puff = mCloudGroupp->getPuff(face_indx);
- const LLVector3 puff_pos_agent = gAgent.getPosAgentFromGlobal(puff.getPositionGlobal());
- facep->mCenterLocal = puff_pos_agent;
- /// Update cloud color based on sun color.
- LLColor4 float_color(LLColor3(gSky.getSunDiffuseColor() + gSky.getSunAmbientColor()),puff.getAlpha());
- facep->setFaceColor(float_color);
- }
- for ( ; face_indx < drawable->getNumFaces(); face_indx++)
- {
- facep = drawable->getFace(face_indx);
- if (!facep)
- {
- llwarns << "No facep for index " << face_indx << llendl;
- continue;
- }
-
- facep->setTEOffset(face_indx);
- facep->setSize(0,0);
- }
-
- drawable->movePartition();
-
- return TRUE;
-}
-
-F32 LLVOClouds::getPartSize(S32 idx)
-{
- return (CLOUD_PUFF_HEIGHT+CLOUD_PUFF_WIDTH)*0.5f;
-}
-
-void LLVOClouds::getGeometry(S32 te,
- LLStrider<LLVector3>& verticesp,
- LLStrider<LLVector3>& normalsp,
- LLStrider<LLVector2>& texcoordsp,
- LLStrider<LLColor4U>& colorsp,
- LLStrider<U16>& indicesp)
-{
-
- if (te >= mCloudGroupp->getNumPuffs())
- {
- return;
- }
-
- LLDrawable* drawable = mDrawable;
- LLFace *facep = drawable->getFace(te);
-
- if (!facep->hasGeometry())
- {
- return;
- }
-
- LLVector3 normal(0.f,0.f,-1.f);
-
- const LLCloudPuff &puff = mCloudGroupp->getPuff(te);
- S32 index_offset = facep->getGeomIndex();
- LLColor4 float_color(LLColor3(gSky.getSunDiffuseColor() + gSky.getSunAmbientColor()),puff.getAlpha());
- LLColor4U color;
- color.setVec(float_color);
- facep->setFaceColor(float_color);
-
-
- LLVector3 up;
- LLVector3 right;
- LLVector3 at;
-
- const LLVector3& puff_pos_agent = facep->mCenterLocal;
- LLVector2 uvs[4];
-
- uvs[0].setVec(0.f, 1.f);
- uvs[1].setVec(0.f, 0.f);
- uvs[2].setVec(1.f, 1.f);
- uvs[3].setVec(1.f, 0.f);
-
- LLVector3 vtx[4];
-
- at = LLViewerCamera::getInstance()->getAtAxis();
- right = at % LLVector3(0.f, 0.f, 1.f);
- right.normVec();
- up = right % at;
- up.normVec();
- right *= 0.5f*CLOUD_PUFF_WIDTH;
- up *= 0.5f*CLOUD_PUFF_HEIGHT;;
-
- *colorsp++ = color;
- *colorsp++ = color;
- *colorsp++ = color;
- *colorsp++ = color;
-
- vtx[0] = puff_pos_agent - right + up;
- vtx[1] = puff_pos_agent - right - up;
- vtx[2] = puff_pos_agent + right + up;
- vtx[3] = puff_pos_agent + right - up;
-
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[0];
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[1];
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[2];
- verticesp->mV[3] = 0.f;
- *verticesp++ = vtx[3];
-
- *texcoordsp++ = uvs[0];
- *texcoordsp++ = uvs[1];
- *texcoordsp++ = uvs[2];
- *texcoordsp++ = uvs[3];
-
- *normalsp++ = normal;
- *normalsp++ = normal;
- *normalsp++ = normal;
- *normalsp++ = normal;
-
- *indicesp++ = index_offset + 0;
- *indicesp++ = index_offset + 1;
- *indicesp++ = index_offset + 2;
-
- *indicesp++ = index_offset + 1;
- *indicesp++ = index_offset + 3;
- *indicesp++ = index_offset + 2;
-}
-
-U32 LLVOClouds::getPartitionType() const
-{
- return LLViewerRegion::PARTITION_CLOUD;
-}
-
-// virtual
-void LLVOClouds::updateDrawable(BOOL force_damped)
-{
- // Force an immediate rebuild on any update
- if (mDrawable.notNull())
- {
- mDrawable->updateXform(TRUE);
- gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL, TRUE);
- }
- clearChanged(SHIFTED);
-}
-
-LLCloudPartition::LLCloudPartition()
-{
- mDrawableType = LLPipeline::RENDER_TYPE_CLOUDS;
- mPartitionType = LLViewerRegion::PARTITION_CLOUD;
-}
-
diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h
deleted file mode 100644
index 430923a108..0000000000
--- a/indra/newview/llvoclouds.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * @file llvoclouds.h
- * @brief Description of LLVOClouds class
- *
- * $LicenseInfo:firstyear=2001&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
-
-#ifndef LL_LLVOCLOUDS_H
-#define LL_LLVOCLOUDS_H
-
-#include "llviewerobject.h"
-#include "lltable.h"
-#include "v4coloru.h"
-
-class LLViewerTexture;
-class LLViewerCloudGroup;
-
-class LLCloudGroup;
-
-
-class LLVOClouds : public LLAlphaObject
-{
-public:
- LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp );
-
- // Initialize data that's only inited once per class.
- static void initClass();
-
- void updateDrawable(BOOL force_damped);
-
- /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);
- /*virtual*/ BOOL updateGeometry(LLDrawable *drawable);
- /*virtual*/ void getGeometry(S32 te,
- LLStrider<LLVector3>& verticesp,
- LLStrider<LLVector3>& normalsp,
- LLStrider<LLVector2>& texcoordsp,
- LLStrider<LLColor4U>& colorsp,
- LLStrider<U16>& indicesp);
-
- /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate.
- F32 getPartSize(S32 idx);
-
- /*virtual*/ void updateTextures();
- /*virtual*/ void setPixelAreaAndAngle(LLAgent &agent); // generate accurate apparent angle and area
-
- void updateFaceSize(S32 idx) { }
- BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
-
- virtual U32 getPartitionType() const;
-
- void setCloudGroup(LLCloudGroup *cgp) { mCloudGroupp = cgp; }
-protected:
- virtual ~LLVOClouds();
-
- LLCloudGroup *mCloudGroupp;
-};
-
-extern LLUUID gCloudTextureID;
-
-#endif // LL_VO_CLOUDS_H
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 6ee6822e2f..8b942fbc6a 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -195,12 +195,13 @@ static LLVivoxVoiceClientFriendsObserver *friendslist_listener = NULL;
class LLVivoxVoiceClientCapResponder : public LLHTTPClient::Responder
{
public:
- LLVivoxVoiceClientCapResponder(void){};
+ LLVivoxVoiceClientCapResponder(LLVivoxVoiceClient::state requesting_state) : mRequestingState(requesting_state) {};
virtual void error(U32 status, const std::string& reason); // called with bad status codes
virtual void result(const LLSD& content);
private:
+ LLVivoxVoiceClient::state mRequestingState; // state
};
void LLVivoxVoiceClientCapResponder::error(U32 status, const std::string& reason)
@@ -208,6 +209,7 @@ void LLVivoxVoiceClientCapResponder::error(U32 status, const std::string& reason
LL_WARNS("Voice") << "LLVivoxVoiceClientCapResponder::error("
<< status << ": " << reason << ")"
<< LL_ENDL;
+ LLVivoxVoiceClient::getInstance()->sessionTerminate();
}
void LLVivoxVoiceClientCapResponder::result(const LLSD& content)
@@ -216,12 +218,12 @@ void LLVivoxVoiceClientCapResponder::result(const LLSD& content)
LL_DEBUGS("Voice") << "ParcelVoiceInfoRequest response:" << ll_pretty_print_sd(content) << LL_ENDL;
+ std::string uri;
+ std::string credentials;
+
if ( content.has("voice_credentials") )
{
LLSD voice_credentials = content["voice_credentials"];
- std::string uri;
- std::string credentials;
-
if ( voice_credentials.has("channel_uri") )
{
uri = voice_credentials["channel_uri"].asString();
@@ -231,7 +233,12 @@ void LLVivoxVoiceClientCapResponder::result(const LLSD& content)
credentials =
voice_credentials["channel_credentials"].asString();
}
-
+ }
+
+ // set the spatial channel. If no voice credentials or uri are
+ // available, then we simply drop out of voice spatially.
+ if(LLVivoxVoiceClient::getInstance()->parcelVoiceInfoReceived(mRequestingState))
+ {
LLVivoxVoiceClient::getInstance()->setSpatialChannel(uri, credentials);
}
}
@@ -551,18 +558,27 @@ void LLVivoxVoiceClient::userAuthorized(const std::string& user_id, const LLUUID
void LLVivoxVoiceClient::requestVoiceAccountProvision(S32 retries)
{
- if ( gAgent.getRegion() && mVoiceEnabled )
+ LLViewerRegion *region = gAgent.getRegion();
+
+ if ( region && mVoiceEnabled )
{
std::string url =
- gAgent.getRegion()->getCapability(
- "ProvisionVoiceAccountRequest");
-
- if ( url == "" ) return;
-
+ region->getCapability("ProvisionVoiceAccountRequest");
+
+ if ( url.empty() )
+ {
+ // we've not received the capability yet, so return.
+ // the password will remain empty, so we'll remain in
+ // stateIdle
+ return;
+ }
+
LLHTTPClient::post(
- url,
- LLSD(),
- new LLVivoxVoiceAccountProvisionResponder(retries));
+ url,
+ LLSD(),
+ new LLVivoxVoiceAccountProvisionResponder(retries));
+
+ setState(stateConnectorStart);
}
}
@@ -673,7 +689,8 @@ std::string LLVivoxVoiceClient::state2string(LLVivoxVoiceClient::state inState)
CASE(stateVoiceFontsWait);
CASE(stateVoiceFontsReceived);
CASE(stateCreatingSessionGroup);
- CASE(stateNoChannel);
+ CASE(stateNoChannel);
+ CASE(stateRetrievingParcelVoiceInfo);
CASE(stateJoiningSession);
CASE(stateSessionJoined);
CASE(stateRunning);
@@ -741,42 +758,6 @@ void LLVivoxVoiceClient::stateMachine()
}
}
- // Check for parcel boundary crossing
- {
- LLViewerRegion *region = gAgent.getRegion();
- LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
-
- if(region && parcel)
- {
- S32 parcelLocalID = parcel->getLocalID();
- std::string regionName = region->getName();
- std::string capURI = region->getCapability("ParcelVoiceInfoRequest");
-
-// LL_DEBUGS("Voice") << "Region name = \"" << regionName << "\", parcel local ID = " << parcelLocalID << ", cap URI = \"" << capURI << "\"" << LL_ENDL;
-
- // The region name starts out empty and gets filled in later.
- // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes.
- // If either is empty, wait for the next time around.
- if(!regionName.empty())
- {
- if(!capURI.empty())
- {
- if((parcelLocalID != mCurrentParcelLocalID) || (regionName != mCurrentRegionName))
- {
- // We have changed parcels. Initiate a parcel channel lookup.
- mCurrentParcelLocalID = parcelLocalID;
- mCurrentRegionName = regionName;
-
- parcelChanged();
- }
- }
- else
- {
- LL_WARNS_ONCE("Voice") << "region doesn't have ParcelVoiceInfoRequest capability. This is normal for a short time after teleporting, but bad if it persists for very long." << LL_ENDL;
- }
- }
- }
- }
switch(getState())
{
@@ -961,7 +942,7 @@ void LLVivoxVoiceClient::stateMachine()
if(!mSocket)
{
- mSocket = LLSocket::create(gAPRPoolp, LLSocket::STREAM_TCP);
+ mSocket = LLSocket::create(LLSocket::STREAM_TCP);
}
mConnected = mSocket->blockingConnect(mDaemonHost);
@@ -1026,22 +1007,9 @@ void LLVivoxVoiceClient::stateMachine()
}
else if(!mAccountName.empty())
{
- LLViewerRegion *region = gAgent.getRegion();
-
- if(region)
+ if ( mAccountPassword.empty() )
{
- if ( region->getCapability("ProvisionVoiceAccountRequest") != "" )
- {
- if ( mAccountPassword.empty() )
- {
- requestVoiceAccountProvision();
- }
- setState(stateConnectorStart);
- }
- else
- {
- LL_WARNS_ONCE("Voice") << "region doesn't have ProvisionVoiceAccountRequest capability!" << LL_ENDL;
- }
+ requestVoiceAccountProvision();
}
}
break;
@@ -1382,11 +1350,7 @@ void LLVivoxVoiceClient::stateMachine()
setState(stateCreatingSessionGroup);
sessionGroupCreateSendMessage();
#else
- // Not using session groups -- skip the stateCreatingSessionGroup state.
- setState(stateNoChannel);
-
- // Initial kick-off of channel lookup logic
- parcelChanged();
+ setState(stateNoChannel);
#endif
break;
@@ -1399,19 +1363,29 @@ void LLVivoxVoiceClient::stateMachine()
}
else if(!mMainSessionGroupHandle.empty())
{
- setState(stateNoChannel);
-
// Start looped recording (needed for "panic button" anti-griefing tool)
recordingLoopStart();
-
- // Initial kick-off of channel lookup logic
- parcelChanged();
+ setState(stateNoChannel);
}
break;
+
+ //MARK: stateRetrievingParcelVoiceInfo
+ case stateRetrievingParcelVoiceInfo:
+ // wait until parcel voice info is received.
+ if(mSessionTerminateRequested || !mVoiceEnabled)
+ {
+ // if a terminate request has been received,
+ // bail and go to the stateSessionTerminated
+ // state. If the cap request is still pending,
+ // the responder will check to see if we've moved
+ // to a new session and won't change any state.
+ setState(stateSessionTerminated);
+ }
+ break;
+
//MARK: stateNoChannel
case stateNoChannel:
-
LL_DEBUGS("Voice") << "State No Channel" << LL_ENDL;
mSpatialJoiningNum = 0;
// Do this here as well as inside sendPositionalUpdate().
@@ -1432,6 +1406,16 @@ void LLVivoxVoiceClient::stateMachine()
{
setState(stateCaptureBufferPaused);
}
+ else if(checkParcelChanged() || (mNextAudioSession == NULL))
+ {
+ // the parcel is changed, or we have no pending audio sessions,
+ // so try to request the parcel voice info
+ // if we have the cap, we move to the appropriate state
+ if(requestParcelVoiceInfo())
+ {
+ setState(stateRetrievingParcelVoiceInfo);
+ }
+ }
else if(sessionNeedsRelog(mNextAudioSession))
{
requestRelog();
@@ -1466,32 +1450,28 @@ void LLVivoxVoiceClient::stateMachine()
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_JOINING);
setState(stateJoiningSession);
}
- else if(!mSpatialSessionURI.empty())
- {
- // If we're not headed elsewhere and have a spatial URI, return to spatial.
- switchChannel(mSpatialSessionURI, true, false, false, mSpatialSessionCredentials);
- }
break;
-
+
//MARK: stateJoiningSession
case stateJoiningSession: // waiting for session handle
-
- // If this is true we have problem with connection to voice server (EXT-4313).
- // See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM.
- if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)
+
+ // If this is true we have problem with connection to voice server (EXT-4313).
+ // See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM.
+ if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)
{
- // Notify observers to let them know there is problem with voice
- notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
- llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl;
+ // Notify observers to let them know there is problem with voice
+ notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
+ llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl;
}
-
- // Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for
- // example for p2p many times while waiting for response, so it can't be used to detect errors
- if(mAudioSession && mAudioSession->mIsSpatial)
+
+ // Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for
+ // example for p2p many times while waiting for response, so it can't be used to detect errors
+ if(mAudioSession && mAudioSession->mIsSpatial)
{
- mSpatialJoiningNum++;
+
+ mSpatialJoiningNum++;
}
-
+
// joinedAudioSession() will transition from here to stateSessionJoined.
if(!mVoiceEnabled)
{
@@ -1511,12 +1491,13 @@ void LLVivoxVoiceClient::stateMachine()
}
}
}
- break;
-
+ break;
+
//MARK: stateSessionJoined
case stateSessionJoined: // session handle received
- mSpatialJoiningNum = 0;
+
+ mSpatialJoiningNum = 0;
// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
// before continuing from this state. They can happen in either order, and if I don't wait for both, things can get stuck.
// For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined.
@@ -1553,7 +1534,7 @@ void LLVivoxVoiceClient::stateMachine()
sessionMediaDisconnectSendMessage(mAudioSession);
setState(stateSessionTerminated);
}
- }
+ }
break;
//MARK: stateRunning
@@ -1565,6 +1546,7 @@ void LLVivoxVoiceClient::stateMachine()
}
else
{
+
if(!inSpatialChannel())
{
// When in a non-spatial channel, never send positional updates.
@@ -1572,8 +1554,22 @@ void LLVivoxVoiceClient::stateMachine()
}
else
{
+ if(checkParcelChanged())
+ {
+ // if the parcel has changed, attempted to request the
+ // cap for the parcel voice info. If we can't request it
+ // then we don't have the cap URL so we do nothing and will
+ // recheck next time around
+ if(requestParcelVoiceInfo())
+ {
+ // we did get the cap, and we made the request,
+ // so go wait for the response.
+ setState(stateRetrievingParcelVoiceInfo);
+ }
+ }
// Do the calculation that enforces the listener<->speaker tether (and also updates the real camera position)
enforceTether();
+
}
// Do notifications for expiring Voice Fonts.
@@ -3840,7 +3836,7 @@ void LLVivoxVoiceClient::participantUpdatedEvent(
// also initialize voice moderate_mode depend on Agent's participant. See EXT-6937.
// *TODO: remove once a way to request the current voice channel moderation mode is implemented.
- if (gAgentID == participant->mAvatarID)
+ if (gAgent.getID() == participant->mAvatarID)
{
speaker_manager->initVoiceModerateMode();
}
@@ -4073,7 +4069,7 @@ void LLVivoxVoiceClient::messageEvent(
}
LL_DEBUGS("Voice") << "adding message, name " << session->mName << " session " << session->mIMSessionID << ", target " << session->mCallerID << LL_ENDL;
- gIMMgr->addMessage(session->mIMSessionID,
+ LLIMMgr::getInstance()->addMessage(session->mIMSessionID,
session->mCallerID,
session->mName.c_str(),
message.c_str(),
@@ -4447,24 +4443,91 @@ LLVivoxVoiceClient::participantState* LLVivoxVoiceClient::findParticipantByID(co
}
-void LLVivoxVoiceClient::parcelChanged()
+
+// Check for parcel boundary crossing
+bool LLVivoxVoiceClient::checkParcelChanged(bool update)
{
- if(getState() >= stateNoChannel)
+ LLViewerRegion *region = gAgent.getRegion();
+ LLParcel *parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+
+ if(region && parcel)
{
- // If the user is logged in, start a channel lookup.
- LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
+ S32 parcelLocalID = parcel->getLocalID();
+ std::string regionName = region->getName();
+
+ // LL_DEBUGS("Voice") << "Region name = \"" << regionName << "\", parcel local ID = " << parcelLocalID << ", cap URI = \"" << capURI << "\"" << LL_ENDL;
+
+ // The region name starts out empty and gets filled in later.
+ // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes.
+ // If either is empty, wait for the next time around.
+ if(!regionName.empty())
+ {
+ if((parcelLocalID != mCurrentParcelLocalID) || (regionName != mCurrentRegionName))
+ {
+ // We have changed parcels. Initiate a parcel channel lookup.
+ if (update)
+ {
+ mCurrentParcelLocalID = parcelLocalID;
+ mCurrentRegionName = regionName;
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+bool LLVivoxVoiceClient::parcelVoiceInfoReceived(state requesting_state)
+{
+ // pop back to the state we were in when the parcel changed and we managed to
+ // do the request.
+ if(getState() == stateRetrievingParcelVoiceInfo)
+ {
+ setState(requesting_state);
+ return true;
+ }
+ else
+ {
+ // we've dropped out of stateRetrievingParcelVoiceInfo
+ // before we received the cap result, due to a terminate
+ // or transition to a non-voice channel. Don't switch channels.
+ return false;
+ }
+}
+
+
+bool LLVivoxVoiceClient::requestParcelVoiceInfo()
+{
+ LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
- std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest");
+ // grab the cap for parcel voice info from the region.
+ LLViewerRegion * region = gAgent.getRegion();
+ if (region == NULL)
+ {
+ return false;
+ }
+ // grab the cap.
+ std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest");
+ if (!url.empty())
+ {
+ // if we've already retrieved the cap from the region, go ahead and make the request,
+ // and return true so we can go into the state that waits for the response.
+ checkParcelChanged(true);
LLSD data;
+ LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
+
LLHTTPClient::post(
- url,
- data,
- new LLVivoxVoiceClientCapResponder);
+ url,
+ data,
+ new LLVivoxVoiceClientCapResponder(getState()));
+ return true;
}
- else
+ else
{
- // The transition to stateNoChannel needs to kick this off again.
- LL_INFOS("Voice") << "not logged in yet, deferring" << LL_ENDL;
+
+ // we don't have the cap yet, so return false so the caller can try again later.
+ LL_DEBUGS("Voice") << "ParcelVoiceInfoRequest cap not yet available, deferring" << LL_ENDL;
+ return false;
}
}
@@ -4488,6 +4551,7 @@ void LLVivoxVoiceClient::switchChannel(
case stateJoinSessionFailed:
case stateJoinSessionFailedWaiting:
case stateNoChannel:
+ case stateRetrievingParcelVoiceInfo:
// Always switch to the new URI from these states.
needsSwitch = true;
break;
@@ -4560,13 +4624,10 @@ void LLVivoxVoiceClient::switchChannel(
mNextAudioSession->mIsP2P = is_p2p;
}
- if(getState() <= stateNoChannel)
+ if(getState() >= stateRetrievingParcelVoiceInfo)
{
- // We're already set up to join a channel, just needed to fill in the session URI
- }
- else
- {
- // State machine will come around and rejoin if uri/handle is not empty.
+ // If we're already in a channel, or if we're joining one, terminate
+ // so we can rejoin with the new session data.
sessionTerminate();
}
}
@@ -6267,13 +6328,13 @@ void LLVivoxVoiceClient::avatarNameResolved(const LLUUID &id, const std::string
{
session->mTextInvitePending = false;
- // We don't need to call gIMMgr->addP2PSession() here. The first incoming message will create the panel.
+ // We don't need to call LLIMMgr::getInstance()->addP2PSession() here. The first incoming message will create the panel.
}
if(session->mVoiceInvitePending)
{
session->mVoiceInvitePending = false;
- gIMMgr->inviteToSession(
+ LLIMMgr::getInstance()->inviteToSession(
session->mIMSessionID,
session->mName,
session->mCallerID,
@@ -6988,6 +7049,8 @@ LLVivoxProtocolParser::~LLVivoxProtocolParser()
XML_ParserFree(parser);
}
+static LLFastTimer::DeclareTimer FTM_VIVOX_PROCESS("Vivox Process");
+
// virtual
LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
const LLChannelDescriptors& channels,
@@ -6996,6 +7059,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
LLSD& context,
LLPumpIO* pump)
{
+ LLFastTimer t(FTM_VIVOX_PROCESS);
LLBufferStream istr(channels, buffer.get());
std::ostringstream ostr;
while (istr.good())
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index 471545de56..1142a1a49c 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -380,7 +380,8 @@ protected:
stateVoiceFontsWait, // Awaiting the list of voice fonts
stateVoiceFontsReceived, // List of voice fonts received
stateCreatingSessionGroup, // Creating the main session group
- stateNoChannel, //
+ stateNoChannel, // Need to join a channel
+ stateRetrievingParcelVoiceInfo, // waiting for parcel voice info request to return with spatial credentials
stateJoiningSession, // waiting for session handle
stateSessionJoined, // session handle received
stateRunning, // in session, steady state
@@ -620,6 +621,8 @@ protected:
void sessionMediaDisconnectSendMessage(sessionState *session);
void sessionTextDisconnectSendMessage(sessionState *session);
+
+
// Pokes the state machine to leave the audio session next time around.
void sessionTerminate();
@@ -629,6 +632,12 @@ protected:
// Does the actual work to get out of the audio session
void leaveAudioSession();
+ // notifies the voice client that we've received parcel voice info
+ bool parcelVoiceInfoReceived(state requesting_state);
+
+ friend class LLVivoxVoiceClientCapResponder;
+
+
void lookupName(const LLUUID &id);
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
void avatarNameResolved(const LLUUID &id, const std::string &name);
@@ -733,9 +742,11 @@ private:
bool mCaptureDeviceDirty;
bool mRenderDeviceDirty;
+
+ bool checkParcelChanged(bool update = false);
// This should be called when the code detects we have changed parcels.
// It initiates the call to the server that gets the parcel channel.
- void parcelChanged();
+ bool requestParcelVoiceInfo();
void switchChannel(std::string uri = std::string(), bool spatial = true, bool no_reconnect = false, bool is_p2p = false, std::string hash = "");
void joinSession(sessionState *session);
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
index 800af26b69..ef21e7373e 100644
--- a/indra/newview/llvosky.cpp
+++ b/indra/newview/llvosky.cpp
@@ -370,7 +370,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
mAtmHeight = ATM_HEIGHT;
mEarthCenter = LLVector3(mCameraPosAgent.mV[0], mCameraPosAgent.mV[1], -EARTH_RADIUS);
- mSunDefaultPosition = LLVector3(LLWLParamManager::instance()->mCurParams.getVector("lightnorm", error));
+ mSunDefaultPosition = LLVector3(LLWLParamManager::getInstance()->mCurParams.getVector("lightnorm", error));
if (gSavedSettings.getBOOL("SkyOverrideSimSunPosition"))
{
initSunDirection(mSunDefaultPosition, LLVector3(0, 0, 0));
@@ -646,24 +646,24 @@ void LLVOSky::initAtmospherics(void)
bool error;
// uniform parameters for convenience
- dome_radius = LLWLParamManager::instance()->getDomeRadius();
- dome_offset_ratio = LLWLParamManager::instance()->getDomeOffset();
- sunlight_color = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("sunlight_color", error));
- ambient = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("ambient", error));
- //lightnorm = LLWLParamManager::instance()->mCurParams.getVector("lightnorm", error);
- gamma = LLWLParamManager::instance()->mCurParams.getVector("gamma", error)[0];
- blue_density = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("blue_density", error));
- blue_horizon = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("blue_horizon", error));
- haze_density = LLWLParamManager::instance()->mCurParams.getVector("haze_density", error)[0];
- haze_horizon = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("haze_horizon", error));
- density_multiplier = LLWLParamManager::instance()->mCurParams.getVector("density_multiplier", error)[0];
- max_y = LLWLParamManager::instance()->mCurParams.getVector("max_y", error)[0];
- glow = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("glow", error));
- cloud_shadow = LLWLParamManager::instance()->mCurParams.getVector("cloud_shadow", error)[0];
- cloud_color = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("cloud_color", error));
- cloud_scale = LLWLParamManager::instance()->mCurParams.getVector("cloud_scale", error)[0];
- cloud_pos_density1 = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("cloud_pos_density1", error));
- cloud_pos_density2 = LLColor3(LLWLParamManager::instance()->mCurParams.getVector("cloud_pos_density2", error));
+ dome_radius = LLWLParamManager::getInstance()->getDomeRadius();
+ dome_offset_ratio = LLWLParamManager::getInstance()->getDomeOffset();
+ sunlight_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("sunlight_color", error));
+ ambient = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("ambient", error));
+ //lightnorm = LLWLParamManager::getInstance()->mCurParams.getVector("lightnorm", error);
+ gamma = LLWLParamManager::getInstance()->mCurParams.getVector("gamma", error)[0];
+ blue_density = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_density", error));
+ blue_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_horizon", error));
+ haze_density = LLWLParamManager::getInstance()->mCurParams.getVector("haze_density", error)[0];
+ haze_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("haze_horizon", error));
+ density_multiplier = LLWLParamManager::getInstance()->mCurParams.getVector("density_multiplier", error)[0];
+ max_y = LLWLParamManager::getInstance()->mCurParams.getVector("max_y", error)[0];
+ glow = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("glow", error));
+ cloud_shadow = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_shadow", error)[0];
+ cloud_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_color", error));
+ cloud_scale = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_scale", error)[0];
+ cloud_pos_density1 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density1", error));
+ cloud_pos_density2 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density2", error));
// light norm is different. We need the sun's direction, not the light direction
// which could be from the moon. And we need to clamp it
@@ -755,6 +755,11 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo
// project the direction ray onto the sky dome.
F32 phi = acos(Pn[1]);
F32 sinA = sin(F_PI - phi);
+ if (fabsf(sinA) < 0.01f)
+ { //avoid division by zero
+ sinA = 0.01f;
+ }
+
F32 Plen = dome_radius * sin(F_PI + phi + asin(dome_offset_ratio * sinA)) / sinA;
Pn *= Plen;
@@ -1033,7 +1038,7 @@ void LLVOSky::calcAtmospherics(void)
// Since WL scales everything by 2, there should always be at least a 2:1 brightness ratio
// between sunlight and point lights in windlight to normalize point lights.
F32 sun_dynamic_range = llmax(gSavedSettings.getF32("RenderSunDynamicRange"), 0.0001f);
- LLWLParamManager::instance()->mSceneLightStrength = 2.0f * (1.0f + sun_dynamic_range * dp);
+ LLWLParamManager::getInstance()->mSceneLightStrength = 2.0f * (1.0f + sun_dynamic_range * dp);
mSunDiffuse = vary_SunlightColor;
mSunAmbient = vary_AmbientColor;
@@ -2129,7 +2134,7 @@ void LLVOSky::updateFog(const F32 distance)
F32 depth = water_height - camera_height;
// get the water param manager variables
- float water_fog_density = LLWaterParamManager::instance()->getFogDensity();
+ float water_fog_density = LLWaterParamManager::getInstance()->getFogDensity();
LLColor4 water_fog_color = LLDrawPoolWater::sWaterFogColor.mV;
// adjust the color based on depth. We're doing linear approximations
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
index 3c7fe708e6..890861df71 100644
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -51,6 +51,7 @@
#include "llspatialpartition.h"
#include "llnotificationsutil.h"
#include "raytrace.h"
+#include "llglslshader.h"
extern LLPipeline gPipeline;
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index c5e2c56e4b..528c7acbc8 100644..100755
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -704,19 +704,22 @@ BOOL LLVOVolume::isVisible() const
return FALSE ;
}
-void LLVOVolume::updateTextureVirtualSize()
+void LLVOVolume::updateTextureVirtualSize(bool forced)
{
LLFastTimer ftm(FTM_VOLUME_TEXTURES);
// Update the pixel area of all faces
- if(!isVisible())
+ if(!forced)
{
- return ;
- }
+ if(!isVisible())
+ {
+ return ;
+ }
- if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE))
- {
- return;
+ if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE))
+ {
+ return;
+ }
}
static LLCachedControl<bool> dont_load_textures(gSavedSettings,"TextureDisable");
@@ -1017,6 +1020,9 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params_in, const S32 detail, bo
if (is404)
{
setIcon(LLViewerTextureManager::getFetchedTextureFromFile("icons/Inv_Mesh.png", TRUE, LLViewerTexture::BOOST_UI));
+ //render prim proxy when mesh loading attempts give up
+ volume_params.setSculptID(LLUUID::null, LL_SCULPT_TYPE_NONE);
+
}
if ((LLPrimitive::setVolume(volume_params, lod, (mVolumeImpl && mVolumeImpl->isVolumeUnique()))) || mSculptChanged)
@@ -3096,7 +3102,7 @@ U32 LLVOVolume::getRenderCost(std::set<LLUUID> &textures) const
F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes)
{
- F32 radius = getScale().length();
+ F32 radius = getScale().length()*0.5f;
if (isMesh())
{
@@ -3743,6 +3749,11 @@ bool can_batch_texture(LLFace* facep)
return false;
}
+ if (facep->getTexture() && facep->getTexture()->getPrimaryFormat() == GL_ALPHA)
+ { //can't batch invisiprims
+ return false;
+ }
+
if (facep->isState(LLFace::TEXTURE_ANIM) && facep->getVirtualSize() > MIN_TEX_ANIM_SIZE)
{ //texture animation breaks batches
return false;
@@ -3990,7 +4001,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
}
llassert_always(vobj);
- vobj->updateTextureVirtualSize();
+ vobj->updateTextureVirtualSize(true);
vobj->preRebuild();
drawablep->clearState(LLDrawable::HAS_ALPHA);
@@ -4361,6 +4372,8 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
group->mBuilt = 1.f;
+ std::set<LLVertexBuffer*> mapped_buffers;
+
for (LLSpatialGroup::element_iter drawable_iter = group->getData().begin(); drawable_iter != group->getData().end(); ++drawable_iter)
{
LLFastTimer t(FTM_VOLUME_GEOM_PARTIAL);
@@ -4375,35 +4388,31 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
{
LLFace* face = drawablep->getFace(i);
- if (face && face->getVertexBuffer())
+ if (face)
{
- face->getGeometryVolume(*volume, face->getTEOffset(),
- vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex());
+ LLVertexBuffer* buff = face->getVertexBuffer();
+ if (buff)
+ {
+ face->getGeometryVolume(*volume, face->getTEOffset(),
+ vobj->getRelativeXform(), vobj->getRelativeXformInvTrans(), face->getGeomIndex());
+
+ if (buff->isLocked())
+ {
+ mapped_buffers.insert(buff);
+ }
+ }
}
}
-
+
drawablep->clearState(LLDrawable::REBUILD_ALL);
}
}
- //unmap all the buffers
- for (LLSpatialGroup::buffer_map_t::iterator i = group->mBufferMap.begin(); i != group->mBufferMap.end(); ++i)
+ for (std::set<LLVertexBuffer*>::iterator iter = mapped_buffers.begin(); iter != mapped_buffers.end(); ++iter)
{
- LLSpatialGroup::buffer_texture_map_t& map = i->second;
- for (LLSpatialGroup::buffer_texture_map_t::iterator j = map.begin(); j != map.end(); ++j)
- {
- LLSpatialGroup::buffer_list_t& list = j->second;
- for (LLSpatialGroup::buffer_list_t::iterator k = list.begin(); k != list.end(); ++k)
- {
- LLVertexBuffer* buffer = *k;
- if (buffer->isLocked())
- {
- buffer->setBuffer(0);
- }
- }
- }
+ (*iter)->setBuffer(0);
}
-
+
// don't forget alpha
if(group != NULL &&
!group->mVertexBuffer.isNull() &&
@@ -4481,6 +4490,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
std::sort(faces.begin(), faces.end(), LLFace::CompareDistanceGreater());
}
+ bool hud_group = group->isHUDGroup() ;
std::vector<LLFace*>::iterator face_iter = faces.begin();
LLSpatialGroup::buffer_map_t buffer_map;
@@ -4495,6 +4505,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
S32 texture_index_channels = gGLManager.mNumTextureImageUnits-1; //always reserve one for shiny for now just for simplicity
+ if (gGLManager.mGLVersion < 3.1f)
+ {
+ texture_index_channels = 1;
+ }
+
if (LLPipeline::sRenderDeferred && distance_sort)
{
texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels;
@@ -4708,6 +4723,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
}
const LLTextureEntry* te = facep->getTextureEntry();
+ tex = facep->getTexture();
BOOL is_alpha = (facep->getPoolType() == LLDrawPool::POOL_ALPHA) ? TRUE : FALSE;
@@ -4745,7 +4761,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
registerFace(group, facep, LLRenderPass::PASS_INVISI_SHINY);
registerFace(group, facep, LLRenderPass::PASS_INVISIBLE);
}
- else if (LLPipeline::sRenderDeferred)
+ else if (LLPipeline::sRenderDeferred && !hud_group)
{ //deferred rendering
if (te->getFullbright())
{ //register in post deferred fullbright shiny pass
@@ -4783,7 +4799,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
else if (fullbright || bake_sunlight)
{ //fullbright
registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT);
- if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && te->getBumpmap())
+ if (LLPipeline::sRenderDeferred && !hud_group && LLPipeline::sRenderBump && te->getBumpmap())
{ //if this is the deferred render and a bump map is present, register in post deferred bump
registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
}
@@ -4809,7 +4825,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
}
//not sure why this is here, and looks like it might cause bump mapped objects to get rendered redundantly -- davep 5/11/2010
- if (!is_alpha && !LLPipeline::sRenderDeferred)
+ if (!is_alpha && (hud_group || !LLPipeline::sRenderDeferred))
{
llassert((mask & LLVertexBuffer::MAP_NORMAL) || fullbright);
facep->setPoolType((fullbright) ? LLDrawPool::POOL_FULLBRIGHT : LLDrawPool::POOL_SIMPLE);
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index fc00f0c0d0..13565cb27c 100644
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -206,7 +206,7 @@ public:
/*virtual*/ BOOL updateLOD();
void updateRadius();
/*virtual*/ void updateTextures();
- void updateTextureVirtualSize();
+ void updateTextureVirtualSize(bool forced = false);
void updateFaceFlags();
void regenFaces();
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
index 69ebad61ac..e70ac0a2e7 100644
--- a/indra/newview/llvowater.cpp
+++ b/indra/newview/llvowater.cpp
@@ -282,6 +282,11 @@ void LLVOWater::updateSpatialExtents(LLVector4a &newMin, LLVector4a& newMax)
U32 LLVOWater::getPartitionType() const
{
+ if (mIsEdgePatch)
+ {
+ return LLViewerRegion::PARTITION_VOIDWATER;
+ }
+
return LLViewerRegion::PARTITION_WATER;
}
@@ -300,6 +305,7 @@ LLWaterPartition::LLWaterPartition()
LLVoidWaterPartition::LLVoidWaterPartition()
{
+ mOcclusionEnabled = FALSE;
mDrawableType = LLPipeline::RENDER_TYPE_VOIDWATER;
mPartitionType = LLViewerRegion::PARTITION_VOIDWATER;
}
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 51664cb31d..7b1c725483 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -568,7 +568,7 @@ void LLVOWLSky::buildFanBuffer(LLStrider<LLVector3> & vertices,
LLStrider<LLVector2> & texCoords,
LLStrider<U16> & indices)
{
- const F32 RADIUS = LLWLParamManager::instance()->getDomeRadius();
+ const F32 RADIUS = LLWLParamManager::getInstance()->getDomeRadius();
U32 i, num_slices;
F32 phi0, theta, x0, y0, z0;
@@ -629,7 +629,7 @@ void LLVOWLSky::buildStripsBuffer(U32 begin_stack, U32 end_stack,
LLStrider<LLVector2> & texCoords,
LLStrider<U16> & indices)
{
- const F32 RADIUS = LLWLParamManager::instance()->getDomeRadius();
+ const F32 RADIUS = LLWLParamManager::getInstance()->getDomeRadius();
U32 i, j, num_slices, num_stacks;
F32 phi0, theta, x0, y0, z0;
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
index 1694126802..64ca94b567 100644
--- a/indra/newview/llwatchdog.cpp
+++ b/indra/newview/llwatchdog.cpp
@@ -126,8 +126,8 @@ void LLWatchdogTimeout::start(const std::string& state)
// Order of operation is very impmortant here.
// After LLWatchdogEntry::start() is called
// LLWatchdogTimeout::isAlive() will be called asynchronously.
- mTimer.start();
ping(state);
+ mTimer.start();
LLWatchdogEntry::start();
}
@@ -178,8 +178,8 @@ void LLWatchdog::init(killer_event_callback func)
mKillerCallback = func;
if(!mSuspectsAccessMutex && !mTimer)
{
- mSuspectsAccessMutex = new LLMutex(NULL);
- mTimer = new LLWatchdogTimerThread();
+ mSuspectsAccessMutex = new LLMutex;
+ mTimer = new LLWatchdogTimerThread;
mTimer->setSleepTime(WATCHDOG_SLEEP_TIME_USEC / 1000);
mLastClockCount = LLTimer::getTotalTime();
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index 67bb965f99..1a98d4c6c2 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -54,12 +54,9 @@
#include "llwlparammanager.h"
#include "llwaterparamset.h"
-#include "llfloaterwater.h"
#include "curl/curl.h"
-LLWaterParamManager * LLWaterParamManager::sInstance = NULL;
-
LLWaterParamManager::LLWaterParamManager() :
mFogColor(22.f/255.f, 43.f/255.f, 54.f/255.f, 0.0f, 0.0f, "waterFogColor", "WaterFogColor"),
mFogDensity(4, "waterFogDensity", 2),
@@ -73,8 +70,6 @@ LLWaterParamManager::LLWaterParamManager() :
mWave1Dir(.5f, .5f, "wave1Dir"),
mWave2Dir(.5f, .5f, "wave2Dir"),
mDensitySliderValue(1.0f),
- mPrevFogDensity(16.0f), // 2^4
- mPrevFogColor(22.f/255.f, 43.f/255.f, 54.f/255.f, 0.0f),
mWaterFogKS(1.0f)
{
}
@@ -83,131 +78,73 @@ LLWaterParamManager::~LLWaterParamManager()
{
}
-void LLWaterParamManager::loadAllPresets(const std::string& file_name)
+void LLWaterParamManager::loadAllPresets()
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading Default water settings from " << path_name << LL_ENDL;
-
- bool found = true;
- LLDirIterator app_settings_iter(path_name, "*.xml");
- while(found)
- {
- std::string name;
- found = app_settings_iter.next(name);
- if(found)
- {
-
- name=name.erase(name.length()-4);
+ // First, load system (coming out of the box) water presets.
+ loadPresetsFromDir(getSysDir());
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
- }
- }
+ // Then load user presets. Note that user day presets will modify any system ones already loaded.
+ loadPresetsFromDir(getUserDir());
+}
- // And repeat for user presets, note the user presets will modify any system presets already loaded
+void LLWaterParamManager::loadPresetsFromDir(const std::string& dir)
+{
+ LL_INFOS2("AppInit", "Shaders") << "Loading water presets from " << dir << LL_ENDL;
- std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User water settings from " << path_name2 << LL_ENDL;
-
- found = true;
- LLDirIterator user_settings_iter(path_name2, "*.xml");
- while(found)
+ LLDirIterator dir_iter(dir, "*.xml");
+ while (1)
{
- std::string name;
- found = user_settings_iter.next(name);
- if(found)
+ std::string file;
+ if (!dir_iter.next(file))
{
- name=name.erase(name.length()-4);
-
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ break; // no more files
+ }
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
+ std::string path = dir + file;
+ if (!loadPreset(path))
+ {
+ llwarns << "Error loading water preset from " << path << llendl;
}
}
-
}
-void LLWaterParamManager::loadPreset(const std::string & name,bool propagate)
+bool LLWaterParamManager::loadPreset(const std::string& path)
{
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- escaped_filename += ".xml";
+ llifstream xml_file;
+ std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", escaped_filename));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading water settings from " << pathName << LL_ENDL;
-
- llifstream presetsXML;
- presetsXML.open(pathName.c_str());
-
- // That failed, try loading from the users area instead.
- if(!presetsXML)
+ xml_file.open(path.c_str());
+ if (!xml_file)
{
- pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename);
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User water setting from " << pathName << LL_ENDL;
- presetsXML.clear();
- presetsXML.open(pathName.c_str());
+ return false;
}
- if (presetsXML)
- {
- LLSD paramsData(LLSD::emptyMap());
+ LL_DEBUGS2("AppInit", "Shaders") << "Loading water " << name << LL_ENDL;
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ LLSD params_data;
+ LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ parser->parse(xml_file, params_data, LLSDSerialize::SIZE_UNLIMITED);
+ xml_file.close();
- parser->parse(presetsXML, paramsData, LLSDSerialize::SIZE_UNLIMITED);
-
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
- if(mIt == mParamList.end())
- {
- addParamSet(name, paramsData);
- }
- else
- {
- setParamSet(name, paramsData);
- }
- presetsXML.close();
- }
- else
+ if (hasParamSet(name))
{
- llwarns << "Can't find " << name << llendl;
- return;
+ setParamSet(name, params_data);
}
-
- if(propagate)
+ else
{
- getParamSet(name, mCurParams);
- propagateParameters();
+ addParamSet(name, params_data);
}
-}
+
+ return true;
+}
void LLWaterParamManager::savePreset(const std::string & name)
{
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- escaped_filename += ".xml";
+ llassert(!name.empty());
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", escaped_filename));
+ std::string pathName(getUserDir() + LLURI::escape(name) + ".xml");
// fill it with LLSD windlight params
paramsData = mParamList[name].getAll();
@@ -221,7 +158,6 @@ void LLWaterParamManager::savePreset(const std::string & name)
propagateParameters();
}
-
void LLWaterParamManager::propagateParameters(void)
{
// bind the variables only if we're using shaders
@@ -251,7 +187,7 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
{
if (shader->mShaderGroup == LLGLSLShader::SG_WATER)
{
- shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, LLWLParamManager::instance()->getRotatedLightDir().mV);
+ shader->uniform4fv(LLViewerShaderMgr::LIGHTNORM, 1, LLWLParamManager::getInstance()->getRotatedLightDir().mV);
shader->uniform3fv("camPosLocal", 1, LLViewerCamera::getInstance()->getOrigin().mV);
shader->uniform4fv("waterFogColor", 1, LLDrawPoolWater::sWaterFogColor.mV);
shader->uniform4fv("waterPlane", 1, mWaterPlane.mV);
@@ -261,36 +197,33 @@ void LLWaterParamManager::updateShaderUniforms(LLGLSLShader * shader)
}
}
-static LLFastTimer::DeclareTimer FTM_UPDATE_WLPARAM("Update Windlight Params");
-
-void LLWaterParamManager::update(LLViewerCamera * cam)
+void LLWaterParamManager::applyParams(const LLSD& params, bool interpolate)
{
- LLFastTimer ftm(FTM_UPDATE_WLPARAM);
-
- // update the shaders and the menu
- propagateParameters();
-
- // If water fog color has been changed, save it.
- if (mPrevFogColor != mFogColor)
+ if (params.size() == 0)
{
- gSavedSettings.setColor4("WaterFogColor", mFogColor);
- mPrevFogColor = mFogColor;
+ llwarns << "Undefined water params" << llendl;
+ return;
}
- // If water fog density has been changed, save it.
- if (mPrevFogDensity != mFogDensity)
+ if (interpolate)
{
- gSavedSettings.setF32("WaterFogDensity", mFogDensity);
- mPrevFogDensity = mFogDensity;
+ LLWLParamManager::getInstance()->mAnimator.startInterpolation(params);
}
-
- // sync menus if they exist
- LLFloaterWater* waterfloater = LLFloaterReg::findTypedInstance<LLFloaterWater>("env_water");
- if(waterfloater)
+ else
{
- waterfloater->syncMenu();
+ mCurParams.setAll(params);
}
+}
+static LLFastTimer::DeclareTimer FTM_UPDATE_WATERPARAM("Update Water Params");
+
+void LLWaterParamManager::update(LLViewerCamera * cam)
+{
+ LLFastTimer ftm(FTM_UPDATE_WATERPARAM);
+
+ // update the shaders and the menu
+ propagateParameters();
+
// only do this if we're dealing with shaders
if(gPipeline.canUseVertexShaders())
{
@@ -339,26 +272,14 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
}
}
-// static
-void LLWaterParamManager::initClass(void)
-{
- instance();
-}
-
-// static
-void LLWaterParamManager::cleanupClass(void)
-{
- delete sInstance;
- sInstance = NULL;
-}
-
bool LLWaterParamManager::addParamSet(const std::string& name, LLWaterParamSet& param)
{
// add a new one if not one there already
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
+ preset_map_t::iterator mIt = mParamList.find(name);
if(mIt == mParamList.end())
{
mParamList[name] = param;
+ mPresetListChangeSignal();
return true;
}
@@ -367,23 +288,15 @@ bool LLWaterParamManager::addParamSet(const std::string& name, LLWaterParamSet&
BOOL LLWaterParamManager::addParamSet(const std::string& name, LLSD const & param)
{
- // add a new one if not one there already
- std::map<std::string, LLWaterParamSet>::const_iterator finder = mParamList.find(name);
- if(finder == mParamList.end())
- {
- mParamList[name].setAll(param);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+ LLWaterParamSet param_set;
+ param_set.setAll(param);
+ return addParamSet(name, param_set);
}
bool LLWaterParamManager::getParamSet(const std::string& name, LLWaterParamSet& param)
{
// find it and set it
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
+ preset_map_t::iterator mIt = mParamList.find(name);
if(mIt != mParamList.end())
{
param = mParamList[name];
@@ -394,6 +307,12 @@ bool LLWaterParamManager::getParamSet(const std::string& name, LLWaterParamSet&
return false;
}
+bool LLWaterParamManager::hasParamSet(const std::string& name)
+{
+ LLWaterParamSet dummy;
+ return getParamSet(name, dummy);
+}
+
bool LLWaterParamManager::setParamSet(const std::string& name, LLWaterParamSet& param)
{
mParamList[name] = param;
@@ -417,29 +336,74 @@ bool LLWaterParamManager::setParamSet(const std::string& name, const LLSD & para
bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_from_disk)
{
// remove from param list
- std::map<std::string, LLWaterParamSet>::iterator mIt = mParamList.find(name);
- if(mIt != mParamList.end())
+ preset_map_t::iterator it = mParamList.find(name);
+ if (it == mParamList.end())
{
- mParamList.erase(mIt);
+ LL_WARNS("WindLight") << "No water preset named " << name << LL_ENDL;
+ return false;
}
- if(delete_from_disk)
- {
+ mParamList.erase(it);
- std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/water", ""));
-
- // use full curl escaped name
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
+ // remove from file system if requested
+ if (delete_from_disk)
+ {
+ if (gDirUtilp->deleteFilesInDir(getUserDir(), LLURI::escape(name) + ".xml") < 1)
+ {
+ LL_WARNS("WindLight") << "Error removing water preset " << name << " from disk" << LL_ENDL;
+ }
}
+ // signal interested parties
+ mPresetListChangeSignal();
return true;
}
+bool LLWaterParamManager::isSystemPreset(const std::string& preset_name) const
+{
+ // *TODO: file system access is excessive here.
+ return gDirUtilp->fileExists(getSysDir() + LLURI::escape(preset_name) + ".xml");
+}
+
+void LLWaterParamManager::getPresetNames(preset_name_list_t& presets) const
+{
+ presets.clear();
+
+ for (preset_map_t::const_iterator it = mParamList.begin(); it != mParamList.end(); ++it)
+ {
+ presets.push_back(it->first);
+ }
+}
+
+void LLWaterParamManager::getPresetNames(preset_name_list_t& user_presets, preset_name_list_t& system_presets) const
+{
+ user_presets.clear();
+ system_presets.clear();
+
+ for (preset_map_t::const_iterator it = mParamList.begin(); it != mParamList.end(); ++it)
+ {
+ if (isSystemPreset(it->first))
+ {
+ system_presets.push_back(it->first);
+ }
+ else
+ {
+ user_presets.push_back(it->first);
+ }
+ }
+}
+
+void LLWaterParamManager::getUserPresetNames(preset_name_list_t& user_presets) const
+{
+ preset_name_list_t dummy;
+ getPresetNames(user_presets, dummy);
+}
+
+boost::signals2::connection LLWaterParamManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
+{
+ return mPresetListChangeSignal.connect(cb);
+}
+
F32 LLWaterParamManager::getFogDensity(void)
{
bool err;
@@ -458,34 +422,22 @@ F32 LLWaterParamManager::getFogDensity(void)
return fogDensity;
}
-// static
-LLWaterParamManager * LLWaterParamManager::instance()
+// virtual static
+void LLWaterParamManager::initSingleton()
{
- if(NULL == sInstance)
- {
- sInstance = new LLWaterParamManager();
-
- sInstance->loadAllPresets(LLStringUtil::null);
-
- sInstance->getParamSet("Default", sInstance->mCurParams);
- sInstance->initOverrides();
- }
+ LL_DEBUGS("Windlight") << "Initializing water" << LL_ENDL;
+ loadAllPresets();
+ LLEnvManagerNew::instance().usePrefs();
+}
- return sInstance;
+// static
+std::string LLWaterParamManager::getSysDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", "");
}
-void LLWaterParamManager::initOverrides()
+// static
+std::string LLWaterParamManager::getUserDir()
{
- // Override fog color from the current preset with the saved setting.
- LLColor4 fog_color_override = gSavedSettings.getColor4("WaterFogColor");
- mFogColor = fog_color_override;
- mPrevFogColor = fog_color_override;
- mCurParams.set("waterFogColor", fog_color_override);
-
- // Do the same with fog density.
- F32 fog_density = gSavedSettings.getF32("WaterFogDensity");
- mPrevFogDensity = fog_density;
- mFogDensity = fog_density;
- mCurParams.set("waterFogDensity", fog_density);
- setDensitySliderValue(mFogDensity.mExp);
+ return gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "windlight/water", "");
}
diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h
index f465034c39..dc7d41be2a 100644
--- a/indra/newview/llwaterparammanager.h
+++ b/indra/newview/llwaterparammanager.h
@@ -27,7 +27,7 @@
#ifndef LL_WATER_PARAMMANAGER_H
#define LL_WATER_PARAMMANAGER_H
-#include <vector>
+#include <list>
#include <map>
#include "llwaterparamset.h"
#include "llviewercamera.h"
@@ -212,19 +212,13 @@ struct WaterExpFloatControl
/// WindLight parameter manager class - what controls all the wind light shaders
-class LLWaterParamManager
+class LLWaterParamManager : public LLSingleton<LLWaterParamManager>
{
+ LOG_CLASS(LLWaterParamManager);
public:
-
- LLWaterParamManager();
- ~LLWaterParamManager();
-
- /// load a preset file
- void loadAllPresets(const std::string & fileName);
-
- /// load an individual preset into the sky
-
- void loadPreset(const std::string & name,bool propagate=true);
+ typedef std::list<std::string> preset_name_list_t;
+ typedef std::map<std::string, LLWaterParamSet> preset_map_t;
+ typedef boost::signals2::signal<void()> preset_list_signal_t;
/// save the parameter presets to file
void savePreset(const std::string & name);
@@ -232,18 +226,15 @@ public:
/// send the parameters to the shaders
void propagateParameters(void);
+ // display specified water
+ void applyParams(const LLSD& params, bool interpolate);
+
/// update information for the shader
void update(LLViewerCamera * cam);
/// Update shader uniforms that have changed.
void updateShaderUniforms(LLGLSLShader * shader);
- /// Perform global initialization for this class.
- static void initClass(void);
-
- // Cleanup of global data that's only inited once per class.
- static void cleanupClass();
-
/// add a param to the list
bool addParamSet(const std::string& name, LLWaterParamSet& param);
@@ -253,6 +244,9 @@ public:
/// get a param from the list
bool getParamSet(const std::string& name, LLWaterParamSet& param);
+ /// check whether the preset is in the list
+ bool hasParamSet(const std::string& name);
+
/// set the param in the list with a new param
bool setParamSet(const std::string& name, LLWaterParamSet& param);
@@ -263,6 +257,24 @@ public:
/// returns true if successful
bool removeParamSet(const std::string& name, bool delete_from_disk);
+ /// @return true if the preset comes out of the box
+ bool isSystemPreset(const std::string& preset_name) const;
+
+ /// @return all named water presets.
+ const preset_map_t& getPresets() const { return mParamList; }
+
+ /// @return user and system preset names as a single list
+ void getPresetNames(preset_name_list_t& presets) const;
+
+ /// @return user and system preset names separately
+ void getPresetNames(preset_name_list_t& user_presets, preset_name_list_t& system_presets) const;
+
+ /// @return list of user presets names
+ void getUserPresetNames(preset_name_list_t& user_presets) const;
+
+ /// Emitted when a preset gets added or deleted.
+ boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
+
/// set the normap map we want for water
bool setNormalMapID(const LLUUID& img);
@@ -281,12 +293,6 @@ public:
F32 getFogDensity(void);
LLColor4 getFogColor(void);
- // singleton pattern implementation
- static LLWaterParamManager * instance();
-
-private:
- void initOverrides();
-
public:
LLWaterParamSet mCurParams;
@@ -308,20 +314,28 @@ public:
WaterFloatControl mScaleBelow;
WaterFloatControl mBlurMultiplier;
- // list of all the parameters, listed by name
- std::map<std::string, LLWaterParamSet> mParamList;
-
F32 mDensitySliderValue;
private:
+ friend class LLSingleton<LLWaterParamManager>;
+ /*virtual*/ void initSingleton();
+ LLWaterParamManager();
+ ~LLWaterParamManager();
+
+ void loadAllPresets();
+ void loadPresetsFromDir(const std::string& dir);
+ bool loadPreset(const std::string& path);
+
+ static std::string getSysDir();
+ static std::string getUserDir();
+
LLVector4 mWaterPlane;
F32 mWaterFogKS;
- LLColor4 mPrevFogColor;
- F32 mPrevFogDensity;
+ // list of all the parameters, listed by name
+ preset_map_t mParamList;
- // our parameter manager singleton instance
- static LLWaterParamManager * sInstance;
+ preset_list_signal_t mPresetListChangeSignal;
};
inline void LLWaterParamManager::setDensitySliderValue(F32 val)
diff --git a/indra/newview/llwaterparamset.cpp b/indra/newview/llwaterparamset.cpp
index 9457d631be..39d366b023 100644
--- a/indra/newview/llwaterparamset.cpp
+++ b/indra/newview/llwaterparamset.cpp
@@ -29,7 +29,6 @@
#include "llwaterparamset.h"
#include "llsd.h"
-#include "llfloaterwater.h"
#include "llwaterparammanager.h"
#include "lluictrlfactory.h"
#include "llsliderctrl.h"
@@ -224,3 +223,46 @@ F32 LLWaterParamSet::getFloat(const std::string& paramName, bool& error)
return 0;
}
+// Added for interpolation effect in DEV-33645
+// Based on LLWLParamSet::mix, but written by Jacob without an intimate knowledge of how WindLight works.
+// The function definition existed in the header but was never implemented. If you think there is something
+// wrong with this, you're probably right. Ask Jacob, Q, or a member of the original WindLight team.
+void LLWaterParamSet::mix(LLWaterParamSet& src, LLWaterParamSet& dest, F32 weight)
+{
+ // Setup
+ LLSD srcVal, destVal; // LLSD holders for get/set calls, reusable
+
+ // Iterate through values
+ for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
+ {
+ // If param exists in both src and dest, set the holder variables, otherwise skip
+ if(src.mParamValues.has(iter->first) && dest.mParamValues.has(iter->first))
+ {
+ srcVal = src.mParamValues[iter->first];
+ destVal = dest.mParamValues[iter->first];
+ }
+ else
+ {
+ continue;
+ }
+
+ if(iter->second.isReal()) // If it's a real, interpolate directly
+ {
+ iter->second = srcVal.asReal() + ((destVal.asReal() - srcVal.asReal()) * weight);
+ }
+ else if(iter->second.isArray() && iter->second[0].isReal() // If it's an array of reals, loop through the reals and interpolate on those
+ && iter->second.size() == srcVal.size() && iter->second.size() == destVal.size())
+ {
+ // Actually do interpolation: old value + (difference in values * factor)
+ for(int i=0; i < iter->second.size(); ++i)
+ {
+ // iter->second[i] = (1.f-weight)*(F32)srcVal[i].asReal() + weight*(F32)destVal[i].asReal(); // old way of doing it -- equivalent but one more operation
+ iter->second[i] = srcVal[i].asReal() + ((destVal[i].asReal() - srcVal[i].asReal()) * weight);
+ }
+ }
+ else // Else, skip
+ {
+ continue;
+ }
+ }
+}
diff --git a/indra/newview/llwaterparamset.h b/indra/newview/llwaterparamset.h
index 9957d5371b..b28585af59 100644
--- a/indra/newview/llwaterparamset.h
+++ b/indra/newview/llwaterparamset.h
@@ -34,7 +34,6 @@
#include "v4color.h"
#include "llviewershadermgr.h"
-class LLFloaterWater;
class LLWaterParamSet;
/// A class representing a set of parameter values for the Water shaders.
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index b73017a51a..6f7115ff6d 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -81,19 +81,20 @@ void LLWeb::initClass()
// static
void LLWeb::loadURL(const std::string& url, const std::string& target, const std::string& uuid)
{
- if(target == "_internal")
- {
- // Force load in the internal browser, as if with a blank target.
- loadURLInternal(url, "", uuid);
- }
- else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
- {
- loadURLExternal(url);
- }
- else
- {
- loadURLInternal(url, target, uuid);
- }
+ loadWebURL(url, target, uuid);
+ //if(target == "_internal")
+ //{
+ // // Force load in the internal browser, as if with a blank target.
+ // loadURLInternal(url, "", uuid);
+ //}
+ //else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
+ //{
+ // loadURLExternal(url);
+ //}
+ //else
+ //{
+ // loadURLInternal(url, target, uuid);
+ //}
}
// static
@@ -124,17 +125,15 @@ void LLWeb::loadURLInternal(const std::string &url, const std::string& target, c
// Explicitly open a Web URL using the Web content floater
void LLWeb::loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
{
- LLFloaterWebContent::create(url, target, uuid);
+ LLFloaterWebContent::create(LLFloaterWebContent::Params().url(url).target(target).id(uuid));
}
-
// static
void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)
{
loadURLExternal(url, true, uuid);
}
-
// static
void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)
{
diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp
index a94a2e41aa..e568638cf6 100644
--- a/indra/newview/llwlanimator.cpp
+++ b/indra/newview/llwlanimator.cpp
@@ -30,20 +30,31 @@
#include "llsky.h"
#include "pipeline.h"
#include "llwlparammanager.h"
+#include "llwaterparammanager.h"
-LLWLAnimator::LLWLAnimator() : mStartTime(0), mDayRate(1), mDayTime(0),
- mIsRunning(FALSE), mUseLindenTime(false)
+extern LLControlGroup gSavedSettings;
+
+F64 LLWLAnimator::INTERP_TOTAL_SECONDS = 3.f;
+
+LLWLAnimator::LLWLAnimator() : mStartTime(0.f), mDayRate(1.f), mDayTime(0.f),
+ mIsRunning(FALSE), mIsInterpolating(FALSE), mTimeType(TIME_LINDEN),
+ mInterpStartTime(), mInterpEndTime()
{
- mDayTime = 0;
+ mInterpBeginWL = new LLWLParamSet();
+ mInterpBeginWater = new LLWaterParamSet();
+ mInterpEndWater = new LLWaterParamSet();
}
void LLWLAnimator::update(LLWLParamSet& curParams)
{
+ //llassert(mUseLindenTime != mUseLocalTime);
+
F64 curTime;
curTime = getDayTime();
// don't do anything if empty
- if(mTimeTrack.size() == 0) {
+ if(mTimeTrack.size() == 0)
+ {
return;
}
@@ -53,13 +64,15 @@ void LLWLAnimator::update(LLWLParamSet& curParams)
mSecondIt++;
// grab the two tween iterators
- while(mSecondIt != mTimeTrack.end() && curTime > mSecondIt->first) {
+ while(mSecondIt != mTimeTrack.end() && curTime > mSecondIt->first)
+ {
mFirstIt++;
mSecondIt++;
}
// scroll it around when you get to the end
- if(mSecondIt == mTimeTrack.end() || mFirstIt->first > curTime) {
+ if(mSecondIt == mTimeTrack.end() || mFirstIt->first > curTime)
+ {
mSecondIt = mTimeTrack.begin();
mFirstIt = mTimeTrack.end();
mFirstIt--;
@@ -67,70 +80,111 @@ void LLWLAnimator::update(LLWLParamSet& curParams)
F32 weight = 0;
- if(mFirstIt->first < mSecondIt->first) {
+ if(mFirstIt->first < mSecondIt->first)
+ {
// get the delta time and the proper weight
weight = F32 (curTime - mFirstIt->first) /
(mSecondIt->first - mFirstIt->first);
// handle the ends
- } else if(mFirstIt->first > mSecondIt->first) {
+ }
+ else if(mFirstIt->first > mSecondIt->first)
+ {
// right edge of time line
- if(curTime >= mFirstIt->first) {
+ if(curTime >= mFirstIt->first)
+ {
weight = F32 (curTime - mFirstIt->first) /
((1 + mSecondIt->first) - mFirstIt->first);
-
// left edge of time line
- } else {
+ }
+ else
+ {
weight = F32 ((1 + curTime) - mFirstIt->first) /
((1 + mSecondIt->first) - mFirstIt->first);
}
-
// handle same as whatever the last one is
- } else {
+ }
+ else
+ {
weight = 1;
}
+ if(mIsInterpolating)
+ {
+ // *TODO_JACOB: this is kind of laggy. Not sure why. The part that lags is the curParams.mix call, and none of the other mixes. It works, though.
+ clock_t current = clock();
+ if(current >= mInterpEndTime)
+ {
+ mIsInterpolating = false;
+ return;
+ }
+
+ // determine moving target for final interpolation value
+ // *TODO: this will not work with lazy loading of sky presets.
+ LLWLParamSet buf = LLWLParamSet();
+ buf.setAll(LLWLParamManager::getInstance()->mParamList[mFirstIt->second].getAll()); // just give it some values, otherwise it has no params to begin with (see comment in constructor)
+ buf.mix(LLWLParamManager::getInstance()->mParamList[mFirstIt->second], LLWLParamManager::getInstance()->mParamList[mSecondIt->second], weight); // mix to determine moving target for interpolation finish (as below)
+
+ // mix from previous value to moving target
+ weight = (current - mInterpStartTime) / (INTERP_TOTAL_SECONDS * CLOCKS_PER_SEC);
+ curParams.mix(*mInterpBeginWL, buf, weight);
+
+ // mix water
+ LLWaterParamManager::getInstance()->mCurParams.mix(*mInterpBeginWater, *mInterpEndWater, weight);
+ }
+ else
+ {
// do the interpolation and set the parameters
- curParams.mix(LLWLParamManager::instance()->mParamList[mFirstIt->second],
- LLWLParamManager::instance()->mParamList[mSecondIt->second], weight);
+ // *TODO: this will not work with lazy loading of sky presets.
+ curParams.mix(LLWLParamManager::getInstance()->mParamList[mFirstIt->second], LLWLParamManager::getInstance()->mParamList[mSecondIt->second], weight);
+ }
}
F64 LLWLAnimator::getDayTime()
{
- if(!mIsRunning) {
+ if(!mIsRunning)
+ {
return mDayTime;
}
-
- if(mUseLindenTime) {
-
+ else if(mTimeType == TIME_LINDEN)
+ {
F32 phase = gSky.getSunPhase() / F_PI;
// we're not solving the non-linear equation that determines sun phase
// we're just linearly interpolating between the major points
if (phase <= 5.0 / 4.0) {
mDayTime = (1.0 / 3.0) * phase + (1.0 / 3.0);
- } else {
+ }
+ else
+ {
mDayTime = phase - (1.0 / 2.0);
}
- if(mDayTime > 1) {
+ if(mDayTime > 1)
+ {
mDayTime--;
}
return mDayTime;
}
+ else if(mTimeType == TIME_LOCAL)
+ {
+ return getLocalTime();
+ }
// get the time;
mDayTime = (LLTimer::getElapsedSeconds() - mStartTime) / mDayRate;
// clamp it
- if(mDayTime < 0) {
+ if(mDayTime < 0)
+ {
mDayTime = 0;
}
- while(mDayTime > 1) {
+ while(mDayTime > 1)
+ {
mDayTime--;
}
@@ -144,15 +198,18 @@ void LLWLAnimator::setDayTime(F64 dayTime)
mDayTime = dayTime;
// clamp it
- if(mDayTime < 0) {
+ if(mDayTime < 0)
+ {
mDayTime = 0;
- } else if(mDayTime > 1) {
+ }
+ else if(mDayTime > 1)
+ {
mDayTime = 1;
}
}
-void LLWLAnimator::setTrack(std::map<F32, std::string>& curTrack,
+void LLWLAnimator::setTrack(std::map<F32, LLWLParamKey>& curTrack,
F32 dayRate, F64 dayTime, bool run)
{
mTimeTrack = curTrack;
@@ -161,3 +218,96 @@ void LLWLAnimator::setTrack(std::map<F32, std::string>& curTrack,
mIsRunning = run;
}
+
+void LLWLAnimator::startInterpolation(const LLSD& targetWater)
+{
+ mInterpBeginWL->setAll(LLWLParamManager::getInstance()->mCurParams.getAll());
+ mInterpBeginWater->setAll(LLWaterParamManager::getInstance()->mCurParams.getAll());
+
+ mInterpStartTime = clock();
+ mInterpEndTime = mInterpStartTime + clock_t(INTERP_TOTAL_SECONDS) * CLOCKS_PER_SEC;
+
+ // Don't set any ending WL -- this is continuously calculated as the animator updates since it's a moving target
+ mInterpEndWater->setAll(targetWater);
+
+ mIsInterpolating = true;
+}
+
+std::string LLWLAnimator::timeToString(F32 curTime)
+{
+ S32 hours;
+ S32 min;
+ bool isPM = false;
+
+ // get hours and minutes
+ hours = (S32) (24.0 * curTime);
+ curTime -= ((F32) hours / 24.0f);
+ min = llround(24.0f * 60.0f * curTime);
+
+ // handle case where it's 60
+ if(min == 60)
+ {
+ hours++;
+ min = 0;
+ }
+
+ // set for PM
+ if(hours >= 12 && hours < 24)
+ {
+ isPM = true;
+ }
+
+ // convert to non-military notation
+ if(hours >= 24)
+ {
+ hours = 12;
+ }
+ else if(hours > 12)
+ {
+ hours -= 12;
+ }
+ else if(hours == 0)
+ {
+ hours = 12;
+ }
+
+ // make the string
+ std::stringstream newTime;
+ newTime << hours << ":";
+
+ // double 0
+ if(min < 10)
+ {
+ newTime << 0;
+ }
+
+ // finish it
+ newTime << min << " ";
+ if(isPM)
+ {
+ newTime << "PM";
+ }
+ else
+ {
+ newTime << "AM";
+ }
+
+ return newTime.str();
+}
+
+F64 LLWLAnimator::getLocalTime()
+{
+ char buffer[9];
+ time_t rawtime;
+ struct tm* timeinfo;
+
+ time(&rawtime);
+ timeinfo = localtime(&rawtime);
+ strftime(buffer, 9, "%H:%M:%S", timeinfo);
+ std::string timeStr(buffer);
+
+ F64 tod = ((F64)atoi(timeStr.substr(0,2).c_str())) / 24.f +
+ ((F64)atoi(timeStr.substr(3,2).c_str())) / 1440.f +
+ ((F64)atoi(timeStr.substr(6,2).c_str())) / 86400.f;
+ return tod;
+}
diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h
index 5677290213..5223b45343 100644
--- a/indra/newview/llwlanimator.h
+++ b/indra/newview/llwlanimator.h
@@ -28,28 +28,39 @@
#define LL_WL_ANIMATOR_H
#include "llwlparamset.h"
+#include "llwaterparamset.h"
#include <string>
#include <map>
+struct LLWLParamKey;
+
class LLWLAnimator {
public:
+ typedef enum e_time
+ {
+ TIME_LINDEN,
+ TIME_LOCAL,
+ TIME_CUSTOM
+ } ETime;
+
F64 mStartTime;
F32 mDayRate;
F64 mDayTime;
// track to play
- std::map<F32, std::string> mTimeTrack;
- std::map<F32, std::string>::iterator mFirstIt, mSecondIt;
-
- // params to use
- //std::map<std::string, LLWLParamSet> mParamList;
-
- bool mIsRunning;
- bool mUseLindenTime;
+ std::map<F32, LLWLParamKey> mTimeTrack;
+ std::map<F32, LLWLParamKey>::iterator mFirstIt, mSecondIt;
// simple constructor
LLWLAnimator();
+ ~LLWLAnimator()
+ {
+ delete mInterpBeginWL;
+ delete mInterpBeginWater;
+ delete mInterpEndWater;
+ }
+
// update the parameters
void update(LLWLParamSet& curParams);
@@ -63,9 +74,66 @@ public:
void setDayTime(F64 dayTime);
// set an animation track
- void setTrack(std::map<F32, std::string>& track,
+ void setTrack(std::map<F32, LLWLParamKey>& track,
F32 dayRate, F64 dayTime = 0, bool run = true);
+ void deactivate()
+ {
+ mIsRunning = false;
+ }
+
+ void activate(ETime time)
+ {
+ mIsRunning = true;
+ mTimeType = time;
+ }
+
+ void startInterpolation(const LLSD& targetWater);
+
+ bool getIsRunning()
+ {
+ return mIsRunning;
+ }
+
+ bool getUseCustomTime()
+ {
+ return mTimeType == TIME_CUSTOM;
+ }
+
+ bool getUseLocalTime()
+ {
+ return mTimeType == TIME_LOCAL;
+ }
+
+ bool getUseLindenTime()
+ {
+ return mTimeType == TIME_LINDEN;
+ }
+
+ void setTimeType(ETime time)
+ {
+ mTimeType = time;
+ }
+
+ ETime getTimeType()
+ {
+ return mTimeType;
+ }
+
+ /// convert the present time to a digital clock time
+ static std::string timeToString(F32 curTime);
+
+ /// get local time between 0 and 1
+ static F64 getLocalTime();
+
+private:
+ ETime mTimeType;
+ bool mIsRunning, mIsInterpolating;
+ LLWLParamSet *mInterpBeginWL;
+ LLWaterParamSet *mInterpBeginWater, *mInterpEndWater;
+ clock_t mInterpStartTime, mInterpEndTime;
+
+ static F64 INTERP_TOTAL_SECONDS;
};
#endif // LL_WL_ANIMATOR_H
diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp
index 85b3d62a49..4c0cb7c0f4 100644
--- a/indra/newview/llwldaycycle.cpp
+++ b/indra/newview/llwldaycycle.cpp
@@ -27,12 +27,11 @@
#include "llviewerprecompiledheaders.h"
#include "llwldaycycle.h"
-
-#include "llnotificationsutil.h"
#include "llsdserialize.h"
-#include "llxmlnode.h"
-
#include "llwlparammanager.h"
+#include "llnotifications.h"
+
+#include "llviewerwindow.h"
#include <map>
@@ -45,85 +44,160 @@ LLWLDayCycle::~LLWLDayCycle()
{
}
-void LLWLDayCycle::loadDayCycle(const std::string & fileName)
+void LLWLDayCycle::loadDayCycle(const LLSD& day_data, LLWLParamKey::EScope scope)
{
- // clear the first few things
+ lldebugs << "Loading day cycle (day_data.size() = " << day_data.size() << ", scope = " << scope << ")" << llendl;
mTimeMap.clear();
- // now load the file
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
- "windlight/days", fileName));
- llinfos << "Loading DayCycle settings from " << pathName << llendl;
-
- llifstream day_cycle_xml(pathName);
- if (day_cycle_xml.is_open())
+ // add each key frame
+ for(S32 i = 0; i < day_data.size(); ++i)
{
- // load and parse it
- LLSD day_data(LLSD::emptyArray());
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
- parser->parse(day_cycle_xml, day_data, LLSDSerialize::SIZE_UNLIMITED);
-
- // add each key
- for(S32 i = 0; i < day_data.size(); ++i)
+ // make sure it's a two array
+ if(day_data[i].size() != 2)
+ {
+ continue;
+ }
+
+ // check each param key exists in param manager
+ bool success;
+ LLWLParamSet pset;
+ LLWLParamKey frame = LLWLParamKey(day_data[i][1].asString(), scope);
+ success =
+ LLWLParamManager::getInstance()->getParamSet(frame, pset);
+ if(!success)
{
- // make sure it's a two array
- if(day_data[i].size() != 2)
+ // *HACK: If loading region day cycle, try local sky presets as well.
+ // Local presets may be referenced by a region day cycle after
+ // it has been edited but the changes have not been uploaded.
+ if (scope == LLEnvKey::SCOPE_REGION)
{
- continue;
+ frame.scope = LLEnvKey::SCOPE_LOCAL;
+ success = LLWLParamManager::getInstance()->getParamSet(frame, pset);
}
-
- // check each param name exists in param manager
- bool success;
- LLWLParamSet pset;
- success = LLWLParamManager::instance()->getParamSet(day_data[i][1].asString(), pset);
- if(!success)
+
+ if (!success)
{
// alert the user
LLSD args;
args["SKY"] = day_data[i][1].asString();
- LLNotificationsUtil::add("WLMissingSky", args);
+ LLNotifications::instance().add("WLMissingSky", args, LLSD());
continue;
}
-
- // then add the key
- addKey((F32)day_data[i][0].asReal(), day_data[i][1].asString());
}
+
+ // then add the keyframe
+ addKeyframe((F32)day_data[i][0].asReal(), frame);
+ }
+}
+
+void LLWLDayCycle::loadDayCycleFromFile(const std::string & fileName)
+{
+ loadDayCycle(loadCycleDataFromFile(fileName), LLWLParamKey::SCOPE_LOCAL);
+}
+/*static*/ LLSD LLWLDayCycle::loadCycleDataFromFile(const std::string & fileName)
+{
+ // *FIX: Cannot load user day cycles.
+ std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
+ "windlight/days", fileName));
+
+ return loadDayCycleFromPath(pathName);
+}
+
+// static
+LLSD LLWLDayCycle::loadDayCycleFromPath(const std::string& file_path)
+{
+ LL_INFOS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL;
+
+ llifstream day_cycle_xml(file_path);
+ if (day_cycle_xml.is_open())
+ {
+ // load and parse it
+ LLSD day_data(LLSD::emptyArray());
+ LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ parser->parse(day_cycle_xml, day_data, LLSDSerialize::SIZE_UNLIMITED);
day_cycle_xml.close();
+ return day_data;
+ }
+ else
+ {
+ return LLSD();
}
}
void LLWLDayCycle::saveDayCycle(const std::string & fileName)
{
- LLSD day_data(LLSD::emptyArray());
-
std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/days", fileName));
//llinfos << "Saving WindLight settings to " << pathName << llendl;
- for(std::map<F32, std::string>::const_iterator mIt = mTimeMap.begin();
- mIt != mTimeMap.end();
- ++mIt)
+ save(pathName);
+}
+
+void LLWLDayCycle::save(const std::string& file_path)
+{
+ LLSD day_data = asLLSD();
+
+ llofstream day_cycle_xml(file_path);
+ LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
+ formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
+ day_cycle_xml.close();
+}
+
+LLSD LLWLDayCycle::asLLSD()
+{
+ LLSD day_data(LLSD::emptyArray());
+ for(std::map<F32, LLWLParamKey>::const_iterator mIt = mTimeMap.begin(); mIt != mTimeMap.end(); ++mIt)
{
LLSD key(LLSD::emptyArray());
key.append(mIt->first);
- key.append(mIt->second);
+ key.append(mIt->second.name);
day_data.append(key);
}
- llofstream day_cycle_xml(pathName);
- LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
- formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);
- day_cycle_xml.close();
+ lldebugs << "Dumping day cycle (" << mTimeMap.size() << ") to LLSD: " << day_data << llendl;
+ return day_data;
}
+bool LLWLDayCycle::getSkyRefs(std::map<LLWLParamKey, LLWLParamSet>& refs) const
+{
+ bool result = true;
+ LLWLParamManager& wl_mgr = LLWLParamManager::instance();
+
+ refs.clear();
+ for (std::map<F32, LLWLParamKey>::const_iterator iter = mTimeMap.begin(); iter != mTimeMap.end(); ++iter)
+ {
+ const LLWLParamKey& key = iter->second;
+ if (!wl_mgr.getParamSet(key, refs[key]))
+ {
+ llwarns << "Cannot find sky [" << key.name << "] referenced by a day cycle" << llendl;
+ result = false;
+ }
+ }
+
+ return result;
+}
-void LLWLDayCycle::clearKeys()
+bool LLWLDayCycle::getSkyMap(LLSD& sky_map) const
{
+ std::map<LLWLParamKey, LLWLParamSet> refs;
+
+ if (!getSkyRefs(refs))
+ {
+ return false;
+ }
+
+ sky_map = LLWLParamManager::createSkyMap(refs);
+ return true;
+}
+
+void LLWLDayCycle::clearKeyframes()
+{
+ lldebugs << "Clearing key frames" << llendl;
mTimeMap.clear();
}
-bool LLWLDayCycle::addKey(F32 newTime, const std::string & paramName)
+bool LLWLDayCycle::addKeyframe(F32 newTime, LLWLParamKey frame)
{
// no adding negative time
if(newTime < 0)
@@ -134,48 +208,58 @@ bool LLWLDayCycle::addKey(F32 newTime, const std::string & paramName)
// if time not being used, add it and return true
if(mTimeMap.find(newTime) == mTimeMap.end())
{
- mTimeMap.insert(std::pair<F32, std::string>(newTime, paramName));
+ mTimeMap.insert(std::pair<F32, LLWLParamKey>(newTime, frame));
+ lldebugs << "Adding key frame (" << newTime << ", " << frame.toLLSD() << ")" << llendl;
return true;
}
// otherwise, don't add, and return error
+ llwarns << "Error adding key frame (" << newTime << ", " << frame.toLLSD() << ")" << llendl;
return false;
}
-bool LLWLDayCycle::changeKeyTime(F32 oldTime, F32 newTime)
+bool LLWLDayCycle::changeKeyframeTime(F32 oldTime, F32 newTime)
{
+ lldebugs << "Changing key frame time (" << oldTime << " => " << newTime << ")" << llendl;
+
// just remove and add back
- std::string name = mTimeMap[oldTime];
+ LLWLParamKey frame = mTimeMap[oldTime];
- bool stat = removeKey(oldTime);
+ bool stat = removeKeyframe(oldTime);
if(stat == false)
{
+ lldebugs << "Failed to change key frame time (" << oldTime << " => " << newTime << ")" << llendl;
return stat;
}
- return addKey(newTime, name);
+ return addKeyframe(newTime, frame);
}
-bool LLWLDayCycle::changeKeyParam(F32 time, const std::string & name)
+bool LLWLDayCycle::changeKeyframeParam(F32 time, LLWLParamKey key)
{
+ lldebugs << "Changing key frame param (" << time << ", " << key.toLLSD() << ")" << llendl;
+
// just remove and add back
// make sure param exists
LLWLParamSet tmp;
- bool stat = LLWLParamManager::instance()->getParamSet(name, tmp);
+ bool stat = LLWLParamManager::getInstance()->getParamSet(key, tmp);
if(stat == false)
{
+ lldebugs << "Failed to change key frame param (" << time << ", " << key.toLLSD() << ")" << llendl;
return stat;
}
- mTimeMap[time] = name;
+ mTimeMap[time] = key;
return true;
}
-bool LLWLDayCycle::removeKey(F32 time)
+bool LLWLDayCycle::removeKeyframe(F32 time)
{
+ lldebugs << "Removing key frame (" << time << ")" << llendl;
+
// look for the time. If there, erase it
- std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
+ std::map<F32, LLWLParamKey>::iterator mIt = mTimeMap.find(time);
if(mIt != mTimeMap.end())
{
mTimeMap.erase(mIt);
@@ -185,15 +269,15 @@ bool LLWLDayCycle::removeKey(F32 time)
return false;
}
-bool LLWLDayCycle::getKey(const std::string & name, F32& key)
+bool LLWLDayCycle::getKeytime(LLWLParamKey frame, F32& key_time) const
{
- // scroll through till we find the
- std::map<F32, std::string>::iterator mIt = mTimeMap.begin();
+ // scroll through till we find the correct value in the map
+ std::map<F32, LLWLParamKey>::const_iterator mIt = mTimeMap.begin();
for(; mIt != mTimeMap.end(); ++mIt)
{
- if(name == mIt->second)
+ if(frame == mIt->second)
{
- key = mIt->first;
+ key_time = mIt->first;
return true;
}
}
@@ -204,26 +288,52 @@ bool LLWLDayCycle::getKey(const std::string & name, F32& key)
bool LLWLDayCycle::getKeyedParam(F32 time, LLWLParamSet& param)
{
// just scroll on through till you find it
- std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
- if(mIt != mTimeMap.end())
+ std::map<F32, LLWLParamKey>::iterator mIt = mTimeMap.find(time);
+ if(mIt != mTimeMap.end())
{
- return LLWLParamManager::instance()->getParamSet(mIt->second, param);
+ return LLWLParamManager::getInstance()->getParamSet(mIt->second, param);
}
// return error if not found
+ lldebugs << "Key " << time << " not found" << llendl;
return false;
}
bool LLWLDayCycle::getKeyedParamName(F32 time, std::string & name)
{
// just scroll on through till you find it
- std::map<F32, std::string>::iterator mIt = mTimeMap.find(time);
+ std::map<F32, LLWLParamKey>::iterator mIt = mTimeMap.find(time);
if(mIt != mTimeMap.end())
{
- name = mTimeMap[time];
+ name = mTimeMap[time].name;
return true;
}
// return error if not found
+ lldebugs << "Key " << time << " not found" << llendl;
return false;
}
+
+bool LLWLDayCycle::hasReferencesTo(const LLWLParamKey& keyframe) const
+{
+ F32 dummy;
+ return getKeytime(keyframe, dummy);
+}
+
+void LLWLDayCycle::removeReferencesTo(const LLWLParamKey& keyframe)
+{
+ lldebugs << "Removing references to key frame " << keyframe.toLLSD() << llendl;
+ F32 keytime;
+ bool might_exist;
+ do
+ {
+ // look for it
+ might_exist = getKeytime(keyframe, keytime);
+ if(!might_exist)
+ {
+ return;
+ }
+ might_exist = removeKeyframe(keytime);
+
+ } while(might_exist); // might be another one
+}
diff --git a/indra/newview/llwldaycycle.h b/indra/newview/llwldaycycle.h
index 5cbf72191d..c8585564ed 100644
--- a/indra/newview/llwldaycycle.h
+++ b/indra/newview/llwldaycycle.h
@@ -34,13 +34,16 @@ class LLWLDayCycle;
#include <string>
#include "llwlparamset.h"
#include "llwlanimator.h"
+struct LLWLParamKey;
+#include "llenvmanager.h" // for LLEnvKey::EScope
class LLWLDayCycle
{
+ LOG_CLASS(LLWLDayCycle);
public:
// lists what param sets are used when during the day
- std::map<F32, std::string> mTimeMap;
+ std::map<F32, LLWLParamKey> mTimeMap;
// how long is my day
F32 mDayRate;
@@ -54,35 +57,56 @@ public:
~LLWLDayCycle();
/// load a day cycle
- void loadDayCycle(const std::string & fileName);
+ void loadDayCycle(const LLSD& llsd, LLEnvKey::EScope scope);
/// load a day cycle
+ void loadDayCycleFromFile(const std::string & fileName);
+
+ /// save a day cycle
void saveDayCycle(const std::string & fileName);
- /// clear keys
- void clearKeys();
+ /// save a day cycle
+ void save(const std::string& file_path);
+
+ /// load the LLSD data from a file (returns the undefined LLSD if not found)
+ static LLSD loadCycleDataFromFile(const std::string & fileName);
+
+ /// load the LLSD data from a file specified by full path
+ static LLSD loadDayCycleFromPath(const std::string& file_path);
+
+ /// get the LLSD data for this day cycle
+ LLSD asLLSD();
+
+ // get skies referenced by this day cycle
+ bool getSkyRefs(std::map<LLWLParamKey, LLWLParamSet>& refs) const;
+
+ // get referenced skies as LLSD
+ bool getSkyMap(LLSD& sky_map) const;
+
+ /// clear keyframes
+ void clearKeyframes();
/// Getters and Setters
/// add a new key frame to the day cycle
/// returns true if successful
/// no negative time
- bool addKey(F32 newTime, const std::string & paramName);
+ bool addKeyframe(F32 newTime, LLWLParamKey key);
- /// adjust a key's placement in the day cycle
+ /// adjust a keyframe's placement in the day cycle
/// returns true if successful
- bool changeKeyTime(F32 oldTime, F32 newTime);
+ bool changeKeyframeTime(F32 oldTime, F32 newTime);
- /// adjust a key's parameter used
+ /// adjust a keyframe's parameter used
/// returns true if successful
- bool changeKeyParam(F32 time, const std::string & paramName);
+ bool changeKeyframeParam(F32 time, LLWLParamKey key);
- /// remove a key from the day cycle
+ /// remove a key frame from the day cycle
/// returns true if successful
- bool removeKey(F32 time);
+ bool removeKeyframe(F32 time);
/// get the first key time for a parameter
/// returns false if not there
- bool getKey(const std::string & name, F32& key);
+ bool getKeytime(LLWLParamKey keyFrame, F32& keyTime) const;
/// get the param set at a given time
/// returns true if found one
@@ -92,6 +116,12 @@ public:
/// returns true if it found one
bool getKeyedParamName(F32 time, std::string & name);
+ /// @return true if there are references to the given sky
+ bool hasReferencesTo(const LLWLParamKey& keyframe) const;
+
+ /// removes all references to the sky (paramkey)
+ /// does nothing if the sky doesn't exist in the day
+ void removeReferencesTo(const LLWLParamKey& keyframe);
};
diff --git a/indra/newview/llwlhandlers.cpp b/indra/newview/llwlhandlers.cpp
new file mode 100644
index 0000000000..2425b96678
--- /dev/null
+++ b/indra/newview/llwlhandlers.cpp
@@ -0,0 +1,197 @@
+/**
+ * @file llwlhandlers.cpp
+ * @brief Various classes which handle Windlight-related messaging
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llwlhandlers.h"
+
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "llenvmanager.h"
+#include "llnotificationsutil.h"
+
+/****
+ * LLEnvironmentRequest
+ ****/
+// static
+bool LLEnvironmentRequest::initiate()
+{
+ LLViewerRegion* cur_region = gAgent.getRegion();
+
+ if (!cur_region)
+ {
+ LL_WARNS("WindlightCaps") << "Viewer region not set yet, skipping env. settings request" << LL_ENDL;
+ return false;
+ }
+
+ if (!cur_region->capabilitiesReceived())
+ {
+ LL_INFOS("WindlightCaps") << "Deferring windlight settings request until we've got region caps" << LL_ENDL;
+ cur_region->setCapabilitiesReceivedCallback(boost::bind(&LLEnvironmentRequest::onRegionCapsReceived, _1));
+ return false;
+ }
+
+ return doRequest();
+}
+
+// static
+void LLEnvironmentRequest::onRegionCapsReceived(const LLUUID& region_id)
+{
+ if (region_id != gAgent.getRegion()->getRegionID())
+ {
+ LL_INFOS("WindlightCaps") << "Got caps for a non-current region" << LL_ENDL;
+ return;
+ }
+
+ LL_DEBUGS("WindlightCaps") << "Received region capabilities" << LL_ENDL;
+ doRequest();
+}
+
+// static
+bool LLEnvironmentRequest::doRequest()
+{
+ std::string url = gAgent.getRegion()->getCapability("EnvironmentSettings");
+ if (url.empty())
+ {
+ LL_INFOS("WindlightCaps") << "Skipping windlight setting request - we don't have this capability" << LL_ENDL;
+ // region is apparently not capable of this; don't respond at all
+ return false;
+ }
+
+ LL_INFOS("WindlightCaps") << "Requesting region windlight settings via " << url << LL_ENDL;
+ LLHTTPClient::get(url, new LLEnvironmentRequestResponder());
+ return true;
+}
+
+/****
+ * LLEnvironmentRequestResponder
+ ****/
+int LLEnvironmentRequestResponder::sCount = 0; // init to 0
+
+LLEnvironmentRequestResponder::LLEnvironmentRequestResponder()
+{
+ mID = ++sCount;
+}
+/*virtual*/ void LLEnvironmentRequestResponder::result(const LLSD& unvalidated_content)
+{
+ LL_INFOS("WindlightCaps") << "Received region windlight settings" << LL_ENDL;
+
+ if (mID != sCount)
+ {
+ LL_INFOS("WindlightCaps") << "Got superseded by another responder; ignoring..." << LL_ENDL;
+ return;
+ }
+
+ if (unvalidated_content[0]["regionID"].asUUID() != gAgent.getRegion()->getRegionID())
+ {
+ LL_WARNS("WindlightCaps") << "Not in the region from where this data was received (wanting "
+ << gAgent.getRegion()->getRegionID() << " but got " << unvalidated_content[0]["regionID"].asUUID()
+ << ") - ignoring..." << LL_ENDL;
+ return;
+ }
+
+ LLEnvManagerNew::getInstance()->onRegionSettingsResponse(unvalidated_content);
+}
+/*virtual*/ void LLEnvironmentRequestResponder::error(U32 status, const std::string& reason)
+{
+ LL_INFOS("WindlightCaps") << "Got an error, not using region windlight..." << LL_ENDL;
+ LLEnvManagerNew::getInstance()->onRegionSettingsResponse(LLSD());
+}
+
+/****
+ * LLEnvironmentApply
+ ****/
+
+clock_t LLEnvironmentApply::UPDATE_WAIT_SECONDS = clock_t(3.f);
+clock_t LLEnvironmentApply::sLastUpdate = clock_t(0.f);
+
+// static
+bool LLEnvironmentApply::initiateRequest(const LLSD& content)
+{
+ clock_t current = clock();
+
+ // Make sure we don't update too frequently.
+ if (current < sLastUpdate + (UPDATE_WAIT_SECONDS * CLOCKS_PER_SEC))
+ {
+ LLSD args(LLSD::emptyMap());
+ args["WAIT"] = (F64)UPDATE_WAIT_SECONDS;
+ LLNotificationsUtil::add("EnvUpdateRate", args);
+ return false;
+ }
+
+ sLastUpdate = current;
+
+ // Send update request.
+ std::string url = gAgent.getRegion()->getCapability("EnvironmentSettings");
+ if (url.empty())
+ {
+ LL_WARNS("WindlightCaps") << "Applying windlight settings not supported" << LL_ENDL;
+ return false;
+ }
+
+ LL_INFOS("WindlightCaps") << "Sending windlight settings to " << url << LL_ENDL;
+ LL_DEBUGS("WindlightCaps") << "content: " << content << LL_ENDL;
+ LLHTTPClient::post(url, content, new LLEnvironmentApplyResponder());
+ return true;
+}
+
+/****
+ * LLEnvironmentApplyResponder
+ ****/
+/*virtual*/ void LLEnvironmentApplyResponder::result(const LLSD& content)
+{
+ if (content["regionID"].asUUID() != gAgent.getRegion()->getRegionID())
+ {
+ LL_WARNS("WindlightCaps") << "No longer in the region where data was sent (currently "
+ << gAgent.getRegion()->getRegionID() << ", reply is from " << content["regionID"].asUUID()
+ << "); ignoring..." << LL_ENDL;
+ return;
+ }
+ else if (content["success"].asBoolean())
+ {
+ LL_DEBUGS("WindlightCaps") << "Success in applying windlight settings to region " << content["regionID"].asUUID() << LL_ENDL;
+ LLEnvManagerNew::instance().onRegionSettingsApplyResponse(true);
+ }
+ else
+ {
+ LL_WARNS("WindlightCaps") << "Region couldn't apply windlight settings! Reason from sim: " << content["fail_reason"].asString() << LL_ENDL;
+ LLSD args(LLSD::emptyMap());
+ args["FAIL_REASON"] = content["fail_reason"].asString();
+ LLNotificationsUtil::add("WLRegionApplyFail", args);
+ LLEnvManagerNew::instance().onRegionSettingsApplyResponse(false);
+ }
+}
+/*virtual*/ void LLEnvironmentApplyResponder::error(U32 status, const std::string& reason)
+{
+ std::stringstream msg;
+ msg << reason << " (Code " << status << ")";
+
+ LL_WARNS("WindlightCaps") << "Couldn't apply windlight settings to region! Reason: " << msg << LL_ENDL;
+
+ LLSD args(LLSD::emptyMap());
+ args["FAIL_REASON"] = msg.str();
+ LLNotificationsUtil::add("WLRegionApplyFail", args);
+}
diff --git a/indra/newview/llwlhandlers.h b/indra/newview/llwlhandlers.h
new file mode 100644
index 0000000000..23558876da
--- /dev/null
+++ b/indra/newview/llwlhandlers.h
@@ -0,0 +1,100 @@
+/**
+ * @file llwlhandlers.h
+ * @brief Headers for classes in llwlhandlers.cpp
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLWLHANDLERS_H
+#define LL_LLWLHANDLERS_H
+
+#include "llviewerprecompiledheaders.h"
+#include "llhttpclient.h"
+
+class LLEnvironmentRequest
+{
+ LOG_CLASS(LLEnvironmentRequest);
+public:
+ /// @return true if request was successfully sent
+ static bool initiate();
+
+private:
+ static void onRegionCapsReceived(const LLUUID& region_id);
+ static bool doRequest();
+};
+
+class LLEnvironmentRequestResponder: public LLHTTPClient::Responder
+{
+ LOG_CLASS(LLEnvironmentRequestResponder);
+public:
+ virtual void result(const LLSD& content);
+ virtual void error(U32 status, const std::string& reason);
+
+private:
+ friend class LLEnvironmentRequest;
+
+ LLEnvironmentRequestResponder();
+ static int sCount;
+ int mID;
+};
+
+class LLEnvironmentApply
+{
+ LOG_CLASS(LLEnvironmentApply);
+public:
+ /// @return true if request was successfully sent
+ static bool initiateRequest(const LLSD& content);
+
+private:
+ static clock_t sLastUpdate;
+ static clock_t UPDATE_WAIT_SECONDS;
+};
+
+class LLEnvironmentApplyResponder: public LLHTTPClient::Responder
+{
+ LOG_CLASS(LLEnvironmentApplyResponder);
+public:
+ /*
+ * Expecting reply from sim in form of:
+ * {
+ * regionID : uuid,
+ * messageID: uuid,
+ * success : true
+ * }
+ * or
+ * {
+ * regionID : uuid,
+ * success : false,
+ * fail_reason : string
+ * }
+ */
+ virtual void result(const LLSD& content);
+
+ virtual void error(U32 status, const std::string& reason); // non-200 errors only
+
+private:
+ friend class LLEnvironmentApply;
+
+ LLEnvironmentApplyResponder() {}
+};
+
+#endif // LL_LLWLHANDLERS_H
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
index 848efcbb49..55608a059f 100644
--- a/indra/newview/llwlparammanager.cpp
+++ b/indra/newview/llwlparammanager.cpp
@@ -37,23 +37,29 @@
#include "llspinctrl.h"
#include "llcheckboxctrl.h"
#include "lluictrlfactory.h"
+#include "llviewercamera.h"
#include "llcombobox.h"
#include "lllineeditor.h"
#include "llsdserialize.h"
#include "v4math.h"
+#include "llviewerdisplay.h"
#include "llviewercontrol.h"
+#include "llviewerwindow.h"
+#include "lldrawpoolwater.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "lldaycyclemanager.h"
+#include "llenvmanager.h"
#include "llwlparamset.h"
#include "llpostprocess.h"
-#include "llfloaterwindlight.h"
-#include "llfloaterdaycycle.h"
-#include "llfloaterenvsettings.h"
-#include "curl/curl.h"
+#include "llviewershadermgr.h"
+#include "llglslshader.h"
-LLWLParamManager * LLWLParamManager::sInstance = NULL;
-static LLFastTimer::DeclareTimer FTM_UPDATE_WLPARAM("Update Windlight Params");
+#include "curl/curl.h"
+#include "llstreamtools.h"
LLWLParamManager::LLWLParamManager() :
@@ -96,161 +102,237 @@ LLWLParamManager::~LLWLParamManager()
{
}
-void LLWLParamManager::loadPresets(const std::string& file_name)
+void LLWLParamManager::clearParamSetsOfScope(LLWLParamKey::EScope scope)
{
- std::string path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading Default WindLight settings from " << path_name << LL_ENDL;
-
- bool found = true;
- LLDirIterator app_settings_iter(path_name, "*.xml");
- while(found)
+ if (LLWLParamKey::SCOPE_LOCAL == scope)
{
- std::string name;
- found = app_settings_iter.next(name);
- if(found)
- {
-
- name=name.erase(name.length()-4);
-
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ LL_WARNS("Windlight") << "Tried to clear windlight sky presets from local system! This shouldn't be called..." << LL_ENDL;
+ return;
+ }
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
+ std::set<LLWLParamKey> to_remove;
+ for(std::map<LLWLParamKey, LLWLParamSet>::iterator iter = mParamList.begin(); iter != mParamList.end(); ++iter)
+ {
+ if(iter->first.scope == scope)
+ {
+ to_remove.insert(iter->first);
}
}
- // And repeat for user presets, note the user presets will modify any system presets already loaded
+ for(std::set<LLWLParamKey>::iterator iter = to_remove.begin(); iter != to_remove.end(); ++iter)
+ {
+ mParamList.erase(*iter);
+ }
+}
- std::string path_name2(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User WindLight settings from " << path_name2 << LL_ENDL;
-
- found = true;
- LLDirIterator user_settings_iter(path_name2, "*.xml");
- while(found)
+// returns all skies referenced by the day cycle, with their final names
+// side effect: applies changes to all internal structures!
+std::map<LLWLParamKey, LLWLParamSet> LLWLParamManager::finalizeFromDayCycle(LLWLParamKey::EScope scope)
+{
+ lldebugs << "mDay before finalizing:" << llendl;
{
- std::string name;
- found = user_settings_iter.next(name);
- if(found)
+ for (std::map<F32, LLWLParamKey>::iterator iter = mDay.mTimeMap.begin(); iter != mDay.mTimeMap.end(); ++iter)
{
- name=name.erase(name.length()-4);
+ LLWLParamKey& key = iter->second;
+ lldebugs << iter->first << "->" << key.name << llendl;
+ }
+ }
+
+ std::map<LLWLParamKey, LLWLParamSet> final_references;
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_unescape(name.c_str(), name.size());
- std::string unescaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ // Move all referenced to desired scope, renaming if necessary
+ // First, save skies referenced
+ std::map<LLWLParamKey, LLWLParamSet> current_references; // all skies referenced by the day cycle, with their current names
+ // guard against skies with same name and different scopes
+ std::set<std::string> inserted_names;
+ std::map<std::string, unsigned int> conflicted_names; // integer later used as a count, for uniquely renaming conflicts
- LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
- loadPreset(unescaped_name,FALSE);
+ LLWLDayCycle& cycle = mDay;
+ for(std::map<F32, LLWLParamKey>::iterator iter = cycle.mTimeMap.begin();
+ iter != cycle.mTimeMap.end();
+ ++iter)
+ {
+ LLWLParamKey& key = iter->second;
+ std::string desired_name = key.name;
+ replace_newlines_with_whitespace(desired_name); // already shouldn't have newlines, but just in case
+ if(inserted_names.find(desired_name) == inserted_names.end())
+ {
+ inserted_names.insert(desired_name);
}
+ else
+ {
+ // make exist in map
+ conflicted_names[desired_name] = 0;
+ }
+ current_references[key] = mParamList[key];
}
-}
+ // forget all old skies in target scope, and rebuild, renaming as needed
+ clearParamSetsOfScope(scope);
+ for(std::map<LLWLParamKey, LLWLParamSet>::iterator iter = current_references.begin(); iter != current_references.end(); ++iter)
+ {
+ const LLWLParamKey& old_key = iter->first;
-void LLWLParamManager::savePresets(const std::string & fileName)
-{
- //Nobody currently calls me, but if they did, then its reasonable to write the data out to the user's folder
- //and not over the RO system wide version.
+ std::string desired_name(old_key.name);
+ replace_newlines_with_whitespace(desired_name);
- LLSD paramsData(LLSD::emptyMap());
-
- std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight", fileName));
+ LLWLParamKey new_key(desired_name, scope); // name will be replaced later if necessary
- for(std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.begin();
- mIt != mParamList.end();
- ++mIt)
- {
- paramsData[mIt->first] = mIt->second.getAll();
- }
+ // if this sky is one with a non-unique name, rename via appending a number
+ // an existing preset of the target scope gets to keep its name
+ if (scope != old_key.scope && conflicted_names.find(desired_name) != conflicted_names.end())
+ {
+ std::string& new_name = new_key.name;
- llofstream presetsXML(pathName);
+ do
+ {
+ // if this executes more than once, this is an absurdly pathological case
+ // (e.g. "x" repeated twice, but "x 1" already exists, so need to use "x 2")
+ std::stringstream temp;
+ temp << desired_name << " " << (++conflicted_names[desired_name]);
+ new_name = temp.str();
+ } while (inserted_names.find(new_name) != inserted_names.end());
- LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();
+ // yay, found one that works
+ inserted_names.insert(new_name); // track names we consume here; shouldn't be necessary due to ++int? but just in case
- formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);
+ // *TODO factor out below into a rename()?
- presetsXML.close();
-}
+ LL_INFOS("Windlight") << "Renamed " << old_key.name << " (scope" << old_key.scope << ") to "
+ << new_key.name << " (scope " << new_key.scope << ")" << LL_ENDL;
-void LLWLParamManager::loadPreset(const std::string & name,bool propagate)
-{
-
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ // update name in sky
+ iter->second.mName = new_name;
- escaped_filename += ".xml";
+ // update keys in day cycle
+ for(std::map<F32, LLWLParamKey>::iterator frame = cycle.mTimeMap.begin(); frame != cycle.mTimeMap.end(); ++frame)
+ {
+ if (frame->second == old_key)
+ {
+ frame->second = new_key;
+ }
+ }
- std::string pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", escaped_filename));
- LL_DEBUGS2("AppInit", "Shaders") << "Loading WindLight sky setting from " << pathName << LL_ENDL;
+ // add to master sky map
+ mParamList[new_key] = iter->second;
+ }
- llifstream presetsXML;
- presetsXML.open(pathName.c_str());
+ final_references[new_key] = iter->second;
+ }
- // That failed, try loading from the users area instead.
- if(!presetsXML)
+ lldebugs << "mDay after finalizing:" << llendl;
{
- pathName=gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename);
- LL_DEBUGS2("AppInit", "Shaders") << "Loading User WindLight sky setting from " << pathName << LL_ENDL;
- presetsXML.clear();
- presetsXML.open(pathName.c_str());
+ for (std::map<F32, LLWLParamKey>::iterator iter = mDay.mTimeMap.begin(); iter != mDay.mTimeMap.end(); ++iter)
+ {
+ LLWLParamKey& key = iter->second;
+ lldebugs << iter->first << "->" << key.name << llendl;
+ }
}
- if (presetsXML)
+ return final_references;
+}
+
+// static
+LLSD LLWLParamManager::createSkyMap(std::map<LLWLParamKey, LLWLParamSet> refs)
+{
+ LLSD skies = LLSD::emptyMap();
+ for(std::map<LLWLParamKey, LLWLParamSet>::iterator iter = refs.begin(); iter != refs.end(); ++iter)
{
- LLSD paramsData(LLSD::emptyMap());
+ skies.insert(iter->first.name, iter->second.getAll());
+ }
+ return skies;
+}
- LLPointer<LLSDParser> parser = new LLSDXMLParser();
+void LLWLParamManager::addAllSkies(const LLWLParamKey::EScope scope, const LLSD& sky_presets)
+{
+ for(LLSD::map_const_iterator iter = sky_presets.beginMap(); iter != sky_presets.endMap(); ++iter)
+ {
+ LLWLParamSet set;
+ set.setAll(iter->second);
+ mParamList[LLWLParamKey(iter->first, scope)] = set;
+ }
+}
- parser->parse(presetsXML, paramsData, LLSDSerialize::SIZE_UNLIMITED);
+void LLWLParamManager::refreshRegionPresets()
+{
+ // Remove all region sky presets because they may belong to a previously visited region.
+ clearParamSetsOfScope(LLEnvKey::SCOPE_REGION);
+
+ // Add all sky presets belonging to the current region.
+ addAllSkies(LLEnvKey::SCOPE_REGION, LLEnvManagerNew::instance().getRegionSettings().getSkyMap());
+}
+
+void LLWLParamManager::loadAllPresets()
+{
+ // First, load system (coming out of the box) sky presets.
+ loadPresetsFromDir(getSysDir());
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
- if(mIt == mParamList.end())
+ // Then load user presets. Note that user day presets will modify any system ones already loaded.
+ loadPresetsFromDir(getUserDir());
+}
+
+void LLWLParamManager::loadPresetsFromDir(const std::string& dir)
+{
+ LL_INFOS2("AppInit", "Shaders") << "Loading sky presets from " << dir << LL_ENDL;
+
+ LLDirIterator dir_iter(dir, "*.xml");
+ while (1)
+ {
+ std::string file;
+ if (!dir_iter.next(file))
{
- addParamSet(name, paramsData);
+ break; // no more files
}
- else
+
+ std::string path = dir + file;
+ if (!loadPreset(path))
{
- setParamSet(name, paramsData);
+ llwarns << "Error loading sky preset from " << path << llendl;
}
- presetsXML.close();
- }
- else
+ }
+}
+
+bool LLWLParamManager::loadPreset(const std::string& path)
+{
+ llifstream xml_file;
+ std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
+
+ xml_file.open(path.c_str());
+ if (!xml_file)
{
- llwarns << "Can't find " << name << llendl;
- return;
+ return false;
}
-
- if(propagate)
+ LL_DEBUGS2("AppInit", "Shaders") << "Loading sky " << name << LL_ENDL;
+
+ LLSD params_data;
+ LLPointer<LLSDParser> parser = new LLSDXMLParser();
+ parser->parse(xml_file, params_data, LLSDSerialize::SIZE_UNLIMITED);
+ xml_file.close();
+
+ LLWLParamKey key(name, LLEnvKey::SCOPE_LOCAL);
+ if (hasParamSet(key))
{
- getParamSet(name, mCurParams);
- propagateParameters();
+ setParamSet(key, params_data);
+ }
+ else
+ {
+ addParamSet(key, params_data);
}
-}
-void LLWLParamManager::savePreset(const std::string & name)
-{
- // bugfix for SL-46920: preventing filenames that break stuff.
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_filename(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
+ return true;
+}
- escaped_filename += ".xml";
+void LLWLParamManager::savePreset(LLWLParamKey key)
+{
+ llassert(key.scope == LLEnvKey::SCOPE_LOCAL && !key.name.empty());
// make an empty llsd
LLSD paramsData(LLSD::emptyMap());
- std::string pathName(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", escaped_filename));
+ std::string pathName(getUserDir() + escapeString(key.name) + ".xml");
// fill it with LLSD windlight params
- paramsData = mParamList[name].getAll();
+ paramsData = mParamList[key].getAll();
// write to file
llofstream presetsXML(pathName);
@@ -283,6 +365,8 @@ void LLWLParamManager::updateShaderUniforms(LLGLSLShader * shader)
}
+static LLFastTimer::DeclareTimer FTM_UPDATE_WLPARAM("Update Windlight Params");
+
void LLWLParamManager::propagateParameters(void)
{
LLFastTimer ftm(FTM_UPDATE_WLPARAM);
@@ -362,7 +446,7 @@ void LLWLParamManager::update(LLViewerCamera * cam)
mCurParams.updateCloudScrolling();
// update only if running
- if(mAnimator.mIsRunning)
+ if(mAnimator.getIsRunning())
{
mAnimator.update(mCurParams);
}
@@ -370,31 +454,16 @@ void LLWLParamManager::update(LLViewerCamera * cam)
// update the shaders and the menu
propagateParameters();
- // sync menus if they exist
- LLFloaterWindLight* wlfloater = LLFloaterReg::findTypedInstance<LLFloaterWindLight>("env_windlight");
- if (wlfloater)
- {
- wlfloater->syncMenu();
- }
- LLFloaterDayCycle* dlfloater = LLFloaterReg::findTypedInstance<LLFloaterDayCycle>("env_day_cycle");
- if (dlfloater)
- {
- dlfloater->syncMenu();
- }
- LLFloaterEnvSettings* envfloater = LLFloaterReg::findTypedInstance<LLFloaterEnvSettings>("env_settings");
- if (envfloater)
- {
- envfloater->syncMenu();
- }
-
F32 camYaw = cam->getYaw();
+ stop_glerror();
+
// *TODO: potential optimization - this block may only need to be
// executed some of the time. For example for water shaders only.
{
F32 camYawDelta = mSunDeltaYaw * DEG_TO_RAD;
- LLVector3 lightNorm3(mLightDir);
+ LLVector3 lightNorm3(mLightDir);
lightNorm3 *= LLQuaternion(-(camYaw + camYawDelta), LLVector3(0.f, 1.f, 0.f));
mRotatedLightDir = LLVector4(lightNorm3, 0.f);
@@ -412,17 +481,18 @@ void LLWLParamManager::update(LLViewerCamera * cam)
}
}
-// static
-void LLWLParamManager::initClass(void)
+bool LLWLParamManager::applyDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time)
{
- instance();
+ mDay.loadDayCycle(params, scope);
+ resetAnimator(time, true); // set to specified time and start animator
+ return true;
}
-// static
-void LLWLParamManager::cleanupClass()
+bool LLWLParamManager::applySkyParams(const LLSD& params)
{
- delete sInstance;
- sInstance = NULL;
+ mAnimator.deactivate();
+ mCurParams.setAll(params);
+ return true;
}
void LLWLParamManager::resetAnimator(F32 curTime, bool run)
@@ -432,133 +502,227 @@ void LLWLParamManager::resetAnimator(F32 curTime, bool run)
return;
}
-bool LLWLParamManager::addParamSet(const std::string& name, LLWLParamSet& param)
+
+bool LLWLParamManager::addParamSet(const LLWLParamKey& key, LLWLParamSet& param)
{
// add a new one if not one there already
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
+ std::map<LLWLParamKey, LLWLParamSet>::iterator mIt = mParamList.find(key);
if(mIt == mParamList.end())
{
- mParamList[name] = param;
+ llassert(!key.name.empty());
+ // *TODO: validate params
+ mParamList[key] = param;
+ mPresetListChangeSignal();
return true;
}
return false;
}
-BOOL LLWLParamManager::addParamSet(const std::string& name, LLSD const & param)
+BOOL LLWLParamManager::addParamSet(const LLWLParamKey& key, LLSD const & param)
{
- // add a new one if not one there already
- std::map<std::string, LLWLParamSet>::const_iterator finder = mParamList.find(name);
- if(finder == mParamList.end())
- {
- mParamList[name].setAll(param);
- return TRUE;
- }
- else
- {
- return FALSE;
- }
+ LLWLParamSet param_set;
+ param_set.setAll(param);
+ return addParamSet(key, param_set);
}
-bool LLWLParamManager::getParamSet(const std::string& name, LLWLParamSet& param)
+bool LLWLParamManager::getParamSet(const LLWLParamKey& key, LLWLParamSet& param)
{
// find it and set it
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
+ std::map<LLWLParamKey, LLWLParamSet>::iterator mIt = mParamList.find(key);
if(mIt != mParamList.end())
{
- param = mParamList[name];
- param.mName = name;
+ param = mParamList[key];
+ param.mName = key.name;
return true;
}
return false;
}
-bool LLWLParamManager::setParamSet(const std::string& name, LLWLParamSet& param)
+bool LLWLParamManager::hasParamSet(const LLWLParamKey& key)
{
- mParamList[name] = param;
+ LLWLParamSet dummy;
+ return getParamSet(key, dummy);
+}
+
+bool LLWLParamManager::setParamSet(const LLWLParamKey& key, LLWLParamSet& param)
+{
+ llassert(!key.name.empty());
+ // *TODO: validate params
+ mParamList[key] = param;
return true;
}
-bool LLWLParamManager::setParamSet(const std::string& name, const LLSD & param)
+bool LLWLParamManager::setParamSet(const LLWLParamKey& key, const LLSD & param)
{
+ llassert(!key.name.empty());
+ // *TODO: validate params
+
// quick, non robust (we won't be working with files, but assets) check
+ // this might not actually be true anymore....
if(!param.isMap())
{
return false;
}
- mParamList[name].setAll(param);
-
- return true;
+ LLWLParamSet param_set;
+ param_set.setAll(param);
+ return setParamSet(key, param_set);
}
-bool LLWLParamManager::removeParamSet(const std::string& name, bool delete_from_disk)
+void LLWLParamManager::removeParamSet(const LLWLParamKey& key, bool delete_from_disk)
{
+ // *NOTE: Removing a sky preset invalidates day cycles that refer to it.
+
+ if (key.scope == LLEnvKey::SCOPE_REGION)
+ {
+ llwarns << "Removing region skies not supported" << llendl;
+ llassert(key.scope == LLEnvKey::SCOPE_LOCAL);
+ return;
+ }
+
// remove from param list
- std::map<std::string, LLWLParamSet>::iterator mIt = mParamList.find(name);
- if(mIt != mParamList.end())
+ std::map<LLWLParamKey, LLWLParamSet>::iterator it = mParamList.find(key);
+ if (it == mParamList.end())
{
- mParamList.erase(mIt);
+ LL_WARNS("WindLight") << "No sky preset named " << key.name << LL_ENDL;
+ return;
}
- F32 key;
+ mParamList.erase(it);
+ mDay.removeReferencesTo(key);
- // remove all references
- bool stat = true;
- do
+ // remove from file system if requested
+ if (delete_from_disk)
{
- // get it
- stat = mDay.getKey(name, key);
- if(stat == false)
+ std::string path_name(getUserDir());
+ std::string escaped_name = escapeString(key.name);
+
+ if(gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml") < 1)
{
- break;
+ LL_WARNS("WindLight") << "Error removing sky preset " << key.name << " from disk" << LL_ENDL;
}
+ }
- // and remove
- stat = mDay.removeKey(key);
+ // signal interested parties
+ mPresetListChangeSignal();
+}
- } while(stat == true);
-
- if(delete_from_disk)
+bool LLWLParamManager::isSystemPreset(const std::string& preset_name) const
+{
+ // *TODO: file system access is excessive here.
+ return gDirUtilp->fileExists(getSysDir() + escapeString(preset_name) + ".xml");
+}
+
+void LLWLParamManager::getPresetNames(preset_name_list_t& region, preset_name_list_t& user, preset_name_list_t& sys) const
+{
+ region.clear();
+ user.clear();
+ sys.clear();
+
+ for (std::map<LLWLParamKey, LLWLParamSet>::const_iterator it = mParamList.begin(); it != mParamList.end(); it++)
{
- std::string path_name(gDirUtilp->getExpandedFilename( LL_PATH_USER_SETTINGS , "windlight/skies", ""));
-
- // use full curl escaped name
- char * curl_str = curl_escape(name.c_str(), name.size());
- std::string escaped_name(curl_str);
- curl_free(curl_str);
- curl_str = NULL;
-
- gDirUtilp->deleteFilesInDir(path_name, escaped_name + ".xml");
- }
+ const LLWLParamKey& key = it->first;
+ const std::string& name = key.name;
- return true;
+ if (key.scope == LLEnvKey::SCOPE_REGION)
+ {
+ region.push_back(name);
+ }
+ else
+ {
+ if (isSystemPreset(name))
+ {
+ sys.push_back(name);
+ }
+ else
+ {
+ user.push_back(name);
+ }
+ }
+ }
}
+void LLWLParamManager::getUserPresetNames(preset_name_list_t& user) const
+{
+ preset_name_list_t region, sys; // unused
+ getPresetNames(region, user, sys);
+}
-// static
-LLWLParamManager * LLWLParamManager::instance()
+void LLWLParamManager::getPresetKeys(preset_key_list_t& keys) const
{
- if(NULL == sInstance)
+ keys.clear();
+
+ for (std::map<LLWLParamKey, LLWLParamSet>::const_iterator it = mParamList.begin(); it != mParamList.end(); it++)
{
- sInstance = new LLWLParamManager();
+ keys.push_back(it->first);
+ }
+}
+
+boost::signals2::connection LLWLParamManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb)
+{
+ return mPresetListChangeSignal.connect(cb);
+}
- sInstance->loadPresets(LLStringUtil::null);
+// virtual static
+void LLWLParamManager::initSingleton()
+{
+ LL_DEBUGS("Windlight") << "Initializing sky" << LL_ENDL;
+
+ loadAllPresets();
- // load the day
- sInstance->mDay.loadDayCycle(std::string("Default.xml"));
+ // load the day
+ std::string preferred_day = LLEnvManagerNew::instance().getDayCycleName();
+ if (!LLDayCycleManager::instance().getPreset(preferred_day, mDay))
+ {
+ // Fall back to default.
+ llwarns << "No day cycle named " << preferred_day << ", falling back to defaults" << llendl;
+ mDay.loadDayCycleFromFile("Default.xml");
- // *HACK - sets cloud scrolling to what we want... fix this better in the future
- sInstance->getParamSet("Default", sInstance->mCurParams);
+ // *TODO: Fix user preferences accordingly.
+ }
- // set it to noon
- sInstance->resetAnimator(0.5, true);
+ // *HACK - sets cloud scrolling to what we want... fix this better in the future
+ std::string sky = LLEnvManagerNew::instance().getSkyPresetName();
+ if (!getParamSet(LLWLParamKey(sky, LLWLParamKey::SCOPE_LOCAL), mCurParams))
+ {
+ llwarns << "No sky preset named " << sky << ", falling back to defaults" << llendl;
+ getParamSet(LLWLParamKey("Default", LLWLParamKey::SCOPE_LOCAL), mCurParams);
- // but use linden time sets it to what the estate is
- sInstance->mAnimator.mUseLindenTime = true;
+ // *TODO: Fix user preferences accordingly.
}
- return sInstance;
+ // set it to noon
+ resetAnimator(0.5, LLEnvManagerNew::instance().getUseDayCycle());
+
+ // but use linden time sets it to what the estate is
+ mAnimator.setTimeType(LLWLAnimator::TIME_LINDEN);
+
+ LLEnvManagerNew::instance().usePrefs();
+}
+
+// static
+std::string LLWLParamManager::getSysDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", "");
+}
+
+// static
+std::string LLWLParamManager::getUserDir()
+{
+ return gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "windlight/skies", "");
+}
+
+// static
+std::string LLWLParamManager::escapeString(const std::string& str)
+{
+ // Don't use LLURI::escape() because it doesn't encode '-' characters
+ // which may break handling of some system presets like "A-12AM".
+ char* curl_str = curl_escape(str.c_str(), str.size());
+ std::string escaped_str(curl_str);
+ curl_free(curl_str);
+
+ return escaped_str;
}
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
index 8c6329e769..bc984b9126 100644
--- a/indra/newview/llwlparammanager.h
+++ b/indra/newview/llwlparammanager.h
@@ -27,12 +27,14 @@
#ifndef LL_WLPARAMMANAGER_H
#define LL_WLPARAMMANAGER_H
-#include <vector>
+#include <list>
#include <map>
+#include "llenvmanager.h"
#include "llwlparamset.h"
#include "llwlanimator.h"
#include "llwldaycycle.h"
#include "llviewercamera.h"
+#include "lltrans.h"
class LLGLSLShader;
@@ -72,7 +74,7 @@ struct WLColorControl {
r = val.mV[0];
g = val.mV[1];
b = val.mV[2];
- i = val.mV[3];
+ i = val.mV[3];
return *this;
}
@@ -115,25 +117,112 @@ struct WLFloatControl {
}
};
-/// WindLight parameter manager class - what controls all the wind light shaders
-class LLWLParamManager
+struct LLWLParamKey : LLEnvKey
{
public:
+ // scope and source of a param set (WL sky preset)
+ std::string name;
+ EScope scope;
- LLWLParamManager();
- ~LLWLParamManager();
+ // for conversion from LLSD
+ static const int NAME_IDX = 0;
+ static const int SCOPE_IDX = 1;
+
+ inline LLWLParamKey(const std::string& n, EScope s)
+ : name(n), scope(s)
+ {
+ }
+
+ inline LLWLParamKey(LLSD llsd)
+ : name(llsd[NAME_IDX].asString()), scope(EScope(llsd[SCOPE_IDX].asInteger()))
+ {
+ }
+
+ inline LLWLParamKey() // NOT really valid, just so std::maps can return a default of some sort
+ : name(""), scope(SCOPE_LOCAL)
+ {
+ }
+
+ inline LLWLParamKey(std::string& stringVal)
+ {
+ size_t len = stringVal.length();
+ if (len > 0)
+ {
+ name = stringVal.substr(0, len - 1);
+ scope = (EScope) atoi(stringVal.substr(len - 1, len).c_str());
+ }
+ }
+
+ inline std::string toStringVal() const
+ {
+ std::stringstream str;
+ str << name << scope;
+ return str.str();
+ }
+
+ inline LLSD toLLSD() const
+ {
+ LLSD llsd = LLSD::emptyArray();
+ llsd.append(LLSD(name));
+ llsd.append(LLSD(scope));
+ return llsd;
+ }
+
+ inline void fromLLSD(const LLSD& llsd)
+ {
+ name = llsd[NAME_IDX].asString();
+ scope = EScope(llsd[SCOPE_IDX].asInteger());
+ }
+
+ inline bool operator <(const LLWLParamKey other) const
+ {
+ if (name < other.name)
+ {
+ return true;
+ }
+ else if (name > other.name)
+ {
+ return false;
+ }
+ else
+ {
+ return scope < other.scope;
+ }
+ }
+
+ inline bool operator ==(const LLWLParamKey other) const
+ {
+ return (name == other.name) && (scope == other.scope);
+ }
- /// load a preset file
- void loadPresets(const std::string & fileName);
+ inline std::string toString() const
+ {
+ switch (scope)
+ {
+ case SCOPE_LOCAL:
+ return name + std::string(" (") + LLTrans::getString("Local") + std::string(")");
+ break;
+ case SCOPE_REGION:
+ return name + std::string(" (") + LLTrans::getString("Region") + std::string(")");
+ break;
+ default:
+ return name + " (?)";
+ }
+ }
+};
- /// save the preset file
- void savePresets(const std::string & fileName);
+/// WindLight parameter manager class - what controls all the wind light shaders
+class LLWLParamManager : public LLSingleton<LLWLParamManager>
+{
+ LOG_CLASS(LLWLParamManager);
- /// load an individual preset into the sky
- void loadPreset(const std::string & name,bool propogate=true);
+public:
+ typedef std::list<std::string> preset_name_list_t;
+ typedef std::list<LLWLParamKey> preset_key_list_t;
+ typedef boost::signals2::signal<void()> preset_list_signal_t;
/// save the parameter presets to file
- void savePreset(const std::string & name);
+ void savePreset(const LLWLParamKey key);
/// Set shader uniforms dirty, so they'll update automatically.
void propagateParameters(void);
@@ -147,6 +236,12 @@ public:
/// update information camera dependent parameters
void update(LLViewerCamera * cam);
+ /// apply specified day cycle, setting time to noon by default
+ bool applyDayCycleParams(const LLSD& params, LLEnvKey::EScope scope, F32 time = 0.5);
+
+ /// apply specified fixed sky params
+ bool applySkyParams(const LLSD& params);
+
// get where the light is pointing
inline LLVector4 getLightDir(void) const;
@@ -161,36 +256,62 @@ public:
/// get the radius of the dome
inline F32 getDomeRadius(void) const;
-
- /// Perform global initialization for this class.
- static void initClass(void);
-
- // Cleanup of global data that's only inited once per class.
- static void cleanupClass();
- /// add a param to the list
- bool addParamSet(const std::string& name, LLWLParamSet& param);
+ /// add a param set (preset) to the list
+ bool addParamSet(const LLWLParamKey& key, LLWLParamSet& param);
- /// add a param to the list
- BOOL addParamSet(const std::string& name, LLSD const & param);
+ /// add a param set (preset) to the list
+ BOOL addParamSet(const LLWLParamKey& key, LLSD const & param);
- /// get a param from the list
- bool getParamSet(const std::string& name, LLWLParamSet& param);
+ /// get a param set (preset) from the list
+ bool getParamSet(const LLWLParamKey& key, LLWLParamSet& param);
+
+ /// check whether the preset is in the list
+ bool hasParamSet(const LLWLParamKey& key);
/// set the param in the list with a new param
- bool setParamSet(const std::string& name, LLWLParamSet& param);
+ bool setParamSet(const LLWLParamKey& key, LLWLParamSet& param);
/// set the param in the list with a new param
- bool setParamSet(const std::string& name, LLSD const & param);
+ bool setParamSet(const LLWLParamKey& key, LLSD const & param);
/// gets rid of a parameter and any references to it
- /// returns true if successful
- bool removeParamSet(const std::string& name, bool delete_from_disk);
+ /// ignores "delete_from_disk" if the scope is not local
+ void removeParamSet(const LLWLParamKey& key, bool delete_from_disk);
- // singleton pattern implementation
- static LLWLParamManager * instance();
+ /// clear parameter mapping of a given scope
+ void clearParamSetsOfScope(LLEnvKey::EScope scope);
-public:
+ /// @return true if the preset comes out of the box
+ bool isSystemPreset(const std::string& preset_name) const;
+
+ /// @return user and system preset names as a single list
+ void getPresetNames(preset_name_list_t& region, preset_name_list_t& user, preset_name_list_t& sys) const;
+
+ /// @return user preset names
+ void getUserPresetNames(preset_name_list_t& user) const;
+
+ /// @return keys of all known presets
+ void getPresetKeys(preset_key_list_t& keys) const;
+
+ /// Emitted when a preset gets added or deleted.
+ boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
+
+ /// add all skies in LLSD using the given scope
+ void addAllSkies(LLEnvKey::EScope scope, const LLSD& preset_map);
+
+ /// refresh region-scope presets
+ void refreshRegionPresets();
+
+ // returns all skies referenced by the current day cycle (in mDay), with their final names
+ // side effect: applies changes to all internal structures! (trashes all unreferenced skies in scope, keys in day cycle rescoped to scope, etc.)
+ std::map<LLWLParamKey, LLWLParamSet> finalizeFromDayCycle(LLWLParamKey::EScope scope);
+
+ // returns all skies in map (intended to be called with output from a finalize)
+ static LLSD createSkyMap(std::map<LLWLParamKey, LLWLParamSet> map);
+
+ /// escape string in a way different from LLURI::escape()
+ static std::string escapeString(const std::string& str);
// helper variables
LLWLAnimator mAnimator;
@@ -243,14 +364,27 @@ public:
F32 mDomeOffset;
F32 mDomeRadius;
- // list of all the parameters, listed by name
- std::map<std::string, LLWLParamSet> mParamList;
-
-
+
private:
- // our parameter manager singleton instance
- static LLWLParamManager * sInstance;
+ friend class LLWLAnimator;
+
+ void loadAllPresets();
+ void loadPresetsFromDir(const std::string& dir);
+ bool loadPreset(const std::string& path);
+
+ static std::string getSysDir();
+ static std::string getUserDir();
+
+ friend class LLSingleton<LLWLParamManager>;
+ /*virtual*/ void initSingleton();
+ LLWLParamManager();
+ ~LLWLParamManager();
+
+ // list of all the parameters, listed by name
+ std::map<LLWLParamKey, LLWLParamSet> mParamList;
+
+ preset_list_signal_t mPresetListChangeSignal;
};
inline F32 LLWLParamManager::getDomeOffset(void) const
diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp
index cf06766d73..02d914a812 100644
--- a/indra/newview/llwlparamset.cpp
+++ b/indra/newview/llwlparamset.cpp
@@ -29,8 +29,8 @@
#include "llwlparamset.h"
#include "llwlanimator.h"
-#include "llfloaterwindlight.h"
#include "llwlparammanager.h"
+#include "llglslshader.h"
#include "lluictrlfactory.h"
#include "llsliderctrl.h"
@@ -94,7 +94,7 @@ void LLWLParamSet::update(LLGLSLShader * shader) const
shader->uniform4fv(param, 1, val.mV);
}
- else
+ else // param is the uniform name
{
LLVector4 val;
@@ -119,7 +119,6 @@ void LLWLParamSet::update(LLGLSLShader * shader) const
val.mV[0] = i->second.asBoolean();
}
-
shader->uniform4fv(param, 1, val.mV);
}
}
@@ -260,7 +259,6 @@ void LLWLParamSet::setEastAngle(float val)
void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)
{
// set up the iterators
- LLSD::map_iterator cIt = mParamValues.beginMap();
// keep cloud positions and coverage the same
/// TODO masking will do this later
@@ -273,55 +271,39 @@ void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)
LLSD srcVal;
LLSD destVal;
- // do the interpolation for all the ones saved as vectors
- // skip the weird ones
- for(; cIt != mParamValues.endMap(); cIt++) {
+ // Iterate through values
+ for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)
+ {
- // check params to make sure they're actually there
- if(src.mParamValues.has(cIt->first))
+ // If param exists in both src and dest, set the holder variables, otherwise skip
+ if(src.mParamValues.has(iter->first) && dest.mParamValues.has(iter->first))
{
- srcVal = src.mParamValues[cIt->first];
+ srcVal = src.mParamValues[iter->first];
+ destVal = dest.mParamValues[iter->first];
}
else
{
continue;
}
- if(dest.mParamValues.has(cIt->first))
+ if(iter->second.isReal()) // If it's a real, interpolate directly
{
- destVal = dest.mParamValues[cIt->first];
+ iter->second = srcVal.asReal() + ((destVal.asReal() - srcVal.asReal()) * weight);
}
- else
- {
- continue;
- }
-
- // skip if not a vector
- if(!cIt->second.isArray())
- {
- continue;
- }
-
- // only Real vectors allowed
- if(!cIt->second[0].isReal())
+ else if(iter->second.isArray() && iter->second[0].isReal() // If it's an array of reals, loop through the reals and interpolate on those
+ && iter->second.size() == srcVal.size() && iter->second.size() == destVal.size())
{
- continue;
+ // Actually do interpolation: old value + (difference in values * factor)
+ for(int i=0; i < iter->second.size(); ++i)
+ {
+ // iter->second[i] = (1.f-weight)*(F32)srcVal[i].asReal() + weight*(F32)destVal[i].asReal(); // old way of doing it -- equivalent but one more operation
+ iter->second[i] = srcVal[i].asReal() + ((destVal[i].asReal() - srcVal[i].asReal()) * weight);
+ }
}
-
- // make sure all the same size
- if( cIt->second.size() != srcVal.size() ||
- cIt->second.size() != destVal.size())
+ else // Else, skip
{
continue;
- }
-
- // more error checking might be necessary;
-
- for(int i=0; i < cIt->second.size(); ++i)
- {
- cIt->second[i] = (1.0f - weight) * (F32) srcVal[i].asReal() +
- weight * (F32) destVal[i].asReal();
- }
+ }
}
// now mix the extra parameters
diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h
index 487e2bf922..3c44ed3bb8 100644
--- a/indra/newview/llwlparamset.h
+++ b/indra/newview/llwlparamset.h
@@ -32,10 +32,9 @@
#include "v4math.h"
#include "v4color.h"
-#include "llviewershadermgr.h"
-class LLFloaterWindLight;
class LLWLParamSet;
+class LLGLSLShader;
/// A class representing a set of parameter values for the WindLight shaders.
class LLWLParamSet {
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index ec24b02934..a7ae456f3c 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -61,6 +61,7 @@
#include <map>
#include <cstring>
+
//
// Globals
//
@@ -91,8 +92,7 @@ LLWorld::LLWorld() :
mLastPacketsIn(0),
mLastPacketsOut(0),
mLastPacketsLost(0),
- mSpaceTimeUSec(0),
- mClassicCloudsEnabled(TRUE)
+ mSpaceTimeUSec(0)
{
for (S32 i = 0; i < 8; i++)
{
@@ -127,6 +127,12 @@ void LLWorld::destroyClass()
LLVOCache::getInstance()->destroyClass() ;
}
LLViewerPartSim::getInstance()->destroyClass();
+
+ mDefaultWaterTexturep = NULL ;
+ for (S32 i = 0; i < 8; i++)
+ {
+ mEdgeWaterObjects[i] = NULL;
+ }
}
@@ -183,10 +189,6 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
llerrs << "Unable to create new region!" << llendl;
}
- regionp->mCloudLayer.create(regionp);
- regionp->mCloudLayer.setWidth((F32)mWidth);
- regionp->mCloudLayer.setWindPointer(&regionp->mWind);
-
mRegionList.push_back(regionp);
mActiveRegionList.push_back(regionp);
mCulledRegionList.push_back(regionp);
@@ -661,92 +663,6 @@ void LLWorld::updateParticles()
LLViewerPartSim::getInstance()->updateSimulation();
}
-void LLWorld::updateClouds(const F32 dt)
-{
- static LLFastTimer::DeclareTimer ftm("World Clouds");
- LLFastTimer t(ftm);
-
- if ( gSavedSettings.getBOOL("FreezeTime") )
- {
- // don't move clouds in snapshot mode
- return;
- }
-
- if (
- mClassicCloudsEnabled !=
- gSavedSettings.getBOOL("SkyUseClassicClouds") )
- {
- // The classic cloud toggle has been flipped
- // gotta update all of the cloud layers
- mClassicCloudsEnabled =
- gSavedSettings.getBOOL("SkyUseClassicClouds");
-
- if ( !mClassicCloudsEnabled && mActiveRegionList.size() )
- {
- // We've transitioned to having classic clouds disabled
- // reset all cloud layers.
- for (
- region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end();
- ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.reset();
- }
-
- return;
- }
- }
- else if ( !mClassicCloudsEnabled ) return;
-
- if (mActiveRegionList.size())
- {
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.updatePuffs(dt);
- }
-
- // Reshuffle who owns which puffs
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.updatePuffOwnership();
- }
-
- // Add new puffs
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- regionp->mCloudLayer.updatePuffCount();
- }
- }
-}
-
-LLCloudGroup* LLWorld::findCloudGroup(const LLCloudPuff &puff)
-{
- if (mActiveRegionList.size())
- {
- // Update all the cloud puff positions, and timer based stuff
- // such as death decay
- for (region_list_t::iterator iter = mActiveRegionList.begin();
- iter != mActiveRegionList.end(); ++iter)
- {
- LLViewerRegion* regionp = *iter;
- LLCloudGroup *groupp = regionp->mCloudLayer.findCloudGroup(puff);
- if (groupp)
- {
- return groupp;
- }
- }
- }
- return NULL;
-}
-
-
void LLWorld::renderPropertyLines()
{
S32 region_count = 0;
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 8cdb615686..265d5dc801 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1752,13 +1752,13 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
case MAP_ITEM_LAND_FOR_SALE_ADULT:
{
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("id", id));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "destinations").with("query", id));
break;
}
case MAP_ITEM_CLASSIFIED:
{
LLFloaterReg::hideInstance("world_map");
- LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("id", id));
+ LLFloaterReg::showInstance("search", LLSD().with("category", "classifieds").with("query", id));
break;
}
default:
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index 257884d921..f483ba5af8 100644
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -306,19 +306,8 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
mCurlRequest = new LLCurlEasyRequest();
}
mErrorCert = NULL;
-
- if (gSavedSettings.getBOOL("BrowserProxyEnabled"))
- {
- mProxyAddress = gSavedSettings.getString("BrowserProxyAddress");
- S32 port = gSavedSettings.getS32 ( "BrowserProxyPort" );
-
- // tell curl about the settings
- mCurlRequest->setoptString(CURLOPT_PROXY, mProxyAddress);
- mCurlRequest->setopt(CURLOPT_PROXYPORT, port);
- mCurlRequest->setopt(CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
- }
-// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // usefull for debugging
+// mCurlRequest->setopt(CURLOPT_VERBOSE, 1); // useful for debugging
mCurlRequest->setopt(CURLOPT_NOSIGNAL, 1);
mCurlRequest->setWriteCallback(&curlDownloadCallback, (void*)this);
BOOL vefifySSLCert = !gSavedSettings.getBOOL("NoVerifySSLCert");
@@ -394,16 +383,18 @@ bool LLXMLRPCTransaction::Impl::process()
}
}
- const F32 MAX_PROCESSING_TIME = 0.05f;
- LLTimer timer;
+ //const F32 MAX_PROCESSING_TIME = 0.05f;
+ //LLTimer timer;
+
+ mCurlRequest->perform();
- while (mCurlRequest->perform() > 0)
+ /*while (mCurlRequest->perform() > 0)
{
if (timer.getElapsedTimeF32() >= MAX_PROCESSING_TIME)
{
return false;
}
- }
+ }*/
while(1)
{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index e74bf2a620..a50f66f282 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -103,6 +103,7 @@
#include "llmutelist.h"
#include "lltoolpie.h"
#include "llcurl.h"
+#include "llnotifications.h"
void check_stack_depth(S32 stack_depth)
@@ -317,6 +318,7 @@ BOOL LLPipeline::sRenderFrameTest = FALSE;
BOOL LLPipeline::sRenderAttachedLights = TRUE;
BOOL LLPipeline::sRenderAttachedParticles = TRUE;
BOOL LLPipeline::sRenderDeferred = FALSE;
+BOOL LLPipeline::sMemAllocationThrottled = FALSE;
S32 LLPipeline::sVisibleLightCount = 0;
F32 LLPipeline::sMinRenderSize = 0.f;
@@ -336,10 +338,10 @@ static const U32 gl_cube_face[] =
void validate_framebuffer_object();
-void addDeferredAttachments(LLRenderTarget& target)
+bool addDeferredAttachments(LLRenderTarget& target)
{
- target.addColorAttachment(GL_RGBA); //specular
- target.addColorAttachment(GL_RGBA); //normal+z
+ return target.addColorAttachment(GL_RGBA) && //specular
+ target.addColorAttachment(GL_RGBA); //normal+z
}
LLPipeline::LLPipeline() :
@@ -561,6 +563,24 @@ void LLPipeline::destroyGL()
static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture");
+//static
+void LLPipeline::throttleNewMemoryAllocation(BOOL disable)
+{
+ if(sMemAllocationThrottled != disable)
+ {
+ sMemAllocationThrottled = disable ;
+
+ if(sMemAllocationThrottled)
+ {
+ //send out notification
+ LLNotification::Params params("LowMemory");
+ LLNotifications::instance().add(params);
+
+ //release some memory.
+ }
+ }
+}
+
void LLPipeline::resizeScreenTexture()
{
LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE);
@@ -586,18 +606,61 @@ void LLPipeline::allocatePhysicsBuffer()
void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{
- // remember these dimensions
- mScreenWidth = resX;
- mScreenHeight = resY;
-
- //cap samples at 4 for render targets to avoid out of memory errors
U32 samples = gGLManager.getNumFBOFSAASamples(gSavedSettings.getU32("RenderFSAASamples"));
if (gGLManager.mIsATI)
- { //disable multisampling of render targets where ATI is involved
+ { //ATI doesn't like the way we use multisample texture
samples = 0;
}
+ //try to allocate screen buffers at requested resolution and samples
+ // - on failure, shrink number of samples and try again
+ // - if not multisampled, shrink resolution and try again (favor X resolution over Y)
+ // Make sure to call "releaseScreenBuffers" after each failure to cleanup the partially loaded state
+
+ if (!allocateScreenBuffer(resX, resY, samples))
+ {
+ releaseScreenBuffers();
+ //reduce number of samples
+ while (samples > 0)
+ {
+ samples /= 2;
+ if (allocateScreenBuffer(resX, resY, samples))
+ { //success
+ return;
+ }
+ releaseScreenBuffers();
+ }
+
+ //reduce resolution
+ while (resY > 0 && resX > 0)
+ {
+ resY /= 2;
+ if (allocateScreenBuffer(resX, resY, samples))
+ {
+ return;
+ }
+ releaseScreenBuffers();
+
+ resX /= 2;
+ if (allocateScreenBuffer(resX, resY, samples))
+ {
+ return;
+ }
+ releaseScreenBuffers();
+ }
+
+ llwarns << "Unable to allocate screen buffer at any resolution!" << llendl;
+ }
+}
+
+
+bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
+{
+ // remember these dimensions
+ mScreenWidth = resX;
+ mScreenHeight = resY;
+
U32 res_mod = gSavedSettings.getU32("RenderResolutionDivisor");
if (res_mod > 1 && res_mod < resX && res_mod < resY)
@@ -608,7 +671,10 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
if (gSavedSettings.getBOOL("RenderUIBuffer"))
{
- mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mUIScreen.allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE))
+ {
+ return false;
+ }
}
if (LLPipeline::sRenderDeferred)
@@ -618,22 +684,22 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
bool gi = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED);
//allocate deferred rendering color buffers
- mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples);
- mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples);
- addDeferredAttachments(mDeferredScreen);
+ if (!mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+ if (!mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+ if (!addDeferredAttachments(mDeferredScreen)) return false;
- mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples);
+ if (!mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
#if LL_DARWIN
// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO
- mEdgeMap.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mEdgeMap.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
#else
- mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mEdgeMap.allocate(resX, resY, GL_ALPHA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
#endif
if (shadow_detail > 0 || ssao)
{ //only need mDeferredLight[0] for shadows OR ssao
- mDeferredLight[0].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mDeferredLight[0].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
}
else
{
@@ -642,7 +708,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
if (ssao)
{ //only need mDeferredLight[1] for ssao
- mDeferredLight[1].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false);
+ if (!mDeferredLight[1].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false)) return false;
}
else
{
@@ -651,14 +717,14 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
if (gi)
{ //only need mDeferredLight[2] and mGIMapPost for gi
- mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false);
+ if (!mDeferredLight[2].allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, false)) return false;
for (U32 i = 0; i < 2; i++)
{
#if LL_DARWIN
// As of OS X 10.6.7, Apple doesn't support multiple color formats in a single FBO
- mGIMapPost[i].allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (!mGIMapPost[i].allocate(resX,resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE)) return false;
#else
- mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (!mGIMapPost[i].allocate(resX,resY, GL_RGB, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE)) return false;
#endif
}
}
@@ -685,7 +751,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{ //allocate 4 sun shadow maps
for (U32 i = 0; i < 4; i++)
{
- mShadow[i].allocate(U32(resX*scale),U32(resY*scale), shadow_fmt, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE);
+ if (!mShadow[i].allocate(U32(resX*scale),U32(resY*scale), shadow_fmt, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE)) return false;
}
}
else
@@ -703,7 +769,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
{ //allocate two spot shadow maps
for (U32 i = 4; i < 6; i++)
{
- mShadow[i].allocate(width, height, shadow_fmt, TRUE, FALSE);
+ if (!mShadow[i].allocate(width, height, shadow_fmt, TRUE, FALSE)) return false;
}
}
else
@@ -716,7 +782,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
width = nhpo2(resX)/2;
height = nhpo2(resY)/2;
- mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE);
+ if (!mLuminanceMap.allocate(width,height, GL_RGBA, FALSE, FALSE)) return false;
}
else
{
@@ -738,7 +804,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
mEdgeMap.release();
mLuminanceMap.release();
- mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE);
+ if (!mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;
}
if (LLPipeline::sRenderDeferred)
@@ -750,6 +816,7 @@ void LLPipeline::allocateScreenBuffer(U32 resX, U32 resY)
stop_glerror();
+ return true;
}
//static
@@ -800,9 +867,23 @@ void LLPipeline::releaseGLBuffers()
mWaterRef.release();
mWaterDis.release();
+
+ for (U32 i = 0; i < 3; i++)
+ {
+ mGlow[i].release();
+ }
+
+ releaseScreenBuffers();
+
+ gBumpImageList.destroyGL();
+ LLVOAvatar::resetImpostors();
+}
+
+void LLPipeline::releaseScreenBuffers()
+{
+ mUIScreen.release();
mScreen.release();
mPhysicsDisplay.release();
- mUIScreen.release();
mDeferredScreen.release();
mDeferredDepth.release();
for (U32 i = 0; i < 3; i++)
@@ -821,16 +902,9 @@ void LLPipeline::releaseGLBuffers()
{
mShadow[i].release();
}
-
- for (U32 i = 0; i < 3; i++)
- {
- mGlow[i].release();
- }
-
- gBumpImageList.destroyGL();
- LLVOAvatar::resetImpostors();
}
+
void LLPipeline::createGLBuffers()
{
LLMemType mt_cb(LLMemType::MTYPE_PIPELINE_CREATE_BUFFERS);
@@ -1983,6 +2057,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+ bool bound_shader = false;
+ if (gPipeline.canUseVertexShaders() && LLGLSLShader::sCurBoundShader == 0)
+ { //if no shader is currently bound, use the occlusion shader instead of fixed function if we can
+ // (shadow render uses a special shader that clamps to clip planes)
+ bound_shader = true;
+ gOcclusionProgram.bind();
+ }
+
for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
{
@@ -2010,6 +2092,11 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
}
}
+ if (bound_shader)
+ {
+ gOcclusionProgram.unbind();
+ }
+
camera.disableUserClipPlane();
if (hasRenderType(LLPipeline::RENDER_TYPE_SKY) &&
@@ -2133,7 +2220,21 @@ void LLPipeline::doOcclusion(LLCamera& camera)
LLGLDepthTest depth(GL_TRUE, GL_FALSE);
LLGLDisable cull(GL_CULL_FACE);
+
+ bool bind_shader = LLGLSLShader::sNoFixedFunction && LLGLSLShader::sCurBoundShader == 0;
+ if (bind_shader)
+ {
+ if (LLPipeline::sShadowRender)
+ {
+ gDeferredShadowProgram.bind();
+ }
+ else
+ {
+ gOcclusionProgram.bind();
+ }
+ }
+
for (LLCullResult::sg_list_t::iterator iter = sCull->beginOcclusionGroups(); iter != sCull->endOcclusionGroups(); ++iter)
{
LLSpatialGroup* group = *iter;
@@ -2141,6 +2242,18 @@ void LLPipeline::doOcclusion(LLCamera& camera)
group->clearOcclusionState(LLSpatialGroup::ACTIVE_OCCLUSION);
}
+ if (bind_shader)
+ {
+ if (LLPipeline::sShadowRender)
+ {
+ gDeferredShadowProgram.unbind();
+ }
+ else
+ {
+ gOcclusionProgram.unbind();
+ }
+ }
+
gGL.setColorMask(true, false);
}
}
@@ -3247,6 +3360,13 @@ void render_hud_elements()
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
gGL.color4f(1,1,1,1);
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+ LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+
if (!LLPipeline::sReflectionRender && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
{
LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);
@@ -3272,6 +3392,11 @@ void render_hud_elements()
{
LLHUDText::renderAllHUD();
}
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.unbind();
+ }
gGL.flush();
}
@@ -3567,6 +3692,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
}
@@ -3599,8 +3725,8 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
check_stack_depth(stack_depth);
std::string msg = llformat("pass %d", i);
LLGLState::checkStates(msg);
- LLGLState::checkTextureChannels(msg);
- LLGLState::checkClientArrays(msg);
+ //LLGLState::checkTextureChannels(msg);
+ //LLGLState::checkClientArrays(msg);
}
}
}
@@ -3632,77 +3758,71 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
}
}
LLVertexBuffer::unbind();
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
-
-
-
- stop_glerror();
-
- LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights");
-
- if (!sReflectionRender)
+ if (!LLPipeline::sImpostorRender)
{
- renderHighlights();
- }
+ LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights");
- // Contains a list of the faces of objects that are physical or
- // have touch-handlers.
- mHighlightFaces.clear();
+ if (!sReflectionRender)
+ {
+ renderHighlights();
+ }
+
+ // Contains a list of the faces of objects that are physical or
+ // have touch-handlers.
+ mHighlightFaces.clear();
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug");
+ LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug");
- renderDebug();
+ renderDebug();
- LLVertexBuffer::unbind();
+ LLVertexBuffer::unbind();
- if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)
- {
- if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+ if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)
{
- // Render debugging beacons.
- gObjectList.renderObjectBeacons();
- gObjectList.resetObjectBeacons();
+ if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
+ {
+ // Render debugging beacons.
+ gObjectList.renderObjectBeacons();
+ gObjectList.resetObjectBeacons();
+ }
+ else
+ {
+ // Make sure particle effects disappear
+ LLHUDObject::renderAllForTimer();
+ }
}
else
{
// Make sure particle effects disappear
LLHUDObject::renderAllForTimer();
}
- }
- else
- {
- // Make sure particle effects disappear
- LLHUDObject::renderAllForTimer();
- }
- LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
+ LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd");
- //HACK: preserve/restore matrices around HUD render
- if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
- {
- for (U32 i = 0; i < 16; i++)
+ //HACK: preserve/restore matrices around HUD render
+ if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))
{
- gGLModelView[i] = saved_modelview[i];
- gGLProjection[i] = saved_projection[i];
+ for (U32 i = 0; i < 16; i++)
+ {
+ gGLModelView[i] = saved_modelview[i];
+ gGLProjection[i] = saved_projection[i];
+ }
}
}
LLVertexBuffer::unbind();
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
+// LLGLState::checkTextureChannels();
+// LLGLState::checkClientArrays();
}
void LLPipeline::renderGeomDeferred(LLCamera& camera)
@@ -3785,8 +3905,6 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)
llerrs << "GL matrix stack corrupted!" << llendl;
}
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
}
}
}
@@ -3841,6 +3959,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
gGL.setColorMask(true, false);
}
@@ -3879,8 +3998,6 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
llerrs << "GL matrix stack corrupted!" << llendl;
}
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
}
}
}
@@ -3908,6 +4025,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
occlude = FALSE;
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
+ LLGLSLShader::bindNoShader();
doOcclusion(camera);
gGLLastMatrix = NULL;
glLoadMatrixd(gGLModelView);
@@ -3955,8 +4073,6 @@ void LLPipeline::renderGeomShadow(LLCamera& camera)
LLVertexBuffer::unbind();
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
}
}
else
@@ -4134,63 +4250,6 @@ void LLPipeline::renderDebug()
}
}
- if (gSavedSettings.getBOOL("DebugShowUploadCost"))
- {
- std::set<LLUUID> textures;
- std::set<LLUUID> sculpts;
- std::set<LLUUID> meshes;
-
- BOOL selected = TRUE;
- if (LLSelectMgr::getInstance()->getSelection()->isEmpty())
- {
- selected = FALSE;
- }
-
- for (LLCullResult::sg_list_t::iterator iter = sCull->beginVisibleGroups(); iter != sCull->endVisibleGroups(); ++iter)
- {
- LLSpatialGroup* group = *iter;
- LLSpatialGroup::OctreeNode* node = group->mOctreeNode;
- for (LLSpatialGroup::OctreeNode::element_iter elem = node->getData().begin(); elem != node->getData().end(); ++elem)
- {
- LLDrawable* drawable = *elem;
- LLVOVolume* volume = drawable->getVOVolume();
- if (volume && volume->isSelected() == selected)
- {
- for (U32 i = 0; i < volume->getNumTEs(); ++i)
- {
- LLTextureEntry* te = volume->getTE(i);
- textures.insert(te->getID());
- }
-
- if (volume->isSculpted())
- {
- LLUUID sculpt_id = volume->getVolume()->getParams().getSculptID();
- if (volume->isMesh())
- {
- meshes.insert(sculpt_id);
- }
- else
- {
- sculpts.insert(sculpt_id);
- }
- }
- }
- }
- }
-
- gPipeline.mDebugTextureUploadCost = textures.size() * 10;
- gPipeline.mDebugSculptUploadCost = sculpts.size()*10;
-
- U32 mesh_cost = 0;
-
- for (std::set<LLUUID>::iterator iter = meshes.begin(); iter != meshes.end(); ++iter)
- {
- mesh_cost += gMeshRepo.getResourceCost(*iter)*10;
- }
-
- gPipeline.mDebugMeshUploadCost = mesh_cost;
- }
-
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA))
{
LLVertexBuffer::unbind();
@@ -6150,7 +6209,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
LLGLEnable blend_on(GL_BLEND);
LLGLEnable test(GL_ALPHA_TEST);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
+
gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
mScreen.bindTexture(0, 0);
@@ -6449,30 +6508,39 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
LLGLDisable blend(GL_BLEND);
- //tex unit 0
- gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
-
- gGL.getTexUnit(0)->bind(&mGlow[1]);
- gGL.getTexUnit(1)->activate();
- gGL.getTexUnit(1)->enable(LLTexUnit::TT_RECT_TEXTURE);
-
-
- //tex unit 1
- gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gGlowCombineProgram.bind();
+ }
+ else
+ {
+ //tex unit 0
+ gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
+ //tex unit 1
+ gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
+ }
+ gGL.getTexUnit(0)->bind(&mGlow[1]);
gGL.getTexUnit(1)->bind(&mScreen);
- gGL.getTexUnit(1)->activate();
LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);
buff->setBuffer(mask);
buff->drawArrays(LLRender::TRIANGLE_STRIP, 0, 3);
- gGL.getTexUnit(1)->disable();
- gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gGlowCombineProgram.unbind();
+ }
+ else
+ {
+ gGL.getTexUnit(1)->disable();
+ gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
- gGL.getTexUnit(0)->activate();
- gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ gGL.getTexUnit(0)->activate();
+ gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
+ }
+
}
if (LLRenderTarget::sUseFBO)
@@ -6485,6 +6553,11 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES))
{
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.bind();
+ }
+
gGL.setColorMask(true, false);
LLVector2 tc1(0,0);
@@ -6508,6 +6581,12 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
gGL.end();
gGL.flush();
+
+ if (LLGLSLShader::sNoFixedFunction)
+ {
+ gUIProgram.unbind();
+ }
+
}
glMatrixMode(GL_PROJECTION);
@@ -7923,7 +8002,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
static LLCullResult ref_result;
- if (LLDrawPoolWater::sNeedsDistortionUpdate)
+ if (LLDrawPoolWater::sNeedsReflectionUpdate)
{
//initial sky pass (no user clip plane)
{ //mask out everything but the sky
@@ -8063,8 +8142,6 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
LLViewerCamera::getInstance()->setUserClipPlane(npnorm);
LLGLState::checkStates();
- LLGLState::checkTextureChannels();
- LLGLState::checkClientArrays();
if (!skip_avatar_update)
{
@@ -8197,14 +8274,21 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
LLVertexBuffer::unbind();
{
+ if (!use_shader)
+ { //occlusion program is general purpose depth-only no-textures
+ gOcclusionProgram.bind();
+ }
LLFastTimer ftm(FTM_SHADOW_SIMPLE);
- LLGLDisable test(GL_ALPHA_TEST);
gGL.getTexUnit(0)->disable();
for (U32 i = 0; i < sizeof(types)/sizeof(U32); ++i)
{
renderObjects(types[i], LLVertexBuffer::MAP_VERTEX, FALSE);
}
gGL.getTexUnit(0)->enable(LLTexUnit::TT_TEXTURE);
+ if (!use_shader)
+ {
+ gOcclusionProgram.unbind();
+ }
}
if (use_shader)
@@ -8220,12 +8304,11 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
{
LLFastTimer ftm(FTM_SHADOW_ALPHA);
- LLGLEnable test(GL_ALPHA_TEST);
- gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.6f);
+ gDeferredShadowAlphaMaskProgram.bind();
+ gDeferredShadowAlphaMaskProgram.setAlphaRange(0.6f, 1.f);
renderObjects(LLRenderPass::PASS_ALPHA_SHADOW, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR, TRUE);
glColor4f(1,1,1,1);
renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE);
- gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
}
//glCullFace(GL_BACK);
@@ -8710,6 +8793,7 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
LLPipeline::RENDER_TYPE_WATER,
LLPipeline::RENDER_TYPE_VOIDWATER,
LLPipeline::RENDER_TYPE_PASS_ALPHA_SHADOW,
+ LLPipeline::RENDER_TYPE_PASS_GRASS,
LLPipeline::RENDER_TYPE_PASS_SIMPLE,
LLPipeline::RENDER_TYPE_PASS_BUMP,
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index e9da25e544..3f0640221e 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -113,9 +113,11 @@ public:
void resetVertexBuffers();
void resizeScreenTexture();
void releaseGLBuffers();
+ void releaseScreenBuffers();
void createGLBuffers();
void allocateScreenBuffer(U32 resX, U32 resY);
+ bool allocateScreenBuffer(U32 resX, U32 resY, U32 samples);
void allocatePhysicsBuffer();
void resetVertexBuffers(LLDrawable* drawable);
@@ -360,6 +362,8 @@ public:
static void updateRenderDeferred();
static void refreshRenderDeferred();
+ static void throttleNewMemoryAllocation(BOOL disable);
+
void addDebugBlip(const LLVector3& position, const LLColor4& color);
private:
@@ -515,8 +519,9 @@ public:
static BOOL sRenderAttachedLights;
static BOOL sRenderAttachedParticles;
static BOOL sRenderDeferred;
+ static BOOL sMemAllocationThrottled;
static S32 sVisibleLightCount;
- static F32 sMinRenderSize;
+ static F32 sMinRenderSize;
//screen texture
U32 mScreenWidth;
diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP
deleted file mode 100644
index 6f9366df41..0000000000
--- a/indra/newview/res-sdl/ll_icon.BMP
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/ll_icon.BMP b/indra/newview/res/ll_icon.BMP
deleted file mode 100644
index 3a9964cd95..0000000000
--- a/indra/newview/res/ll_icon.BMP
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/ll_icon.ico b/indra/newview/res/ll_icon.ico
deleted file mode 100644
index 87985b9285..0000000000
--- a/indra/newview/res/ll_icon.ico
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png
deleted file mode 100644
index ae573b3874..0000000000
--- a/indra/newview/res/ll_icon.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
index 38d04b4b5c..a53dece422 100644
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -62,12 +62,12 @@ IDI_LCD_LL_ICON ICON "icon1.ico"
// Dialog
//
-SPLASHSCREEN DIALOG 32, 32, 144, 34
+SPLASHSCREEN DIALOG 32, 32, 264, 34
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE
FONT 8, "MS Sans Serif"
BEGIN
ICON IDI_LL_ICON,IDC_STATIC,7,7,20,20
- LTEXT "Loading Second Life...",666,36,13,91,8
+ LTEXT "Loading Second Life...",666,36,13,211,8
END
@@ -82,7 +82,7 @@ BEGIN
"SPLASHSCREEN", DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 137
+ RIGHTMARGIN, 257
VERTGUIDE, 36
TOPMARGIN, 7
BOTTOMMARGIN, 27
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 973df6998a..31b6fc77f5 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -133,6 +133,15 @@
name="AvatarListItemIconVoiceLeftColor"
reference="AvatarListItemIconOfflineColor" />
<color
+ name="BadgeImageColor"
+ value="1.0 0.40 0.0 1.0" />
+ <color
+ name="BadgeBorderColor"
+ value="0.9 0.9 0.9 1.0" />
+ <color
+ name="BadgeLabelColor"
+ reference="White" />
+ <color
name="ButtonBorderColor"
reference="Unused?" />
<color
@@ -500,22 +509,22 @@
reference="DkGray2" />
<color
name="MultiSliderDisabledThumbColor"
- reference="Unused?" />
+ reference="Black" />
<color
name="MultiSliderThumbCenterColor"
- reference="Unused?" />
+ reference="White" />
<color
name="MultiSliderThumbCenterSelectedColor"
- reference="Unused?" />
+ reference="Green" />
<color
name="MultiSliderThumbOutlineColor"
reference="Unused?" />
<color
name="MultiSliderTrackColor"
- reference="Unused?" />
+ reference="LtGray" />
<color
name="MultiSliderTriangleColor"
- reference="Unused?" />
+ reference="Yellow" />
<!--
<color
name="NameTagBackground"
@@ -760,7 +769,7 @@
<color
name="MenuBarProjectBgColor"
reference="MdBlue" />
-
+
<color
name="MeshImportTableNormalColor"
value="1 1 1 1"/>
diff --git a/indra/newview/skins/default/textures/icons/Inv_Gift.png b/indra/newview/skins/default/textures/icons/Inv_Gift.png
new file mode 100644
index 0000000000..5afe85d72d
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Inv_Gift.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png b/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png
new file mode 100644
index 0000000000..be58114aa1
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Off.png b/indra/newview/skins/default/textures/icons/OutboxPush_Off.png
new file mode 100644
index 0000000000..e6b9480ab1
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On.png b/indra/newview/skins/default/textures/icons/OutboxPush_On.png
new file mode 100644
index 0000000000..ffda2e92d4
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_On.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png
new file mode 100644
index 0000000000..6b5911014f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.png b/indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.png
new file mode 100644
index 0000000000..0e60b417b0
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_On_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_Over.png
new file mode 100644
index 0000000000..9c26b92e73
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Press.png b/indra/newview/skins/default/textures/icons/OutboxPush_Press.png
new file mode 100644
index 0000000000..3b5d462975
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png
new file mode 100644
index 0000000000..f85be047b0
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png
new file mode 100644
index 0000000000..cd4e482216
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png
new file mode 100644
index 0000000000..d212a871ce
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png
new file mode 100644
index 0000000000..e5b6023e36
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png
new file mode 100644
index 0000000000..e1911a092f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png
new file mode 100644
index 0000000000..9e59f7843a
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png
new file mode 100644
index 0000000000..51e8bff646
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png
new file mode 100644
index 0000000000..300e2e69e1
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png
new file mode 100644
index 0000000000..32fb236381
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png
new file mode 100644
index 0000000000..827f343b1e
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
new file mode 100644
index 0000000000..956e02b14d
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
new file mode 100644
index 0000000000..434caeda8b
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
new file mode 100644
index 0000000000..064687ed0f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
new file mode 100644
index 0000000000..5465650d0c
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Disabled.png b/indra/newview/skins/default/textures/icons/Sync_Disabled.png
new file mode 100644
index 0000000000..ca2e8def97
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Disabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Enabled.png b/indra/newview/skins/default/textures/icons/Sync_Enabled.png
new file mode 100644
index 0000000000..bc236c8b98
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Enabled.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_1.png b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png
new file mode 100644
index 0000000000..624e556376
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_2.png b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png
new file mode 100644
index 0000000000..5769803b3f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_3.png b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png
new file mode 100644
index 0000000000..92d4bfb020
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_4.png b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png
new file mode 100644
index 0000000000..6d43eb3a9f
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_5.png b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png
new file mode 100644
index 0000000000..766d063c99
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_6.png b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png
new file mode 100644
index 0000000000..dfe7f68b72
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index cc7cce99c9..799cd907dc 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -1,4 +1,4 @@
-<!--
+<!--
This file contains metadata about how to load, display, and scale textures for rendering in the UI.
Images do *NOT* have to appear in this file in order to use them as textures in the UI...simply refer
to them by filename (relative to textures directory).
@@ -72,8 +72,11 @@ with the same filename but different name
<texture name="BackButton_Over" file_name="icons/back_arrow_over.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
<texture name="BackButton_Press" file_name="icons/back_arrow_press.png" preload="false" scale.left="22" scale.top="12" scale.right="25" scale.bottom="12" />
+ <texture name="Badge_Background" file_name="widgets/Badge_Background.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
+ <texture name="Badge_Border" file_name="widgets/Badge_Border.png" preload="true" scale.left="9" scale.top="12" scale.right="248" scale.bottom="12" />
+
<texture name="Blank" file_name="Blank.png" preload="false" />
-
+
<texture name="BreadCrumbBtn_Left_Disabled" file_name="widgets/BreadCrumbBtn_Left_Disabled.png" preload="false"/>
<texture name="BreadCrumbBtn_Left_Off" file_name="widgets/BreadCrumbBtn_Left_Off.png" preload="false"/>
<texture name="BreadCrumbBtn_Left_Over" file_name="widgets/BreadCrumbBtn_Left_Over.png" preload="false"/>
@@ -88,7 +91,6 @@ with the same filename but different name
<texture name="BreadCrumbBtn_Right_Off" file_name="widgets/BreadCrumbBtn_Right_Off.png" preload="false"/>
<texture name="BreadCrumbBtn_Right_Over" file_name="widgets/BreadCrumbBtn_Right_Over.png" preload="false"/>
<texture name="BreadCrumbBtn_Right_Press" file_name="widgets/BreadCrumbBtn_Right_Press.png" preload="false"/>
-
<texture name="BuyArrow_Over" file_name="navbar/BuyArrow_Over.png" preload="true" scale.left="0" scale.top="1" scale.right="0" scale.bottom="0" />
<texture name="BuyArrow_Press" file_name="navbar/BuyArrow_Press.png" preload="true" scale.left="1" scale.top="1" scale.right="0" scale.bottom="0" />
@@ -266,6 +268,8 @@ with the same filename but different name
<texture name="Locked_Icon" file_name="icons/Locked_Icon.png" preload="false" />
+ <texture name="MarketplaceBtn_Off" file_name="widgets/MarketplaceBtn_Off.png" preload="true" scale.left="30" scale.top="19" scale.right="35" scale.bottom="4" />
+ <texture name="MarketplaceBtn_Selected" file_name="widgets/MarketplaceBtn_Selected.png" preload="true" scale.left="30" scale.top="19" scale.right="35" scale.bottom="4" />
<texture name="Microphone_On" file_name="icons/Microphone_On.png" preload="false" />
@@ -349,6 +353,23 @@ with the same filename but different name
<texture name="OptionsMenu_Off" file_name="icons/OptionsMenu_Off.png" preload="false" />
<texture name="OptionsMenu_Press" file_name="icons/OptionsMenu_Press.png" preload="false" />
+ <texture name="OutboxPush_Disabled" file_name="icons/OutboxPush_Disabled.png" preload="true" />
+ <texture name="OutboxPush_Off" file_name="icons/OutboxPush_Off.png" preload="true" />
+ <texture name="OutboxPush_On" file_name="icons/OutboxPush_On.png" preload="true" />
+ <texture name="OutboxPush_On_Over" file_name="icons/OutboxPush_On_Over.png" preload="true" />
+ <texture name="OutboxPush_Over" file_name="icons/OutboxPush_Over.png" preload="true" />
+ <texture name="OutboxPush_Press" file_name="icons/OutboxPush_Press.png" preload="true" />
+ <texture name="OutboxPush_Progress_1" file_name="icons/OutboxPush_Progress_1.png" preload="true" />
+ <texture name="OutboxPush_Progress_2" file_name="icons/OutboxPush_Progress_2.png" preload="true" />
+ <texture name="OutboxPush_Progress_3" file_name="icons/OutboxPush_Progress_3.png" preload="true" />
+ <texture name="OutboxPush_Progress_4" file_name="icons/OutboxPush_Progress_4.png" preload="true" />
+ <texture name="OutboxPush_Progress_5" file_name="icons/OutboxPush_Progress_5.png" preload="true" />
+ <texture name="OutboxPush_Progress_6" file_name="icons/OutboxPush_Progress_6.png" preload="true" />
+ <texture name="OutboxPush_Selected" file_name="icons/OutboxPush_Selected.png" preload="true" />
+ <texture name="OutboxPush_Selected_Disabled" file_name="icons/OutboxPush_Selected_Disabled.png" preload="true" />
+ <texture name="OutboxPush_Selected_Over" file_name="icons/OutboxPush_Selected_Over.png" preload="true" />
+ <texture name="OutboxPush_Selected_Press" file_name="icons/OutboxPush_Selected_Press.png" preload="true" />
+
<texture name="PanOrbit_Off" file_name="bottomtray/PanOrbit_Off.png" preload="false" />
<texture name="Parcel_Exp_Color" file_name="icons/Parcel_Exp_Color.png" preload="false" />
@@ -369,6 +390,10 @@ with the same filename but different name
<texture name="Parcel_ScriptsNo_Dark" file_name="icons/Parcel_ScriptsNo_Dark.png" preload="false" />
<texture name="Parcel_Voice_Dark" file_name="icons/Parcel_Voice_Dark.png" preload="false" />
<texture name="Parcel_VoiceNo_Dark" file_name="icons/Parcel_VoiceNo_Dark.png" preload="false" />
+ <texture name="Parcel_SeeAVsOff_Dark" file_name="icons/Parcel_SeeAVsOff_Dark.png" preload="false" />
+ <texture name="Parcel_SeeAVsOn_Dark" file_name="icons/Parcel_SeeAVsOn_Dark.png" preload="false" />
+ <texture name="Parcel_SeeAVsOff_Light" file_name="icons/Parcel_SeeAVsOff_Light.png" preload="false" />
+ <texture name="Parcel_SeeAVsOn_Light" file_name="icons/Parcel_SeeAVsOn_Light.png" preload="false" />
<texture name="Parcel_BuildNo_Light" file_name="icons/Parcel_BuildNo_Light.png" preload="false" />
<texture name="Parcel_FlyNo_Light" file_name="icons/Parcel_FlyNo_Light.png" preload="false" />
@@ -496,6 +521,15 @@ with the same filename but different name
<texture name="StopReload_Off" file_name="icons/StopReload_Off.png" preload="false" />
<texture name="StopReload_Over" file_name="icons/StopReload_Over.png" preload="false" />
+ <texture name="Sync_Disabled" file_name="icons/Sync_Disabled.png" preload="true" />
+ <texture name="Sync_Enabled" file_name="icons/Sync_Enabled.png" preload="true" />
+ <texture name="Sync_Progress_1" file_name="icons/Sync_Progress_1.png" preload="true" />
+ <texture name="Sync_Progress_2" file_name="icons/Sync_Progress_2.png" preload="true" />
+ <texture name="Sync_Progress_3" file_name="icons/Sync_Progress_3.png" preload="true" />
+ <texture name="Sync_Progress_4" file_name="icons/Sync_Progress_4.png" preload="true" />
+ <texture name="Sync_Progress_5" file_name="icons/Sync_Progress_5.png" preload="true" />
+ <texture name="Sync_Progress_6" file_name="icons/Sync_Progress_6.png" preload="true" />
+
<texture name="TabIcon_Appearance_Off" file_name="taskpanel/TabIcon_Appearance_Off.png" preload="false" />
<texture name="TabIcon_Appearance_Selected" file_name="taskpanel/TabIcon_Appearance_Selected.png" preload="false" />
<texture name="TabIcon_Close_Off" file_name="taskpanel/TabIcon_Close_Off.png" preload="false" />
@@ -649,6 +683,7 @@ with the same filename but different name
<texture name="inv_folder_mesh.tga"/>
<texture name="inv_item_mesh.tga"/>
+
<texture name="lag_status_critical.tga" />
<texture name="lag_status_good.tga" />
<texture name="lag_status_warning.tga" />
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background.png b/indra/newview/skins/default/textures/widgets/Badge_Background.png
new file mode 100644
index 0000000000..5089c30312
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Badge_Background.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
new file mode 100644
index 0000000000..9f114f2e4a
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Border.png b/indra/newview/skins/default/textures/widgets/Badge_Border.png
new file mode 100644
index 0000000000..4b086a63fb
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/Badge_Border.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png
new file mode 100644
index 0000000000..e603c44384
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png
new file mode 100644
index 0000000000..fbc164123f
--- /dev/null
+++ b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
deleted file mode 100644
index ffae3d788f..0000000000
--- a/indra/newview/skins/default/xui/da/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="DAG CYKLUS OPSÆTNING">
- <tab_container name="Day Cycle Tabs">
- <panel label="Dag cyklus" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <multi_slider label="" name="WLTimeSlider"/>
- <multi_slider label="" name="WLDayCycleKeys"/>
- <text name="WL12am">
- 00:00
- </text>
- <text name="WL3am">
- 03:00
- </text>
- <text name="WL6am">
- 06:00
- </text>
- <text name="WL9amHash">
- 09:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 00:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Tilføj key" label_selected="Tilføj key" name="WLAddKey"/>
- <button label="Slet key" label_selected="Slet key" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Key-frame indstillinger:
- </text>
- <text name="WLCurKeyTimeText">
- Key tid:
- </text>
- <spinner label="Timer" name="WLCurKeyHour"/>
- <spinner label="Min." name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Key fast indstilling:
- </text>
- <combo_box label="Faste" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Snap:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Cycluslængde:
- </text>
- <spinner label="Timer" name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Sek." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Vis :
- </text>
- <button label="Afspil" label_selected="Afspil" name="WLAnimSky"/>
- <button label="Stop!" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Benyt estate tid" label_selected="GÃ¥ til estate tid" name="WLUseLindenTime"/>
- <button label="Gem test-dag" label_selected="Gem test-dag" name="WLSaveDayCycle"/>
- <button label="Hent test-dag" label_selected="Hent test-dag" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_env_settings.xml b/indra/newview/skins/default/xui/da/floater_env_settings.xml
deleted file mode 100644
index a6fbc05734..0000000000
--- a/indra/newview/skins/default/xui/da/floater_env_settings.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="REDIGERING AF OMGIVELSER">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Tid på
-dagen
- </text>
- <text name="EnvTimeText2">
- 00:00
- </text>
- <slider label="" name="EnvTimeSlider"/>
- <text name="EnvCloudText">
- Skydække
- </text>
- <slider label="" name="EnvCloudSlider"/>
- <text name="EnvWaterColorText">
- Farve på
-vand
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Klik for at åbne farvevælger"/>
- <text name="EnvWaterFogText">
- Tåge på
-vand
- </text>
- <slider label="" name="EnvWaterFogSlider"/>
- <button label="Benyt tid fra estate" name="EnvUseEstateTimeButton"/>
- <button label="Avanceret himmel" name="EnvAdvancedSkyButton"/>
- <button label="Avanceret vand" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
index 016e5af378..f7eda56e48 100644
--- a/indra/newview/skins/default/xui/da/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="DEBUG INDSTILLINGER">
<radio_group name="boolean_combo">
- <radio_item label="SANDT" name="TRUE" value="sand"/>
- <radio_item label="FALSK" name="FALSE" value=""/>
+ <radio_item label="SANDT" name="TRUE" />
+ <radio_item label="FALSK" name="FALSE" />
</radio_group>
<color_swatch label="Farve" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/da/floater_water.xml b/indra/newview/skins/default/xui/da/floater_water.xml
deleted file mode 100644
index aedd1b442c..0000000000
--- a/indra/newview/skins/default/xui/da/floater_water.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="AVANCERET OPSÆTNING AF VAND">
- <text name="KeyFramePresetsText">
- Vand opsætninger:
- </text>
- <button label="Ny" label_selected="Ny" name="WaterNewPreset"/>
- <button label="Gem" label_selected="Gem" name="WaterSavePreset"/>
- <button label="Slet" label_selected="Slet" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="INDSTILLINGER" name="Settings">
- <text name="BHText">
- Vandtåge farve
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Klik for at åbne farvevælger"/>
- <text name="WaterFogDensText">
- Tåge tæthedskarakteristik
- </text>
- <button label="?" name="WaterFogDensityHelp"/>
- <slider label="" name="WaterFogDensity"/>
- <text name="WaterUnderWaterFogModText">
- Tilretning undervandståge
- </text>
- <button label="?" name="WaterUnderWaterFogModHelp"/>
- <slider label="" name="WaterUnderWaterFogMod"/>
- <text name="BDensText">
- Lille bølge reflektionsskala
- </text>
- <button label="?" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <slider label="" name="WaterNormalScaleX"/>
- <slider label="" name="WaterNormalScaleY"/>
- <slider label="" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Spredningsskala
- </text>
- <button label="?" name="WaterFresnelScaleHelp"/>
- <slider label="" name="WaterFresnelScale"/>
- <text name="FresnelOffsetText">
- Spredning offset
- </text>
- <button label="?" name="WaterFresnelOffsetHelp"/>
- <slider label="" name="WaterFresnelOffset"/>
- <text name="DensMultText">
- Lysbrydning fra oven
- </text>
- <button label="?" name="WaterScaleAboveHelp"/>
- <slider label="" name="WaterScaleAbove"/>
- <text name="WaterScaleBelowText">
- Lysbrydning fra neden
- </text>
- <button label="?" name="WaterScaleBelowHelp"/>
- <slider label="" name="WaterScaleBelow"/>
- <text name="MaxAltText">
- Udviskning
- </text>
- <button label="?" name="WaterBlurMultiplierHelp"/>
- <slider label="" name="WaterBlurMult"/>
- </panel>
- <panel label="BILLEDE" name="Waves">
- <text name="BHText">
- Retning for store bølger
- </text>
- <button label="?" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <slider label="" name="WaterWave1DirX"/>
- <slider label="" name="WaterWave1DirY"/>
- <text name="BHText2">
- Retning for små bølger
- </text>
- <button label="?" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <slider label="" name="WaterWave2DirX"/>
- <slider label="" name="WaterWave2DirY"/>
- <text name="BHText3">
- Tekstur map
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- <texture_picker label="" name="WaterNormalMap"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/floater_windlight_options.xml b/indra/newview/skins/default/xui/da/floater_windlight_options.xml
deleted file mode 100644
index 56f94b24e9..0000000000
--- a/indra/newview/skins/default/xui/da/floater_windlight_options.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater name="WindLight floater" title="AVANCERET OPSÆTNING FOR HIMMEL">
- <text name="KeyFramePresetsText">
- Faste indstillinger:
- </text>
- <button label="Ny" label_selected="Ny" name="WLNewPreset" />
- <button label="Gem" label_selected="Gem" name="WLSavePreset" />
- <button label="Slet" label_selected="Slet" name="WLDeletePreset" />
- <button label="Dags cyklus" label_selected="Dags cyklus" name="WLDayCycleMenuButton" />
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFÆRE" name="Atmosphere">
- <text name="BHText">
- Blå - horisont
- </text>
- <button label="?" name="WLBlueHorizonHelp" />
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <slider label="" name="WLBlueHorizonR" />
- <slider label="" name="WLBlueHorizonG" />
- <slider label="" name="WLBlueHorizonB" />
- <slider label="" name="WLBlueHorizonI" />
- <text name="BDensText">
- Dis - horisont
- </text>
- <button label="?" name="WLHazeHorizonHelp" />
- <slider label="" name="WLHazeHorizon" />
- <text name="BDensText2">
- Blå - tæthed
- </text>
- <button label="?" name="WLBlueDensityHelp" />
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <slider label="" name="WLBlueDensityR" />
- <slider label="" name="WLBlueDensityG" />
- <slider label="" name="WLBlueDensityB" />
- <slider label="" name="WLBlueDensityI" />
- <text name="HDText">
- Dis - intensitet
- </text>
- <button label="?" name="WLHazeDensityHelp" />
- <slider label="" name="WLHazeDensity" />
- <text name="DensMultText">
- Densitet faktor
- </text>
- <button label="?" name="WLDensityMultHelp" />
- <slider label="" name="WLDensityMult" />
- <text name="WLDistanceMultText">
- Distance faktor
- </text>
- <button label="?" name="WLDistanceMultHelp" />
- <slider label="" name="WLDistanceMult" />
- <text name="MaxAltText">
- Maximum højde
- </text>
- <button label="?" name="WLMaxAltitudeHelp" />
- <slider label="" name="WLMaxAltitude" />
- </panel>
- <panel label="LYS" name="Lighting">
- <text name="SLCText">
- Sol/MÃ¥ne farve
- </text>
- <button label="?" name="WLSunlightColorHelp" />
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLSunlightR" />
- <slider label="" name="WLSunlightG" />
- <slider label="" name="WLSunlightB" />
- <slider label="" name="WLSunlightI" />
- <text name="TODText">
- Sol/MÃ¥ne position
- </text>
- <button label="?" name="WLTimeOfDayHelp" />
- <slider label="" name="WLSunAngle" />
- <text name="WLAmbientText">
- Omgivende
- </text>
- <button label="?" name="WLAmbientHelp" />
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <slider label="" name="WLAmbientR" />
- <slider label="" name="WLAmbientG" />
- <slider label="" name="WLAmbientB" />
- <slider label="" name="WLAmbientI" />
- <text name="WLEastAngleText">
- Øst vinkel
- </text>
- <button label="?" name="WLEastAngleHelp" />
- <slider label="" name="WLEastAngle" />
- <text name="SunGlowText">
- Sol glød
- </text>
- <button label="?" name="WLSunGlowHelp" />
- <slider label="Fokus " name="WLGlowB" />
- <slider label="Størr. " name="WLGlowR" />
- <text name="SceneGammaText">
- Lysintensitet (gamma)
- </text>
- <button label="?" name="WLSceneGammaHelp" />
- <slider label="" name="WLGamma" />
- <text name="WLStarText">
- Stjerne intensitet
- </text>
- <button label="?" name="WLStarBrightnessHelp" />
- <slider label="" name="WLStarAlpha" />
- </panel>
- <panel label="SKYER" name="Clouds">
- <text name="WLCloudColorText">
- Farve på skyer
- </text>
- <button label="?" name="WLCloudColorHelp" />
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLCloudColorR" />
- <slider label="" name="WLCloudColorG" />
- <slider label="" name="WLCloudColorB" />
- <slider label="" name="WLCloudColorI" />
- <text name="WLCloudColorText2">
- Skyer XY/Tæthed
- </text>
- <button label="?" name="WLCloudDensityHelp" />
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- T
- </text>
- <slider label="" name="WLCloudX" />
- <slider label="" name="WLCloudY" />
- <slider label="" name="WLCloudDensity" />
- <text name="WLCloudCoverageText">
- Skydække
- </text>
- <button label="?" name="WLCloudCoverageHelp" />
- <slider label="" name="WLCloudCoverage" />
- <text name="WLCloudScaleText">
- Skystørrelse
- </text>
- <button label="?" name="WLCloudScaleHelp" />
- <slider label="" name="WLCloudScale" />
- <text name="WLCloudDetailText">
- Sky detaljer(XY/tæthed)
- </text>
- <button label="?" name="WLCloudDetailHelp" />
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- T
- </text>
- <slider label="" name="WLCloudDetailX" />
- <slider label="" name="WLCloudDetailY" />
- <slider label="" name="WLCloudDetailDensity" />
- <text name="WLCloudScrollXText">
- Sky drift X
- </text>
- <button label="?" name="WLCloudScrollXHelp" />
- <check_box label="LÃ¥s" name="WLCloudLockX" />
- <slider label="" name="WLCloudScrollX" />
- <text name="WLCloudScrollYText">
- Sky drift Y
- </text>
- <button label="?" name="WLCloudScrollYHelp" />
- <check_box label="LÃ¥s" name="WLCloudLockY" />
- <slider label="" name="WLCloudScrollY" />
- <check_box label="Benyt simple skyer" name="DrawClassicClouds" />
- <button label="?" name="WLClassicCloudsHelp" />
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index d352312d15..c2f7d26dc9 100644
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -140,7 +140,6 @@
<menu_item_check label="Fjern kamerabegrænsninger" name="Disable Camera Distance"/>
<menu_item_check label="Højopløsningsfoto" name="HighResSnapshot"/>
<menu_item_check label="Lydløse fotos til disk" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Komprimér fotos til disk" name="CompressSnapshotsToDisk"/>
<menu label="Værktøjer til ydelse" name="Performance Tools">
<menu_item_call label="Lag meter" name="Lag Meter"/>
<menu_item_check label="Statistik bjælke" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index 4c0fbd280b..3ccdfc036a 100644
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -454,6 +454,7 @@ Købsprisen for dette land er ikke refunderet til ejeren. Hvis en dedikeret parv
Dediker disse [AREA] m² land til gruppen &apos;[GROUP_NAME]&apos;?
</notification>
<notification name="ErrorMessage">
+ [ERROR_MESSAGE]
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="AvatarMovedDesired">
@@ -1334,7 +1335,7 @@ Prøv igen om lidt.
</notification>
<notification name="ObjectGiveItem">
Et object med navnet &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] har givet dig denne [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Behold"/>
<button name="Discard" text="Smid væk"/>
diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
index fd287b1a0a..3036f30240 100644
--- a/indra/newview/skins/default/xui/da/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Gem valgte" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Annullér" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml
index 925492b2d7..66a128cd13 100644
--- a/indra/newview/skins/default/xui/da/panel_people.xml
+++ b/indra/newview/skins/default/xui/da/panel_people.xml
@@ -66,16 +66,16 @@ Leder du efter nogen at være sammen med? Prøv [secondlife:///app/worldmap Verd
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Ã…ben session med privat besked (IM)"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Kald" name="call_btn" tool_tip="Opkald til denne beboer"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
index fe8ca69f34..c555f2fb09 100644
--- a/indra/newview/skins/default/xui/da/panel_places.xml
+++ b/indra/newview/skins/default/xui/da/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="Vis flere valg"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profil" name="profile_btn" tool_tip="Vis profil for sted"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
index 68b861fe92..165d47c931 100644
--- a/indra/newview/skins/default/xui/da/strings.xml
+++ b/indra/newview/skins/default/xui/da/strings.xml
@@ -1209,9 +1209,6 @@ Prøv venligst om lidt igen.
<string name="InvFolder My Inventory">
Min beholdning
</string>
- <string name="InvFolder My Favorites">
- Mine favoritter
- </string>
<string name="InvFolder Library">
Bibliotek
</string>
@@ -1270,10 +1267,10 @@ Prøv venligst om lidt igen.
Bevægelser
</string>
<string name="InvFolder Favorite">
- Favoritter
+ Mine favoritter
</string>
<string name="InvFolder favorite">
- Favoritter
+ Mine favoritter
</string>
<string name="InvFolder Current Outfit">
Nuværende sæt
@@ -1838,7 +1835,7 @@ Prøv venligst om lidt igen.
<string name="RegionNoCovenantOtherOwner">
Der er ingen regler for dette estate. Land på dette estate sælges af estate ejeren, ikke af Linden Lab. Kontakt venligst estate ejeren for detaljer om salg.
</string>
- <string name="covenant_last_modified" value="Sidst rettet:"/>
+ <string name="covenant_last_modified" value="Sidst rettet: "/>
<string name="none_text" value=" (ingen) "/>
<string name="never_text" value=" (aldrig) "/>
<string name="GroupOwned">
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index f0fa4386d2..c65dc5f41d 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -133,12 +133,12 @@
0
</text>
<button label="Land kaufen" label_selected="Land kaufen..." name="Buy Land..."/>
+ <button label="Linden-Verkauf" label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
<button label="Skriptinfo" name="Scripts..."/>
<button label="Für Gruppe kaufen" label_selected="Für Gruppe kaufen..." name="Buy For Group..."/>
<button label="Pass kaufen" label_selected="Pass kaufen..." name="Buy Pass..." tool_tip="Ein Pass gibt Ihnen zeitbegrenzten Zugang zu diesem Land."/>
<button label="Land aufgeben" label_selected="Land aufgeben..." name="Abandon Land..."/>
<button label="Land in Besitz nehmen" label_selected="Land in Besitz nehmen..." name="Reclaim Land..."/>
- <button label="Linden-Verkauf" label_selected="Linden-Verkauf..." name="Linden Sale..." tool_tip="Land muss Eigentum und auf Inhalt gesetzt sein und nicht zur Auktion stehen."/>
</panel>
<panel label="VERTRAG" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -309,6 +309,9 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<panel.string name="push_restrict_region_text">
Kein Stoßen (regional)
</panel.string>
+ <panel.string name="see_avs_text">
+ Auf dieser Parzelle Einwohner sehen und mit ihnen chatten
+ </panel.string>
<text name="allow_label">
Anderen Einwohnern gestatten:
</text>
@@ -371,6 +374,10 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Klicken Sie hier, um ein Bild auszuwählen"/>
+ <text name="allow_label5">
+ Einwohnern auf anderen Parzellen Folgendes gestatten:
+ </text>
+ <check_box label="Avatare sehen" name="SeeAvatarsCheck" tool_tip="Gestattet sowohl Einwohnern auf anderen Parzellen, Einwohner auf dieser Parzelle zu sehen und mit ihnen zu chatten, als auch Ihnen, diese Einwohner auf anderen Parzellen zu sehen und mit ihnen zu chatten."/>
<text name="landing_point">
Landepunkt: [LANDING]
</text>
@@ -427,6 +434,11 @@ Nur große Parzellen können in der Suche aufgeführt werden.
Sound:
</text>
<check_box label="Gesten- und Objektgeräusche auf diese Parzelle beschränken" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Avatarsounds:
+ </text>
+ <check_box label="Jeder" name="all av sound check"/>
+ <check_box label="Gruppe" name="group av sound check"/>
<text name="Voice settings:">
Voice:
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
index e90eb2c00b..939fd5dee4 100644
--- a/indra/newview/skins/default/xui/de/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/de/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="RASTER-OPTIONEN">
- <spinner label="Raster-Einheiten (Meter)" name="GridResolution"/>
- <spinner label="Rastergröße (Meter)" name="GridDrawSize"/>
+ <floater.string name="grid_screen_text">
+ Bildschirm
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Lokal
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Welt
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referenz
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anhang
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Rasteropazität">
+ Modus
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Wählen Sie das gewünschte Rasterlineal zum Positionieren des Objekts aus.">
+ <combo_box.item label="Globales Raster" name="World"/>
+ <combo_box.item label="Lokales Raster" name="Local"/>
+ <combo_box.item label="Referenzraster" name="Reference"/>
+ </combo_box>
+ <spinner label="Einheiten (m)" name="GridResolution"/>
+ <spinner label="Rastergröße (meter)" name="GridDrawSize"/>
<check_box label="An Untereinheiten ausrichten" name="GridSubUnit"/>
<check_box label="Überschneidungen anzeigen" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Raster-Deckkraft">
diff --git a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
deleted file mode 100644
index 8599737106..0000000000
--- a/indra/newview/skins/default/xui/de/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="TAGESZYKLUS-EDITOR">
- <tab_container name="Day Cycle Tabs">
- <panel label="Tageszyklus" name="Day Cycle">
- <button label=" ?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 24:00
- </text>
- <text name="WL3am">
- 03:00
- </text>
- <text name="WL6am">
- 06:00
- </text>
- <text name="WL9amHash">
- 09:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 24:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Key hinzu" label_selected="Key hinzu" name="WLAddKey"/>
- <button label="Key löschen" label_selected="Key löschen" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Keyframe-Einstellungen:
- </text>
- <text name="WLCurKeyTimeText">
- Key-Zeit:
- </text>
- <spinner label="Std." name="WLCurKeyHour"/>
- <spinner label="Min." name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Key-Voreinstellung:
- </text>
- <combo_box label="Voreinstellung" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Einrasten:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Zykluslänge:
- </text>
- <spinner label="Std." name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Sek." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Vorschau:
- </text>
- <button label="Start" label_selected="Start" name="WLAnimSky"/>
- <button label="Stopp" label_selected="Stopp" name="WLStopAnimSky"/>
- <button label="Grundbesitzzeit verw" label_selected="Zur Grundbesitzzeit" name="WLUseLindenTime"/>
- <button label="Testtag speichern" label_selected="Testtag speichern" name="WLSaveDayCycle"/>
- <button label="Testtag laden" label_selected="Testtag laden" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..cc14ce640d
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="UMGEB.VOREINST. LÖSCHEN">
+ <string name="title_water">
+ Wasser-Voreinstellung löschen
+ </string>
+ <string name="title_sky">
+ Himmel-Voreinstellung löschen
+ </string>
+ <string name="title_day_cycle">
+ Tageszyklus löschen
+ </string>
+ <string name="label_water">
+ Voreinstellung:
+ </string>
+ <string name="label_sky">
+ Voreinstellung:
+ </string>
+ <string name="label_day_cycle">
+ Tageszyklus:
+ </string>
+ <string name="msg_confirm_deletion">
+ Möchten Sie die ausgewählte Voreinstellung wirklich löschen?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Eine Voreinstellung, auf die sich ein Tageszyklus bezieht, kann nicht gelöscht werden.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="label">
+ Voreinstellung:
+ </text>
+ <button label="Löschen" name="delete"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..8b29428c24
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Tageszyklus bearbeiten">
+ <string name="title_new">
+ Neuen Tageszyklus erstellen
+ </string>
+ <string name="title_edit">
+ Tageszyklus bearbeiten
+ </string>
+ <string name="hint_new">
+ Geben Sie einen Namen für den Tageszyklus ein, passen Sie die Steuerungen an, um den Tageszyklus zu erstellen, und klicken Sie auf „Speichern“.
+ </string>
+ <string name="hint_edit">
+ Um den Tageszyklus zu bearbeiten, passen Sie die Steuerungen unten an und klicken Sie auf „Speichern“.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="label">
+ Name der Voreinstellung:
+ </text>
+ <text name="note">
+ Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
+ </text>
+ <text name="hint_item1">
+ - Klicken Sie auf eine Registerkarte, um die Himmeleinstellungen und die Uhrzeit zu bearbeiten.
+ </text>
+ <text name="hint_item2">
+ - Klicken und ziehen Sie die Registerkarten, um die Übergangszeiten einzustellen.
+ </text>
+ <text name="hint_item3">
+ - Anhand des Scrubbers können Sie eine Vorschau Ihres Tageszyklus anzeigen.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Schlüssel hinzufügen" label_selected="Schlüssel hinzufügen" name="WLAddKey"/>
+ <button label="Schlüssel löschen" label_selected="Schlüssel löschen" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 0:00
+ </text>
+ <text name="WL3am">
+ 3:00
+ </text>
+ <text name="WL6am">
+ 6:00
+ </text>
+ <text name="WL9amHash">
+ 9:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL3pm">
+ 15:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL9pm">
+ 21:00
+ </text>
+ <text name="WL12am2">
+ 0:00
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Himmeleinstellung:
+ </text>
+ <combo_box label="Voreinstellung" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Uhrzeit:
+ </text>
+ <time name="time" value="6:00"/>
+ <check_box label="Zu meinem neuen Tageszyklus machen" name="make_default_cb"/>
+ <button label="Speichern" name="save"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..ea4c5f7ebc
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Himmel-Voreinstellung bearbeiten">
+ <string name="title_new">
+ Neue Himmel-Voreinstellung erstellen
+ </string>
+ <string name="title_edit">
+ Himmel-Voreinstellung bearbeiten
+ </string>
+ <string name="hint_new">
+ Geben Sie einen Namen für die Voreinstellung ein, passen Sie die Steuerungen an, um die Voreinstellung zu erstellen, und klicken Sie dann auf „Speichern“.
+ </string>
+ <string name="hint_edit">
+ Um Ihre Himmel-Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="hint">
+ Um Ihre Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </text>
+ <text name="label">
+ Name der Voreinstellung:
+ </text>
+ <text name="note">
+ Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSPHÄRE" name="Atmosphere">
+ <text name="BHText">
+ Blauer Horizont
+ </text>
+ <text name="BDensText">
+ Horizonttrübung
+ </text>
+ <text name="BDensText2">
+ Farbintensität
+ </text>
+ <text name="HDText">
+ Trübungsintensität
+ </text>
+ <text name="DensMultText">
+ Dichtemultiplikator
+ </text>
+ <text name="WLDistanceMultText">
+ Entfernungsmultiplikator
+ </text>
+ <text name="MaxAltText">
+ Max. Höhe
+ </text>
+ </panel>
+ <panel label="BELEUCHTUNG" name="Lighting">
+ <text name="SLCText">
+ Sonne/Mond-Farbe
+ </text>
+ <text name="WLAmbientText">
+ Umgebung
+ </text>
+ <text name="SunGlowText">
+ Sonnenleuchtkraft
+ </text>
+ <slider label="Fokus" name="WLGlowB"/>
+ <slider label="Größe" name="WLGlowR"/>
+ <text name="WLStarText">
+ Sternenleuchtkraft
+ </text>
+ <text name="SceneGammaText">
+ Gamma in Szene
+ </text>
+ <text name="TODText">
+ Sonne/Mond-Stand
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 0:00
+ </text>
+ <text name="WL6am">
+ 3:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL12am2">
+ 0:00
+ </text>
+ <time name="WLDayTime" value="6:00"/>
+ <text name="WLEastAngleText">
+ Ostausrichtung
+ </text>
+ </panel>
+ <panel label="WOLKEN" name="Clouds">
+ <text name="WLCloudColorText">
+ Wolkenfarbe
+ </text>
+ <text name="WLCloudColorText2">
+ Wolken-XY/Dichte
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Wolkendichte
+ </text>
+ <text name="WLCloudScaleText">
+ Wolkenskalierung
+ </text>
+ <text name="WLCloudDetailText">
+ Wolkendetails (XY/Dichte)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Wolkenbewegung X
+ </text>
+ <check_box label="Sperren" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Wolkenbewegung Y
+ </text>
+ <check_box label="Sperren" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Diese Voreinstellung zu meiner neuen Himmeleinstellung machen" name="make_default_cb"/>
+ <button label="Speichern" name="save"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..9b9d5e7d77
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Wasser-Voreinstellung bearbeiten">
+ <string name="title_new">
+ Neue Wasser-Voreinstellung erstellen
+ </string>
+ <string name="title_edit">
+ Wasser-Voreinstellung bearbeiten
+ </string>
+ <string name="hint_new">
+ Geben Sie einen Namen für die Voreinstellung ein, passen Sie die Steuerungen an, um die Voreinstellung zu erstellen, und klicken Sie dann auf „Speichern“.
+ </string>
+ <string name="hint_edit">
+ Um Ihre Wasser-Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </string>
+ <string name="combo_label">
+ -Voreinstellung auswählen-
+ </string>
+ <text name="hint">
+ Um Ihre Voreinstellung zu bearbeiten, passen Sie die Steuerungen an und klicken Sie auf „Speichern“.
+ </text>
+ <text name="label">
+ Name der Voreinstellung:
+ </text>
+ <text name="note">
+ Hinweis: Wenn Sie den Namen Ihrer Voreinstellung ändern, entsteht eine neue Voreinstellung; die vorhandene Voreinstellung wird nicht geändert.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Trübungsfarbe
+ </text>
+ <text name="water_fog_density_label">
+ Exponent für Trübungsdichte
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modifikator für Wassertrübung
+ </text>
+ <text name="BHText">
+ Richtung für große Wellen
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Reflexionswellengröße
+ </text>
+ <text name="HDText">
+ Fresnel-Skalierung
+ </text>
+ <text name="FresnelOffsetText">
+ Fresnel-Versatz
+ </text>
+ <text name="BHText2">
+ Richtung für kleine Wellen
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Brechungsstärke oben
+ </text>
+ <text name="WaterScaleBelowText">
+ Brechungsstärke unten
+ </text>
+ <text name="MaxAltText">
+ Mischungsmultiplikator
+ </text>
+ <text name="BHText3">
+ Normal-Map
+ </text>
+ </panel>
+ <check_box label="Diese Voreinstellung zu meiner neuen Wassereinstellung machen" name="make_default_cb"/>
+ <button label="Speichern" name="save"/>
+ <button label="Abbrechen" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_env_settings.xml b/indra/newview/skins/default/xui/de/floater_env_settings.xml
deleted file mode 100644
index 0c78909108..0000000000
--- a/indra/newview/skins/default/xui/de/floater_env_settings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="UMWELT-EDITOR">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Tageszeit
- </text>
- <text name="EnvTimeText2">
- 12:00
- </text>
- <text name="EnvCloudText">
- Wolkendecke
- </text>
- <text name="EnvWaterColorText">
- Wasserfarbe
- </text>
- <color_swatch name="EnvWaterColor" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
- <text name="EnvWaterFogText">
- Wasser-
-trübung
- </text>
- <button label="Grundbesitzzeit verw." name="EnvUseEstateTimeButton"/>
- <button label="Himmel (erweitert)" name="EnvAdvancedSkyButton"/>
- <button label="Wasser (erweitert)" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_environment_settings.xml b/indra/newview/skins/default/xui/de/floater_environment_settings.xml
new file mode 100644
index 0000000000..946416980a
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="UMGEBUNGSEINSTELLUNGEN">
+ <text name="note">
+ Anhand der Optionen unten können Sie die Umgebungseinstellungen für Ihren Viewer anpassen.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Regionseinstellungen verwenden" name="use_region_settings"/>
+ <radio_item label="Meine Umgebung anpassen" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Hinweis: Ihre benutzerdefinierten Einstellungen sind für andere Benutzer nicht sichtbar.
+ </text>
+ <text name="water_settings_title">
+ Wassereinstellung
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Himmel / Tageszyklus
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Fester Himmel" name="my_sky_settings"/>
+ <radio_item label="Tageszyklus" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml
index 83c51132ee..330893c326 100644
--- a/indra/newview/skins/default/xui/de/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inaktiv
</string>
+ <string name="status_parse_error">
+ DAE-Parsing-Fehler. Details siehe Protokoll.
+ </string>
<string name="status_reading_file">
Laden...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen.
</string>
+ <string name="bad_element">
+ Fehler: ungültiges Element.
+ </string>
<string name="high">
Hoch
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Vereinfachung läuft...
</string>
+ <string name="tbd">
+ noch nicht festgelegt
+ </string>
<text name="name_label">
Name:
</text>
@@ -74,23 +83,26 @@
Detailstufe: Niedrigste
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
- <text name="physics cost">
- Physikkosten: [COST]
- </text>
- <text name="upload fee">
- Gebühr für Hochladen: --
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ ACHTUNG:
+ </text>
+ <text name="warning_message">
+ Sie können dieses Modell nicht auf die Second Life-Server hochladen. [[VURL] Weitere Infos], wie Sie das Hochladen von Netzmodellen freischalten können.
+ </text>
+ <text name="weights_text">
+ Herunterladen:
+Physik:
+Server:
+
+Prim-Äquivalenz:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Standardwerte" name="reset_btn" tool_tip="Standardwerte wiederherstellen"/>
- <button label="Hochladen" name="ok_btn" tool_tip="An Simulator hochladen"/>
- <button label="Abbrechen" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Detailstufe" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0,0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Gebühr für Hochladen: [FEE] L$
+ </text>
+ <button label="Auf Standardwerte setzen" name="reset_btn" tool_tip="Auf Standardwerte setzen"/>
+ <button label="Gewichte und Gebühr berechnen" name="calculate_btn" tool_tip="Gewichte und Gebühr berechnen"/>
+ <button label="Hochladen" name="ok_btn" tool_tip="An Simulator hochladen"/>
+ <button label="Abbrechen" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_model_wizard.xml b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
index 2c7b45906e..7103757b40 100644
--- a/indra/newview/skins/default/xui/de/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/de/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="ASSISTENT ZUM HOCHLADEN VON MODELLEN">
<button label="5. Hochladen" name="upload_btn"/>
<button label="4. Überprüfen" name="review_btn"/>
- <button label="3. Physik" name="physics2_btn"/>
<button label="3. Physik" name="physics_btn"/>
<button label="2. Optimieren" name="optimize_btn"/>
<button label="1. Datei auswählen" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Modell hochladen
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Modelldatei auswählen
</text>
</panel>
- <text name="description">
- Mit diesem Assistenten können Sie Netzmodelle in Second Life hochladen. Geben Sie zuerst die Datei mit dem zu importierenden Modell an. Second Life unterstützt COLLADA-Dateien (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Dateiname:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Fortgeschrittene Benutzer: Wenn Sie bereits mit Tools zur Erstellung von 3D-Inhalten vertraut sind, können Sie den erweiterten Uploader verwenden.
+ </text>
+ <button label="Auf Erweitert wechseln" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Hochzuladende Modelldatei auswählen
</text>
<button label="Durchsuchen..." label_selected="Durchsuchen..." name="browse"/>
+ <text name="support_collada_text">
+ Second Life unterstützt COLLADA-Dateien (.dae).
+ </text>
+ <text name="dimensions_label">
+ Abmessungen (m):
+ </text>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ ACHTUNG:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Sie können den letzten Schritt nicht abschließen (Modell auf Second Life-Server hochladen). [secondlife:///app/floater/learn_more Weitere Infos], wie Sie Ihr Konto zum Hochladen von Netzmodellen einrichten.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Optimieren
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Modell optimieren
</text>
</panel>
- <text name="description">
- Dieser Assistent hat Ihr Modell optimiert, um die Leistung zu erhöhen. Sie können die Optimierungsergebnisse unten ändern oder zum Fortfahren auf „Weiter“ klicken.
+ <text name="optimize_hint">
+ Wir haben das Modell auf Leistung optimiert. Sie können es bei Bedarf weiter anpassen.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Detailstufe generieren
+ </text>
<text name="high_detail_text">
Detailstufe generieren: Hoch
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Modellvorschau:
+ <text name="optimize_performance_text">
+ Leistung
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
- <combo_item name="high">
- Hoch
+ <text name="optimize_faster_rendering_text">
+ Schnellere Darstellung
+Weniger Details
+Niedrigeres Prim-Gewicht
+ </text>
+ <text name="optimize_accuracy_text">
+ Genauigkeit
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Langsamere Darstellung
+Mehr Details
+Höheres Prim-Gewicht
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Geometrie neu berechnen" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Geometrievorschau
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
+ <combo_item name="preview_lod_high">
+ Viel Details
</combo_item>
- <combo_item name="medium">
- Mittel
+ <combo_item name="preview_lod_medium">
+ Mittlere Details
</combo_item>
- <combo_item name="low">
- Niedrig
+ <combo_item name="preview_lod_low">
+ Wenig Details
</combo_item>
- <combo_item name="lowest">
- Niedrigste
+ <combo_item name="preview_lod_lowest">
+ Wenigste Details
</combo_item>
</combo_box>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Physik
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Physik anpassen
</text>
</panel>
- <text name="description">
- Der Assistent erstellt eine physische Form, die die Interaktionen des Objekts mit anderen Objekten und Avataren bestimmt. Setzen Sie den Schieber auf die Detailstufe, die für Ihr Objekt am besten geeignet ist:
+ <text name="physics_hint">
+ Wir erstellen eine Form für die Außenhülle des Modells. Passen Sie die Detailstufe der Form wie für den beabsichtigten Zweck erforderlich an.
</text>
- <panel name="content">
- <text name="streaming cost">
- Ressourcenkosten: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Leistung
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Physik
+ <text name="physics_faster_rendering_text">
+ Schnellere Darstellung
+Weniger Details
+Niedrigeres Prim-Gewicht
</text>
- </panel>
- <text name="description">
- Überprüfen Sie die physische Form unten und klicken Sie dann auf „Weiter“. Um die physische Form zu ändern, klicken Sie auf „Zurück“.
- </text>
- <panel name="content">
- <text name="lod_label">
- Modellvorschau:
+ <text name="physics_accuracy_text">
+ Genauigkeit
+ </text>
+ <text name="physics_slower_dendering_text">
+ Langsamere Darstellung
+Mehr Details
+Höheres Prim-Gewicht
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
- <combo_item name="high">
- Hoch
+ <text name="physics_example_1">
+ Beispiele:
+Mobile Objekte
+Fliegende Objekte
+Fahrzeuge
+ </text>
+ <text name="physics_example_2">
+ Beispiele:
+Kleine statische Objekte
+Objekte mit weniger Details
+Einfache Möbel
+ </text>
+ <text name="physics_example_3">
+ Beispiele:
+Statische Objekte
+Objekte mit viel Details
+Gebäude
+ </text>
+ <button label="Physik neu berechnen" name="recalculate_physics_btn"/>
+ <button label="Neu berechnen..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Physikvorschau
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
+ <combo_item name="preview_lod2_high">
+ Viel Details
</combo_item>
- <combo_item name="medium">
- Mittel
+ <combo_item name="preview_lod2_medium">
+ Mittlere Details
</combo_item>
- <combo_item name="low">
- Niedrig
+ <combo_item name="preview_lod2_low">
+ Wenig Details
</combo_item>
- <combo_item name="lowest">
- Niedrigste
+ <combo_item name="preview_lod2_lowest">
+ Wenigste Details
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Überprüfen
</text>
</panel>
- <text name="description">
- Überprüfen Sie die Details unten und klicken Sie dann auf „Hochladen“, um das Modell hochzuladen. Die Kosten werden von Ihrem L$-Kontostand abgezogen.
- </text>
- <panel name="content">
- <text name="lod_label">
- Modellvorschau:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Auswirkung auf Parzelle/Region: Prim-Äquivalenzwert [EQUIV]
</text>
- <combo_box name="preview_lod_combo" tool_tip="Detailstufe zur Anzeige in Vorschaudarstellung">
- <combo_item name="high">
- Hoch
- </combo_item>
- <combo_item name="medium">
- Mittel
- </combo_item>
- <combo_item name="low">
- Niedrig
- </combo_item>
- <combo_item name="lowest">
- Niedrigste
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ Die für das Hochladen anfallende Gebühr in Höhe von [FEE] L$ wird von Ihrem Konto abgebucht.
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Durch Klicken auf „Hochladen“ bestätigen Sie, dass Sie die erforderlichen Rechte für das im Modell enthaltene Material besitzen.
</text>
</panel>
- <text name="streaming cost">
- Ressourcenkosten: [COST]
- </text>
- <text name="physics cost">
- Physikkosten: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
Upload abgeschlossen
</text>
</panel>
- <text name="description">
- Herzlichen Glückwunsch! Ihr Modell wurde erfolgreich hochgeladen. Sie finden das Modell im Objektordner Ihres Inventars.
+ <text name="model_uploaded_text">
+ Ihr Modell wurde hochgeladen.
+ </text>
+ <text name="inventory_text">
+ Sie finden das Modell im Objektordner Ihres Inventars.
+ </text>
+ <text name="charged_fee">
+ Von Ihrem Konto wurden [FEE] L$ abgebucht.
</text>
</panel>
<button label="&lt;&lt; Zurück" name="back"/>
<button label="Weiter &gt;&gt;" name="next"/>
+ <button label="Gewichte und Gebühr berechnen &gt;&gt;" name="calculate"/>
+ <button label="Berechnen..." name="calculating"/>
<button label="Hochladen" name="upload" tool_tip="An Simulator hochladen"/>
<button label="Abbrechen" name="cancel"/>
<button label="Schließen" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inaktiv
</string>
+ <string name="status_parse_error">
+ DAE-Parsing-Fehler. Details siehe Protokoll.
+ </string>
<string name="status_reading_file">
Laden...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Fehler: Anzahl von Vertices überschreitet 65534. Operation abgebrochen.
</string>
+ <string name="bad_element">
+ Fehler: ungültiges Element.
+ </string>
<string name="high">
Hoch
</string>
diff --git a/indra/newview/skins/default/xui/de/floater_search.xml b/indra/newview/skins/default/xui/de/floater_search.xml
index d44ad44aea..bd39bf2bce 100644
--- a/indra/newview/skins/default/xui/de/floater_search.xml
+++ b/indra/newview/skins/default/xui/de/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="SUCHEN">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Wird geladen...
</floater.string>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 338b609343..49b133e10f 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Klicken und ziehen, um Land auszuwählen
</floater.string>
- <floater.string name="grid_screen_text">
- Bildschirm
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] Objekte ([PRIM_COUNT] Prims [PE_STRING]) ausgewählt
</floater.string>
- <floater.string name="grid_local_text">
- Lokal
- </floater.string>
- <floater.string name="grid_world_text">
- Welt
- </floater.string>
- <floater.string name="grid_reference_text">
- Referenz
- </floater.string>
- <floater.string name="grid_attachment_text">
- Anhang
+ <floater.string name="status_selectprimequiv">
+ , Prim-Äquivalenz [SEL_WEIGHT]
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Fokus"/>
<button label="" label_selected="" name="button move" tool_tip="Verschieben"/>
@@ -66,20 +57,12 @@
<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
<button label="Link" name="link_btn" width="30"/>
<button label="Verknüpfung auflösen" name="unlink_btn" width="126"/>
- <text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für dieses Objekt" left_pad="0">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Beide Seiten dehnen" name="checkbox uniform label">
Beide Seiten dehnen
</text>
<check_box initial_value="true" label="Texturen dehnen" name="checkbox stretch textures" top_pad="-5"/>
- <check_box initial_value="true" label="An Raster ausrichten" name="checkbox snap to grid" top_pad="15"/>
- <combo_box name="combobox grid mode" tool_tip="Wählen Sie ein Rasterlineal zum Positionieren des Objekts aus.">
- <combo_box.item label="Globales Raster" name="World"/>
- <combo_box.item label="Lokales Raster" name="Local"/>
- <combo_box.item label="Referenzraster" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Einrasten" name="checkbox snap to grid" top_pad="15"/>
<button label="Optionen..." label_selected="Optionen..." name="Options..." tool_tip="Mehr Raster-Optionen anzeigen"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Würfel"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -119,23 +102,11 @@
Stärke
</text>
<button label="Übernehmen" label_selected="Übernehmen" name="button apply to selection" tool_tip="Ausgewähltes Land bearbeiten"/>
- <text name="obj_count">
- Objekte: [COUNT]
- </text>
- <text name="prim_count">
- Primitive: [COUNT]
- </text>
- <text name="linked_set_count">
- Verknüpfte Sätze: [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Kosten der gegenwärtig ausgewählten verknüpften Sätze als [Prims],[Komplexität der Physik]">
- Kosten: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Objekte: [COUNT]
+ <text name="selection_empty">
+ Nichts ausgewählt.
</text>
- <text name="object_cost" tool_tip="Kosten der gegenwärtig ausgewählten Objekte als [Prims] / [Komplexität der Physik]">
- Kosten: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Physikgewicht [PHYS_WEIGHT], Darstellungskosten [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs">
<panel label="Allgemein" name="General">
@@ -356,7 +327,6 @@
<combo_box.item label="Torus" name="Torus"/>
<combo_box.item label="Fläche" name="Plane"/>
<combo_box.item label="Zylinder" name="Cylinder"/>
- <combo_box.item label="Netz" name="Mesh"/>
</combo_box>
</panel>
<panel label="Eigenschaften" name="Features">
@@ -408,7 +378,7 @@
</combo_box>
<spinner label="Schwerkraft" name="Physics Gravity"/>
<spinner label="Reibung" name="Physics Friction"/>
- <spinner label="Dichte" name="Physics Density"/>
+ <spinner label="Dichte in 100 kg/m^3" name="Physics Density"/>
<spinner label="Restitution" name="Physics Restitution"/>
</panel>
<panel label="Textur" name="Texture">
diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
index 21031cd556..3dc0fc2322 100644
--- a/indra/newview/skins/default/xui/de/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Neu!)
</string>
+ <string name="effect_Arena">
+ Arena
+ </string>
+ <string name="effect_Beast">
+ Bestie
+ </string>
+ <string name="effect_Buff">
+ Muskulös
+ </string>
+ <string name="effect_Buzz">
+ Buzz
+ </string>
+ <string name="effect_Camille">
+ Camille
+ </string>
+ <string name="effect_Creepy">
+ Unheimlich
+ </string>
+ <string name="effect_CreepyBot">
+ UnheimlicherBot
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ TieferBot
+ </string>
+ <string name="effect_Demon">
+ Dämon
+ </string>
+ <string name="effect_Flirty">
+ Kokett
+ </string>
+ <string name="effect_Foxy">
+ Attraktiv
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Bonus_Halloween_2010
+ </string>
+ <string name="effect_Helium">
+ Helium
+ </string>
+ <string name="effect_Husky">
+ Rauchig
+ </string>
+ <string name="effect_Intercom">
+ Intercom
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Alptraum
+ </string>
+ <string name="effect_PopBot">
+ PopBot
+ </string>
+ <string name="effect_Rachel">
+ Rachel
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Roboter
+ </string>
+ <string name="effect_Roxanne">
+ Roxanne
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samantha
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Shorty
+ </string>
+ <string name="effect_Sneaky">
+ Hinterhältig
+ </string>
+ <string name="effect_Stallion">
+ Hengst
+ </string>
+ <string name="effect_Sultry">
+ Feurig
+ </string>
+ <string name="effect_Thunder">
+ Donner
+ </string>
+ <string name="effect_Vixen">
+ Erotisch
+ </string>
+ <string name="effect_WhinyBot">
+ JammernderBot
+ </string>
<text name="preview_text">
Zur Vorschau
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_water.xml b/indra/newview/skins/default/xui/de/floater_water.xml
deleted file mode 100644
index bb0dd9c75d..0000000000
--- a/indra/newview/skins/default/xui/de/floater_water.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ERWEITERTER WASSER-EDITOR">
- <floater.string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </floater.string>
- <text name="KeyFramePresetsText" width="110">
- Voreinstellungen:
- </text>
- <combo_box left_delta="110" name="WaterPresetsCombo"/>
- <button label="Neu" label_selected="Neu" name="WaterNewPreset"/>
- <button label="Speichern" label_selected="Speichern" name="WaterSavePreset"/>
- <button label="Löschen" label_selected="Löschen" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="EINSTELLUNGEN" name="Settings">
- <text name="BHText">
- Wassertrübungsfarbe
- </text>
- <color_swatch name="WaterFogColor" tool_tip="Klicken Sie hier, um die Farbauswahl zu öffnen"/>
- <text name="WaterFogDensText">
- Wassertrübungsdichte
- </text>
- <text name="WaterUnderWaterFogModText">
- Wassertrübungs-Modifikator
- </text>
- <slider bottom_delta="-34" name="WaterUnderWaterFogMod"/>
- <text name="BDensText">
- Reflexionswellengröße
- </text>
- <slider label="1" name="WaterNormalScaleX"/>
- <slider label="2" name="WaterNormalScaleY"/>
- <slider label="3" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Fresnel-Skalierung
- </text>
- <text name="FresnelOffsetText">
- Fresnel-Versatz
- </text>
- <text name="DensMultText">
- Brechungsstärke oben
- </text>
- <text name="WaterScaleBelowText">
- Brechungsstärke unten
- </text>
- <text name="MaxAltText">
- Mischungsmultiplikator
- </text>
- </panel>
- <panel label="BILD" name="Waves">
- <text name="BHText">
- Richtung große Welle
- </text>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Richtung kleine Welle
- </text>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Normal-Map
- </text>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_windlight_options.xml b/indra/newview/skins/default/xui/de/floater_windlight_options.xml
deleted file mode 100644
index 5b59336f9d..0000000000
--- a/indra/newview/skins/default/xui/de/floater_windlight_options.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="ERWEITERTER HIMMEL-EDITOR">
- <text name="KeyFramePresetsText">
- Voreinstellungen:
- </text>
- <button label="Neu" label_selected="Neu" name="WLNewPreset"/>
- <button label="Speichern" label_selected="Speichern" name="WLSavePreset"/>
- <button label="Löschen" label_selected="Löschen" name="WLDeletePreset"/>
- <button label="Tageszyklus-Editor" label_selected="Tageszyklus-Editor" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSPHÄRE" name="Atmosphere">
- <text name="BHText">
- Horizontfarbe
- </text>
- <button label=" ?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Horizonttrübung
- </text>
- <button label=" ?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Farbintensität
- </text>
- <button label=" ?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Trübungsintensität
- </text>
- <button label=" ?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Dichtemultiplikator
- </text>
- <button label=" ?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Entfernungsmultiplikator
- </text>
- <button label=" ?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Max. Höhe
- </text>
- <button label=" ?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="LICHT" name="Lighting">
- <text name="SLCText">
- Sonne/Mond-Farbe
- </text>
- <button label=" ?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Sonne/Mond-Stand
- </text>
- <button label=" ?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Umgebung
- </text>
- <button label=" ?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Ostausrichtung
- </text>
- <button label=" ?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Sonnenleuchtkraft
- </text>
- <button label=" ?" name="WLSunGlowHelp"/>
- <slider label="Fokus " name="WLGlowB"/>
- <slider label="Größe " name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma in Szene
- </text>
- <button label=" ?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Sternenleuchtkraft
- </text>
- <button label=" ?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="WOLKEN" name="Clouds">
- <text name="WLCloudColorText">
- Wolkenfarbe
- </text>
- <button label=" ?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Wolken-XY/Dichte
- </text>
- <button label=" ?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Wolkendichte
- </text>
- <button label=" ?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Wolkenskalierung
- </text>
- <button label=" ?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Wolkendetails (XY/Dichte)
- </text>
- <button label=" ?" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Wolkenbewegung X
- </text>
- <button label=" ?" name="WLCloudScrollXHelp"/>
- <check_box label="Fest" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Wolkenbewegung Y
- </text>
- <button label=" ?" name="WLCloudScrollYHelp"/>
- <check_box label="Fest" name="WLCloudLockY"/>
- <check_box label="Klassische Wolken" name="DrawClassicClouds"/>
- <button label=" ?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml
index a373e15338..d932234cd1 100644
--- a/indra/newview/skins/default/xui/de/menu_login.xml
+++ b/indra/newview/skins/default/xui/de/menu_login.xml
@@ -18,7 +18,7 @@
<menu_item_call label="Servicebedingungen anzeigen" name="TOS"/>
<menu_item_call label="Wichtige Meldung anzeigen" name="Critical"/>
<menu_item_call label="Test Medienbrowser" name="Web Browser Test"/>
- <menu_item_call label="Test Webinhalt-Floater" name="Web Content Floater Test"/>
+ <menu_item_call label="Web Content Floater Debug Test" name="Web Content Floater Debug Test"/>
<menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/>
<menu_item_call label="Benachrichtigungs-Konsole anzeigen" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
index 0f252ab46d..a001544f3e 100644
--- a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
<menu_item_check label="Nach Name sortieren" name="sort_name"/>
<menu_item_check label="Nach Entfernung sortieren" name="sort_distance"/>
<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+ <menu_item_check label="Karte anzeigen" name="view_map"/>
<menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 05f9f94c8a..e010844206 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Meine Gruppen" name="My Groups"/>
<menu_item_check label="Chat in der Nähe" name="Nearby Chat"/>
<menu_item_call label="Leute in der Nähe" name="Active Speakers"/>
+ <menu_item_check label="Stimme in der Nähe" name="Nearby Voice"/>
</menu>
<menu label="Welt" name="World">
<menu_item_check label="Minikarte" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Mittag" name="Noon"/>
<menu_item_call label="Sonnenuntergang" name="Sunset"/>
<menu_item_call label="Mitternacht" name="Midnight"/>
- <menu_item_call label="Grundbesitzzeit" name="Revert to Region Default"/>
- <menu_item_call label="Umwelt-Editor" name="Environment Editor"/>
+ </menu>
+ <menu label="Umgebungs-Editor" name="Enviroment Editor">
+ <menu_item_call label="Umgebungseinstellungen..." name="Enviroment Settings"/>
+ <menu label="Wasser-Voreinstellungen" name="Water Presets">
+ <menu_item_call label="Neue Voreinstellung..." name="new_water_preset"/>
+ <menu_item_call label="Voreinstellung bearbeiten..." name="edit_water_preset"/>
+ <menu_item_call label="Voreinstellung löschen..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Himmel-Voreinstellungen" name="Sky Presets">
+ <menu_item_call label="Neue Voreinstellung..." name="new_sky_preset"/>
+ <menu_item_call label="Voreinstellung bearbeiten..." name="edit_sky_preset"/>
+ <menu_item_call label="Voreinstellung löschen..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Tag-Voreinstellungen" name="Day Presets">
+ <menu_item_call label="Neue Voreinstellung..." name="new_day_preset"/>
+ <menu_item_call label="Voreinstellung bearbeiten..." name="edit_day_preset"/>
+ <menu_item_call label="Voreinstellung löschen..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Bauen" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Kamerabeschränkungen deaktivieren" name="Disable Camera Distance"/>
<menu_item_check label="Foto (hohe Auflösung)" name="HighResSnapshot"/>
<menu_item_check label="Fotos auf Festplatte leise speichern" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Fotos auf Festplatte komprimieren" name="CompressSnapshotsToDisk"/>
<menu label="Performance Tools" name="Performance Tools">
<menu_item_call label="Lag-Anzeige" name="Lag Meter"/>
<menu_item_check label="Statistikleiste" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
index 80d4ff4d9f..dacf898b6a 100644
--- a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Outfit bearbeiten" name="edit"/>
<menu_item_call label="Ausziehen" name="takeoff"/>
-</menu>
+ <menu_item_call label="Outfitliste in Zwischenablage kopieren" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index 75f26c6990..1971061096 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -1565,6 +1565,11 @@ Versuchen Sie es später erneut.
<button name="Cancel" text="Abbrechen"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Sie haben versucht, [OFFERS] Teleport-Angebote zu machen,
+womit Sie die Höchstgrenze von [LIMIT] überschreiten.
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Einwohner zu Ihrem Standort einladen?
<form name="form">
@@ -1986,6 +1991,10 @@ Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschl
Sind Sie sicher, dass Sie Ihren Reise-, Internet- und Suchverlauf löschen möchten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Möchten Sie Ihren Viewer-Cache wirklich leeren?
+ <usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Sind Sie sicher, dass Sie Ihre Cookies löschen möchten?
<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="Ja"/>
@@ -2011,48 +2020,30 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
Die gespeicherte Voreinstellung überschreiben?
<usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
- <notification name="WLDeletePresetAlert">
- [SKY] löschen?
- <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
- </notification>
<notification name="WLNoEditDefault">
Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
</notification>
<notification name="WLMissingSky">
Diese Tageszyklusdatei verweist auf eine fehlende Himmel-Datei: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
- <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
+ <notification name="WLRegionApplyFail">
+ Die Einstellungen konnten nicht auf die Region angewendet werden. Verlassen Sie die Region und kehren Sie zurück, um das Problem zu beheben. Angegebener Grund: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Wählen Sie einen Namen für den neuen Himmel.
- <form name="form">
- <input name="message">
- Neue Voreinstellung
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Abbrechen"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- Voreinstellung bereits vorhanden!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Der letzte Schlüssel in diesem Tageszyklus kann nicht gelöscht werden, da ein Tageszyklus nicht leer sein kann. Statt den letzten verbleibenden Schlüssel zu löschen, versuchen Sie stattdessen, ihn zu modifizieren und dann einen neuen zu erstellen.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Wählen Sie einen Namen für die neue Wasservoreinstellung.
- <form name="form">
- <input name="message">
- Neue Voreinstellung
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Abbrechen"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Sie können diesem Tageszyklus keine Keyframes mehr hinzufügen. Die Höchstzahl an Keyframes für Tageszyklen mit Umfang [SCOPE] beträgt [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- Voreinstellung bereits vorhanden!
+ <notification name="EnvUpdateRate">
+ Sie können die Umgebungseinstellungen der Region nur alle [WAIT] Sekunden aktualisieren. Warten Sie mindestens so lange und versuchen Sie es dann erneut.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Standardvoreinstellungen können nicht bearbeitet oder gelöscht werden.
+ <notification name="PPSaveEffectAlert">
+ Post-Processing-Effekt bereits vorhanden. Möchten Sie ihn überschreiben?
+ <usetemplate name="okcancelbuttons" notext="Nein" yestext="Ja"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Neue Chat-Sitzung mit [RECIPIENT] konnte nicht gestartet werden.
@@ -2081,13 +2072,14 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
<usetemplate ignoretext="Die Kleidung, die während dem Bearbeiten meines Aussehens erstellt wird, sofort anziehen" name="okcancelignore" notext="Nein" yestext="Ja"/>
</notification>
<notification name="NotAgeVerified">
- Sie müssen altersüberprüft sein, um diesen Bereich betreten zu können. Möchten Sie auf der [SECOND_LIFE]-Webseite Ihr Alter verifizieren lassen?
+ Um auf Adult-Inhalte und –Bereiche in Second Life zuzugreifen, müssen Sie mindestens 18 Jahre alt sein. Bitte besuchen Sie die Altersüberprüfungsseite, um zu bestätigen, dass Sie mindestens 18 Jahre alt sind.
+Hierzu wird Ihr Webbrowser geöffnet.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=de
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Nein" yestext="Ja"/>
+ <usetemplate ignoretext="Ich habe mein Alter nicht verifizieren lassen" name="okcancelignore" notext="Abbrechen" yestext="Zur Altersüberprüfung"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein. Möchten Sie diese Einstellung auf der [SECOND_LIFE]-Webseite einrichten?
@@ -2343,6 +2335,9 @@ Fliegen ist hier nicht möglich.
<notification name="NoBuild">
In diesem Bereich ist das Bauen deaktiviert. Sie können keine Objekte bauen oder rezzen.
</notification>
+ <notification name="SeeAvatars">
+ Diese Parzelle verbirgt Avatare und Text-Chat vor einer anderen Parzelle. Sie können Einwohner außerhalb dieser Parzelle weder sehen noch von ihnen gesehen werden. Regulärer Text-Chat auf Kanal 0 ist ebenfalls blockiert.
+ </notification>
<notification name="ScriptsStopped">
Ein Administrator hat die Skriptausführung in dieser Region vorübergehend deaktiviert.
</notification>
@@ -2437,7 +2432,7 @@ Versuchen Sie es in einigen Minuten erneut.
</notification>
<notification name="ObjectGiveItem">
Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, hat Ihnen folgende/n/s [OBJECTTYPE] übergeben:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Behalten"/>
<button name="Discard" text="Verwerfen"/>
@@ -2771,7 +2766,15 @@ Die Schaltfläche wird angezeigt, wenn genügend Platz vorhanden ist.
Wählen Sie Einwohner aus, für die Sie das Objekt freigeben möchten.
</notification>
<notification name="MeshUploadError">
- [LABEL] konnte nicht hochgeladen werden: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] konnte nicht hochgeladen werden: [MESSAGE] [IDENTIFIER]
+
+Details finden Sie in der Protokolldatei.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Fehler beim Anfordern der Berechtigungen zum Hochladen des Netzes
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Regionsfähigkeit „[CAPABILITY]“ konnte nicht abgerufen werden.
</notification>
<notification name="ShareItemsConfirmation">
Möchten Sie wirklich die folgenden Objekte:
diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
index 3c56df763d..aafffc7ae3 100644
--- a/indra/newview/skins/default/xui/de/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Auswahl speichern" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Abbrechen" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
index 632f414747..1af0492aa1 100644
--- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
@@ -46,8 +46,8 @@
</panel>
<panel name="save_revert_button_bar">
<layout_stack name="button_bar_ls">
- <layout_panel name="save_btn_lp">
- <button label="Speichern" name="save_btn"/>
+ <layout_panel name="save_btn_lp" width="61">
+ <button label="Speichern" name="save_btn" width="60" />
</layout_panel>
<layout_panel name="revert_btn_lp">
<button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurückkehren"/>
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_list.xml b/indra/newview/skins/default/xui/de/panel_outfits_list.xml
index 65a38ea342..ea3a938be9 100644
--- a/indra/newview/skins/default/xui/de/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/de/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/all/[SEARCH_TERM] Suche]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Sie haben noch keine Outfits. Versuchen Sie es mit der [secondlife:///app/search/all/ ] Suche]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
+ <menu_button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
<button name="trash_btn" tool_tip="Ausgewähltes Outfit löschen"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index 004792bbf5..4e76147746 100644
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -66,16 +66,16 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="IM-Sitzung öffnen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Teilen" name="share_btn" tool_tip="Inventarobjekt teilen"/>
+ <layout_panel name="share_btn_lp">
+ <button label="Freigeben" name="share_btn" tool_tip="Inventarobjekt freigeben"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml
index 555fa56d57..4077fdab36 100644
--- a/indra/newview/skins/default/xui/de/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_place_profile.xml
@@ -68,6 +68,8 @@
<text name="scripts_value" value="Ein"/>
<text name="damage_label" value="Schaden:"/>
<text name="damage_value" value="Aus"/>
+ <text name="see_avatars_label" value="Avatare sehen:"/>
+ <text name="see_avatars_value" value="Aus"/>
<button label="Über Land" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
index 36c77d4fe1..602ffff94d 100644
--- a/indra/newview/skins/default/xui/de/panel_places.xml
+++ b/indra/newview/skins/default/xui/de/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
index 0a596f2b25..8a5c175f2f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache:
+ </text>
+ <spinner label="Cache-Größe (64 – 9.984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Cache leeren" label_selected="Cache leeren" name="clear_cache"/>
+ <text name="Cache location">
+ Cache-Ordner:
+ </text>
+ <button label="Durchsuchen" label_selected="Durchsuchen" name="set_cache"/>
+ <button label="Vorgabestandort" label_selected="Vorgabestandort" name="default_cache_location"/>
<text name="UI Size:">
UI-Größe:
</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
index c118e4e4dd..1e6a03c99f 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Aktiviert" name="enable_voice_check"/>
<check_box label="Automatische Wiedergabe zulassen" name="media_auto_play_btn" tool_tip="Hier aktivieren, um Medien automatisch wiederzugeben." value="true"/>
<check_box label="Medien, die an andere Avatare angehängt sind, wiedergeben." name="media_show_on_others_btn" tool_tip="Diese Option deaktivieren, um Medien für andere Avataren, die sich in der Nähe befinden, auszublenden." value="true"/>
+ <check_box label="Sounds von Gesten abspielen" name="gesture_audio_play_btn" tool_tip="Markieren, um Sounds von Gesten zu hören" value="true"/>
<text name="voice_chat_settings">
Voice-Chat-Einstellungen
</text>
@@ -35,28 +36,5 @@
<button label="Taste festlegen" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Auf mittlere Maustaste zurücksetzen"/>
<button label="Eingabe-/Ausgabegeräte" name="device_settings_btn"/>
- <panel label="Geräte-Einstellungen" name="device_settings_panel">
- <panel.string name="default_text">
- Standard
- </panel.string>
- <panel.string name="default system device">
- Standardgerät
- </panel.string>
- <panel.string name="no device">
- Kein Gerät
- </panel.string>
- <text name="Input">
- Eingabe
- </text>
- <text name="My volume label">
- Meine Lautstärke:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Ändern Sie die Lautstärke mit dem Regler"/>
- <text name="wait_text">
- Bitte warten
- </text>
- <text name="Output">
- Ausgabe
- </text>
- </panel>
+ <panel label="Geräte-Einstellungen" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_environment.xml b/indra/newview/skins/default/xui/de/panel_region_environment.xml
new file mode 100644
index 0000000000..daadd30f62
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Umgebung" name="panel_env_info">
+ <text name="water_settings_title">
+ Wählen Sie die Wasser- und Himmel-/Tageszykluseinstellungen aus, die alle Besucher Ihrer Region sehen sollen. Mehr Infos
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Second Life-Standard verwenden" name="use_sl_default_settings"/>
+ <radio_item label="Folgende Einstellungen verwenden" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Wassereinstellung
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Himmel / Tageszyklus
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Fester Himmel" name="my_sky_settings"/>
+ <radio_item label="Tageszyklus" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Voreinstellung auswählen-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Anwenden" name="apply_btn"/>
+ <button label="Abbrechen" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_region_terrain.xml b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
index 01721791a7..7801be30e4 100644
--- a/indra/newview/skins/default/xui/de/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Terrain" name="Terrain">
<text name="region_text_lbl">
Region:
@@ -6,25 +6,55 @@
<text name="region_text">
unbekannt
</text>
- <spinner label="Wasserhöhe" name="water_height_spin" />
- <button label="?" name="water_height_help" />
- <spinner label="Obere Terraingrenze" name="terrain_raise_spin" />
- <button label="?" name="terrain_raise_help" />
- <spinner label="Untere Terraingrenze" name="terrain_lower_spin" />
- <button label="?" name="terrain_lower_help" />
- <check_box label="Grundbesitzsonne verwenden" name="use_estate_sun_check" />
- <button label="?" name="use_estate_sun_help" />
- <check_box label="Sonne fest" name="fixed_sun_check" />
- <button label="?" name="fixed_sun_help" />
- <slider label="Phase" name="sun_hour_slider" />
- <button label="Übernehmen" name="apply_btn" />
- <button label="RAW-Terrain herunterladen..." name="download_raw_btn"
- tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" />
- <button label="?" name="download_raw_help" />
- <button label="RAW-Terrain hochladen..." name="upload_raw_btn"
- tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter" />
- <button label="?" name="upload_raw_help" />
- <button label="Terrain formen" name="bake_terrain_btn"
- tool_tip="Das aktuelle Terrain zum Mittelpunkt für die oberen/unteren Terraingrenzen machen" />
- <button label="?" name="bake_terrain_help" />
+ <spinner label="Wasserhöhe" name="water_height_spin"/>
+ <spinner label="Obere Terraingrenze" name="terrain_raise_spin"/>
+ <spinner label="Untere Terraingrenze" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Terraintexturen (erfordert 24-Bit-.tga-Dateien mit einer Größe von 512x512)
+ </text>
+ <text name="height_text_lbl">
+ 1 (niedrig)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Hoch)
+ </text>
+ <text name="height_text_lbl5">
+ Texturhöhenbereich
+ </text>
+ <text name="height_text_lbl10">
+ Diese Werte geben den Mischungsgrad für die obigen Texturen an.
+ </text>
+ <text name="height_text_lbl11">
+ In Metern gemessen. Der Wert „Niedrig“ ist die maximale Höhe von Textur 1, der Wert „Hoch“ die Mindesthöhe von Textur 4.
+ </text>
+ <text name="height_text_lbl6">
+ Nordwest
+ </text>
+ <text name="height_text_lbl7">
+ Nordost
+ </text>
+ <spinner label="Niedrig" name="height_start_spin_1"/>
+ <spinner label="Niedrig" name="height_start_spin_3"/>
+ <spinner label="Hoch" name="height_range_spin_1"/>
+ <spinner label="Hoch" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Südwest
+ </text>
+ <text name="height_text_lbl9">
+ Südost
+ </text>
+ <spinner label="Niedrig" name="height_start_spin_0"/>
+ <spinner label="Niedrig" name="height_start_spin_2"/>
+ <spinner label="Hoch" name="height_range_spin_0"/>
+ <spinner label="Hoch" name="height_range_spin_2"/>
+ <button label="RAW-Terrain herunterladen..." name="download_raw_btn" tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter"/>
+ <button label="RAW-Terrain hochladen..." name="upload_raw_btn" tool_tip="Nur für Grundbesitzeigentümer verfügbar, nicht für Verwalter"/>
+ <button label="Terrain formen" name="bake_terrain_btn" tool_tip="Das aktuelle Terrain zum Mittelpunkt für die oberen/unteren Terraingrenzen machen"/>
+ <button label="Übernehmen" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
index 990193574e..fa659040ea 100644
--- a/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
+++ b/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="LLScrollingPanelParamBase">
- <slider label="[BESCHR]" name="param slider"/>
+ <slider label="[DESC]" name="param slider"/>
</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_sound_devices.xml b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
index da20f7e214..b739b6197f 100644
--- a/indra/newview/skins/default/xui/de/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Standard
</panel.string>
+ <string name="name_no_device">
+ Kein Gerät
+ </string>
+ <string name="name_default_system_device">
+ Standardsystemgerät
+ </string>
<text name="Input">
Eingabe
</text>
+ <text name="Output">
+ Ausgabe
+ </text>
<text name="My volume label">
Meine Lautstärke:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Bitte warten
</text>
- <text name="Output">
- Ausgabe
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
index d817d1df90..3dd1bfb357 100644
--- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Sonstiges" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Erhaltene Objekte ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Erhaltene Objekte
+ </string>
+ <button label="Erhaltene Objekte" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] neu
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Einkäufe auf dem Marktplatz werden hierher geliefert.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Händler-Outbox" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Zu meiner Marktplatz-Storefront verschieben"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Richtigen Sie ein Händlerkonto ein, um diese Funktion zu verwenden.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index d77b4a1e44..902f97efab 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -34,6 +34,9 @@
<string name="StartupInitializingVFS">
VFS wird initialisiert...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Grafikinitialisierung fehlgeschlagen. Bitte aktualisieren Sie Ihren Grafiktreiber.
+ </string>
<string name="ProgressRestoring">
Wird wiederhergestellt...
</string>
@@ -91,6 +94,12 @@
<string name="LoginQuicktimeOK">
QuickTime wurde initialisiert.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Regionsfähigkeiten anfordern...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Regionsfähigkeiten anfordern. Versuch [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
Region-Handshake...
</string>
@@ -1192,6 +1201,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="InventoryNoTexture">
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
</string>
+ <string name="InventoryInboxNoItems">
+ Objekte, die auf dem Marktplatz gekauft wurden, werden hierher geliefert.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Objekte hierher ziehen, um Sie in Ihrer Marktplatz-Storefront zum Verkauf anzubieten.
+ </string>
<string name="no_transfer" value=" (kein Transferieren)"/>
<string name="no_modify" value=" (kein Bearbeiten)"/>
<string name="no_copy" value=" (kein Kopieren)"/>
@@ -1238,9 +1253,6 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="InvFolder My Inventory">
Mein Inventar
</string>
- <string name="InvFolder My Favorites">
- Meine Favoriten
- </string>
<string name="InvFolder Library">
Bibliothek
</string>
@@ -1299,10 +1311,10 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Gesten
</string>
<string name="InvFolder Favorite">
- Favoriten
+ Meine Favoriten
</string>
<string name="InvFolder favorite">
- Favoriten
+ Meine Favoriten
</string>
<string name="InvFolder Current Outfit">
Aktuelles Outfit
@@ -1325,6 +1337,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="InvFolder All">
Alle
</string>
+ <string name="no_attachments">
+ Keine Anhänge getragen
+ </string>
<string name="Buy">
Kaufen
</string>
@@ -1634,6 +1649,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
</string>
<string name="SummaryForTheWeek" value="Zusammenfassung für diese Woche, beginnend am "/>
<string name="NextStipendDay" value=". Der nächste Stipendium-Tag ist "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value=" Gruppenanteil Einzelanteil"/>
<string name="GroupColumn" value="Gruppe"/>
<string name="Balance">
@@ -1660,6 +1678,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="IMTeen">
Teen
</string>
+ <string name="Anyone">
+ jeder
+ </string>
<string name="RegionInfoError">
Fehler
</string>
@@ -1873,7 +1894,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="RegionNoCovenantOtherOwner">
Für diesen Grundbesitz liegt kein Vertrag vor. Das Land auf diesem Grundbesitz wird vom Grundbesitzer und nicht von Linden Lab verkauft. Für Informationen zum Verkauf setzen Sie sich bitte mit dem Grundbesitzer in Verbindung.
</string>
- <string name="covenant_last_modified" value="Zuletzt geändert:"/>
+ <string name="covenant_last_modified" value="Zuletzt geändert: "/>
<string name="none_text" value=" (keiner) "/>
<string name="never_text" value=" (nie) "/>
<string name="GroupOwned">
@@ -1882,6 +1903,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="Public">
Öffentlich
</string>
+ <string name="LocalSettings">
+ Lokale Einstellungen
+ </string>
+ <string name="RegionSettings">
+ Regionseinstellungen
+ </string>
<string name="ClassifiedClicksTxt">
Klicks: [TELEPORT] teleportieren, [MAP] Karte, [PROFILE] Profil
</string>
@@ -1954,6 +1981,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="GroupMoneyDebits">
Soll
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Inhalte
</string>
@@ -3727,6 +3757,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
<string name="LocationCtrlGeneralIconTooltip">
Generelle Region
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatare sichtbar; Chat außerhalb dieser Parzelle gestattet
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] Aktualisierung
</string>
@@ -4152,6 +4185,87 @@ Missbrauchsbericht
<string name="Female - Wow">
Weiblich - Wow
</string>
+ <string name="/bow">
+ /verbeugen
+ </string>
+ <string name="/clap">
+ /klatschen
+ </string>
+ <string name="/count">
+ /zählen
+ </string>
+ <string name="/extinguish">
+ /löschen
+ </string>
+ <string name="/kmb">
+ /lmaa
+ </string>
+ <string name="/muscle">
+ /Muskel
+ </string>
+ <string name="/no">
+ /nein
+ </string>
+ <string name="/no!">
+ /nein!
+ </string>
+ <string name="/paper">
+ /Papier
+ </string>
+ <string name="/pointme">
+ /auf mich zeigen
+ </string>
+ <string name="/pointyou">
+ /auf dich zeigen
+ </string>
+ <string name="/rock">
+ /Stein
+ </string>
+ <string name="/scissor">
+ /Schere
+ </string>
+ <string name="/smoke">
+ /rauchen
+ </string>
+ <string name="/stretch">
+ /dehnen
+ </string>
+ <string name="/whistle">
+ /pfeifen
+ </string>
+ <string name="/yes">
+ /ja
+ </string>
+ <string name="/yes!">
+ /ja!
+ </string>
+ <string name="afk">
+ afk
+ </string>
+ <string name="dance1">
+ Tanzen1
+ </string>
+ <string name="dance2">
+ Tanzen2
+ </string>
+ <string name="dance3">
+ Tanzen3
+ </string>
+ <string name="dance4">
+ Tanzen4
+ </string>
+ <string name="dance5">
+ Tanzen5
+ </string>
+ <string name="dance6">
+ Tanzen6
+ </string>
+ <string name="dance7">
+ Tanzen7
+ </string>
+ <string name="dance8">
+ Tanzen8
+ </string>
<string name="AvatarBirthDateFormat">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index a8b3ce9c28..3dd394bac1 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -98,26 +98,80 @@ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number
label="Credits"
help_topic="about_credits_tab"
name="credits_panel">
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="linden_intro"
+ top="10"
+ width="435"
+ wrap="true">
+Second Life is brought to you by the Lindens:
+ </text>
<text_editor
enabled="false"
- follows="left|top"
- height="375"
+ follows="top|left"
+ height="98"
bg_readonly_color="Transparent"
left="5"
text_color="LtGray"
max_length="65536"
- name="credits_editor"
- top="5"
+ name="linden_names"
+ top_pad="10"
width="435"
word_wrap="true">
-Second Life is brought to you by Philip, Tessa, Andrew, Cory, Ian, James, Phoenix, Ryan, Haney, Dan, Char, Ben, John, Tanya, Eddie, Richard, Mitch, Doug, Eric, Frank, Bruce, Aaron, Peter, Alice, Charlie, Debra, Eileen, Helen, Janet, Steffan, Steve, Tom, Mark, Hunter, Xenon, Burgess, Bill, Jim, Lee, Hamlet, Daniel, Jeff, Todd, Sarah, Tim, Stephanie, Colin, Michael, Evan, Nicolas, Catherine, Rachelle, Dave, Holly, Bub, Kelly, Ramzi, Don, Sabin, Jill, Rheya, Jeska, Torley, Kona, Callum, Charity, Jack, Vektor, Chris, Nicole, Mick, Reuben, Blue, Babbage, Yedwab, Deana, Lauren, Brent, Pathfinder, Chadrick, Jesse, David, Tess, Lizzie, Patsy, Isaac, Lawrence, Cyn, Bo, Gia, Annette, Marius, Tbone, Jonathan, Karen, Ginsu, Yuko, Makiko, Thomas, Harry, Seth, Brian, Guy, Runitai, Ethan, Data, Cornelius, Kenny, Swiss, Zero, Brad, Natria, Wendy, Stephen, Teeple, Thumper, Lucy, Dee, Mia, Liana, Warren, Branka, Aura, Beez, Milo, Hermia, Red, Thrax, Gulliver, Joe, Sally, Paul, Jose, Rejean, Dore, Henrik, Lexie, Amber, Logan, Xan, Nora, Morpheus, Donovan, Leyla, MichaelFrancis, Beast, Cube, Bucky, Joshua, Stryfe, Harmony, Teresa, Claudia, Walker, Glenn, Fritz, Fordak, June, Cleopetra, Ivy, Betsy, Roosevelt, Spike, Ken, Which, Tofu, Chiyo, Rob, Zee, Dustin, George, Del, Matthew, Cat, Jacqui, Adrian, Viola, Alfred, Noel, Irfan, Yool, Rika, Jane, Frontier, Neo, Siobhan, Yoz, Justin, Elle, Qarl, Benjamin, Isabel, Everett, Christopher, Izzy, Stephany, Garry, Sejong, Sean, Tobin, Iridium, Meta, Jeremy, JP, Jake, Anthony, Maurice, Madhavi, Leopard, Kyle, Joon, Bert, Belinda, Jon, Kristi, Bridie, Pramod, Socrates, Maria, Aric, Adreanne, Jay, Kari, Ceren, Coco, Durl, Jenny, Periapse, Kartic, Storrs, Lotte, Sandy, Colossus, Zen, BigPapi, Pastrami, Kurz, Mani, Neuro, Mel, Sardonyx, MJ, Rowan, Sgt, Elvis, Samuel, Leo, Bryan, Niko, Austin, Soft, Poppy, Rachel, Aki, Banzai, Alexa, Sue, Bender, CG, Angelo, Gillian, Pelle, Nick, Echo, Zara, Christine, Shamiran, Emma, Blake, Keiko, Plexus, Joppa, Sidewinder, Erica, Ashlei, Twilight, Kristen, Brett, Q, Enus, Simon, Bevis, Kraft, Kip, Chandler, Ron, LauraP, Ram, KyleJM, Scouse, Prospero, Melissa, Marty, Nat, Hamilton, Kend, Lordan, Jimmy, Kosmo, Seraph, Green, Ekim, Wiggo, JT, Rome, Doris, Miz, Benoc, Whump, Trinity, Patch, Kate, TJ, Bao, Joohwan, Christy, Sofia, Matias, Cogsworth, Johan, Oreh, Cheah, Angela, Brandy, Mango, Lan, Aleks, Gloria, Mitchell, Space, Colton, Bambers, Einstein, Maggie, Malbers, Rose, Rothman, Niall, Marin, Allison, Katie, Dawn, Dusty, Katt, Judy, Andrea, Ambroff, Infinity, Rico, Gail, Kalpana, Raymond, Yi, William, Christa, M, Teagan, Scout, Molly, Dante, Corr, Dynamike, Usi, Kaylee, Lil, Danica, Sascha, Kelv, Jacob, Nya, Rodney, Brandon, Elsie, Blondin, Grant, Katrin, Nyx, Gabriel, Locklainn, Claire, Devin, Minerva, Monty, Bradford, Si, Keira, H, Caitlin, Dita, Makai, Jenn, Ann, Meredith, Clare, Joy, Praveen, Cody, Edmund, Ruthe, Sirena, Gayathri, Spider, FJ, Davidoff, Tian, Jennie, Louise, Oskar, Landon, Noelle, Jarv, Ingrid, Al, Sommer, Doc, Aria, Huin, Gray, Lili, Vir, DJ, Maestro, Simone, Yang, T, Shannon, Nelson, Khanh, Scott, Courtney, Charlene, Quixote, Susan, Zed, Amanda, Katelin, Enkidu, Roxie, Esbee, JoRoan, Scarlet, Tay, Kevin, Wolfgang, Johnny, Ray, Andren, Merov, Bob, Rand, Howard, Callen, Heff, Galen, Newell, Dessie, Les, Michon, Jenelle, Geo, Siz, Shapiro, Pete, Calyle, Selene, Allen, Phoebe, Goldin, Kimmora, Dakota, Slaton, Lindquist, Zoey, Hari, Othello, Rohit, Sheldon, Petra, Viale, Gordon, Kaye, Pink, Ferny, Emerson, Davy, Bri, Chan, Juan, Robert, Terrence, Nathan, Carl, Ashley, JessieAnn, Huseby, Karina, Paris, Kurt, Rick, Lis, Kotler, Theeba, Lynx, Murphy, Doten, Taka, Norm, Jillian, Marcus, Mae, Novack, Esther, Perry, Dana, Ducot, Javier, Porter, Madison, Gecko, Dough, JR, Gisele, Crimp, Norie, Arch, Kimi, Fisher, Barbara, Jason, Peggy, Bernard, Jules, Leroy, Eva, Khederian, Campbell, Vogt, Masido, Karel, Torres, Lo, Breezer, Delby, Rountree, Anna, Servus, Rue, Itiaes, Chuck, Luna, Novella, Zaza, Wen, Gino, Lex, Cassandra, Limey, Nancy, Anukul, Silver, Brodesky, Jinsai, Squid, Gez, Rakesh, Ladan, Edelman, Marcet, Squire, Tatem, Tony, Jerm, Tia, Falcon, BK, Tiggs, Driscoll, Bacon, Timothee, Cru, Carmilla, Coyot, Webb, Kazu, Rudas, LJ, Sea, Ali Wallace, Bewest, Pup, Drub, Dragon, Inoshiro, Byron, Rhett, Xandix, Aimee, Fredrik, Thor, Teddy, Baron, Nelly, Ghengis, Epic, Eli, Stone, Grapes, Irie, Prep, Scobu, Valerie, Alain, and many others.
-
-Thank you to the following Residents for helping to ensure that this is the best version yet: Drew Dwi, Zai Lynch, Latif Khalifa, Ellla McMahon, Harleen Gretzky, Squirrel Wood, Malarthi Behemoth, Dante Tucker, Buckaroo Mu, Eddi Decosta, Dirk, Talamasca, Torben Trautman, Irene Muni, Aralara Rajal, Aura Dirval, Cayu Cluny, Eva Rau, FreeSL Aeon, Frontera Thor, Inma Rau, Lunita Savira, Minerva Memel, Polo Gufler, Xiki Luik, Lilly Zenovka, Vick Forcella, Sasy Scarborough, Gentle Welinder, Elric Anatine, Techwolf Lupindo, Dusan Writer, WolfPup Lowenhar, Marianne McCann, Fiachra Lach, Sitearm Madonna, Sudane Erato, Sahkolihaa Contepomi, Sachi Vixen, Questar Utu, Dimitrio Lewis, Matto Destiny, Scrim Pinion, Radio Signals, Psi Merlin, Pixel Gausman, Mel Vanbeeck, Laurent Bechir, Lamorna Proctor, Lares Carter, Gwyneth Llewelyn, Hydra Shaftoe, Holger Gilruth, Gentle Heron, Carla Broek, Boroondas Gupte, Fury Rosewood, Flower Ducatillon, Colpo Wexler, gwampa Lomu, Borg Capalini, Beansy Twine, Ardy Lay, , 45ms Zhong, Adeon Writer, Aeonix Aeon, Ai Austin, Aiko Ying, Alexandrea Fride, Alliez Mysterio, Annie Milestone, Annika Genezzia, Ansariel Hiller, ArminasX Saiman, Arya Braveheart, Asaeda Meltingdots, Asturkon Jua, Avallyn Oakleaf, Avatar Quinzet, BabyA Littlething, Bacchus Ireto, Bazaar, Riva, Benjamin Bigdipper, Beth Walcher, Bezilon Kasei, Biancaluce Robbiani, Bill Walach, blakopal Galicia, Blitzckreed Levenque, Bryn Oh, Callipygian Christensen, Cap Carver, Carr Arbenlow, Chantal Harvey, Charles Courtois, Charlie Sazaland, Cherry Cheevers, ChickyBabes Zuzu, Christopher Organiser, Ciaran Laval, Clara Young, Celierra Darling, Corinne Helendale, Corro Moseley, Coughdrop Littlething, Darien Caldwell, Dartagan Shepherd, Debs Regent, Decro Schmooz, Denim Kamachi, DiJodi Dubratt, Dil Spitz, Edgware Marker, Egehan Dryke, Emma Portilo, Emmie Fairymeadow, Evangelista Emerald, Faelon Swordthain, Frenchimmo Sabra, Gaberoonie Zanzibar, Ganymedes Costagravas, Gene Frostbite, GeneJ Composer, Giggles Littlebird, Grady Echegaray, Guni Greenstein, Gypsy Tripsa, Hackshaven Harford, Ham Rambler, Han Shuffle, Hanglow Short, Hatzfeld Runo, herina Bode, Horatio Freund, Hypatia Callisto, Hypatia Pickens, Identity Euler, Imnotgoing Sideways, Innula Zenovka, Iyoba Tarantal, Jack Abraham, Jagga Meredith, Jennifer Boyle, Jeremy Marquez, Jessica Qin, Jinx Nordberg, Jo Bernandes, Jocial Sonnenkern, Joel Savard, Jondan Lundquist, Josef Munster, Josette Windlow, Juilan Tripsa, Juro Kothari, Justin RiversRunRed, Kagehi Kohn, Kaimen Takahe, Keklily Longfall, Ken Lavender, Kestral Karas, Khisme Nitely, Kimar Coba, Kithrak Kirkorian, Kitty Barnett, Kolor Fall, Komiko Okamoto, Korvel Noh, Larry Pixel, Leal Choche, len Starship, Lenae Munz, Lexi Frua, Lillie Cordeaux, Lizzy Macarthur, LSL Scientist, Luban Yiyuan, Luc Starsider, Maccus McCullough, Madison Blanc, Maggie Darwin, Mallory Destiny, Manx Wharton, Marc Claridge, Marc2 Sands, Matthew Anthony, Maxim RiversRunRed, Medhue Simoni, Melinda Latynina, Mencius Watts, Michi Lumin, Midian Farspire, Miles Glaz, Mindy Mathy, Mitch Wagner, Mo Hax, Mourna Biziou, Nao Noe, naofan Teardrop, Naomah Beaumont, Nathiel Siamendes, Nber Medici, Neko Link, Netpat Igaly, Neutron Chesnokov, Newfie Pendragon, Nicholai Laviscu, Nick Rhodes, Nicoladie Gymnast, Ollie Kubrick, Orenj Marat, Orion Delphis, Oryx Tempel, Parvati Silverweb, PeterPunk Mooney, Pixel Scientist, Pounce Teazle, Professor Noarlunga, Quantum Destiny, Quicksilver Hermes, Ralf Setsuko, RAT Quan, RedMokum Bravin, Revolution Perenti, Rezit Sideways, Rich Grainger, Rosco Teardrop, Rose Evans, Rudee Voom, RufusTT Horsefly, Saii Hallard, SaintLEOlions Zimer, Samm Larkham, Satanello Miami, SexySteven Morrisey, Sheet Spotter, Shnurui Troughton, sicarius Thorne, Sicarius Toxx, Sini Nubalo, SLB Wirefly, snowy Sidran, Soupa Segura, ST Mensing, Starshine Halasy, Stickman Ingmann, Synystyr Texan, Takeda Terrawyng, Tali Rosca, Templar Merlin, Tezcatlipoca Bisiani, Tiel Stonecutter, Tony Kembia, TouchaHoney Perhaps, Trey Reanimator, TriloByte Zanzibar, Trinity Dechou, Trinity Dejavu, Unlikely Quintessa, UsikuFarasi Kanarik, Veritas Raymaker, Vex Streeter, Viaticus Speculaas, Villain Baroque, Vixie Durant, Void Singer, Watty Berkson, Westley Schridde, Westley Streeter, Whimsy Winx, Winter Ventura, Wundur Primbee, xstorm Radek, YongYong Francois, Zak Westminster, Zana Kohime, Zaren Alexander, Zeja Pyle, ZenMondo Wormser, Zoex Flanagan, and many others.
-
-
-
-
-"The work goes on, the cause endures, the hope still lives, and the dreams shall never die" - Edward Kennedy
+Philip, Andrew, Doug, Richard, Phoenix, Ian, Mark, Robin, Dan, Char, Ryan, Eric, Jim, Lee, Jeff, Michael, Kelly, Steve, Catherine, Bub, Ramzi, Jill, Jeska, Don, Kona, Callum, Charity, Jack, Shawn, babbage, James, Lauren, Blue, Brent, Reuben, Pathfinder, Jesse, Patsy, Torley, Bo, Cyn, Jonathan, Gia, Annette, Ginsu, Harry, Lex, Runitai, Guy, Cornelius, Beth, Swiss, Thumper, Wendy, Teeple, Seth, Dee, Mia, Sally, Liana, Aura, Beez, Milo, Red, Gulliver, Marius, Joe, Jose, Dore, Justin, Nora, Morpheus, Lexie, Amber, Chris, Xan, Leyla, Walker, Sabin, Joshua, Hiromi, Tofu, Fritz, June, Jean, Ivy, Dez, Ken, Betsy, Which, Spike, Rob, Zee, Dustin, George, Claudia, del, Matthew, jane, jay, Adrian, Yool, Rika, Yoz, siobhan, Qarl, Benjamin, Beast, Everett, madhavi, Christopher, Izzy, stephany, Jeremy, sean, adreanne, Pramod, Tobin, sejong, Iridium, maurice, kj, Meta, kari, JP, bert, kyle, Jon, Socrates, Bridie, Ivan, maria, Aric, Coco, Periapse, sandy, Storrs, Lotte, Colossus, Brad, Pastrami, Zen, BigPapi, Banzai, Sardonyx, Mani, Garry, Jaime, Neuro, Samuel, Niko, CeeLo, Austin, Soft, Poppy, emma, tessa, angelo, kurz, alexa, Sue, CG, Blake, Erica, Brett, Bevis, kristen, Q, simon, Enus, MJ, laurap, Kip, Scouse, Ron, Ram, kend, Marty, Prospero, melissa, kraft, Nat, Seraph, Hamilton, Lordan, Green, miz, Ashlei, Trinity, Ekim, Echo, Charlie, Rowan, Rome, Jt, Doris, benoc, Christy, Bao, Kate, Tj, Patch, Cheah, Johan, Brandy, Angela, Oreh, Cogsworth, Lan, Mitchell, Space, Bambers, Einstein, Bender, Malbers, Matias, Maggie, Rothman, Milton, Niall, Marin, Allison, Mango, Andrea, Katt, Yi, Ambroff, Rico, Raymond, Gail, Christa, William, Dawn, Usi, Dynamike, M, Corr, Dante, Molly, kaylee, Danica, Kelv, Lil, jacob, Nya, Rodney, elsie, Blondin, Grant, Nyx, Devin, Monty, Minerva, Keira, Katie, Jenn, Makai, Clare, Joy, Cody, Gayathri, FJ, spider, Oskar, Landon, Jarv, Noelle, Al, Doc, Gray, Vir, t, Maestro, Simone, Shannon, yang, Courtney, Scott, charlene, Quixote, Susan, Zed, Amanda, Katelin, Esbee, JoRoan, Enkidu, roxie, Scarlet, Merov, Kevin, Judy, Rand, Newell, Les, Dessie, Galen, Michon, Geo, Siz, Calyle, Pete, Praveen, Callen, Sheldon, Pink, Nelson, jenelle, Terrence, Nathan, Juan, Sascha, Huseby, Karina, Kaye, Kotler, Lis, Darv, Charrell, Dakota, Kimmora, Theeba, Taka, Mae, Perry, Ducot, dana, Esther, Dough, gisele, Doten, Viale, Fisher, jessieann, ashley, Torres, delby, rountree, kurt, Slaton, Madison, Rue, Gino, Wen, Casssandra, Brodesky, Squid, Gez, Rakesh, Gecko, Ladan, Tony, Tatem, Squire, Falcon, BK, Crimp, Tiggs, Bacon, Coyot, Carmilla, Webb, Sea, Arch, Jillian, Jason, Bernard, Vogt, Peggy, dragon, Pup, xandix, Wallace, Bewest, Inoshiro, Rhett, AG, Aimee, Ghengis, Itiaes, Eli, Steffan, Epic, Grapes, Stone, Prep, Scobu, Robert, Alain, Carla, Vicky, Tia, Alec, Taras, Lisa, Oz, Ariane, Log, House, Kazu, Kim, Drofnas, Tyler, Campbell, Michele, Madeline, Nelly, Baron, Thor, Lori, Hele, Fredrik, Teddy, Pixie, Berry, Gabrielle, Alfonso, Brooke, Wolf, Ringo, Cru, Charlar, Rodvik, Gibson, Elise, Bagman, Greger, Leonidas, Jerm, Leslie, CB, Brenda, Durian, Carlo, mm, Zeeshan, Caleb, Max, Elikak, Mercille, Steph, Chase
+ </text_editor>
+ <text
+ follows="top|left"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="contrib_intro"
+ top_pad="10"
+ width="435"
+ wrap="true">
+with open source contributions from:
+ </text>
+ <text_editor
+ enabled="false"
+ follows="top|left"
+ height="98"
+ bg_readonly_color="Transparent"
+ left="5"
+ text_color="LtGray"
+ max_length="65536"
+ name="contrib_names"
+ top_pad="10"
+ width="435"
+ word_wrap="true">
+Dummy Name replaced at run time
+ </text_editor>
+ <text
+ follows="top|left"
+ height="10"
+ layout="topleft"
+ left="5"
+ name="trans_intro"
+ top_pad="10"
+ width="435"
+ wrap="true">
+and translations from:
+ </text>
+ <text_editor
+ enabled="false"
+ follows="top|left"
+ height="98"
+ bg_readonly_color="Transparent"
+ left="5"
+ text_color="LtGray"
+ max_length="65536"
+ name="trans_names"
+ top_pad="10"
+ width="435"
+ word_wrap="true">
+Dummy Name replaced at run time
</text_editor>
</panel>
<panel
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 6e985e0476..07cb4c12f5 100644
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -414,7 +414,7 @@
right="-10"
name="Cancel Land Sale"
left_pad="5"
- top_pad="-15"
+ top_pad="7"
width="180" />
<text
type="string"
@@ -488,6 +488,7 @@
width="186">
0
</text>
+
<button
enabled="false"
follows="left|top"
@@ -495,9 +496,20 @@
label="Buy Land"
layout="topleft"
left_delta="52"
+ top_pad="5"
name="Buy Land..."
- top_pad="7"
width="130" />
+ <button
+ enabled="false"
+ follows="left|top"
+ height="23"
+ label="Linden Sale"
+ layout="topleft"
+ left="10"
+ name="Linden Sale..."
+ tool_tip="Land must be owned, set content, and not already for auction."
+ top_pad="-23"
+ width="150" />
<button
enabled="true"
follows="left|top"
@@ -545,18 +557,7 @@
layout="topleft"
left_delta="0"
name="Reclaim Land..."
- top_delta="-50"
- width="180" />
- <button
- enabled="false"
- follows="left|top"
- height="23"
- label="Linden Sale"
- layout="topleft"
- left_delta="0"
- name="Linden Sale..."
- tool_tip="Land must be owned, set content, and not already for auction."
- top_pad="2"
+ top_delta="-25"
width="180" />
</panel>
<panel
@@ -1204,6 +1205,10 @@ Only large parcels can be listed in search.
name="push_restrict_region_text">
No Pushing (Region Override)
</panel.string>
+ <panel.string
+ name="see_avs_text">
+ See and chat with residents on this parcel
+ </panel.string>
<text
type="string"
length="1"
@@ -1313,7 +1318,7 @@ Only large parcels can be listed in search.
name="check group scripts"
top_delta="0"
width="70" />
- <text
+ <text
type="string"
text_color="white"
length="1"
@@ -1514,10 +1519,32 @@ Only large parcels can be listed in search.
type="string"
length="1"
follows="left|top"
+ text_color="white"
+ height="16"
+ layout="topleft"
+ left="230"
+ top="174"
+ name="allow_label5"
+ width="278">
+ Allow Residents on other parcels to:
+ </text>
+ <check_box
+ height="16"
+ label="See Avatars"
+ follows="top"
+ layout="topleft"
+ left="230"
+ name="SeeAvatarsCheck"
+ tool_tip="Allows residents on other parcels to see and chat with residents on this parcel, and you to see and chat with them."
+ width="120" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
height="16"
layout="topleft"
- left="220"
- top="180"
+ left="230"
+ top="230"
text_color="white"
name="landing_point"
word_wrap="true"
@@ -1531,7 +1558,7 @@ Only large parcels can be listed in search.
label_selected="Set"
layout="topleft"
name="Set"
- right="-68"
+ left="230"
tool_tip="Sets the landing point where visitors arrive. Sets to your avatar&apos;s location inside this parcel."
width="50" />
<button
@@ -1543,7 +1570,6 @@ Only large parcels can be listed in search.
left_pad="5"
name="Clear"
tool_tip="Clear the landing point"
- right="-10"
width="55" />
<text
type="string"
@@ -1552,7 +1578,7 @@ Only large parcels can be listed in search.
follows="left|top"
height="16"
layout="topleft"
- left="220"
+ left="230"
top_pad="10"
name="Teleport Routing: "
width="200">
@@ -1845,6 +1871,34 @@ Only large parcels can be listed in search.
name="check sound local"
left_pad="0"
width="292" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ name="Avatar Sounds:"
+ top_pad="10"
+ width="100">
+ Avatar Sounds:
+ </text>
+ <check_box
+ height="16"
+ label="Everyone"
+ layout="topleft"
+ left_pad="0"
+ name="all av sound check"
+ top_delta="0"
+ width="130" />
+ <check_box
+ height="16"
+ label="Group"
+ layout="topleft"
+ left_pad="0"
+ name="group av sound check"
+ top_delta="0"
+ width="70" />
<text
type="string"
length="1"
@@ -2125,4 +2179,4 @@ Only large parcels can be listed in search.
</panel>
</panel>
</tab_container>
-</floater>
+</floater> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
index 56230e912c..afb7917043 100644
--- a/indra/newview/skins/default/xui/en/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/en/floater_build_options.xml
@@ -2,27 +2,84 @@
<floater
legacy_header_height="18"
follows="right"
- height="170"
+ height="198"
layout="topleft"
name="build options floater"
help_topic="build_options_floater"
save_rect="true"
title="GRID OPTIONS"
width="264">
+ <floater.string
+ name="grid_screen_text">
+ Screen
+ </floater.string>
+ <floater.string
+ name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string
+ name="grid_world_text">
+ World
+ </floater.string>
+ <floater.string
+ name="grid_reference_text">
+ Reference
+ </floater.string>
+ <floater.string
+ name="grid_attachment_text">
+ Attachment
+ </floater.string>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="10"
+ tool_tip="Grid opacity"
+ name="grid_mode_label"
+ top_pad="30"
+ width="123">
+ Mode
+ </text>
+ <combo_box
+ height="23"
+ layout="topleft"
+ left_pad="9"
+ follows="left|top"
+ name="combobox grid mode"
+ tool_tip="Choose the type of grid ruler for positioning the object"
+ top_delta="-3"
+ width="108">
+ <combo_box.item
+ label="World grid"
+ name="World"
+ value="World" />
+ <combo_box.item
+ label="Local grid"
+ name="Local"
+ value="Local" />
+ <combo_box.item
+ label="Reference grid"
+ name="Reference"
+ value="Reference" />
+ <combo_box.commit_callback
+ function="GridOptions.gridMode"/>
+ </combo_box>
<spinner
control_name="GridResolution"
follows="left|top"
height="23"
initial_value="1"
- label="Grid Units (meters)"
- label_width="160"
+ label="Units (meters)"
+ label_width="130"
layout="topleft"
left="10"
max_val="5"
min_val="0.01"
name="GridResolution"
- top="25"
- width="230" />
+ top_pad="4"
+ width="200" />
<spinner
control_name="GridDrawSize"
decimal_digits="1"
@@ -30,15 +87,15 @@
height="23"
increment="0.5"
initial_value="5"
- label="Grid Extents (meters)"
- label_width="160"
+ label="Extents (meters)"
+ label_width="130"
layout="topleft"
left_delta="0"
max_val="50"
min_val="1"
name="GridDrawSize"
top_pad="0"
- width="230" />
+ width="200" />
<check_box
control_name="GridSubUnit"
height="16"
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
index ab81a86720..22cc058e46 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_land.xml
@@ -208,7 +208,7 @@ supports [AMOUNT2] objects
name="region_name_text"
top_delta="0"
use_ellipses="true"
- width="155">
+ width="150">
(unknown)
</text>
<icon
@@ -240,7 +240,8 @@ supports [AMOUNT2] objects
left_delta="125"
name="region_type_text"
top_delta="0"
- width="175">
+ use_ellipses="true"
+ width="170">
(unknown)
</text>
<text
@@ -265,7 +266,8 @@ supports [AMOUNT2] objects
left_delta="125"
name="estate_name_text"
top_delta="0"
- width="175">
+ use_ellipses="true"
+ width="170">
(unknown)
</text>
<text
@@ -290,7 +292,8 @@ supports [AMOUNT2] objects
left_delta="125"
name="estate_owner_text"
top_delta="0"
- width="175">
+ use_ellipses="true"
+ width="170">
(unknown)
</text>
<text
@@ -348,11 +351,10 @@ supports [AMOUNT2] objects
follows="left|top"
height="12"
layout="topleft"
- left="500"
name="covenant_timestamp_text"
- right="725"
+ right="-15"
top="175"
- width="275"
+ width="281"
word_wrap="true" />
<text_editor
type="string"
diff --git a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
deleted file mode 100644
index 65e2462ef8..0000000000
--- a/indra/newview/skins/default/xui/en/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,558 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="275"
- layout="topleft"
- name="Day Cycle Floater"
- help_topic="day_cycle_floater"
- save_rect="true"
- title="DAY CYCLE EDITOR"
- width="658">
- <tab_container
- follows="left|top"
- height="255"
- layout="topleft"
- left="0"
- name="Day Cycle Tabs"
- tab_position="top"
- top="20"
- width="656">
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="255"
- label="Day Cycle"
- layout="topleft"
- left="1"
- mouse_opaque="false"
- name="Day Cycle"
- top="0"
- width="654">
- <multi_slider
- can_edit_text="true"
- control_name="WLTimeSlider"
- decimal_digits="0"
- draw_track="false"
- follows="bottom"
- height="10"
- increment="0.0833333"
- initial_value="0"
- layout="topleft"
- left="20"
- max_sliders="20"
- max_val="24"
- name="WLTimeSlider"
- show_text="false"
- top="25"
- use_triangle="true"
- width="525" />
- <multi_slider
- can_edit_text="true"
- control_name="WLDayCycleKeys"
- decimal_digits="0"
- follows="bottom"
- height="10"
- increment="0.0833333"
- initial_value="0"
- layout="topleft"
- left_delta="0"
- max_sliders="20"
- max_val="24"
- name="WLDayCycleKeys"
- show_text="false"
- top_pad="15"
- width="525" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="8"
- name="WL12am"
- top="74"
- width="55">
- 12am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL3am"
- top_delta="0"
- width="55">
- 3am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL6am"
- top_delta="0"
- width="55">
- 6am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL9amHash"
- top_delta="0"
- width="55">
- 9am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL12pmHash"
- top_delta="0"
- width="55">
- 12pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL3pm"
- top_delta="0"
- width="55">
- 3pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL6pm"
- top_delta="0"
- width="55">
- 6pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL9pm"
- top_delta="0"
- width="55">
- 9pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL12am2"
- top_delta="0"
- width="55">
- 12am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left="20"
- name="WL12amHash"
- top="54"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL3amHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL6amHash"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL9amHash2"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL12pmHash2"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL3pmHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL6pmHash"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL9pmHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL12amHash2"
- top_delta="-3"
- width="6">
- |
- </text>
- <button
- height="20"
- label="Add Key"
- label_selected="Add Key"
- layout="topleft"
- left="555"
- name="WLAddKey"
- top="30"
- width="96" />
- <button
- height="20"
- label="Delete Key"
- label_selected="Delete Key"
- layout="topleft"
- left_delta="0"
- name="WLDeleteKey"
- top_pad="5"
- width="96" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="20"
- name="WLCurKeyFrameText"
- top="104"
- width="235">
- Key Frame Settings:
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="30"
- name="WLCurKeyTimeText"
- top="124"
- width="105">
- Key Time:
- </text>
- <spinner
- control_name="WLCurKeyHour"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="0"
- label="Hour"
- label_width="35"
- layout="topleft"
- left_delta="20"
- max_val="100"
- name="WLCurKeyHour"
- top_pad="4"
- width="74" />
- <spinner
- control_name="WLCurKeyMin"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="5"
- initial_value="0"
- label="Min"
- label_width="45"
- layout="topleft"
- left_pad="5"
- max_val="55"
- name="WLCurKeyMin"
- top_delta="0"
- width="85" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="30"
- name="WLCurKeyTimeText2"
- top="169"
- width="185">
- Key Preset:
- </text>
- <combo_box
- height="18"
- label="Preset"
- layout="topleft"
- left_delta="0"
- name="WLKeyPresets"
- top_pad="7"
- width="205" />
- <view_border
- bevel_style="none"
- follows="top|left"
- height="115"
- layout="topleft"
- left="12"
- top="101"
- width="240" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_pad="15"
- name="DayCycleText"
- top="114"
- width="120">
- Snap:
- </text>
- <combo_box
- enabled="false"
- height="18"
- label="5 min"
- layout="topleft"
- left_delta="0"
- name="WLSnapOptions"
- top_pad="7"
- width="70" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="0"
- name="DayCycleText2"
- top_pad="17"
- width="120">
- Length of Cycle:
- </text>
- <spinner
- control_name="WLLengthOfDayHour"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="0"
- label="Hour"
- label_width="33"
- layout="topleft"
- left_delta="-3"
- max_val="100"
- name="WLLengthOfDayHour"
- top_pad="4"
- width="74" />
- <spinner
- control_name="WLLengthOfDayMin"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="0"
- label="Min"
- label_width="25"
- layout="topleft"
- left_pad="2"
- max_val="59"
- name="WLLengthOfDayMin"
- top_delta="0"
- width="65" />
- <spinner
- control_name="WLLengthOfDaySec"
- decimal_digits="0"
- follows="left|top"
- height="16"
- increment="1"
- initial_value="24"
- label="Sec"
- label_width="25"
- layout="topleft"
- left_pad="2"
- max_val="59"
- name="WLLengthOfDaySec"
- top_delta="0"
- width="65"/>
- <text
- type="string"
- halign="right"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-23"
- name="DayCycleText3"
- top="114"
- width="85">
- Preview :
- </text>
- <button
- height="20"
- label="Play"
- label_selected="Play"
- layout="topleft"
- left="480"
- name="WLAnimSky"
- top_pad="5"
- width="83" />
- <button
- height="20"
- label="Stop!"
- label_selected="Stop"
- layout="topleft"
- left_pad="4"
- name="WLStopAnimSky"
- top_delta="0"
- width="83" />
- <button
- height="20"
- label="Use Estate Time"
- label_selected="Go to Estate Time"
- layout="topleft"
- left="480"
- name="WLUseLindenTime"
- top_pad="9"
- width="170" />
- <button
- height="20"
- label="Save Test Day"
- label_selected="Save Test Day"
- layout="topleft"
- left_delta="0"
- name="WLSaveDayCycle"
- top_pad="9"
- width="170" />
- <button
- height="20"
- label="Load Test Day"
- label_selected="Load Test Day"
- layout="topleft"
- left_delta="0"
- name="WLLoadDayCycle"
- top_pad="3"
- width="170" />
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..b5de4166f6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<floater
+ legacy_header_height="18"
+ height="130"
+ help_topic=""
+ layout="topleft"
+ name="Delete Env Preset"
+ save_rect="true"
+ title="DELETE ENV PRESET"
+ width="550">
+
+ <string name="title_water">Delete Water Preset</string>
+ <string name="title_sky">Delete Sky Preset</string>
+ <string name="title_day_cycle">Delete Day Cycle</string>
+
+ <string name="label_water">Preset:</string>
+ <string name="label_sky">Preset:</string>
+ <string name="label_day_cycle">Day cycle:</string>
+
+ <string name="msg_confirm_deletion">Are you sure you want to delete the selected preset?</string>
+ <string name="msg_sky_is_referenced">Cannot remove a preset that is referenced by some day cycle(s).</string>
+
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="50"
+ name="label"
+ top="60"
+ width="60">
+ Preset:
+ </text>
+ <combo_box
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ name="preset_combo"
+ top_delta="-5"
+ width="200"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Delete"
+ layout="topleft"
+ left_pad="15"
+ name="delete"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="5"
+ name="cancel"
+ width="70"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..d9a3ad0c4b
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml
@@ -0,0 +1,485 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="381"
+ layout="topleft"
+ name="Edit Day cycle"
+ help_topic="day_presets"
+ save_rect="true"
+ title="Edit Day Cycle"
+ width="705">
+
+ <string name="title_new">Create a New Day Cycle</string>
+ <string name="title_edit">Edit Day Cycle</string>
+ <string name="hint_new">Name your day cycle, adjust the controls to create it, and click "Save".</string>
+ <string name="hint_edit">To edit your day cycle, adjust the controls below and click "Save".</string>
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="hint"
+ top="25"
+ width="685" />
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="label"
+ top_pad="25"
+ width="120">
+ Preset Name:
+ </text>
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="day_cycle_combo"
+ top_delta="-5"
+ width="200" />
+ <line_editor
+ height="20"
+ left_delta="0"
+ name="day_cycle_name"
+ top_delta="0"
+ visible="true"
+ width="200" />
+ <text
+ follows="top|left|right"
+ height="95"
+ layout="topleft"
+ left_pad="10"
+ name="note"
+ top_delta="0"
+ width="345"
+ wrap="true">
+ Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
+ </text>
+ <!--======== Controls panel ========-->
+ <text
+ follows="left|top|right"
+ height="10"
+ layout="topleft"
+ left="10"
+ name="hint_item1"
+ top="100"
+ width="300">
+ - Click on a tab to edit the specific sky settings and time.
+ </text>
+ <text
+ follows="left|top|right"
+ height="10"
+ layout="topleft"
+ name="hint_item2"
+ top_pad="10"
+ width="300">
+ - Click and drag the tabs to set the transition times.
+ </text>
+ <text
+ follows="left|top|right"
+ height="10"
+ layout="topleft"
+ name="hint_item3"
+ top_pad="10"
+ width="300">
+ - Use the scrubber to preview your day cycle.
+ </text>
+ <panel
+ follows="top|left"
+ height="100"
+ name="day_cycle_slider_panel"
+ layout="topleft"
+ left_delta="25"
+ top_pad="15"
+ width="660">
+ <multi_slider
+ can_edit_text="true"
+ control_name="WLTimeSlider"
+ decimal_digits="0"
+ draw_track="false"
+ follows="bottom"
+ height="10"
+ increment="0.0833333"
+ initial_value="0"
+ layout="topleft"
+ left="20"
+ max_sliders="20"
+ max_val="24"
+ name="WLTimeSlider"
+ show_text="false"
+ top_pad="0"
+ use_triangle="true"
+ width="525" />
+ <multi_slider
+ can_edit_text="true"
+ control_name="WLDayCycleKeys"
+ decimal_digits="0"
+ follows="bottom"
+ height="10"
+ increment="0.0833333"
+ initial_value="0"
+ layout="topleft"
+ left_delta="0"
+ max_sliders="20"
+ max_val="24"
+ name="WLDayCycleKeys"
+ show_text="false"
+ top_pad="15"
+ width="525" />
+ <button
+ height="20"
+ label="Add Key"
+ label_selected="Add Key"
+ layout="topleft"
+ left_pad="20"
+ name="WLAddKey"
+ top_delta="-18"
+ width="96" />
+ <button
+ height="20"
+ label="Delete Key"
+ label_selected="Delete Key"
+ layout="topleft"
+ name="WLDeleteKey"
+ top_pad="5"
+ width="96" />
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left="8"
+ name="WL12am"
+ top="74"
+ width="55">
+ 12am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL3am"
+ top_delta="0"
+ width="55">
+ 3am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL6am"
+ top_delta="0"
+ width="55">
+ 6am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL9amHash"
+ top_delta="0"
+ width="55">
+ 9am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL12pmHash"
+ top_delta="0"
+ width="55">
+ 12pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL3pm"
+ top_delta="0"
+ width="55">
+ 3pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL6pm"
+ top_delta="0"
+ width="55">
+ 6pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL9pm"
+ top_delta="0"
+ width="55">
+ 9pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="10"
+ name="WL12am2"
+ top_delta="0"
+ width="55">
+ 12am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left="20"
+ name="WL12amHash"
+ top="54"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL3amHash"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL6amHash"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL9amHash2"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL12pmHash2"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL3pmHash"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL6pmHash"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="11"
+ layout="topleft"
+ left_pad="59"
+ name="WL9pmHash"
+ top_delta="3"
+ width="6">
+ I
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="59"
+ name="WL12amHash2"
+ top_delta="-3"
+ width="6">
+ |
+ </text>
+ </panel>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="192"
+ name="WLCurKeyPresetText"
+ top_pad="10"
+ width="80">
+ Sky Setting:
+ </text>
+ <combo_box
+ height="18"
+ label="Preset"
+ layout="topleft"
+ left_pad="5"
+ name="WLSkyPresets"
+ width="205" />
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-40"
+ name="WLCurKeyTimeText"
+ top_pad="15"
+ width="35">
+ Time:
+ </text>
+ <time
+ follows="left|top"
+ height="16"
+ label_width="0"
+ layout="topleft"
+ left_pad="3"
+ name="time"
+ top_delta="-1"
+ value="6:00 AM"
+ width="75"/>
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="horiz_separator"
+ top_pad="20"
+ width="685"/>
+ <loading_indicator
+ height="23"
+ layout="topleft"
+ left="25"
+ name="progress_indicator"
+ top="350"
+ visible="false"
+ width="23" />
+ <check_box
+ follows="top|left"
+ height="10"
+ label="Make this my new day cycle"
+ layout="topleft"
+ left="310"
+ name="make_default_cb"
+ top_delta="13"
+ width="230"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ left_pad="0"
+ name="save"
+ top_delta="-13"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="15"
+ name="cancel"
+ top_delta="0"
+ width="70"/>
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..56233d91ee
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml
@@ -0,0 +1,953 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="375"
+ layout="topleft"
+ name="Edit Sky Preset"
+ help_topic="sky_preset"
+ save_rect="true"
+ title="Edit Sky Preset"
+ width="840">
+
+ <string name="title_new">Create a New Sky Preset</string>
+ <string name="title_edit">Edit Sky Preset</string>
+ <string name="hint_new">Name your preset, adjust the controls to create it, and click "Save".</string>
+ <string name="hint_edit">To edit your sky preset, adjust the controls and click "Save".</string>
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="hint"
+ top="25"
+ width="700">
+ To edit your preset, adjust the controls then click "Save"
+ </text>
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="label"
+ top_pad="25"
+ width="120">
+ Preset Name:
+ </text>
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="sky_preset_combo"
+ top_delta="-5"
+ width="200"/>
+ <line_editor
+ height="20"
+ left_delta="0"
+ name="sky_preset_name"
+ top_delta="0"
+ width="200" />
+ <text
+ follows="top|left|right"
+ height="40"
+ layout="topleft"
+ left_pad="10"
+ name="note"
+ top_delta="0"
+ width="405"
+ wrap="true">
+ Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
+ </text>
+ <!--======== Controls panel ========-->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="203"
+ layout="topleft"
+ left="25"
+ name="panel_water_preset"
+ top="122"
+ visible="true"
+ width="790"/>
+ <tab_container
+ follows="left|top"
+ height="225"
+ halign="center"
+ layout="topleft"
+ left="22"
+ name="WindLight Tabs"
+ tab_position="top"
+ top="101"
+ width="794">
+ <panel
+ border="true"
+ bevel_style="none"
+ follows="left|top|right|bottom"
+ height="196"
+ label="ATMOSPHERE"
+ layout="topleft"
+ left="1"
+ help_topic="sky_preset_atmosphere"
+ mouse_opaque="false"
+ name="Atmosphere"
+ top="60"
+ width="698">
+
+ <!--======== Tab Panel I. I conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left="40"
+ name="BHText"
+ top="25"
+ width="200">
+ Blue Horizon
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="0"
+ name="WLBlueHorizon"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="0"
+ top_pad="20"
+ name="BDensText"
+ width="200">
+ Haze Horizon
+ </text>
+ <slider
+ control_name="WLHazeHorizon"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.25"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLHazeHorizon"
+ width="200" />
+
+ <!--======== Tab Panel I. II conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="BDensText2"
+ top="25"
+ width="200">
+ Blue Density
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="0"
+ name="WLBlueDensity"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="0"
+ name="HDText"
+ top_pad="20"
+ width="200">
+ Haze Density
+ </text>
+ <slider
+ control_name="WLHazeDensity"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="0"
+ max_val="4"
+ name="WLHazeDensity"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel I. III conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="DensMultText"
+ top="25"
+ width="200">
+ Density Multiplier
+ </text>
+ <slider
+ control_name="WLDensityMult"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.1"
+ layout="topleft"
+ left_delta="15"
+ max_val="0.9"
+ name="WLDensityMult"
+ top_pad="6"
+ width="200" />
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WLDistanceMultText"
+ top_pad="20"
+ width="200">
+ Distance Multiplier
+ </text>
+ <slider
+ control_name="WLDistancMult"
+ decimal_digits="1"
+ follows="left|top"
+ height="10"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="15"
+ max_val="100"
+ name="WLDistanceMult"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="MaxAltText"
+ top_pad="20"
+ width="200">
+ Max Altitude
+ </text>
+ <slider
+ control_name="WLMaxAltitude"
+ decimal_digits="0"
+ follows="left|top"
+ height="10"
+ increment="1"
+ initial_value="500"
+ layout="topleft"
+ left_delta="15"
+ max_val="4000"
+ name="WLMaxAltitude"
+ top_pad="6"
+ width="200" />
+ </panel>
+ <panel
+ border="true"
+ bevel_style="none"
+ follows="left|top|right|bottom"
+ height="196"
+ label="LIGHTING"
+ layout="topleft"
+ left_delta="0"
+ help_topic="sky_preset_lighting"
+ name="Lighting"
+ top_delta="4"
+ width="698">
+
+ <!--======== Tab Panel II. I conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left="20"
+ name="SLCText"
+ top="25"
+ width="150">
+ Sun/Moon Color
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="10"
+ name="WLSunlight"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-10"
+ name="WLAmbientText"
+ top_pad="20"
+ width="150">
+ Ambient
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="10"
+ name="WLAmbient"
+ top_pad="6"
+ width="60" />
+
+ <!--======== Tab Panel II. II conlumn of controls ========-->
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="100"
+ name="SunGlowText"
+ top="25"
+ width="200">
+ Sun Glow
+ </text>
+ <slider
+ control_name="WLGlowB"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.1"
+ label="Focus "
+ layout="topleft"
+ left_delta="10"
+ max_val="0.5"
+ name="WLGlowB"
+ top_pad="6"
+ width="200" />
+ <slider
+ control_name="WLGlowR"
+ decimal_digits="2"
+ follows="top|left"
+ height="10"
+ increment="0.01"
+ initial_value="0.25"
+ label="Size "
+ layout="topleft"
+ left_delta="0"
+ max_val="1.99"
+ min_val="1"
+ name="WLGlowR"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-10"
+ name="WLStarText"
+ top_pad="20"
+ width="200">
+ Star Brightness
+ </text>
+ <slider
+ control_name="WLStarAlpha"
+ decimal_digits="2"
+ follows="top|left"
+ height="10"
+ increment="0.01"
+ initial_value="0"
+ layout="topleft"
+ left_delta="10"
+ max_val="2"
+ name="WLStarAlpha"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-10"
+ name="SceneGammaText"
+ top_pad="20"
+ width="200">
+ Scene Gamma
+ </text>
+ <slider
+ control_name="WLGamma"
+ decimal_digits="2"
+ follows="top|left"
+ height="10"
+ increment="0.01"
+ initial_value="2.0"
+ layout="topleft"
+ left_delta="10"
+ max_val="10"
+ name="WLGamma"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel II. III conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="60"
+ name="TODText"
+ top="25"
+ width="200">
+ Sun/Moon Position
+ </text>
+ <multi_slider
+ can_edit_text="true"
+ control_name="WLSunPos"
+ decimal_digits="0"
+ follows="bottom"
+ height="10"
+ increment="0.0833333"
+ initial_value="0"
+ layout="topleft"
+ left_delta="0"
+ max_sliders="1"
+ max_val="24"
+ name="WLSunPos"
+ show_text="false"
+ top_pad="0"
+ width="300" />
+
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_delta="2"
+ name="WL12amHash"
+ top_pad="6"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="66"
+ name="WL6amHash"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="67"
+ name="WL12pmHash2"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="67"
+ name="WL6pmHash"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ font="SansSerif"
+ height="14"
+ layout="topleft"
+ left_pad="67"
+ name="WL12amHash2"
+ top_delta="0"
+ width="6">
+ |
+ </text>
+
+
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_delta="-300"
+ name="WL12am"
+ top="74"
+ width="55">
+ 12am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="20"
+ name="WL6am"
+ top_delta="0"
+ width="55">
+ 6am
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="15"
+ name="WL12pmHash"
+ top_delta="0"
+ width="55">
+ 12pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="18"
+ name="WL6pm"
+ top_delta="0"
+ width="55">
+ 6pm
+ </text>
+ <text
+ type="string"
+ length="1"
+ border_visible="true"
+ follows="left|top|right"
+ height="16"
+ layout="topleft"
+ left_pad="15"
+ name="WL12am2"
+ top_delta="0"
+ width="55">
+ 12am
+ </text>
+
+ <time
+ follows="left|top"
+ height="16"
+ label_width="0"
+ layout="topleft"
+ left_delta="-175"
+ name="WLDayTime"
+ top_pad="15"
+ value="6:00 AM"
+ width="75"/>
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-106"
+ name="WLEastAngleText"
+ top_pad="24"
+ width="200">
+ East Angle
+ </text>
+ <slider
+ control_name="WLEastAngle"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.0"
+ layout="topleft"
+ left_delta="10"
+ name="WLEastAngle"
+ top_pad="6"
+ width="200" />
+
+ </panel>
+ <panel
+ border="true"
+ bevel_style="none"
+ follows="left|top|right|bottom"
+ height="196"
+ label="CLOUDS"
+ layout="topleft"
+ left_delta="0"
+ mouse_opaque="false"
+ help_topic="sky_preset_clouds"
+ name="Clouds"
+ top_delta="4"
+ width="698">
+
+ <!--======== Tab Panel III. I conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left="40"
+ name="WLCloudColorText"
+ top="25"
+ width="200">
+ Cloud Color
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudColor"
+ top_pad="6"
+ width="60" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudColorText2"
+ top_pad="20"
+ width="200">
+ Cloud XY/Density
+ </text>
+ <slider
+ control_name="WLCloudX"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="X"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLCloudX"
+ width="200" />
+ <slider
+ control_name="WLCloudY"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="Y"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLCloudY"
+ width="200" />
+ <slider
+ control_name="WLCloudDensity"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="1.0"
+ label="D"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudDensity"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel III. II conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="WLCloudCoverageText"
+ top="15"
+ width="200">
+ Cloud Coverage
+ </text>
+ <slider
+ control_name="WLCloudCoverage"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_delta="15"
+ name="WLCloudCoverage"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WLCloudScaleText"
+ top_pad="20"
+ width="200">
+ Cloud Scale
+ </text>
+ <slider
+ control_name="WLCloudScale"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="15"
+ min_val="0.01"
+ name="WLCloudScale"
+ top_pad="6"
+ width="200" />
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-13"
+ name="WLCloudDetailText"
+ top_pad="20"
+ width="200">
+ Cloud Detail (XY/Density)
+ </text>
+ <slider
+ control_name="WLCloudDetailX"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="X"
+ layout="topleft"
+ left_delta="0"
+ top_pad="6"
+ name="WLCloudDetailX"
+ width="200" />
+ <slider
+ control_name="WLCloudDetailY"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ label="Y"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudDetailY"
+ top_pad="6"
+ width="200" />
+ <slider
+ control_name="WLCloudDetailDensity"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="1.0"
+ label="D"
+ layout="topleft"
+ left_delta="0"
+ name="WLCloudDetailDensity"
+ top_pad="6"
+ width="200" />
+
+ <!--======== Tab Panel III. III conlumn of controls ========-->
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="55"
+ name="WLCloudScrollXText"
+ top="15"
+ width="150">
+ Cloud Scroll X
+ </text>
+ <check_box
+ control_name="WLCloudLockX"
+ follows="left|top"
+ height="16"
+ label="Lock"
+ layout="topleft"
+ left_delta="150"
+ name="WLCloudLockX"
+ top_delta="0"
+ width="200" />
+ <slider
+ control_name="WLCloudScrollX"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_delta="-135"
+ max_val="10"
+ min_val="-10"
+ name="WLCloudScrollX"
+ top_pad="6"
+ width="200" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WLCloudScrollYText"
+ top_pad="20"
+ width="150">
+ Cloud Scroll Y
+ </text>
+ <check_box
+ control_name="WLCloudLockY"
+ follows="left|top"
+ height="16"
+ label="Lock"
+ layout="topleft"
+ left_delta="150"
+ name="WLCloudLockY"
+ width="200" />
+ <slider
+ control_name="WLCloudScrollY"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.5"
+ layout="topleft"
+ left_delta="-135"
+ max_val="10"
+ min_val="-10"
+ name="WLCloudScrollY"
+ top_pad="6"
+ width="200" />
+ </panel>
+ </tab_container>
+<!--======== End of Controls panel ========-->
+
+ <check_box
+ follows="top|left"
+ height="10"
+ label="Make this preset my new sky setting"
+ layout="topleft"
+ left="380"
+ name="make_default_cb"
+ top_pad="30"
+ width="280"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ left_pad="0"
+ name="save"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="15"
+ name="cancel"
+ width="70"/>
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..905983e7fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="375"
+ layout="topleft"
+ name="Edit Water Preset"
+ help_topic="water_preset"
+ save_rect="true"
+ title="Edit Water Preset"
+ width="725">
+
+ <string name="title_new">Create a New Water Preset</string>
+ <string name="title_edit">Edit a Water Preset</string>
+ <string name="hint_new">Name your preset, adjust the controls to create it, and click "Save".</string>
+ <string name="hint_edit">To edit your water preset, adjust the controls and click "Save".</string>
+ <string name="combo_label">-Select a preset-</string>
+
+ <text
+ follows="top|left|right"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="hint"
+ top="25"
+ width="680">
+ To edit your preset, adjust the controls then click "Save"
+ </text>
+
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="label"
+ top_pad="25"
+ width="120">
+ Preset Name:
+ </text>
+
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="water_preset_combo"
+ top_delta="-5"
+ width="200"/>
+
+ <line_editor
+ height="20"
+ left_delta="0"
+ name="water_preset_name"
+ top_delta="0"
+ width="200" />
+
+ <text
+ follows="top|left|right"
+ height="40"
+ layout="topleft"
+ left_pad="10"
+ name="note"
+ top_delta="0"
+ width="340"
+ wrap="true">
+ Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
+ </text>
+
+ <!--======== Controls panel ========-->
+ <panel
+ border="false"
+ bevel_style="none"
+ follows="top|left"
+ height="230"
+ layout="topleft"
+ left="10"
+ name="panel_water_preset"
+ top="100"
+ width="700">
+
+<!--======== I conlumn of controls ========-->
+ <text
+ follows="left|top|right"
+ height="10"
+ font="SansSerif"
+ layout="topleft"
+ left="10"
+ name="water_color_label"
+ top="5"
+ width="215">
+ Water Fog Color
+ </text>
+ <color_swatch
+ can_apply_immediately="true"
+ follows="left|top"
+ height="37"
+ label_height="0"
+ layout="topleft"
+ left_delta="15"
+ name="WaterFogColor"
+ top_pad="8"
+ width="60" />
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ top_pad="10"
+ name="water_fog_density_label"
+ width="215">
+ Fog Density Exponent
+ </text>
+ <slider
+ decimal_digits="1"
+ follows="left|top"
+ height="10"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ max_val="10"
+ name="WaterFogDensity"
+ top_pad="10"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ top_pad="15"
+ name="underwater_fog_modifier_label"
+ width="215">
+ Underwater Fog Modifier
+ </text>
+ <slider
+ decimal_digits="1"
+ follows="left|top"
+ height="10"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ max_val="10"
+ name="WaterUnderWaterFogMod"
+ top_pad="10"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="BHText"
+ top_pad="15"
+ width="215">
+ Big Wave Direction
+ </text>
+ <slider
+ control_name="WaterWave1DirX"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="X"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave1DirX"
+ top_pad="10"
+ width="216"/>
+ <slider
+ control_name="WaterWave1DirY"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="Y"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave1DirY"
+ top_pad="5"
+ width="216"/>
+
+<!--======== II conlumn of controls ========-->
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ left_pad="20"
+ name="BDensText"
+ top="5"
+ width="215">
+ Reflection Wavelet Scale
+ </text>
+ <slider
+ control_name="WaterNormalScaleX"
+ decimal_digits="1"
+ follows="left|top"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="15"
+ max_val="10"
+ name="WaterNormalScaleX"
+ top_pad="10"
+ width="200"/>
+ <slider
+ control_name="WaterNormalScaleY"
+ decimal_digits="1"
+ follows="left|top"
+ initial_value="0.7"
+ layout="topleft"
+ max_val="10"
+ name="WaterNormalScaleY"
+ top_pad="6"
+ width="200"/>
+ <slider
+ control_name="WaterNormalScaleZ"
+ decimal_digits="1"
+ follows="left|top"
+ initial_value="0.7"
+ layout="topleft"
+ max_val="10"
+ name="WaterNormalScaleZ"
+ top_pad="6"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="HDText"
+ top_pad="16"
+ width="215">
+ Fresnel Scale
+ </text>
+ <slider
+ control_name="WaterFresnelScale"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="15"
+ name="WaterFresnelScale"
+ top_pad="10"
+ width="200"/>
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="FresnelOffsetText"
+ top_pad="15"
+ width="215">
+ Fresnel Offset
+ </text>
+ <slider
+ control_name="WaterFresnelOffset"
+ decimal_digits="2"
+ follows="left"
+ increment="0.01"
+ initial_value="0.7"
+ layout="topleft"
+ left_delta="15"
+ name="WaterFresnelOffset"
+ top_pad="10"
+ width="200"/>
+
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ layout="topleft"
+ left_delta="-15"
+ name="BHText2"
+ top_pad="15"
+ width="215">
+ Little Wave Direction
+ </text>
+ <slider
+ control_name="WaterWave2DirX"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="X"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave2DirX"
+ top_pad="10"
+ width="216" />
+ <slider
+ control_name="WaterWave2DirY"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.7"
+ label="Y"
+ layout="topleft"
+ max_val="4"
+ min_val="-4"
+ name="WaterWave2DirY"
+ top_pad="6"
+ width="216" />
+
+<!--======== III conlumn of contorls ========-->
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_pad="20"
+ name="DensMultText"
+ top="5"
+ width="215">
+ Refract Scale Above
+ </text>
+ <slider
+ control_name="WaterScaleAbove"
+ decimal_digits="2"
+ follows="left|top"
+ increment="0.01"
+ initial_value="0.1"
+ layout="topleft"
+ left_delta="15"
+ name="WaterScaleAbove"
+ top_pad="5"
+ width="200" />
+
+ <text
+ type="string"
+ length="1"
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="WaterScaleBelowText"
+ top_pad="15"
+ width="215">
+ Refract Scale Below
+ </text>
+ <slider
+ control_name="WaterScaleBelow"
+ decimal_digits="2"
+ follows="left|top"
+ height="10"
+ increment="0.01"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ name="WaterScaleBelow"
+ top_pad="5"
+ width="200"/>
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="MaxAltText"
+ top_pad="15"
+ width="215">
+ Blur Multiplier
+ </text>
+ <slider
+ control_name="WaterBlurMult"
+ follows="left|top"
+ height="10"
+ increment="0.001"
+ initial_value="0"
+ layout="topleft"
+ left_delta="15"
+ max_val="0.16"
+ name="WaterBlurMult"
+ top_pad="5"
+ width="200"/>
+
+ <text
+ follows="left|top|right"
+ font="SansSerif"
+ height="16"
+ layout="topleft"
+ left_delta="-15"
+ name="BHText3"
+ top_pad="15"
+ width="215">
+ Normal Map
+ </text>
+ <texture_picker
+ height="80"
+ layout="topleft"
+ left_delta="15"
+ name="WaterNormalMap"
+ top_pad="5"
+ width="100" />
+ </panel>
+<!--======== End of Controls panel ========-->
+
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="horiz_separator"
+ top_pad="5"
+ width="700"/>
+ <check_box
+ follows="top|left"
+ height="10"
+ label="Make this preset my new water setting"
+ layout="topleft"
+ left="275"
+ name="make_default_cb"
+ top_pad="20"
+ width="280"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Save"
+ layout="topleft"
+ left_pad="0"
+ name="save"
+ width="70"/>
+ <button
+ follows="bottom|right"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="15"
+ name="cancel"
+ width="70"/>
+
+ </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_env_settings.xml b/indra/newview/skins/default/xui/en/floater_env_settings.xml
deleted file mode 100644
index 8df5e232d9..0000000000
--- a/indra/newview/skins/default/xui/en/floater_env_settings.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="150"
- layout="topleft"
- name="Environment Editor Floater"
- help_topic="environment_editor_floater"
- save_rect="true"
- title="ENVIRONMENT EDITOR"
- width="600">
- <floater.string
- name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="EnvTimeText"
- top="32"
- width="140">
- Time of Day
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="15"
- name="EnvTimeText2"
- top="62"
- width="140">
- 12:00 PM
- </text>
- <icon
- height="25"
- image_name="icon_diurnal.tga"
- layout="topleft"
- left="85"
- name="EnvDayCycle"
- top="30"
- use_draw_context_alpha="false"
- width="200" />
- <slider
- control_name="EnvTimeSlider"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.0069444"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- max_val="0.99"
- name="EnvTimeSlider"
- show_text="false"
- top_pad="10"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="EnvCloudText"
- top="86"
- width="140">
- Cloud Cover
- </text>
- <slider
- control_name="EnvCloudSlider"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="75"
- name="EnvCloudSlider"
- top_delta="4"
- width="210" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="310"
- name="EnvWaterColorText"
- top="39"
- width="140">
- Water Color
- </text>
- <color_swatch
- can_apply_immediately="true"
- color="0.5 0.5 0.5 1"
- follows="left|top"
- height="50"
- layout="topleft"
- left="390"
- name="EnvWaterColor"
- tool_tip="Click to open color picker"
- top="30"
- width="40" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="310"
- name="EnvWaterFogText"
- top="86"
- width="140">
- Water Fog
- </text>
- <slider
- control_name="EnvWaterFogSlider"
- decimal_digits="2"
- follows="left"
- height="10"
- initial_value="0"
- layout="topleft"
- left_delta="75"
- max_val="10"
- name="EnvWaterFogSlider"
- top_delta="4"
- width="210" />
- <button
- follows="left|top"
- height="23"
- label="Use Estate Time"
- layout="topleft"
- left="10"
- name="EnvUseEstateTimeButton"
- top="120"
- width="137" />
- <button
- follows="left|top"
- height="23"
- label="Advanced Sky"
- layout="topleft"
- left_pad="3"
- name="EnvAdvancedSkyButton"
- top_delta="0"
- width="137" />
- <button
- follows="left|top"
- height="23"
- label="Advanced Water"
- layout="topleft"
- left_pad="3"
- name="EnvAdvancedWaterButton"
- top_delta="0"
- width="137" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_environment_settings.xml b/indra/newview/skins/default/xui/en/floater_environment_settings.xml
new file mode 100644
index 0000000000..1b1cafaca6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_environment_settings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="328"
+ layout="topleft"
+ name="Environment Editor Floater"
+ help_topic="environment_editor_floater"
+ save_rect="true"
+ title="ENVIRONMENT SETTINGS"
+ width="540">
+
+ <text
+ follows="top|left|right"
+ height="15"
+ layout="topleft"
+ left="20"
+ name="note"
+ top="25"
+ width="510"
+ wrap="true">
+ Use the options below to customize the environment settings for your viewer.
+ </text>
+
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="237"
+ layout="topleft"
+ left="20"
+ name="border"
+ top_pad="8"
+ width="500"/>
+ <radio_group
+ follows="top|left"
+ height="45"
+ layout="topleft"
+ left_delta="10"
+ name="region_settings_radio_group"
+ top_delta="20"
+ width="200">
+ <radio_item
+ label="Use region settings"
+ layout="topleft"
+ name="use_region_settings"/>
+ <radio_item
+ label="Customize my environment"
+ layout="topleft"
+ name="use_my_settings"
+ top_pad="20"/>
+ </radio_group>
+
+ <panel
+ height="170"
+ layout="topleft"
+ left="50"
+ name="user_environment_settings"
+ top_pad="0"
+ width="470">
+
+ <text
+ follows="top|left|right"
+ font="SansSerifItalic"
+ height="15"
+ layout="topleft"
+ left_delta="0"
+ name="note"
+ top_pad="0"
+ width="470"
+ wrap="true">
+ Note: your custom settings will not be visible to other users.
+ </text>
+
+ <!-- Water Setting -->
+ <text
+ name="water_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top="40"
+ width="200">
+ Water Setting
+ </text>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="water_settings_preset_combo"
+ top_delta="-5"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+
+
+ <!-- Sky/Day Cycle Settings -->
+ <text
+ name="sky_dayc_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top_pad="20"
+ width="100">
+ Sky / Day Cycle
+ </text>
+ <radio_group
+ layout="topleft"
+ left_delta="50"
+ name="sky_dayc_settings_radio_group"
+ top_pad="10"
+ height="50"
+ width="150">
+ <radio_item
+ layout="topleft"
+ label="Fixed sky"
+ name="my_sky_settings"/>
+ <radio_item
+ layout="topleft"
+ label="Day cycle"
+ name="my_dayc_settings"
+ top_pad="25"/>
+ </radio_group>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="sky_settings_preset_combo"
+ top_delta="-7"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ <combo_box
+ follows="top|left"
+ name="dayc_settings_preset_combo"
+ top_delta="36"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ </panel>
+
+ <button
+ follows="left|top"
+ height="23"
+ label="OK"
+ layout="topleft"
+ right="-130"
+ name="ok_btn"
+ top_pad="10"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="cancel_btn"
+ width="100" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
index 02e50ee584..de6d586f72 100644
--- a/indra/newview/skins/default/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_help_browser.xml
@@ -2,6 +2,8 @@
<floater
legacy_header_height="18"
can_resize="true"
+ left="10000"
+ bottom="10000"
height="600"
layout="topleft"
min_height="150"
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
index 43729d7c9f..5a1f920398 100644
--- a/indra/newview/skins/default/xui/en/floater_media_browser.xml
+++ b/indra/newview/skins/default/xui/en/floater_media_browser.xml
@@ -5,7 +5,7 @@
height="440"
layout="topleft"
min_height="140"
- min_width="467"
+ min_width="0"
name="floater_about"
help_topic="floater_about"
save_rect="true"
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index f58595b3c5..1d4a1d4827 100644..100755
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="true" can_drag_on_left="false" can_minimize="false"
can_resize="true" height="550" min_height="550" min_width="620"
- name="Model Preview" title="Upload Model" width="620">
+ name="Model Preview" title="Upload Model" width="620"
+ help_topic="upload_model" >
<string name="status_idle">Idle</string>
<string name="status_parse_error">Dae parsing issue - see log for details.</string>
@@ -23,6 +24,7 @@
<string name="layer_all">All</string> <!-- Text to display in physics layer combo box for "all layers" -->
<string name="decomposing">Analyzing...</string>
<string name="simplifying">Simplifying...</string>
+ <string name="tbd">TBD</string>
<text left="15" bottom="25" follows="top|left" height="15" name="name_label">
@@ -70,43 +72,89 @@
width="290"
height="290"
follows="all"/>
-
- <text bottom_delta="25" left="25" width="100" follows="bottom|left">Upload Details</text>
- <panel top_pad="5" border="true" left="15" width="290" height="70" follows="bottom|left"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
- <text left="25" follows="bottom|left" width="140" height="15" name="streaming cost">
- Resource Cost: [COST]
- </text>
- <text left="25" top_pad="5" width="140" follows="bottom|left" height="15" name="physics cost">
- Physics Cost: [COST]
+
+ <text
+ font="SansSerif"
+ bottom_delta="15"
+ left_delta="0"
+ name="warning_title"
+ text_color="Yellow"
+ visible="false">
+ WARNING:
</text>
- <text left="25" top_pad="5" follows="bottom|left" height="15" name="upload fee">
- Upload Fee: N/A
- </text>
- </panel>
+ <text
+ text_color="White"
+ height="40"
+ width="290"
+ top_delta="15"
+ left_delta="0"
+ name="warning_message"
+ parse_urls="true"
+ wrap="true"
+ visible="false">
+ You will not be able to complete the final upload of this model to the Second Life servers. [[VURL] Find out how] to get enabled for mesh model uploads.</text>
- <check_box
- height="16"
+ <text
+ height="65"
+ top_delta="45"
left_delta="0"
- name="confirm_checkbox"
- top_pad="15"
- follows="bottom|left"
- width="16" />
+ name="weights_text"
+ width="80"
+ word_wrap="true"
+ >
+Download:
+Physics:
+Server:
+
+Prim equivs:
+ </text>
<text
- height="30"
- width="570"
+ height="65"
+ top_delta="0"
+ left_delta="80"
+ name="weights"
+ width="70"
word_wrap="true"
- left_delta="25"
- top_delta="0">I confirm that I have the appropriate rights to the material contained in this model. [secondlife:///app/floater/learn_more Learn more]</text>
- <text left="10" bottom="540" width="290" height="15" follows="bottom|left|right" name="status">[STATUS]</text>
+ >
+[ST]
+[PH]
+[SIM]
-
- <button bottom="540" left="300" follows="bottom|right" height="20" label="Defaults"
- width="80" name="reset_btn" tool_tip="Reset to defaults"/>
- <button bottom="540" left="430" follows="bottom|right" height="20" label="Upload"
- width="80" name="ok_btn" tool_tip="Upload to simulator"/>
- <button left_pad="10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn"/>
+[EQ]
+ </text>
+
+<!--
+ <text
+ height="65"
+ top_delta="0"
+ left_delta="70"
+ name="price_breakdown_text"
+ width="80"
+ word_wrap="true"
+ >
+Streaming:
+Physics:
+Instances:
+Textures:
+Model:
+ </text>
+
+ <text
+ height="65"
+ top_delta="0"
+ left_delta="80"
+ name="price_breakdown"
+ width="65"
+ word_wrap="true"
+ >
+L$ [STREAMING]
+L$ [PHYSICS]
+L$ [INSTANCES]
+L$ [TEXTURES]
+L$ [MODEL]
+ </text>
+ -->
<tab_container
follows="right|top|bottom"
@@ -122,7 +170,8 @@
<panel
border="true"
label="Level of Detail"
- name="lod_panel">
+ name="lod_panel"
+ help_topic="upload_model_lod">
<text left="10" width="240" bottom="20" height="15" follows="left|top" name="lod_table_header">
Select Level of Detail:
@@ -245,7 +294,8 @@
<panel
border="true"
label="Physics"
- name="physics_panel">
+ name="physics_panel"
+ help_topic="upload_model_physics">
<!-- PHYSICS GEOMETRY-->
<panel
@@ -386,7 +436,9 @@
<panel
border="true"
label="Modifiers"
- name="modifiers_panel">
+ name="modifiers_panel"
+ help_topic="upload_model_modifiers">
+
<text left="10" width="90" bottom="30" follows="top|left" height="15">
Scale:
</text>
@@ -416,6 +468,26 @@
</panel>
</tab_container>
+
+ <text
+ height="16"
+ left_delta="5"
+ bottom_delta="30"
+ name="upload_fee"
+ width="300"
+ follows="bottom|right"
+ word_wrap="true"
+ >
+ Upload fee: L$ [FEE]
+ </text>
+
+ <button bottom="540" left="10" follows="bottom|left" height="20" label="Set to defaults"
+ width="100" name="reset_btn" tool_tip="Set to defaults"/>
+ <button left="310" follows="bottom|right" height="20" label="Calculate weights &amp; fee"
+ width="150" name="calculate_btn" tool_tip="Calculate weights &amp; fee" top_delta="0"/>
+ <button bottom="540" left="310" follows="bottom|right" height="20" label="Upload"
+ width="80" name="ok_btn" tool_tip="Upload to simulator" visible="false"/>
+ <button right="-10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn" top_delta="0"/>
<!--
<button bottom_delta="0" left="10" width="120" name="auto fill" label="Generate LOD" tool_tip="Automatically generate levels of detail"/>
diff --git a/indra/newview/skins/default/xui/en/floater_model_wizard.xml b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
index 8603682e3a..3d16ccbc45 100644
--- a/indra/newview/skins/default/xui/en/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_wizard.xml
@@ -49,24 +49,6 @@
top="32"
left="210"
height="32"
- name="physics2_btn"
- label="3. Physics"
- tab_stop="false"
- enabled="false"
- border="false"
- image_unselected="BreadCrumbBtn_Middle_Off"
- image_selected="BreadCrumbBtn_Middle_Press"
- image_hover_unselected="BreadCrumbBtn_Middle_Over"
- image_disabled="BreadCrumbBtn_Middle_Disabled"
- image_disabled_selected="BreadCrumbBtn_Middle_Disabled"
- width="110">
- <button.commit_callback
- function="Wizard.Physics2"/>
- </button>
- <button
- top="32"
- left="210"
- height="32"
name="physics_btn"
label="3. Physics"
tab_stop="false"
@@ -126,7 +108,7 @@
height="22"
top_pad="15"
width="505"
- name="header_panel"
+ name="choose_file_header_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true"
@@ -135,46 +117,55 @@
width="200"
left="10"
top="3"
- name="header_text"
+ name="choose_file_header_text"
text_color="White"
height="10"
font="SansSerifBig"
layout="topleft">
- Upload Model
+ Choose model file
</text>
</panel>
- <text
- top_pad="14"
- width="460"
- height="20"
- name="description"
- font="SansSerifSmall"
- layout="topleft"
- word_wrap="true"
- left_delta="5">
- This wizard will help you import mesh models to Second Life. First specify a file containing the model you wish to import. Second Life supports COLLADA (.dae) files.
- </text>
<panel
- top_delta="40"
+ top_pad="14"
left="15"
- height="270"
+ height="310"
width="505"
- name="content"
+ name="choose_file_content_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
+ <text
+ height="32"
+ left="10"
+ name="advanced_users_text"
+ text_color="White"
+ top="15"
+ width="320"
+ word_wrap="true">
+ Advanced users: If you are familiar with 3D content creation tools you may wish to use the Advanced Uploader.
+ </text>
+ <button
+ follows="left|top"
+ height="20"
+ label="Switch to Advanced"
+ layout="topleft"
+ left_delta="0"
+ name="switch_to_advanced"
+ top_pad="5"
+ width="130">
+ </button>
<text
type="string"
length="1"
text_color="White"
follows="left|top"
- top="10"
+ top_pad="30"
height="10"
layout="topleft"
- left_delta="10"
- name="Cache location"
- width="300">
- Filename:
+ left_delta="0"
+ name="choose_model_file_label"
+ width="320">
+ Choose model file to upload
</text>
<line_editor
border_style="line"
@@ -187,7 +178,7 @@
max_length="4096"
name="lod_file"
top_pad="5"
- width="220" />
+ width="230" />
<button
follows="left|top"
height="23"
@@ -200,23 +191,27 @@
width="85">
</button>
<text
- top_delta="-15"
- width="200"
- height="15"
- font="SansSerifSmall"
+ type="string"
+ length="1"
+ text_color="White"
+ follows="left|top"
+ top_pad="5"
+ height="10"
layout="topleft"
- text_color="White"
- left_pad="19">
- Model Preview:
+ left="10"
+ name="support_collada_text"
+ width="320">
+ Second Life supports COLLADA (.dae) files
</text>
<!-- Placeholder panel for 3D preview render -->
<panel
- left_delta="0"
- top_pad="0"
- name="preview_panel"
+ top="30"
+ right="-10"
+ name="choose_file_preview_panel"
bevel_style="none"
highlight_light_color="0.09 0.09 0.09 1"
border="true"
+ border_style="line"
height="150"
follows="all"
width="150">
@@ -225,7 +220,8 @@
top_pad="10"
width="130"
height="14"
- left="340"
+ left_delta="0"
+ name="dimensions_label"
text_color="White"
word_wrap="true">
Dimensions (meters):
@@ -238,15 +234,7 @@
text_color="White"
name="dimensions"
left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
+ X Y Z
</text>
<text
top_delta="0"
@@ -266,23 +254,26 @@
height="15"
name="dimension_z"
left="450"/>
- <text
- top="100"
- width="320"
- height="15"
- left="10"
- text_color="White"
- word_wrap="true">
- Note:
- </text>
- <text
- top_pad="0"
- width="320"
- height="40"
- left="10"
- word_wrap="true">
-Advanced users familiar with 3d content creation tools may prefer to use the [secondlife:///app/floater/upload_model Advanced Mesh Import Window] .
- </text>
+ <text
+ height="16"
+ left="10"
+ name="warning_label"
+ text_color="Yellow"
+ top="200"
+ visible="false"
+ width="320">
+ WARNING:
+ </text>
+ <text
+ height="50"
+ left="10"
+ name="warning_text"
+ top_pad="0"
+ visible="false"
+ width="320"
+ word_wrap="true">
+ You will not be able to complete the final step of uploading this model to the Second Life servers. [secondlife:///app/floater/learn_more Find out how] to set up your account for mesh model uploads.
+ </text>
</panel>
</panel>
@@ -291,13 +282,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
height="388"
top_delta="0"
name="optimize_panel"
- visible="false"
+ visible="true"
width="535"
left="0">
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="optimize_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -306,13 +297,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="optimize_header_text"
top="3"
text_color="White"
height="10"
font="SansSerifBig"
layout="topleft">
- Optimize
+ Optimize model
</text>
</panel>
<text
@@ -321,10 +312,10 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
height="20"
font="SansSerifSmall"
layout="topleft"
- name="description"
+ name="optimize_hint"
word_wrap="true"
left_delta="5">
- This wizard has optimized your model to improve performance. You may adjust the results of the optimization process bellow or click Next to continue.
+ We have optimized the model for performance. Adjust it further if you wish.
</text>
<panel
top_delta="40"
@@ -332,11 +323,12 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
left="15"
height="270"
width="505"
- name="content"
+ name="optimize_content_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
<text
+ name="generating_lod_label"
top="20"
width="300"
height="12"
@@ -411,116 +403,92 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
- <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">
- Model Preview:
- </text>
- <combo_box left_pad="5" top_delta="-5" follows="left|top" list_position="below" height="22"
- name="preview_lod_combo2" width="90" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- High
- </combo_item>
- <combo_item name="medium">
- Medium
- </combo_item>
- <combo_item name="low">
- Low
- </combo_item>
- <combo_item name="lowest">
- Lowest
- </combo_item>
- </combo_box>
- <panel
- left="10"
- top_pad="5"
- name="preview_panel"
- bevel_style="none"
- highlight_light_color="0.09 0.09 0.09 1"
- border_style="line"
- border="true"
- height="185"
- follows="all"
- width="185">
- </panel>
- <text top="45" left="214" text_color="White" font="SansSerifSmallBold" halign="center" width="110" height="30" wrap="true">Higher Performance</text>
- <text top="75" left="204" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">Faster rendering but less detailed; lowers Resource (prim) cost.</text>
- <text top="45" left="378" text_color="White" font="SansSerifSmallBold" halign="center" width="90" height="30" wrap="true">Higher Accuracy</text>
- <text top="75" left="364" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">More detailed model but slower; increases Resource (prim) cost.</text>
+ <text name="optimize_performance_text" top="69" left="10" text_color="White" font="SansSerifSmallBold" width="120" height="16" wrap="true">Performance</text>
+ <text name="optimize_faster_rendering_text" top="85" left="10" width="120" word_wrap="true" font="SansSerifSmall" height="40">Faster rendering
+Less detail
+Lower prim weight</text>
+ <text name="optimize_accuracy_text" top="69" left="184" text_color="White" font="SansSerifSmallBold" width="120" height="16" wrap="true">Accuracy</text>
+ <text name="optimize_slower_rendering_text" top="85" left="184" width="120" word_wrap="true" font="SansSerifSmall" height="40">Slower rendering
+More detail
+Higher prim weight</text>
- <slider
+ <slider
follows="left|top"
height="20"
increment="1"
layout="topleft"
- left="204"
- max_val="3"
- initial_value="2"
+ left="10"
+ max_val="2"
+ initial_value="1"
min_val="0"
name="accuracy_slider"
show_text="false"
top="130"
width="290" />
- <text
- font="SansSerifSmall"
+ <text
+ font="SansSerifSmall"
+ name="accuracy_slider_mark1"
top_pad="0"
- width="300"
+ width="5"
left_delta="6"
height="4">'
- </text>
-
-
- <icon
- top_pad="14"
- left_delta="0"
- width="280"
- height="2"
- image_name="model_wizard\divider_line.png"/>
-
- <text top_delta="20" width="200" text_color="White" left_delta="50" name="streaming cost" height="20">Resource Cost: [COST]</text>
- <text
- top_pad="15"
- width="130"
- height="14"
- left="10"
- text_color="White"
- word_wrap="true">
- Dimensions (meters):
- </text>
- <text
- top_pad="0"
- width="160"
- height="15"
- font="SansSerifSmallBold"
- text_color="White"
- name="dimensions"
- left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
+ </text>
+ <text
+ font="SansSerifSmall"
+ name="accuracy_slider_mark2"
+ top_delta="0"
+ width="5"
+ left_delta="137"
+ height="4">'
+ </text>
+ <text
+ font="SansSerifSmall"
+ name="accuracy_slider_mark3"
+ top_delta="0"
+ width="5"
+ left_delta="137"
+ height="4">'
+ </text>
+ <button
+ follows="left|top"
+ height="20"
+ label="Recalculate Geometry"
+ layout="topleft"
+ left="80"
+ name="recalculate_geometry_btn"
+ top_pad="15"
+ width="150">
+ </button>
+ <text top="10" right="-10" width="185" text_color="White" follows="left|top" height="15" name="geometry_preview_label">
+ Geometry preview
</text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_x"
- left_delta="-25"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_y"
- left_delta="46"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_z"
- left_delta="46"/>
+ <panel
+ right="-10"
+ top="32"
+ name="optimize_preview_panel"
+ bevel_style="none"
+ highlight_light_color="0.09 0.09 0.09 1"
+ border_style="line"
+ border="true"
+ height="185"
+ follows="all"
+ width="185">
+ </panel>
+ <combo_box left_delta="75" top_pad="10" follows="left|top" list_position="below" height="22"
+ name="preview_lod_combo" width="110" tool_tip="LOD to view in preview render">
+ <combo_item name="preview_lod_high">
+ High detail
+ </combo_item>
+ <combo_item name="preview_lod_medium">
+ Medium detail
+ </combo_item>
+ <combo_item name="preview_lod_low">
+ Low detail
+ </combo_item>
+ <combo_item name="preview_lod_lowest">
+ Lowest detail
+ </combo_item>
+ </combo_box>
</panel>
</panel>
@@ -534,7 +502,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="physics_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -543,13 +511,13 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="physics_header_text"
top="3"
height="10"
font="SansSerifBig"
text_color="White"
layout="topleft">
- Physics
+ Adjust physics
</text>
</panel>
<text
@@ -558,186 +526,108 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
height="50"
font="SansSerifSmall"
layout="topleft"
- name="description"
+ name="physics_hint"
word_wrap="true"
left_delta="5">
- The wizard will create a physical shape, which determines how the object interacts with other objects and avatars. Set the slider to the detail level most appropriate for how your object will be used:
+ We will create a shape for the outer hull of the model. Adjust the shape's detail level as needed for the intended purpose of your model.
</text>
<panel
top_delta="44"
left="15"
height="270"
width="505"
- name="content"
+ name="physics_content_panel"
bg_opaque_color="DkGray2"
background_visible="true"
background_opaque="true">
- <text top="15" left="20" text_color="White" font="SansSerifSmallBold" width="110" height="30" wrap="true" halign="center">Higher Performance</text>
- <text top="45" left="10" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">Faster rendering but less detailed; lowers Resource (prim) cost.</text>
- <text top="15" left="372" text_color="White" font="SansSerifSmallBold" width="90" height="30" wrap="true" halign="center">Higher Accuracy</text>
- <text top="45" left="360" halign="center" width="130" word_wrap="true" font="SansSerifSmall" height="80">More detailed model but slower; increases Resource (prim) cost.</text>
+ <text name="physics_performance_text" top="10" left="10" text_color="White" font="SansSerifSmallBold" width="120" halign="right" height="16" wrap="true">Performance</text>
+ <text name="physics_faster_rendering_text" top="26" left="10" width="120" word_wrap="true" font="SansSerifSmall" halign="right" height="40">Faster rendering
+Less detail
+Lower prim weight</text>
+ <text name="physics_accuracy_text" top="174" left="10" text_color="White" font="SansSerifSmallBold" width="120" halign="right" height="16" wrap="true">Accuracy</text>
+ <text name="physics_slower_dendering_text" top="190" left="10" width="120" word_wrap="true" font="SansSerifSmall" halign="right" height="40">Slower rendering
+More detail
+Higher prim weight</text>
<slider
follows="left|top"
- height="22"
+ height="190"
increment=".1"
layout="topleft"
- left="20"
+ left="140"
max_val="1"
initial_value="0.5"
min_val="0"
name="physics_slider"
+ orientation="vertical"
show_text="false"
- top="90"
- width="440" />
- <text
- font="SansSerifSmall"
- top_pad="0"
- width="500"
- left_delta="6"
- height="4">' ' ' ' ' ' ' ' ' ' '</text>
- <text top_pad="10" width="110" halign="center" word_wrap="true" left="25" height="40">Recommended for solid objects</text>
- <text top_delta="0" width="110" halign="center" word_wrap="true" left="190" height="40">Recommended for buildings</text>
- <text top_delta="0" width="110" halign="center" word_wrap="true" left="350" height="40">Recommended for vehicles</text>
-
-
- <icon
- top_pad="5"
- left="15"
- width="470"
- height="2"
- image_name="model_wizard\divider_line.png"/>
-
- <text top_delta="30" width="180" text_color="White" left="160" name="streaming cost" height="20">Resource Cost: [COST]</text>
-
- </panel>
- </panel>
-
- <panel
- height="388"
- top_delta="0"
- name="physics2_panel"
- visible="true"
- width="535"
- left="0">
- <panel
- height="22"
- top_pad="15"
- name="header_panel"
- width="505"
- bg_opaque_color="DkGray2"
- background_visible="true"
- background_opaque="true"
- left="15">
- <text
- width="200"
- left="10"
- name="header_text"
- text_color="White"
- top="3"
- height="10"
- font="SansSerifBig"
- layout="topleft">
- Physics
- </text>
- </panel>
- <text
- top_pad="14"
- width="475"
- height="50"
- font="SansSerifSmall"
- layout="topleft"
- name="description"
- word_wrap="true"
- left_delta="5">
- Preview the physics shape below then click Next to continue. To modify the physics shape, click the Back button.
- </text>
- <panel
- top_delta="40"
- left="15"
- height="270"
- width="505"
- name="content"
- bg_opaque_color="DkGray2"
- background_visible="true"
- background_opaque="true">
- <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">
- Model Preview:
+ top="25"
+ width="22" />
+ <text name="physics_example_1" top="10" width="120" word_wrap="true" left_pad="10" height="50">Examples:
+Moving objects
+Flying objects
+Vehicles</text>
+ <text name="physics_example_2" top="95" width="120" word_wrap="true" left_delta="0" height="50">Examples:
+Small static objects
+Less detailed objects
+Simple furniture</text>
+ <text name="physics_example_3" top="180" width="120" word_wrap="true" left_delta="0" height="50">Examples:
+Static objects
+Detailed objects
+Buildings</text>
+ <button
+ follows="left|top"
+ height="20"
+ label="Recalculate physics"
+ layout="topleft"
+ left="80"
+ name="recalculate_physics_btn"
+ top_pad="10"
+ width="150">
+ </button>
+ <button
+ enabled="false"
+ follows="left|top"
+ height="20"
+ label="Recalculating..."
+ layout="topleft"
+ left_delta="0"
+ name="recalculating_physics_btn"
+ top_delta="0"
+ visible="false"
+ width="150">
+ </button>
+ <text top="10" right="-10" width="185" text_color="White" follows="left|top" height="15" name="physics_preview_label">
+ Physics preview
</text>
- <combo_box left_pad="5" top_delta="-5" follows="left|top" list_position="below" height="22"
- name="preview_lod_combo3" width="90" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- High
+ <panel
+ right="-10"
+ top="32"
+ name="physics_preview_panel"
+ bevel_style="none"
+ highlight_light_color="0.09 0.09 0.09 1"
+ border_style="line"
+ border="true"
+ height="185"
+ follows="all"
+ width="185">
+ </panel>
+ <combo_box left_delta="75" top_pad="10" follows="left|top" list_position="below" height="22"
+ name="preview_lod_combo2" width="110" tool_tip="LOD to view in preview render">
+ <combo_item name="preview_lod2_high">
+ High detail
</combo_item>
- <combo_item name="medium">
- Medium
+ <combo_item name="preview_lod2_medium">
+ Medium detail
</combo_item>
- <combo_item name="low">
- Low
+ <combo_item name="preview_lod2_low">
+ Low detail
</combo_item>
- <combo_item name="lowest">
- Lowest
+ <combo_item name="preview_lod2_lowest">
+ Lowest detail
</combo_item>
</combo_box>
- <panel
- left="10"
- top_pad="10"
- name="preview_panel"
- bevel_style="none"
- highlight_light_color="0.09 0.09 0.09 1"
- border_style="line"
- border="true"
- height="190"
- follows="all"
- width="190">
- </panel>
- <text
- top_pad="8"
- width="130"
- height="14"
- left="10"
- text_color="White"
- word_wrap="true">
- Dimensions (meters):
- </text>
- <text
- top_pad="0"
- width="160"
- height="15"
- font="SansSerifSmallBold"
- text_color="White"
- name="dimensions"
- left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_x"
- left_delta="-25"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_y"
- left_delta="46"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_z"
- left_delta="46"/>
- <text top="60" width="180" text_color="White" left="225" name="streaming cost" height="20">Resource Cost: [COST]</text>
- </panel>
+ </panel>
</panel>
<panel
@@ -750,7 +640,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="review_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -759,7 +649,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="review_header_text"
text_color="White"
top="3"
height="10"
@@ -768,162 +658,44 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
Review
</text>
</panel>
- <text
+ <panel
top_pad="14"
- width="470"
- height="24"
- font="SansSerifSmall"
- layout="topleft"
- name="description"
- word_wrap="true"
- left_delta="5">
- Review the details below then click. Upload to upload your model. Your L$ balance will be charged when you click Upload.
- </text>
- <icon
- top_pad="10"
- left="20"
- width="495"
- height="2"
- image_name="model_wizard\divider_line.png"/>
- <panel
- top_pad="5"
left="15"
- height="270"
+ height="310"
width="505"
- name="content">
- <text top="10" left="10" width="85" text_color="White" follows="left|top" height="15" name="lod_label">
- Model Preview:
- </text>
- <combo_box left_pad="5" top_delta="-5" follows="left|top" list_position="below" height="22"
- name="preview_lod_combo" width="90" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- High
- </combo_item>
- <combo_item name="medium">
- Medium
- </combo_item>
- <combo_item name="low">
- Low
- </combo_item>
- <combo_item name="lowest">
- Lowest
- </combo_item>
- </combo_box>
- <panel
- left="10"
- top_pad="10"
- name="preview_panel"
- bevel_style="none"
- highlight_light_color="0.09 0.09 0.09 1"
- border_style="line"
- border="true"
- height="190"
- follows="all"
- width="190">
- </panel>
- <text
- top_pad="8"
- width="130"
- height="14"
- left="10"
- text_color="White"
- word_wrap="true">
- Dimensions (meters):
- </text>
- <text
- top_pad="0"
- width="160"
- height="15"
- font="SansSerifSmallBold"
- text_color="White"
- name="dimensions"
- left_delta="0">
- X: Y: Z:
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_dividers"
- left_delta="41">
- | |
- </text>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_x"
- left_delta="-25"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_y"
- left_delta="46"/>
- <text
- top_delta="0"
- width="160"
- height="15"
- name="dimension_z"
- left_delta="46"/>
+ name="review_content_panel"
+ bg_opaque_color="DkGray2"
+ background_visible="true"
+ background_opaque="true">
+ <text
+ top="20"
+ width="485"
+ font="SansSerifMedium"
+ text_color="White"
+ left="10"
+ name="review_prim_equiv"
+ height="16">Impact to parcel/region: [EQUIV] prim equivalents
+ </text>
+ <text
+ top_pad="20"
+ width="485"
+ font="SansSerifMedium"
+ text_color="White"
+ left="10"
+ name="review_fee"
+ height="16">Your account will be charged an upload fee of L$ [FEE].
+ </text>
+ <text
+ top_pad="20"
+ width="485"
+ font="SansSerifMedium"
+ text_color="White"
+ left="10"
+ name="review_confirmation"
+ height="32"
+ word_wrap="true">By clicking the upload button, you confirm that you have the appropriate rights to the material contained in the model.
+ </text>
</panel>
- <text
- width="300"
- height="12"
- top="125"
- name="streaming cost"
- left="230"
- font="SansSerifSmallBold"
- text_color="White">Resource Cost: [COST]</text>
- <text
- width="285"
- height="30"
- top_pad="0"
- left_delta="0"
- word_wrap="true"
- font="SansSerifItalic">This is the cost to your Region's prim/object limit, at default scale</text>
- <text
- width="300"
- height="12"
- name="physics cost"
- top_pad="10"
- left_delta="0"
- font="SansSerifSmallBold"
- text_color="White">Physics Cost: [COST]</text>
- <text
- width="285"
- height="30"
- top_pad="0"
- left_delta="0"
- word_wrap="true"
- font="SansSerifItalic">This is the cost to your Region's prim/object limit, at default scale</text>
- <text
- width="200"
- height="12"
- top_pad="10"
- left_delta="0"
- font="SansSerifSmallBold"
- text_color="White">Upload Fee:</text>
- <text
- width="285"
- height="26"
- top_pad="0"
- left_delta="0"
- word_wrap="true"
- font="SansSerifItalic">This is the amount the upload will cost.</text>
- <check_box
- height="16"
- layout="topleft"
- left_delta="0"
- name="confirm_checkbox"
- top_pad="15"
- width="16" />
- <text
- height="100"
- width="240"
- word_wrap="true"
- left_delta="25"
- top_delta="0">I confirm that I have the appropriate rights to the material contained in this model. [secondlife:///app/floater/learn_more Learn more]</text>
</panel>
@@ -939,7 +711,7 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<panel
height="22"
top_pad="15"
- name="header_panel"
+ name="upload_header_panel"
width="505"
bg_opaque_color="DkGray2"
background_visible="true"
@@ -948,52 +720,85 @@ Advanced users familiar with 3d content creation tools may prefer to use the [se
<text
width="200"
left="10"
- name="header_text"
+ name="upload_header_text"
top="3"
text_color="White"
height="10"
font="SansSerifBig"
layout="topleft">
- Upload Complete!
+ Upload complete
</text>
</panel>
<text
top_pad="14"
- width="474"
- height="20"
- font="SansSerifSmall"
+ width="495"
+ height="16"
+ font="SansSerifMedium"
layout="topleft"
- name="description"
+ name="model_uploaded_text"
+ text_color="White"
word_wrap="true"
- left_delta="5">
- Congratulations! Your model has been sucessfully uploaded. You will find the model in the Objects folder in your inventory.
+ left="25">
+ Your model has been uploaded.
+ </text>
+ <text
+ top_pad="5"
+ width="495"
+ height="16"
+ font="SansSerifMedium"
+ layout="topleft"
+ name="inventory_text"
+ text_color="White"
+ word_wrap="true"
+ left="25">
+ You will find it in the Objects folder in your inventory.
+ </text>
+ <text
+ top_pad="20"
+ width="495"
+ font="SansSerifMedium"
+ text_color="White"
+ left="25"
+ name="charged_fee"
+ height="16">Your account has been charged L$ [FEE].
</text>
- <icon
- top_pad="15"
- left_delta="0"
- width="495"
- height="2"
- image_name="model_wizard\divider_line.png"/>
</panel>
<button
top="440"
- right="-245"
+ right="-285"
width="90"
height="22"
name="back"
label="&lt;&lt; Back" />
<button
top_delta="0"
- right="-150"
+ right="-190"
width="90"
height="22"
name="next"
label="Next &gt;&gt; " />
<button
top_delta="0"
+ left_delta="0"
+ width="160"
+ height="22"
+ name="calculate"
+ label="Calculate weights &amp; fee &gt;&gt; " />
+ <button
+ enabled="false"
+ visible="false"
+ top_delta="0"
+ left_delta="0"
+ width="160"
+ height="22"
+ name="calculating"
+ label="Calculating... " />
+ <button
+ enabled="false"
+ top_delta="0"
right="-150"
width="90"
height="22"
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index 41a440aaa0..f526970ad0 100644
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -22,6 +22,7 @@
layout="topleft"
left="10"
name="object_name"
+ parse_urls="false"
top="20"
width="284">
[DESC]:
diff --git a/indra/newview/skins/default/xui/en/floater_postcard.xml b/indra/newview/skins/default/xui/en/floater_postcard.xml
index 8da35e9d7f..c756661ffc 100644
--- a/indra/newview/skins/default/xui/en/floater_postcard.xml
+++ b/indra/newview/skins/default/xui/en/floater_postcard.xml
@@ -7,11 +7,11 @@
height="380"
layout="topleft"
min_height="380"
- min_width="450"
+ min_width="490"
name="Postcard"
help_topic="postcard"
title="EMAIL SNAPSHOT"
- width="450">
+ width="490">
<floater.string
name="default_subject">
Postcard from [SECOND_LIFE].
@@ -40,7 +40,7 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="108"
+ left_delta="148"
name="to_form"
top_delta="-4"
width="150" />
@@ -59,7 +59,7 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="108"
+ left_delta="148"
name="from_form"
top_delta="-4"
width="150" />
@@ -78,7 +78,7 @@
follows="left|top"
height="20"
layout="topleft"
- left_delta="108"
+ left_delta="148"
max_length_bytes="100"
name="name_form"
top_delta="-4"
@@ -99,7 +99,7 @@
height="20"
label="Type your subject here."
layout="topleft"
- left_delta="108"
+ left_delta="148"
max_length_bytes="100"
name="subject_form"
top_delta="-4"
diff --git a/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml
new file mode 100644
index 0000000000..449731ab89
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ height="500"
+ layout="topleft"
+ name="Proxy Settings Floater"
+ help_topic="proxysettings"
+ title="Proxy Settings"
+ width="500">
+ <check_box
+ control_name="BrowserProxyEnabled"
+ top="38"
+ enabled="true"
+ follows="left|top"
+ height="14"
+ initial_value="false"
+ commit_callback.function="Proxy.Change"
+ label="Use HTTP Proxy for Web pages"
+ left="22"
+ mouse_opaque="true"
+ name="web_proxy_enabled"
+ radio_style="false"
+ width="400"
+ top_pad="5" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ left_delta="23"
+ layout="topleft"
+ name="Proxy location"
+ top_pad="10"
+ width="300">
+ HTTP Proxy:
+ </text>
+ <line_editor
+ control_name="BrowserProxyAddress"
+ enabled_control="BrowserProxyEnabled"
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left_delta="0"
+ name="web_proxy_editor"
+ tool_tip="The DNS name or IP address of the HTTP proxy you would like to use."
+ top_pad="4"
+ width="200" />
+ <spinner
+ control_name="BrowserProxyPort"
+ enabled_control="BrowserProxyEnabled"
+ decimal_digits="0"
+ follows="left|top"
+ height="23"
+ increment="1"
+ initial_value="80"
+ label="Port number:"
+ label_width="95"
+ layout="topleft"
+ left_delta="210"
+ max_val="12000"
+ min_val="10"
+ name="web_proxy_port"
+ top_delta="0"
+ tool_tip="The port of the HTTP proxy you would like to use."
+ width="145" />
+ <check_box
+ control_name="Socks5ProxyEnabled"
+ height="16"
+ label="Use SOCKS 5 Proxy for UDP traffic"
+ layout="topleft"
+ left="22"
+ name="socks_proxy_enabled"
+ top_pad="32"
+ width="256"
+ commit_callback.function="Proxy.Change" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="23"
+ name="Proxy location"
+ top_pad="10"
+ width="300">
+ SOCKS 5 Proxy:
+ </text>
+ <line_editor
+ control_name="Socks5ProxyHost"
+ enabled_control="Socks5ProxyEnabled"
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left_delta="0"
+ name="socks_proxy_editor"
+ tool_tip="The DNS name or IP address of the SOCKS 5 proxy you would like to use."
+ top_pad="4"
+ width="200"
+ commit_callback.function="Proxy.Change" />
+ <spinner
+ control_name="Socks5ProxyPort"
+ enabled_control="Socks5ProxyEnabled"
+ decimal_digits="0"
+ follows="left|top"
+ height="23"
+ increment="1"
+ initial_value="80"
+ label="Port number:"
+ label_width="95"
+ layout="topleft"
+ left_delta="210"
+ max_val="12000"
+ min_val="10"
+ name="socks_proxy_port"
+ top_delta="0"
+ width="145"
+ tool_tip="The port of the SOCKS 5 proxy you would like to use."
+ commit_callback.function="Proxy.Change" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="40"
+ name="Proxy location"
+ top_pad="15"
+ width="300">
+ SOCKS Authentication:
+ </text>
+ <radio_group
+ control_name="Socks5AuthType"
+ enabled_control="Socks5ProxyEnabled"
+ height="50"
+ layout="topleft"
+ name="socks5_auth_type"
+ top_pad="10"
+ width="120"
+ commit_callback.function="Proxy.Change" >
+ <radio_item
+ height="16"
+ label="No Authentication"
+ layout="topleft"
+ name="Socks5NoAuth"
+ value="None"
+ tool_tip="Socks5 proxy requires no authentication."
+ width="120" />
+ <radio_item
+ height="16"
+ label="Username/Password"
+ layout="topleft"
+ name="Socks5UserPass"
+ value="UserPass"
+ tool_tip="Socks5 proxy requires username/password authentication."
+ width="120" />
+ </radio_group>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left_delta="20"
+ top_delta="50"
+ width="200">
+ Username:
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ left_pad="15"
+ layout="topleft"
+ width="200">
+ Password:
+ </text>
+ <line_editor
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left="60"
+ name="socks5_username"
+ tool_tip="The username used to authenticate with your SOCKS 5 server"
+ top_pad="4"
+ width="200"
+ commit_callback.function="Proxy.Change" />
+ <line_editor
+ follows="left|top"
+ font="SansSerif"
+ height="23"
+ layout="topleft"
+ left_pad="15"
+ name="socks5_password"
+ tool_tip="The password used to authenticate with your SOCKS 5 server"
+ top_delta="0"
+ width="200"
+ is_password="true"
+ commit_callback.function="Proxy.Change" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="25"
+ name="Proxy location"
+ top_pad="18"
+ width="300">
+ Other HTTP traffic proxy:
+ </text>
+ <radio_group
+ control_name="HttpProxyType"
+ name="other_http_proxy_type"
+ height="60"
+ layout="topleft"
+ top_pad="9"
+ width="120"
+ left_delta="15"
+ commit_callback.function="Proxy.Change" >
+ <radio_item
+ height="16"
+ label="Do not proxy"
+ layout="topleft"
+ name="OtherNoProxy"
+ value="None"
+ width="120"
+ tool_tip="Non-web HTTP traffic will NOT be sent to any proxy."/>
+ <radio_item
+ height="16"
+ label="Use HTTP Proxy"
+ layout="topleft"
+ name="OtherHTTPProxy"
+ value="Web"
+ width="120"
+ enabled_control="BrowserProxyEnabled"
+ tool_tip="Non-web HTTP will be sent through the configured Web proxy." />
+ <radio_item
+ height="16"
+ label="Use SOCKS 5 Proxy"
+ layout="topleft"
+ name="OtherSocksProxy"
+ value="Socks"
+ width="120"
+ enabled_control="Socks5ProxyEnabled"
+ tool_tip="Non-web HTTP traffic will be sent through the configured Socks 5 proxy."/>
+ </radio_group>
+ <button
+ follows="left|top"
+ height="22"
+ label="OK"
+ label_selected="OK"
+ layout="topleft"
+ left="282"
+ name="OK"
+ top_pad="36"
+ width="90"
+ commit_callback.function="Proxy.OK" />
+ <button
+ follows="left|top"
+ height="22"
+ label="Cancel"
+ label_selected="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="Cancel"
+ top_delta="0"
+ width="90"
+ commit_callback.function="Proxy.Cancel" />
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml
index 32fb6f97e7..3b58cd08f6 100644
--- a/indra/newview/skins/default/xui/en/floater_region_info.xml
+++ b/indra/newview/skins/default/xui/en/floater_region_info.xml
@@ -16,5 +16,5 @@
name="region_panels"
right="-1"
tab_position="top"
- top="20" />
+ top="20"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index 8770ede7e9..eaf575fc08 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -1,71 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- legacy_header_height="13"
+ legacy_header_height="18"
can_resize="true"
- height="600"
+ height="775"
layout="topleft"
min_height="400"
- min_width="450"
- name="floater_search"
- help_topic="floater_search"
+ min_width="500"
+ name="floater_web_content"
+ help_topic="floater_web_content"
save_rect="true"
+ auto_tile="true"
save_visibility="true"
- single_instance="true"
- title="FIND"
- width="650">
- <floater.string
- name="loading_text">
- Loading...
- </floater.string>
- <floater.string
- name="done_text">
- Done
- </floater.string>
- <layout_stack
- height="580"
- follows="left|right|top|bottom"
- layout="topleft"
- left="10"
- name="stack1"
- top="20"
- width="630">
- <layout_panel
- height="570"
- layout="topleft"
- left_delta="0"
- top_delta="0"
- name="browser_layout"
- user_resize="false"
- width="630">
- <web_browser
- trusted_content="true"
- follows="left|right|top|bottom"
- layout="topleft"
- left="0"
- name="browser"
- top="0"
- height="540"
- width="630" />
- <text
- follows="bottom|left"
- height="16"
- layout="topleft"
- left_delta="0"
- name="status_text"
- top_pad="10"
- width="150" />
- <text
- visible="false"
- follows="bottom|right"
- height="16"
- left_delta="0"
- name="refresh_search"
- left_pad="0"
- right="-10"
- halign="right"
- width="450">
- Redo search to reflect current God level
- </text>
- </layout_panel>
- </layout_stack>
-</floater>
+ title=""
+ initial_mime_type="text/html"
+ width="780"
+ tab_stop="true"
+ filename="floater_web_content.xml"/>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index ec190ab656..89a0c4c287 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -330,13 +330,13 @@
increment="1"
initial_value="75"
label="Image quality"
- label_width="100"
+ label_width="124"
layout="topleft"
left_delta="0"
max_val="100"
name="image_quality_slider"
top_pad="5"
- width="205" />
+ width="228" />
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_sound_devices.xml b/indra/newview/skins/default/xui/en/floater_sound_devices.xml
index 304987c3d5..74e01f359c 100644
--- a/indra/newview/skins/default/xui/en/floater_sound_devices.xml
+++ b/indra/newview/skins/default/xui/en/floater_sound_devices.xml
@@ -15,14 +15,14 @@
layout="topleft"
name="floater_sound_devices"
title="Sound Devices"
- width="315">
+ width="490">
<panel
layout="topleft"
follows="all"
filename="panel_sound_devices.xml"
name="device_settings_panel"
width="400"
- left="2"
+ left="10"
top="26"
class="panel_voice_device_settings"/>
<text
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 8b8f70b940..8901583799 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -47,24 +47,12 @@
Click and drag to select land
</floater.string>
<floater.string
- name="grid_screen_text">
- Screen
+ name="status_selectcount">
+ [OBJ_COUNT] objects ( [PRIM_COUNT] prims[PE_STRING] ) selected
</floater.string>
<floater.string
- name="grid_local_text">
- Local
- </floater.string>
- <floater.string
- name="grid_world_text">
- World
- </floater.string>
- <floater.string
- name="grid_reference_text">
- Reference
- </floater.string>
- <floater.string
- name="grid_attachment_text">
- Attachment
+ name="status_selectprimequiv">
+ , [SEL_WEIGHT] prim equivs
</floater.string>
<button
follows="left|top"
@@ -221,7 +209,7 @@
<radio_group
follows="left|top"
left="5"
- top="59"
+ top="55"
height="70"
layout="topleft"
name="edit_radio_group">
@@ -255,18 +243,18 @@
label="Edit linked"
layout="topleft"
name="checkbox edit linked parts"
- top_pad="-10">
+ top_pad="-18">
<check_box.commit_callback
function="BuildTool.selectComponent"/>
</check_box>
<button
follows="left|top"
- height="23"
+ height="20"
label="Link"
- top_pad="2"
+ top="108"
layout="topleft"
- left="5"
+ left="143"
name="link_btn"
width="50">
<button.commit_callback
@@ -274,27 +262,15 @@
</button>
<button
follows="left|top"
- height="23"
+ height="20"
label="Unlink"
layout="topleft"
left_pad="2"
name="unlink_btn"
- width="105">
+ width="90">
<button.commit_callback
function="BuildTool.UnlinkObjects"/>
</button>
- <text
- text_color="LtGray_50"
- follows="top|left"
- halign="left"
- left_pad="3"
- name="RenderingCost"
- tool_tip="Shows the rendering cost calculated for this object"
- top_delta="11"
- type="string"
- width="100">
- þ: [COUNT]
- </text>
<check_box
control_name="ScaleUniform"
height="19"
@@ -302,7 +278,7 @@
layout="topleft"
left="143"
name="checkbox uniform"
- top="50"
+ top="48"
width="20" />
<text
height="19"
@@ -324,53 +300,29 @@
layout="topleft"
left="143"
name="checkbox stretch textures"
- top_pad="-6"
+ top_pad="-4"
follows="left|top"
width="134" />
<check_box
control_name="SnapEnabled"
height="18"
initial_value="true"
- label="Snap to grid"
+ label="Snap"
layout="topleft"
top_pad="0"
name="checkbox snap to grid"
width="134" />
- <combo_box
- height="23"
- layout="topleft"
- follows="left|top"
- name="combobox grid mode"
- tool_tip="Choose the type of grid ruler for positioning the object"
- top_pad="0"
- width="108">
- <combo_box.item
- label="World grid"
- name="World"
- value="World" />
- <combo_box.item
- label="Local grid"
- name="Local"
- value="Local" />
- <combo_box.item
- label="Reference grid"
- name="Reference"
- value="Reference" />
- <combo_box.commit_callback
- function="BuildTool.gridMode"/>
- </combo_box>
<button
left_pad="0"
- image_selected="ForwardArrow_Press"
- image_unselected="ForwardArrow_Off"
+ label="Options..."
layout="topleft"
follows="top|left"
name="Options..."
tool_tip="See more grid options"
- top_pad="-22"
- right="-10"
- width="18"
- height="23" >
+ top="83"
+ right="-35"
+ width="65"
+ height="21" >
<button.commit_callback
function="BuildTool.gridOptions"/>
</button>
@@ -385,7 +337,7 @@
left="10"
name="ToolCube"
tool_tip="Cube"
- top="51"
+ top="58"
width="20" />
<button
follows="left|top"
@@ -447,10 +399,10 @@
image_selected="Object_Hemi_Cylinder_Selected"
image_unselected="Object_Hemi_Cylinder"
layout="topleft"
- left_delta="29"
+ left="10"
name="ToolHemiCylinder"
tool_tip="Hemicylinder"
- top_delta="0"
+ top="84"
width="20" />
<button
follows="left|top"
@@ -515,7 +467,7 @@
left="10"
name="ToolTorus"
tool_tip="Torus"
- top="77"
+ top="109"
width="20" />
<button
follows="left|top"
@@ -575,9 +527,9 @@
height="19"
label="Keep Tool selected"
layout="topleft"
- left="4"
+ left="155"
name="checkbox sticky"
- top="101"
+ top="55"
width="128" />
<check_box
control_name="CreateToolCopySelection"
@@ -596,7 +548,7 @@
layout="topleft"
left_delta="18"
name="checkbox copy centers"
- top="132"
+ top="85"
width="134" />
<check_box
control_name="CreateToolCopyRotates"
@@ -749,89 +701,49 @@
<button.commit_callback
function="BuildTool.applyToSelection"/>
</button>
+ <text
+ text_color="LtGray_50"
+ type="string"
+ length="1"
+ height="16"
+ follows="left|top"
+ font="SansSerifSmall"
+ layout="topleft"
+ left="10"
+ name="selection_empty"
+ top_pad="0"
+ width="100">
+ Nothing selected.
+ </text>
<text
text_color="LtGray_50"
type="string"
length="1"
- height="10"
+ height="16"
follows="left|top"
- halign="right"
+ font="SansSerifSmall"
layout="topleft"
- right="-10"
- name="obj_count"
- top_pad="5"
- width="143">
- Objects: [COUNT]
+ left="10"
+ name="selection_count"
+ top_delta="0"
+ visible="false"
+ width="280">
</text>
<text
- text_color="LtGray_50"
- type="string"
- length="1"
- height="10"
- follows="left|top"
- halign="right"
- layout="topleft"
- right="-10"
- name="prim_count"
- width="143">
- Prims: [COUNT]
+ text_color="LtGray_50"
+ type="string"
+ length="1"
+ height="16"
+ follows="left|top"
+ font="SansSerifSmall"
+ layout="topleft"
+ left="10"
+ name="selection_weight"
+ top_pad="0"
+ visible="false"
+ width="280">
+ Physics weight [PHYS_WEIGHT], Render Cost [DISP_WEIGHT].
</text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- height="10"
- follows="left|top"
- halign="right"
- layout="topleft"
- right="-120"
- name="linked_set_count"
- top="144"
- width="80">
- Linked Sets: [COUNT]
- </text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- height="10"
- follows="left|top"
- halign="right"
- layout="topleft"
- top_delta="0"
- right="-8"
- name="linked_set_cost"
- tool_tip="Cost of currently selected linked sets as [prims],[physics complexity]"
- width="80">
- Cost: [COST] / [PHYSICS]
- </text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- follows="left|top"
- halign="right"
- layout="topleft"
- top_pad="5"
- right="-120"
- name="object_count"
- width="80">
- Objects: [COUNT]
- </text>
- <text
- text_color="LtGray_50"
- type="string"
- length="1"
- follows="left|top"
- halign="right"
- layout="topleft"
- top_delta="0"
- right="-8"
- name="object_cost"
- tool_tip="Cost of currently selected objects as [prims] / [physics complexity]"
- width="80">
- Cost: [COST] / [PHYSICS]
- </text>
<!-- <text -->
<!-- text_color="LtGray_50" -->
<!-- type="string" -->
@@ -858,6 +770,15 @@
<!-- width="143"> -->
<!-- Prims: [COUNT] -->
<!-- </text> -->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="6"
+ name="cost_text_border"
+ top="135"
+ width="282"/>
<tab_container
follows="left|top"
height="410"
diff --git a/indra/newview/skins/default/xui/en/floater_voice_effect.xml b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
index 9bf9cc6c77..2c754cd8d0 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
@@ -25,6 +25,46 @@
<string name="new_voice_effect">
(New!)
</string>
+
+ <!-- effect names begin -->
+ <string name="effect_Arena">Arena</string>
+ <string name="effect_Beast">Beast</string>
+ <string name="effect_Buff">Buff</string>
+ <string name="effect_Buzz">Buzz</string>
+ <string name="effect_Camille">Camille</string>
+ <string name="effect_Creepy">Creepy</string>
+ <string name="effect_CreepyBot">CreepyBot</string>
+ <string name="effect_Cyber">Cyber</string>
+ <string name="effect_DeepBot">DeepBot</string>
+ <string name="effect_Demon">Demon</string>
+ <string name="effect_Flirty">Flirty</string>
+ <string name="effect_Foxy">Foxy</string>
+ <string name="effect_Halloween_2010_Bonus">Halloween_2010_Bonus</string>
+ <string name="effect_Helium">Helium</string>
+ <string name="effect_Husky">Husky</string>
+ <string name="effect_Intercom">Intercom</string>
+ <string name="effect_Macho">Macho</string>
+ <string name="effect_Micro">Micro</string>
+ <string name="effect_Mini">Mini</string>
+ <string name="effect_Nano">Nano</string>
+ <string name="effect_Nightmare">Nightmare</string>
+ <string name="effect_PopBot">PopBot</string>
+ <string name="effect_Rachel">Rachel</string>
+ <string name="effect_Radio">Radio</string>
+ <string name="effect_Robot">Robot</string>
+ <string name="effect_Roxanne">Roxanne</string>
+ <string name="effect_Sabrina">Sabrina</string>
+ <string name="effect_Samantha">Samantha</string>
+ <string name="effect_Sexy">Sexy</string>
+ <string name="effect_Shorty">Shorty</string>
+ <string name="effect_Sneaky">Sneaky</string>
+ <string name="effect_Stallion">Stallion</string>
+ <string name="effect_Sultry">Sultry</string>
+ <string name="effect_Thunder">Thunder</string>
+ <string name="effect_Vixen">Vixen</string>
+ <string name="effect_WhinyBot">WhinyBot</string>
+ <!-- effect names end -->
+
<text
height="16"
word_wrap="true"
diff --git a/indra/newview/skins/default/xui/en/floater_water.xml b/indra/newview/skins/default/xui/en/floater_water.xml
deleted file mode 100644
index 3a44ba3763..0000000000
--- a/indra/newview/skins/default/xui/en/floater_water.xml
+++ /dev/null
@@ -1,503 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="240"
- layout="topleft"
- name="Water Floater"
- help_topic="water_floater"
- save_rect="true"
- title="ADVANCED WATER EDITOR"
- width="700">
- <floater.string
- name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </floater.string>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="10"
- name="KeyFramePresetsText"
- top="34"
- font="SansSerif"
- width="85">
- Water Presets:
- </text>
- <combo_box
- height="23"
- layout="topleft"
- left_delta="95"
- name="WaterPresetsCombo"
- top_delta="-4"
- width="150" />
- <button
- height="23"
- label="New"
- label_selected="New"
- layout="topleft"
- left_pad="3"
- name="WaterNewPreset"
- top_delta="0"
- width="70" />
- <button
- height="23"
- label="Save"
- label_selected="Save"
- layout="topleft"
- left_pad="3"
- name="WaterSavePreset"
- top_delta="0"
- width="70" />
- <button
- height="23"
- label="Delete"
- label_selected="Delete"
- layout="topleft"
- left_pad="3"
- name="WaterDeletePreset"
- top_delta="0"
- width="70" />
- <tab_container
- border="false"
- follows="left|top"
- height="180"
- halign="center"
- layout="topleft"
- left="0"
- name="Water Tabs"
- tab_position="top"
- top="60"
- width="700">
- <panel
- border="true"
- follows="all"
- height="180"
- label="SETTINGS"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- help_topic="water_settings_tab"
- name="Settings"
- top="0"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="BHText"
- top="4"
- width="200">
- Water Fog Color
- </text>
- <color_swatch
- can_apply_immediately="true"
- color="0.5 0.5 0.5 1"
- follows="left|top"
- height="50"
- layout="topleft"
- left="40"
- name="WaterFogColor"
- tool_tip="Click to open color picker"
- top="30"
- width="40" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="WaterFogDensText"
- top="84"
- width="200">
- Fog Density Exponent
- </text>
- <slider
- control_name="WaterFogDensity"
- decimal_digits="1"
- follows="left"
- height="10"
- initial_value="16"
- layout="topleft"
- left="24"
- max_val="10"
- name="WaterFogDensity"
- top="124"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="WaterUnderWaterFogModText"
- top="124"
- width="200">
- Underwater Fog Modifier
- </text>
- <slider
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="16"
- layout="topleft"
- left="24"
- max_val="2"
- name="WaterUnderWaterFogMod"
- top="164"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="BDensText"
- top="4"
- width="200">
- Reflection Wavelet Scale
- </text>
- <slider
- control_name="WaterNormalScaleX"
- decimal_digits="1"
- follows="left"
- height="15"
- initial_value="0.7"
- label="1"
- layout="topleft"
- max_val="10"
- name="WaterNormalScaleX"
- top_pad="24"
- width="200" />
- <slider
- control_name="WaterNormalScaleY"
- decimal_digits="1"
- follows="left"
- height="15"
- initial_value="0.7"
- label="2"
- layout="topleft"
- max_val="10"
- name="WaterNormalScaleY"
- top_pad="4"
- width="200" />
- <slider
- control_name="WaterNormalScaleZ"
- decimal_digits="1"
- follows="left"
- height="15"
- initial_value="0.7"
- label="3"
- layout="topleft"
- max_val="10"
- name="WaterNormalScaleZ"
- top_pad="4"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- name="HDText"
- top="84"
- width="200">
- Fresnel Scale
- </text>
- <slider
- control_name="WaterFresnelScale"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- name="WaterFresnelScale"
- top="124"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- name="FresnelOffsetText"
- top="124"
- width="200">
- Fresnel Offset
- </text>
- <slider
- control_name="WaterFresnelOffset"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- name="WaterFresnelOffset"
- top="164"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="DensMultText"
- top="4"
- width="200">
- Refract Scale Above
- </text>
- <slider
- control_name="WaterScaleAbove"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.1"
- layout="topleft"
- left="494"
- name="WaterScaleAbove"
- top="44"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="WaterScaleBelowText"
- top="44"
- width="200">
- Refract Scale Below
- </text>
- <slider
- control_name="WaterScaleBelow"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0"
- layout="topleft"
- left="494"
- name="WaterScaleBelow"
- top="84"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="MaxAltText"
- top="84"
- width="200">
- Blur Multiplier
- </text>
- <slider
- control_name="WaterBlurMult"
- follows="left"
- height="10"
- increment="0.001"
- initial_value="0"
- layout="topleft"
- left="494"
- max_val="0.16"
- name="WaterBlurMult"
- top="124"
- width="200" />
- </panel>
- <panel
- border="true"
- follows="all"
- height="180"
- label="IMAGE"
- layout="topleft"
- left="0"
- mouse_opaque="false"
- help_topic="water_waves_tab"
- name="Waves"
- top="0"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="BHText"
- top="4"
- width="200">
- Big Wave Direction
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- name="WaterWave1DirXText"
- top_pad="5"
- width="10">
- X
- </text>
- <slider
- control_name="WaterWave1DirX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- max_val="4"
- min_val="-4"
- name="WaterWave1DirX"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WaterWave1DirYText"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WaterWave1DirY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- max_val="4"
- min_val="-4"
- name="WaterWave1DirY"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText2"
- top_pad="-10"
- width="355">
- Little Wave Direction
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- left_delta="0"
- name="WaterWave2DirXText"
- top_pad="5"
- width="10">
- X
- </text>
- <slider
- control_name="WaterWave2DirX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="24"
- max_val="4"
- min_val="-4"
- name="WaterWave2DirX"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WaterWave2DirYText"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WaterWave2DirY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- max_val="4"
- min_val="-4"
- name="WaterWave2DirY"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="240"
- name="BHText3"
- top="4"
- width="200">
- Normal Map
- </text>
- <texture_picker
- height="143"
- layout="topleft"
- left="250"
- name="WaterNormalMap"
- top="22"
- width="128" />
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml
index e04a72cbc0..0eda9ae62a 100644
--- a/indra/newview/skins/default/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/en/floater_web_content.xml
@@ -18,6 +18,7 @@
follows="left|right|top|bottom"
layout="topleft"
left="5"
+ animate="false"
name="stack1"
orientation="vertical"
top="20"
@@ -39,6 +40,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
hover_glow_amount="0.15"
tool_tip="Navigate back"
follows="left|top"
@@ -57,6 +59,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Navigate forward"
follows="left|top"
height="22"
@@ -74,6 +77,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Stop navigation"
enabled="true"
follows="left|top"
@@ -92,6 +96,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Reload page"
follows="left|top"
height="22"
@@ -136,6 +141,7 @@
image_disabled_selected="PushButton_Disabled"
image_selected="PushButton_Selected"
image_unselected="PushButton_Off"
+ chrome="true"
tool_tip="Open current URL in your desktop browser"
follows="right|top"
enabled="true"
@@ -156,14 +162,20 @@
name="external_controls"
top_delta="0"
user_resize="false"
+ auto_resize="true"
width="585">
<web_browser
- bottom="-22"
+ bottom="-2"
follows="all"
layout="topleft"
left="0"
name="webbrowser"
top="0"/>
+ </layout_panel>
+ <layout_panel name="status_bar"
+ height="23"
+ auto_resize="false"
+ user_resize="false">
<text
type="string"
length="200"
@@ -174,7 +186,7 @@
name="statusbartext"
parse_urls="false"
text_color="0.4 0.4 0.4 1"
- top_pad="5"
+ top_pad="3"
width="495"/>
<progress_bar
color_bar="0.3 1.0 0.3 1"
diff --git a/indra/newview/skins/default/xui/en/floater_windlight_options.xml b/indra/newview/skins/default/xui/en/floater_windlight_options.xml
deleted file mode 100644
index 7923dd87fa..0000000000
--- a/indra/newview/skins/default/xui/en/floater_windlight_options.xml
+++ /dev/null
@@ -1,1288 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- height="256"
- layout="topleft"
- name="WindLight floater"
- help_topic="windlight_floater"
- save_rect="true"
- title="ADVANCED SKY EDITOR"
- width="700">
- <floater.string
- name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </floater.string>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="KeyFramePresetsText"
- top="34"
- width="135">
- Sky Presets:
- </text>
- <combo_box
- height="23"
- layout="topleft"
- left_delta="135"
- name="WLPresetsCombo"
- top_delta="-4"
- width="150" />
- <button
- height="23"
- label="New"
- label_selected="New"
- layout="topleft"
- left_pad="3"
- name="WLNewPreset"
- width="70" />
- <button
- height="23"
- label="Save"
- label_selected="Save"
- layout="topleft"
- left_pad="3"
- name="WLSavePreset"
- width="70" />
- <button
- height="23"
- label="Delete"
- label_selected="Delete"
- layout="topleft"
- left_pad="3"
- name="WLDeletePreset"
- width="70" />
- <button
- height="23"
- label="Day Cycle Editor"
- label_selected="Day Cycle Editor"
- layout="topleft"
- right="-10"
- name="WLDayCycleMenuButton"
- top_pad="-23"
- width="120" />
- <tab_container
- follows="left|top"
- height="196"
- halign="center"
- layout="topleft"
- left="0"
- name="WindLight Tabs"
- tab_position="top"
- top="60"
- width="700">
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="196"
- label="ATMOSPHERE"
- layout="topleft"
- left="1"
- mouse_opaque="false"
- help_topic="windlight_atmosphere_tab"
- name="Atmosphere"
- top="60"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="BHText"
- top="4"
- width="355">
- Blue Horizon
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- name="BHText2"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLBlueHorizonR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLBlueHorizonR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="10"
- top_pad="-15"
- name="BHText3"
- width="10">
- G
- </text>
- <slider
- control_name="WLBlueHorizonG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueHorizonG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- name="BHText4"
- left="10"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLBlueHorizonB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- name="WLBlueHorizonB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- name="BHText5"
- left="10"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLBlueHorizonI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- name="WLBlueHorizonI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- top_pad="-10"
- name="BDensText"
- width="355">
- Haze Horizon
- </text>
- <slider
- control_name="WLHazeHorizon"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.25"
- layout="topleft"
- left="23"
- top_delta="0"
- top_pad="27"
- name="WLHazeHorizon"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="BDensText2"
- top="4"
- width="355">
- Blue Density
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText6"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLBlueDensityR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLBlueDensityR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText7"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLBlueDensityG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueDensityG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText8"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLBlueDensityB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLBlueDensityB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left="245"
- name="BHText9"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLBlueDensityI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1"
- layout="topleft"
- left_delta="0"
- name="WLBlueDensityI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="HDText"
- top_pad="-10"
- width="355">
- Haze Density
- </text>
- <slider
- control_name="WLHazeDensity"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left="258"
- max_val="4"
- name="WLHazeDensity"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="DensMultText"
- top="4"
- width="355">
- Density Multiplier
- </text>
- <slider
- control_name="WLDensityMult"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.1"
- layout="topleft"
- left_delta="13"
- max_val="0.9"
- name="WLDensityMult"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLDistanceMultText"
- top_pad="-10"
- width="355">
- Distance Multiplier
- </text>
- <slider
- control_name="WLDistancMult"
- decimal_digits="1"
- follows="left"
- height="10"
- initial_value="1.0"
- layout="topleft"
- left_delta="13"
- max_val="100"
- name="WLDistanceMult"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="MaxAltText"
- top_pad="-15"
- width="355">
- Max Altitude
- </text>
- <slider
- control_name="WLMaxAltitude"
- decimal_digits="0"
- follows="left"
- height="10"
- increment="1"
- initial_value="500"
- layout="topleft"
- left_delta="13"
- max_val="4000"
- name="WLMaxAltitude"
- top_pad="27"
- width="200" />
- </panel>
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="196"
- label="LIGHTING"
- layout="topleft"
- left_delta="0"
- help_topic="windlight_lighting_tab"
- name="Lighting"
- top_delta="4"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="SLCText"
- top="4"
- width="355">
- Sun/Moon Color
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLSunlightR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLSunlightR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText2"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLSunlightG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLSunlightG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText3"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLSunlightB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLSunlightB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText4"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLSunlightI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLSunlightI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="TODText"
- top_pad="-10"
- width="355">
- Sun/Moon Position
- </text>
- <icon
- height="20"
- image_name="icon_diurnal.tga"
- layout="topleft"
- left_delta="14"
- top_pad="10"
- name="SkyDayCycle"
- use_draw_context_alpha="false"
- width="148" />
- <slider
- control_name="WLSunAngle"
- follows="left"
- height="10"
- increment="0.001"
- initial_value="0.7"
- layout="topleft"
- left_delta="-8"
- name="WLSunAngle"
- top_pad="20"
- width="207" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="WLAmbientText"
- top="4"
- width="355">
- Ambient
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText5"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLAmbientR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLAmbientR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText6"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLAmbientG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLAmbientG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText7"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLAmbientB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLAmbientB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText8"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLAmbientI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1"
- layout="topleft"
- left_delta="0"
- name="WLAmbientI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLEastAngleText"
- top_pad="-10"
- width="355">
- East Angle
- </text>
- <slider
- control_name="WLEastAngle"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.0"
- layout="topleft"
- left_delta="13"
- name="WLEastAngle"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="SunGlowText"
- top="4"
- width="355">
- Sun Glow
- </text>
- <slider
- control_name="WLGlowB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.1"
- label="Focus "
- layout="topleft"
- left_delta="0"
- max_val="0.5"
- name="WLGlowB"
- top_pad="27"
- width="200" />
- <slider
- control_name="WLGlowR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.25"
- label="Size "
- layout="topleft"
- left_delta="0"
- max_val="1.99"
- min_val="1"
- name="WLGlowR"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="0"
- name="SceneGammaText"
- top_pad="-10"
- width="200">
- Scene Gamma
- </text>
- <slider
- control_name="WLGamma"
- decimal_digits="2"
- follows="bottom"
- height="10"
- increment="0.01"
- initial_value="2.0"
- layout="topleft"
- left_delta="0"
- max_val="10"
- name="WLGamma"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="0"
- name="WLStarText"
- top_pad="-10"
- width="355">
- Star Brightness
- </text>
- <slider
- control_name="WLStarAlpha"
- decimal_digits="2"
- follows="bottom"
- height="10"
- increment="0.01"
- initial_value="0"
- layout="topleft"
- left_delta="0"
- max_val="2"
- name="WLStarAlpha"
- top_pad="27"
- width="200" />
- </panel>
- <panel
- border="true"
- follows="left|top|right|bottom"
- height="196"
- label="CLOUDS"
- layout="topleft"
- left_delta="0"
- mouse_opaque="false"
- help_topic="windlight_clouds_tab"
- name="Clouds"
- top_delta="4"
- width="698">
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="10"
- name="WLCloudColorText"
- top="4"
- width="355">
- Cloud Color
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText"
- top_pad="5"
- width="10">
- R
- </text>
- <slider
- control_name="WLCloudColorR"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLCloudColorR"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText2"
- top_pad="-15"
- width="10">
- G
- </text>
- <slider
- control_name="WLCloudColorG"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLCloudColorG"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText3"
- top_pad="-15"
- width="10">
- B
- </text>
- <slider
- control_name="WLCloudColorB"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.7"
- layout="topleft"
- left_delta="0"
- name="WLCloudColorB"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText4"
- top_pad="-15"
- width="10">
- I
- </text>
- <slider
- control_name="WLCloudColorI"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLCloudColorI"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLCloudColorText2"
- top_pad="-10"
- width="355">
- Cloud XY/Density
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText5"
- top_pad="5"
- width="10">
- X
- </text>
- <slider
- control_name="WLCloudX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLCloudX"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText6"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WLCloudY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="3"
- top_pad="6"
- name="WLCloudY"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText7"
- top_pad="-15"
- width="10">
- D
- </text>
- <slider
- control_name="WLCloudDensity"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLCloudDensity"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="245"
- name="WLCloudCoverageText"
- top="4"
- width="355">
- Cloud Coverage
- </text>
- <slider
- control_name="WLCloudCoverage"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_delta="13"
- name="WLCloudCoverage"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLCloudScaleText"
- top_pad="-10"
- width="355">
- Cloud Scale
- </text>
- <slider
- control_name="WLCloudScale"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="13"
- min_val="0.01"
- name="WLCloudScale"
- top_pad="27"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="WLCloudDetailText"
- top_pad="-10"
- width="355">
- Cloud Detail (XY/Density)
- </text>
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="0"
- name="BHText8"
- top_pad="8"
- width="10">
- X
- </text>
- <slider
- control_name="WLCloudDetailX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_pad="3"
- top_pad="8"
- name="WLCloudDetailX"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText9"
- top_pad="-15"
- width="10">
- Y
- </text>
- <slider
- control_name="WLCloudDetailY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left_delta="0"
- name="WLCloudDetailY"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- halign="center"
- height="16"
- layout="topleft"
- left_delta="-13"
- name="BHText10"
- top_pad="-15"
- width="10">
- D
- </text>
- <slider
- control_name="WLCloudDetailDensity"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="1.0"
- layout="topleft"
- left_delta="0"
- name="WLCloudDetailDensity"
- left_pad="3"
- top_pad="6"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left="480"
- name="WLCloudScrollXText"
- top="4"
- width="355">
- Cloud Scroll X
- </text>
- <check_box
- control_name="WLCloudLockX"
- follows="left"
- height="16"
- label="Lock"
- layout="topleft"
- left="625"
- name="WLCloudLockX"
- width="200" />
- <slider
- control_name="WLCloudScrollX"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left="494"
- max_val="10"
- min_val="-10"
- name="WLCloudScrollX"
- top="45"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-14"
- name="WLCloudScrollYText"
- top_delta="-1"
- width="355">
- Cloud Scroll Y
- </text>
- <check_box
- control_name="WLCloudLockY"
- follows="left"
- height="16"
- label="Lock"
- layout="topleft"
- left="625"
- name="WLCloudLockY"
- width="200" />
- <slider
- control_name="WLCloudScrollY"
- decimal_digits="2"
- follows="left"
- height="10"
- increment="0.01"
- initial_value="0.5"
- layout="topleft"
- left="494"
- max_val="10"
- min_val="-10"
- name="WLCloudScrollY"
- top="85"
- width="200" />
- <check_box
- control_name="DrawClassicClouds"
- follows="left"
- height="16"
- label="Draw Classic Clouds"
- layout="topleft"
- left="480"
- name="DrawClassicClouds"
- top="104"
- width="200" />
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
index bd9e367d1f..bc3bcd331b 100644
--- a/indra/newview/skins/default/xui/en/inspect_avatar.xml
+++ b/indra/newview/skins/default/xui/en/inspect_avatar.xml
@@ -38,6 +38,7 @@
height="20"
left="8"
name="user_name_small"
+ parse_urls="false"
top="7"
text_color="White"
translate="false"
@@ -52,6 +53,7 @@
height="21"
left="8"
name="user_name"
+ parse_urls="false"
top="10"
text_color="White"
translate="false"
@@ -64,6 +66,7 @@
left="8"
name="user_slid"
font="SansSerifSmallBold"
+ parse_urls="false"
text_color="EmphasisColor"
translate="false"
value="teststring.pleaseignore"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index 3ead67ca57..a7d1aa963c 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -135,6 +135,14 @@
name="login_panel_holder"
width="1024"/>
+ <debug_view follows="all"
+ left="0"
+ top="0"
+ mouse_opaque="false"
+ height="500"
+ name="DebugView"
+ width="1024"/>
+
<panel follows="all"
height="500"
left="0"
@@ -154,13 +162,6 @@
top="0"
width="1024"/>
</panel>
- <debug_view follows="all"
- left="0"
- top="0"
- mouse_opaque="false"
- height="500"
- name="DebugView"
- width="1024"/>
</layout_panel>
</layout_stack>
<panel mouse_opaque="false"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index b36b82ebd8..0f42000ae7 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -42,7 +42,7 @@
<menu_item_call.on_enable
function="File.EnableUpload" />
</menu_item_call>
- <menu_item_call
+ <menu_item_call
label="Model..."
layout="topleft"
name="Upload Model">
@@ -54,18 +54,6 @@
<menu_item_call.on_visible
function="File.VisibleUploadModel"/>
</menu_item_call>
- <menu_item_call
- label="Model Wizard..."
- layout="topleft"
- name="Upload Model Wizard">
- <menu_item_call.on_click
- function="Floater.Show"
- parameter="upload_model_wizard" />
- <menu_item_call.on_enable
- function="File.EnableUploadModel" />
- <menu_item_call.on_visible
- function="File.VisibleUploadModel"/>
- </menu_item_call>
<menu_item_call
label="Bulk (L$[COST] per file)..."
layout="topleft"
@@ -263,4 +251,4 @@
parameter="eyes" />
</menu_item_call>
</menu>
-</menu>
+</menu> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
index c39c26f25f..960da4bd7a 100644
--- a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
+++ b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
@@ -28,4 +28,16 @@
<menu_item_call.on_enable
function="Edit.EnablePaste" />
</menu_item_call>
+ <menu_item_separator
+ layout="topleft"
+ name="debug_separator"
+ visible="false" />
+ <menu_item_call
+ label="Open Web Inspector"
+ layout="topleft"
+ name="open_webinspector"
+ visible="false">
+ <menu_item_call.on_click
+ function="Open.WebInspector" />
+ </menu_item_call>
</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_mode_change.xml b/indra/newview/skins/default/xui/en/menu_mode_change.xml
new file mode 100644
index 0000000000..87d1a0a7a2
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_mode_change.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ name="Mode Change">
+ <menu_item_check
+ label="Basic"
+ name="BasicMode">
+ <on_check
+ function="CheckSessionSettings"
+ parameter="settings_minimal.xml" />
+ <on_click
+ function="ChangeMode"
+ parameter="basic"/>
+ </menu_item_check>
+ <menu_item_check
+ label="Advanced"
+ name="AdvancedMode">
+ <on_check
+ function="CheckSessionSettings"
+ parameter="" />
+ <on_click
+ function="ChangeMode"
+ parameter="advanced"/>
+ </menu_item_check>
+ </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 81046e99a0..36ebe73753 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -232,6 +232,16 @@
function="SideTray.PanelPeopleTab"
parameter="nearby_panel" />
</menu_item_call>
+ <menu_item_check
+ label="Nearby Voice"
+ name="Nearby Voice">
+ <menu_item_check.on_check
+ function="Floater.Visible"
+ parameter="voice_controls" />
+ <menu_item_check.on_click
+ function="Floater.Toggle"
+ parameter="voice_controls" />
+ </menu_item_check>
</menu>
<menu
create_jump_keys="true"
@@ -470,7 +480,7 @@
<menu_item_separator/>
- <menu
+ <menu
create_jump_keys="true"
label="Sun"
name="Environment Settings"
@@ -505,24 +515,114 @@
function="World.EnvSettings"
parameter="midnight" />
</menu_item_call>
- <menu_item_call
- label="Estate Time"
- name="Revert to Region Default">
- <menu_item_call.on_click
- function="World.EnvSettings"
- parameter="default" />
- </menu_item_call>
-
- <menu_item_separator/>
-
- <menu_item_call
- label="Environment Editor"
- name="Environment Editor">
- <menu_item_call.on_click
- function="World.EnvSettings"
- parameter="editor" />
- </menu_item_call>
</menu>
+
+
+ <menu
+ create_jump_keys="true"
+ label="Enviroment Editor"
+ name="Enviroment Editor"
+ tear_off="true">
+
+ <menu_item_call
+ label="Enviroment Settings..."
+ name="Enviroment Settings">
+ <menu_item_call.on_click
+ function="World.EnvSettings"
+ parameter="editor"/>
+ </menu_item_call>
+
+ <menu_item_separator/>
+
+ <menu
+ name="Water Presets"
+ label="Water Presets">
+ <menu_item_call
+ label="New preset..."
+ name="new_water_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="new_water"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Edit preset..."
+ name="edit_water_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="edit_water"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Delete preset..."
+ name="delete_water_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="delete_water"/>
+ <menu_item_call.on_enable
+ function="World.EnableEnvPreset"
+ parameter="delete_water"/>
+ </menu_item_call>
+ </menu>
+
+ <menu
+ name="Sky Presets"
+ label="Sky Presets">
+ <menu_item_call
+ label="New preset..."
+ name="new_sky_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="new_sky"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Edit preset..."
+ name="edit_sky_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="edit_sky"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Delete preset..."
+ name="delete_sky_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="delete_sky"/>
+ <menu_item_call.on_enable
+ function="World.EnableEnvPreset"
+ parameter="delete_sky"/>
+ </menu_item_call>
+ </menu>
+
+ <menu
+ name="Day Presets"
+ label="Day Presets">
+ <menu_item_call
+ label="New preset..."
+ name="new_day_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="new_day_cycle"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Edit preset..."
+ name="edit_day_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="edit_day_cycle"/>
+ </menu_item_call>
+ <menu_item_call
+ label="Delete preset..."
+ name="delete_day_preset">
+ <menu_item_call.on_click
+ function="World.EnvPreset"
+ parameter="delete_day_cycle"/>
+ <menu_item_call.on_enable
+ function="World.EnableEnvPreset"
+ parameter="delete_day_cycle"/>
+ </menu_item_call>
+ </menu>
+ </menu>
+
+
</menu>
<menu
create_jump_keys="true"
@@ -983,19 +1083,7 @@
<menu_item_call.on_visible
function="File.VisibleUploadModel"/>
</menu_item_call>
- <menu_item_call
- label="Model Wizard..."
- layout="topleft"
- name="Upload Model Wizard">
- <menu_item_call.on_click
- function="Floater.Show"
- parameter="upload_model_wizard" />
- <menu_item_call.on_enable
- function="File.EnableUploadModel" />
- <menu_item_call.on_visible
- function="File.VisibleUploadModel"/>
- </menu_item_call>
- <menu_item_call
+ <menu_item_call
label="Bulk (L$[COST] per file)..."
layout="topleft"
name="Bulk Upload">
@@ -1162,16 +1250,6 @@
function="ToggleControl"
parameter="QuietSnapshotsToDisk" />
</menu_item_check>
- <menu_item_check
- label="Compress Snapshots to Disk"
- name="CompressSnapshotsToDisk">
- <menu_item_check.on_check
- function="CheckControl"
- parameter="CompressSnapshotsToDisk" />
- <menu_item_check.on_click
- function="ToggleControl"
- parameter="CompressSnapshotsToDisk" />
- </menu_item_check>
<menu_item_separator/>
@@ -1997,15 +2075,14 @@
</menu_item_check>
<menu_item_check
label="Show Upload Cost"
- layout="topleft"
name="Show Upload Cost">
- <menu_item_check.on_check
+ <menu_item_check.on_check
function="CheckControl"
parameter="DebugShowUploadCost" />
<menu_item_check.on_click
- function="ToggleControl"
- parameter="DebugShowUploadCost" />
- </menu_item_check>
+ function="ToggleControl"
+ parameter="DebugShowUploadCost" />
+ </menu_item_check>
<menu_item_check
label="Show Render Info"
name="Show Render Info">
@@ -2016,7 +2093,7 @@
function="ToggleControl"
parameter="DebugShowRenderInfo" />
</menu_item_check>
- <menu_item_check
+ <menu_item_check
label="Show Texture Info"
name="Show Texture Info">
<menu_item_check.on_check
@@ -2056,6 +2133,16 @@
function="ToggleControl"
parameter="DebugShowMemory" />
</menu_item_check>
+ <menu_item_check
+ label="Show Private Mem Info"
+ name="Show Private Mem Info">
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="DebugShowPrivateMem" />
+ <menu_item_check.on_click
+ function="ToggleControl"
+ parameter="DebugShowPrivateMem" />
+ </menu_item_check>
<menu_item_separator/>
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
index 0ac2c14253..0e858ccf10 100644
--- a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
@@ -20,4 +20,11 @@
function="Gear.OnEnable"
parameter="take_off" />
</menu_item_call>
+ <menu_item_call
+ label="Copy outfit list to clipboard"
+ layout="topleft"
+ name="copy">
+ <on_click
+ function="Gear.Copy" />
+ </menu_item_call>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 09105c1d28..99ab56d10a 100755..100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3698,6 +3698,19 @@ Join me in [REGION]
<notification
icon="alertmodal.tga"
+ name="TooManyTeleportOffers"
+ type="alertmodal">
+You attempted to make [OFFERS] teleport offers
+which exceeds the limit of [LIMIT].
+ <tag>group</tag>
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="OfferTeleportFromGod"
type="alertmodal">
God summon Resident to your location?
@@ -4841,18 +4854,6 @@ Do you wish to overwrite the saved preset?
<notification
icon="alertmodal.tga"
- name="WLDeletePresetAlert"
- type="alertmodal">
-Do you wish to delete [SKY]?
- <tag>confirm</tag>
- <usetemplate
- name="okcancelbuttons"
- notext="No"
- yestext="Yes"/>
- </notification>
-
- <notification
- icon="alertmodal.tga"
name="WLNoEditDefault"
type="alertmodal">
You cannot edit or delete a default preset.
@@ -4869,81 +4870,53 @@ This day cycle file references a missing sky file: [SKY].
<notification
icon="alertmodal.tga"
- name="PPSaveEffectAlert"
+ name="WLRegionApplyFail"
type="alertmodal">
-PostProcess Effect exists. Do you still wish overwrite it?
- <usetemplate
- name="okcancelbuttons"
- notext="No"
- yestext="Yes"/>
- </notification>
-
- <notification
- icon="alert.tga"
- name="NewSkyPreset"
- type="alert">
-Give me a name for the new sky.
- <tag>confirm</tag>
- <form name="form">
- <input name="message" type="text">
-New Preset
- </input>
- <button
- default="true"
- index="0"
- name="OK"
- text="OK"/>
- <button
- index="1"
- name="Cancel"
- text="Cancel"/>
- </form>
+Sorry, the settings couldn't be applied to the region. Leaving the region and then returning may help rectify the problem. The reason given was: [FAIL_REASON]
</notification>
<notification
+ functor="GenericAcknowledge"
icon="alertmodal.tga"
- name="ExistsSkyPresetAlert"
+ name="EnvCannotDeleteLastDayCycleKey"
type="alertmodal">
-Preset already exists!
- <tag>fail</tag>
+Unable to delete the last key in this day cycle because you cannot have an empty day cycle. You should modify the last remaining key instead of attempting to delete it and then to create a new one.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
- icon="alert.tga"
- name="NewWaterPreset"
- type="alert">
-Give me a name for the new water preset.
- <tag>confirm</tag>
- <form name="form">
- <input name="message" type="text">
-New Preset
- </input>
- <button
- default="true"
- index="0"
- name="OK"
- text="OK"/>
- <button
- index="1"
- name="Cancel"
- text="Cancel"/>
- </form>
+ functor="GenericAcknowledge"
+ icon="alertmodal.tga"
+ name="DayCycleTooManyKeyframes"
+ type="alertmodal">
+You cannot add any more keyframes to this day cycle. The maximum number of keyframes for day cycles of [SCOPE] scope is [MAX].
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
+ functor="GenericAcknowledge"
icon="alertmodal.tga"
- name="ExistsWaterPresetAlert"
+ name="EnvUpdateRate"
type="alertmodal">
-Preset already exists!
- <tag>fail</tag>
+ You may only update region environmental settings every [WAIT] seconds. Wait at least that long and then try again.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
- name="WaterNoEditDefault"
+ name="PPSaveEffectAlert"
type="alertmodal">
-You cannot edit or delete a default preset.
- <tag>fail</tag>
+PostProcess Effect exists. Do you still wish overwrite it?
+ <usetemplate
+ name="okcancelbuttons"
+ notext="No"
+ yestext="Yes"/>
</notification>
<notification
@@ -5018,19 +4991,19 @@ Would you like to automatically wear the clothing you are about to create?
name="NotAgeVerified"
type="alertmodal">
<tag>fail</tag>
-You must be age-verified to visit this area. Do you want to go to the [SECOND_LIFE] website and verify your age?
+To access adult content and areas in Second Life you must be at least 18 years old. Please visit our age verification page to confirm you are over 18.
+Note this will launch your web browser.
[_URL]
<tag>confirm</tag>
<url option="0" name="url">
-
- https://secondlife.com/account/verification.php
+ https://secondlife.com/my/account/verification.php
</url>
<usetemplate
ignoretext="I have not verified my age"
name="okcancelignore"
- notext="No"
- yestext="Yes"/>
+ notext="Cancel"
+ yestext="Go to Age Verification"/>
</notification>
<notification
@@ -5116,7 +5089,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
name="FriendOnline"
type="notifytip">
<tag>friendship</tag>
-[NAME] is Online
+&lt;nolink&gt;[NAME]&lt;/nolink&gt; is Online
</notification>
<notification
@@ -5124,7 +5097,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
name="FriendOffline"
type="notifytip">
<tag>friendship</tag>
-[NAME] is Offline
+&lt;nolink&gt;[NAME]&lt;/nolink&gt; is Offline
</notification>
<notification
@@ -5655,6 +5628,15 @@ This area has building disabled. You can&apos;t build or rez objects here.
<notification
icon="notify.tga"
+ name="SeeAvatars"
+ persist="true"
+ type="notify"
+ unique="true">
+This parcel hides avatars and text chat from another parcel. You can&apos;t see other residents outside the parcel, and those outside are not able to see you. Regular text chat on channel 0 is also blocked.
+ </notification>
+
+ <notification
+ icon="notify.tga"
name="ScriptsStopped"
persist="true"
type="notify">
@@ -5921,7 +5903,7 @@ No valid parcel could be found.
name="ObjectGiveItem"
type="offer">
An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] has given you this [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button
index="0"
@@ -6279,6 +6261,10 @@ Grant this request?
[MESSAGE]
<form name="form">
<button
+ index="-2"
+ name="Mute"
+ text="Block"/>
+ <button
index="-1"
name="Ignore"
text="Ignore"/>
@@ -6294,6 +6280,10 @@ Grant this request?
[MESSAGE]
<form name="form">
<button
+ index="-2"
+ name="Mute"
+ text="Block"/>
+ <button
index="-1"
name="Ignore"
text="Ignore"/>
@@ -6828,6 +6818,20 @@ Select residents to share with.
See the log file for details.
</notification>
+ <notification
+ name="MeshUploadPermError"
+ icon="alert.tga"
+ type="alert">
+ Error while requesting mesh upload permissons.
+ </notification>
+
+ <notification
+ name="RegionCapabilityRequestError"
+ icon="alert.tga"
+ type="alert">
+ Could not get region capability &apos;[CAPABILITY]&apos;.
+ </notification>
+
<notification
icon="notifytip.tga"
name="ShareItemsConfirmation"
@@ -6838,7 +6842,7 @@ Are you sure you want to share the following items:
With the following Residents:
-[RESIDENTS]
+&lt;nolink&gt;[RESIDENTS]&lt;/nolink&gt;
<tag>confirm</tag>
<usetemplate
name="okcancelbuttons"
@@ -7143,6 +7147,20 @@ Click and drag anywhere on the world to rotate your view
<tag>funds</tag>
</notification>
+ <notification
+ icon="alertmodal.tga"
+ name="LowMemory"
+ type="alertmodal">
+ Your memory pool is low. Some functions of SL are disabled to avoid crash. Please close other applications. Restart SL if this persists.
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="ForceQuitDueToLowMemory"
+ type="alertmodal">
+ SL will quit in 30 seconds due to out of memory.
+ </notification>
+
<notification
name="PopupAttempt"
icon="Popup_Caution"
@@ -7161,6 +7179,138 @@ Click and drag anywhere on the world to rotate your view
</notification>
<notification
+ icon="alertmodal.tga"
+ name="SOCKS_NOT_PERMITTED"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the connection, not allowed by rule set.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_CONNECT_ERROR"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the connection, could not open TCP channel.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_NOT_ACCEPTABLE"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the selected authentication system.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_AUTH_FAIL"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" reported your credentials are invalid.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_UDP_FWD_NOT_GRANTED"
+ type="alertmodal">
+ The SOCKS 5 proxy "[HOST]:[PORT]" refused the UDP associate request.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_HOST_CONNECT_FAILED"
+ type="alertmodal">
+ Could not connect to SOCKS 5 proxy server "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_UNKNOWN_STATUS"
+ type="alertmodal">
+ Unknown proxy error with server "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_INVALID_HOST"
+ type="alertmodal">
+ Invalid SOCKS proxy address or port "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="SOCKS_BAD_CREDS"
+ type="alertmodal">
+ Invalid SOCKS 5 username or password.
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PROXY_INVALID_HTTP_HOST"
+ type="alertmodal">
+ Invalid HTTP proxy address or port "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="PROXY_INVALID_SOCKS_HOST"
+ type="alertmodal">
+ Invalid SOCKS proxy address or port "[HOST]:[PORT]".
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="ChangeProxySettings"
+ type="alert">
+ Proxy settings take effect after you restart [APP_NAME].
+ <tag>fail</tag>
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
name="AuthRequest"
type="browser">
The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;[REALM]&apos; requires a user name and password.
diff --git a/indra/newview/skins/default/xui/en/panel_activeim_row.xml b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
index 1d8bfa0672..9369d1b5cf 100644
--- a/indra/newview/skins/default/xui/en/panel_activeim_row.xml
+++ b/indra/newview/skins/default/xui/en/panel_activeim_row.xml
@@ -75,6 +75,7 @@
width="250"
length="1"
follows="right|left"
+ parse_urls="false"
use_ellipses="true"
font="SansSerifBold">
TestString PleaseIgnore
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
index e40dc430fc..b7c58eb6ab 100644
--- a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
@@ -60,6 +60,7 @@
layout="topleft"
left_pad="5"
name="avatar_name"
+ parse_urls="false"
top="6"
use_ellipses="true"
value="(loading)"
diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
index 9e70706603..beea53437a 100644
--- a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
+++ b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
@@ -52,7 +52,7 @@
multi_select="true"
name="list_attachments"
top="0"
- width="311"/>
+ width="311" />
</accordion_tab>
<accordion_tab
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
index 82dfb445da..2ec2e03e8c 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
@@ -220,7 +220,7 @@
height="23"
layout="topleft"
left_pad="4"
- name="layout_panel1"
+ name="layout_panel2"
user_resize="false"
auto_resize="true"
width="146">
diff --git a/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml
new file mode 100644
index 0000000000..d06190ec54
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_inventory_panel
+ name="inventory_inbox"
+ start_folder="Received Items"
+ follows="all" layout="topleft"
+ top="0" left="0" height="165" width="308"
+ top_pad="0"
+ bg_opaque_color="DkGray2"
+ bg_alpha_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ border="false"
+ bevel_style="none"
+ show_item_link_overlays="true"
+ >
+ <scroll reserve_scroll_corner="false" />
+</inbox_inventory_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
index 46c1add739..4251128714 100644
--- a/indra/newview/skins/default/xui/en/panel_instant_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml
@@ -63,6 +63,7 @@
layout="topleft"
left_pad="5"
name="user_name"
+ parse_urls="false"
text_color="white"
top="8"
translate="false"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 8d0f1437e6..983f93cb03 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -117,7 +117,7 @@ label="Remember password"
name="connect_btn"
top="35"
width="90" />
- <text
+ <text
follows="left|bottom"
font="SansSerifSmall"
height="15"
@@ -125,25 +125,25 @@ label="Remember password"
name="mode_selection_text"
top="20"
width="130">
- Mode:
- </text>
-<combo_box
- follows="left|bottom"
+ Mode:
+ </text>
+ <combo_box
+ follows="left|bottom"
height="23"
- max_chars="128"
+ max_chars="128"
tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
- top_pad="0"
- name="mode_combo"
- width="110">
-<combo_box.item
- label="Basic"
- name="Basic"
- value="settings_minimal.xml" />
-<combo_box.item
- label="Advanced"
- name="Advanced"
- value="" />
-</combo_box>
+ top_pad="0"
+ name="mode_combo"
+ width="110">
+ <combo_box.item
+ label="Basic"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced"
+ name="Advanced"
+ value="" />
+ </combo_box>
<text
follows="left|bottom"
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
index 8a7bd53054..9749b6fdd4 100644
--- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
@@ -97,7 +97,7 @@
mouse_opaque="false"
name="location_combo"
top_delta="0"
- width="266">
+ width="226">
<combo_list
mouse_wheel_opaque="true"/>
<!-- *TODO: Delete. Let the location_input use the correct art sizes.
@@ -137,7 +137,7 @@
name="search_combo_box"
tool_tip="Search"
top_delta="0"
- width="200" >
+ width="244" >
<combo_editor
label="Search [SECOND_LIFE]"
name="search_combo_editor"/>
diff --git a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
new file mode 100644
index 0000000000..af32056428
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inventory_panel
+ name="inventory_outbox"
+ start_folder="Outbox"
+ follows="all" layout="topleft"
+ top="0" left="0" height="165" width="308"
+ top_pad="0"
+ bg_opaque_color="DkGray2"
+ bg_alpha_color="DkGray2"
+ background_visible="true"
+ background_opaque="true"
+ border="false"
+ bevel_style="none"
+ show_item_link_overlays="true"
+ >
+ <scroll reserve_scroll_corner="false" />
+</inventory_panel>
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
index 9f98019c94..a0096adc01 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
@@ -14,9 +14,7 @@
background_visible="true"
bg_alpha_color="DkGray2"
bg_opaque_color="DkGray2"
- no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
- no_matched_tabs_text.v_pad="10"
- no_visible_tabs_text.value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"
+
follows="all"
height="400"
layout="topleft"
@@ -24,6 +22,13 @@
name="outfits_accordion"
top="0"
width="309">
+ <no_matched_tabs_text
+ name="no_matched_outfits_msg"
+ value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]."
+ v_pad="10"/>
+ <no_visible_tabs_text
+ name="no_outfits_msg"
+ value="You don't have any outfits yet. Try [secondlife:///app/search/all/ Search]"/>
</accordion>
<panel
background_visible="true"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 775805ad2e..cc4522f944 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -110,8 +110,9 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<layout_panel
height="142"
layout="topleft"
+ min_dim="100"
mouse_opaque="false"
- user_resize="false"
+ user_resize="true"
visibility_control="NearbyListShowMap"
width="313">
<net_map
@@ -128,9 +129,9 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<layout_panel
height="213"
layout="topleft"
- min_height="100"
+ min_dim="100"
mouse_opaque="false"
- user_resize="false"
+ user_resize="true"
width="313">
<avatar_list
allow_select="true"
@@ -621,7 +622,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="im_btn_lp"
user_resize="false"
auto_resize="true"
width="41">
@@ -642,7 +643,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="call_btn_lp"
user_resize="false"
auto_resize="true"
width="52">
@@ -663,7 +664,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="share_btn_lp"
user_resize="false"
auto_resize="true"
width="66">
@@ -684,7 +685,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="teleport_btn_lp"
user_resize="false"
auto_resize="true"
width="77">
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index 774a9e8bbf..e280115bda 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -153,6 +153,14 @@
name="icon_DamageNo"
translate="false"
value="Parcel_DamageNo_Dark" />
+ <string
+ name="icon_SeeAVs_Off"
+ translate="false"
+ value="Parcel_SeeAVsOff_Dark" />
+ <string
+ name="icon_SeeAVs_On"
+ translate="false"
+ value="Parcel_SeeAVsOn_Dark" />
<button
follows="top|left"
height="24"
@@ -354,7 +362,7 @@
title="Parcel">
<panel
follows="all"
- height="175"
+ height="200"
layout="topleft"
left="0"
name="parcel_characteristics_panel"
@@ -543,6 +551,31 @@
top_delta="0"
value="Off"
width="60" />
+ <icon
+ follows="top|left"
+ height="18"
+ image_name="Parcel_SeeAVsOff_Dark"
+ layout="topleft"
+ left="10"
+ name="see_avatars_icon"
+ top_pad="7"
+ width="22" />
+ <text
+ follows="left|top"
+ height="14"
+ layout="topleft"
+ left_pad="8"
+ name="see_avatars_label"
+ value="See Avatars:"
+ width="90" />
+ <text
+ follows="left|top"
+ height="14"
+ layout="topleft"
+ left_pad="0"
+ name="see_avatars_value"
+ value="Off"
+ width="60" />
<button
follows="bottom|right"
height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
index daf571297f..b6b8a337a1 100644
--- a/indra/newview/skins/default/xui/en/panel_places.xml
+++ b/indra/newview/skins/default/xui/en/panel_places.xml
@@ -234,7 +234,7 @@ background_visible="true"
height="23"
layout="topleft"
mouse_opaque="false"
- name="bottom_bar_ls3"
+ name="bottom_bar_profile_ls"
left="0"
orientation="horizontal"
top="0"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 30be5bc853..47236c1a48 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -139,7 +139,7 @@
height="16"
label="Add datestamp to log file name."
layout="topleft"
- left_detla="5"
+ left_delta="5"
name="logfile_name_datestamp"
top_pad="10"
width="350"/>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 1c22a5c02e..a7078ce2e1 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -70,7 +70,7 @@
layout="topleft"
left="77"
name="connection_port_enabled"
- top_pad="20"
+ top_pad="10"
width="256">
<check_box.commit_callback
function="Notification.Show"
@@ -79,7 +79,7 @@
<spinner
control_name="ConnectionPort"
enabled_control="ConnectionPortEnabled"
- decimal_digits="0"
+ decimal_digits="0"
follows="left|top"
height="23"
increment="1"
@@ -195,60 +195,6 @@
name="media_popup_enabled"
width="400"
top_pad="5"/>
- <check_box
- top_delta="4"
- enabled="true"
- follows="left|top"
- height="14"
- initial_value="false"
- control_name="BrowserProxyEnabled"
- label="Enable Web Proxy"
- left_delta="0"
- mouse_opaque="true"
- name="web_proxy_enabled"
- radio_style="false"
- width="400" top_pad="5"/>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="10"
- layout="topleft"
- left_delta="20"
- name="Proxy location"
- top_delta="16"
- width="300">
- Proxy location:
- </text>
- <line_editor
- control_name="BrowserProxyAddress"
- enabled_control="BrowserProxyEnabled"
- follows="left|top"
- font="SansSerif"
- height="23"
- layout="topleft"
- left_delta="0"
- name="web_proxy_editor"
- tool_tip="The name or IP address of the proxy you would like to use"
- top_pad="4"
- width="200" />
- <spinner
- control_name="BrowserProxyPort"
- enabled_control="BrowserProxyEnabled"
- decimal_digits="0"
- follows="left|top"
- height="23"
- increment="1"
- initial_value="80"
- label="Port number:"
- label_width="95"
- layout="topleft"
- left_delta="210"
- max_val="12000"
- min_val="10"
- name="web_proxy_port"
- top_delta="0"
- width="145" />
<text
type="string"
length="1"
@@ -268,7 +214,7 @@
height="23"
layout="topleft"
left_delta="50"
- top_pad="5"
+ top_pad="5"
name="updater_service_combobox"
width="300">
<combo_box.item
@@ -286,4 +232,31 @@
name="Install_manual"
value="0" />
</combo_box>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="10"
+ layout="topleft"
+ left="30"
+ name="Proxy Settings:"
+ mouse_opaque="false"
+ top_pad="5"
+ width="300">
+ Proxy Settings:
+ </text>
+ <button
+ label="Adjust proxy settings"
+ follows="left|top"
+ height="23"
+ width="140"
+ label_selected="Browse"
+ layout="topleft"
+ left_delta="50"
+ name="set_proxy"
+ top_pad="5"
+ >
+ <button.commit_callback
+ function="Pref.Proxy" />
+ </button>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 1745c1e4b0..1f92244eb9 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -385,7 +385,7 @@
height="18"
image_name="Move_Walk_Off"
layout="topleft"
- left_pad="170"
+ left_pad="170"
name="avatar_icon"
mouse_opaque="false"
visible="true"
@@ -496,8 +496,8 @@
filename="panel_sound_devices.xml"
visiblity_control="ShowDeviceSettings"
name="device_settings_panel"
- top="314"
- width="345"
+ top_pad="0"
+ width="480"
left="18"
class="panel_voice_device_settings"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
index 2868d91cc7..4535c56339 100644
--- a/indra/newview/skins/default/xui/en/panel_progress.xml
+++ b/indra/newview/skins/default/xui/en/panel_progress.xml
@@ -132,4 +132,12 @@
name="cancel_btn"
top="700"
width="90" />
+ <web_browser
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="login_media_panel"
+ width="1024"
+ height="768"
+ top="0"/>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_environment.xml b/indra/newview/skins/default/xui/en/panel_region_environment.xml
new file mode 100644
index 0000000000..aa38c49fae
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_region_environment.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+
+<panel
+ border="true"
+ follows="top|left"
+ height="300"
+ label="Environment"
+ layout="topleft"
+ help_topic="panel_region_environment_tab"
+ name="panel_env_info"
+ width="530">
+ <text
+ name="water_settings_title"
+ follows="top|left"
+ height="30"
+ layout="topleft"
+ left="50"
+ top_pad="20"
+ width="430"
+ wrap="true">
+ Select the Water and Sky/Day Cycle Settings you would like all visitors to your region to see. More info
+ </text>
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="237"
+ layout="topleft"
+ left="50"
+ name="border"
+ top="60"
+ width="430"/>
+ <radio_group
+ follows="top|left"
+ height="45"
+ layout="topleft"
+ left_delta="10"
+ name="region_settings_radio_group"
+ top_delta="20"
+ width="200">
+ <radio_item
+ label="Use Second Life default"
+ layout="topleft"
+ name="use_sl_default_settings"/>
+ <radio_item
+ label="Use the following settings"
+ layout="topleft"
+ name="use_my_settings"
+ top_pad="20"/>
+ </radio_group>
+ <panel
+ follows="top|left"
+ height="150"
+ layout="topleft"
+ left="50"
+ name="user_environment_settings"
+ top_pad="20"
+ width="430">
+ <text
+ name="water_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top_pad="0"
+ width="160">
+ Water Setting
+ </text>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="water_settings_preset_combo"
+ top_delta="-7"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ <text
+ name="sky_dayc_settings_title"
+ follows="top|left"
+ height="16"
+ layout="topleft"
+ left="50"
+ top_pad="30"
+ width="100">
+ Sky / Day Cycle
+ </text>
+ <radio_group
+ layout="topleft"
+ left_delta="50"
+ name="sky_dayc_settings_radio_group"
+ top_pad="10"
+ height="50"
+ width="110">
+ <radio_item
+ layout="topleft"
+ label="Fixed sky"
+ name="my_sky_settings"/>
+ <radio_item
+ layout="topleft"
+ label="Day cycle"
+ name="my_dayc_settings"
+ top_pad="25"/>
+ </radio_group>
+ <combo_box
+ follows="top|left"
+ left_pad="2"
+ name="sky_settings_preset_combo"
+ top_delta="-7"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ <combo_box
+ follows="top|left"
+ name="dayc_settings_preset_combo"
+ top_delta="36"
+ width="200">
+ <combo_box.item
+ label="-Select a preset-"
+ name="item0"/>
+ </combo_box>
+ </panel>
+ <button
+ follows="left|top"
+ height="23"
+ label="Apply"
+ layout="topleft"
+ right="-160"
+ name="apply_btn"
+ top_pad="10"
+ width="100" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="cancel_btn"
+ width="100" />
+ <loading_indicator
+ height="23"
+ left="50"
+ name="progress_indicator"
+ top_delta="0"
+ visible="false"
+ width="23" />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
index 1307d807e2..6b28639a77 100644
--- a/indra/newview/skins/default/xui/en/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_estate.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel
- border="false"
+ border="true"
follows="top|left"
height="510"
help_topic="panel_region_estate_tab"
@@ -20,7 +20,7 @@
name="estate_help_text"
top="14"
word_wrap="true"
- width="300">
+ >
Changes to settings on this tab will affect all regions in the estate.
</text>
<text
@@ -30,9 +30,10 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ right="160"
name="estate_text"
top_pad="2"
+ halign="right"
width="140">
Estate:
</text>
@@ -43,9 +44,9 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ top_delta="0"
name="estate_name"
- top_delta="16"
+ left_pad="6"
width="150">
(unknown)
</text>
@@ -56,9 +57,10 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ right="160"
name="owner_text"
- top_pad="2"
+ top_pad="6"
+ halign="right"
width="150">
Estate owner:
</text>
@@ -69,75 +71,68 @@
font="SansSerif"
height="20"
layout="topleft"
- left_delta="0"
+ top_delta="0"
name="estate_owner"
- top_delta="16"
+ left_pad="6"
use_ellipses="true"
width="290">
(unknown)
</text>
+
<view_border
- bevel_style="in"
+ bevel_style="none"
follows="top|left"
- height="270"
+ height="95"
layout="topleft"
- left_delta="-4"
+ left="10"
top_pad="5"
- width="300" />
+ width="470" />
+
<check_box
height="20"
- label="Use Global Time"
+ label="Allow Public Access"
layout="topleft"
- left="12"
- name="use_global_time_check"
- top="132"
+ left="20"
+ name="externally_visible_check"
+ top_delta="5"
width="200" />
+
<check_box
height="20"
- label="Fixed Sun"
- layout="topleft"
- left="12"
- name="fixed_sun_check"
- top="152"
- width="100" />
- <icon
- height="20"
- image_name="icon_day_cycle.tga"
+ label="Allow Voice Chat"
layout="topleft"
- left="47"
- name="daycycle"
- top="177"
- width="165" />
- <slider
- follows="left|top"
- height="20"
- increment="0.001"
- label="Phase"
- layout="topleft"
- left="12"
- max_val="30"
- min_val="6"
- name="sun_hour_slider"
- show_text="false"
- top="202"
+ left="280"
+ name="voice_chat_check"
+ top_delta="0"
width="200" />
<check_box
height="20"
- label="Allow Public Access"
+ label="Allow Direct Teleport"
layout="topleft"
left_delta="0"
- name="externally_visible_check"
- top_pad="6"
- width="200" />
+ name="allow_direct_teleport"
+ top_pad="4"
+ width="80" />
+ <button
+ enabled="false"
+ follows="left|top"
+ height="23"
+ label="Apply"
+ layout="topleft"
+ name="apply_btn"
+ top_pad="15"
+ left_delta="0"
+ width="97" />
+
<text
type="string"
length="1"
follows="top|left"
height="16"
layout="topleft"
- left="32"
+ left="20"
name="Only Allow"
- top="250"
+ top_delta="-30"
width="278">
Restrict Access to accounts verified by:
</text>
@@ -161,50 +156,6 @@
tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."
top_pad="2"
width="278" />
- <check_box
- height="20"
- label="Allow Voice Chat"
- layout="topleft"
- left="12"
- name="voice_chat_check"
- top="304"
- width="200" />
- <check_box
- height="20"
- label="Allow Direct Teleport"
- layout="topleft"
- left="12"
- name="allow_direct_teleport"
- top_pad="4"
- width="80" />
- <button
- enabled="false"
- follows="left|top"
- height="23"
- label="Apply"
- layout="topleft"
- name="apply_btn"
- top_pad="10"
- left="110"
- width="97" />
- <button
- follows="left|top"
- height="23"
- label="Send Message To Estate..."
- layout="topleft"
- left="45"
- name="message_estate_btn"
- top_pad="20"
- width="220" />
- <button
- follows="left|top"
- height="23"
- label="Kick Resident from Estate..."
- layout="topleft"
- left="45"
- name="kick_user_from_estate_btn"
- top_pad="5"
- width="220" />
<text
type="string"
@@ -214,16 +165,31 @@
height="20"
layout="topleft"
name="estate_manager_label"
- right="520"
+ top_pad="30"
+ left="10"
width="200">
Estate Managers:
</text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="280"
+ name="allow_resident_label"
+ top_delta="0"
+ width="200">
+ Allowed Residents:
+ </text>
+
+ <!-- Estate Managers box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
+ left="10"
top_pad="-5"
width="200" />
<name_list
@@ -235,43 +201,15 @@
name="estate_manager_name_list"
top_delta="0"
width="200" />
- <button
- follows="left|top"
- height="23"
- label="Remove..."
- layout="topleft"
- name="remove_estate_manager_btn"
- right="520"
- top_pad="5"
- width="97" />
- <button
- follows="left|top"
- height="23"
- label="Add..."
- layout="topleft"
- left_delta="-103"
- name="add_estate_manager_btn"
- top_delta="0"
- width="97" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="0"
- name="allow_resident_label"
- top_pad="10"
- width="200">
- Allowed Residents:
- </text>
+
+ <!-- Allowed Residents box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
- top_pad="-5"
+ left="280"
+ top_delta="0"
width="200" />
<name_list
follows="left|top"
@@ -282,42 +220,78 @@
name="allowed_avatar_name_list"
top_delta="0"
width="200" />
+
+ <!-- Estate Managers buttons -->
+ <button
+ follows="left|top"
+ height="23"
+ label="Add..."
+ layout="topleft"
+ left="10"
+ name="add_estate_manager_btn"
+ top_pad="6"
+ width="97" />
<button
follows="left|top"
height="23"
label="Remove..."
layout="topleft"
- name="remove_allowed_avatar_btn"
- right="520"
- top_pad="5"
+ name="remove_estate_manager_btn"
+ left_pad="6"
width="97" />
+
+ <!-- Allowed Residents buttons -->
<button
follows="left|top"
height="23"
+ left="280"
label="Add..."
layout="topleft"
- left_delta="-103"
name="add_allowed_avatar_btn"
top_delta="0"
width="97" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Remove..."
+ layout="topleft"
+ name="remove_allowed_avatar_btn"
+ left_pad="6"
+ top_delta="0"
+ width="97" />
+
<text
type="string"
length="1"
follows="left|top"
height="20"
layout="topleft"
- left_delta="0"
+ left="10"
name="allow_group_label"
top_pad="10"
width="200">
Allowed Groups:
</text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="280"
+ name="ban_resident_label"
+ top_delta="0"
+ width="200">
+ Banned Residents:
+ </text>
+
+ <!-- Allowed Groups box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
+ left="10"
top_pad="-5"
width="200" />
<name_list
@@ -329,43 +303,15 @@
name="allowed_group_name_list"
top_delta="0"
width="200" />
- <button
- follows="left|top"
- height="23"
- label="Remove..."
- layout="topleft"
- name="remove_allowed_group_btn"
- right="520"
- top_pad="5"
- width="97" />
- <button
- follows="left|top"
- height="23"
- label="Add..."
- layout="topleft"
- left_delta="-103"
- name="add_allowed_group_btn"
- top_delta="0"
- width="97" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="0"
- name="ban_resident_label"
- top_pad="10"
- width="200">
- Banned Residents:
- </text>
+
+ <!-- Banned Residents box -->
<view_border
bevel_style="none"
follows="top|left"
height="71"
layout="topleft"
- right="520"
- top_pad="-5"
+ left="280"
+ top_delta="0"
width="200" />
<name_list
follows="left|top"
@@ -376,22 +322,64 @@
name="banned_avatar_name_list"
top_delta="0"
width="200" />
+
+ <!-- Allowed Groups buttons -->
+ <button
+ follows="left|top"
+ height="23"
+ label="Add..."
+ layout="topleft"
+ left="10"
+ name="add_allowed_group_btn"
+ top_pad="6"
+ width="97" />
<button
follows="left|top"
height="23"
label="Remove..."
layout="topleft"
- name="remove_banned_avatar_btn"
- right="520"
- top_pad="5"
+ name="remove_allowed_group_btn"
+ left_pad="6"
+ top_delta="0"
width="97" />
+
+ <!-- Banned Residents buttons -->
<button
follows="left|top"
height="23"
label="Add..."
layout="topleft"
- left_delta="-103"
+ left="280"
name="add_banned_avatar_btn"
top_delta="0"
width="97" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Remove..."
+ layout="topleft"
+ name="remove_banned_avatar_btn"
+ top_delta="0"
+ left_pad="6"
+ width="97" />
+
+ <button
+ follows="left|top"
+ height="23"
+ label="Send Message To Estate..."
+ layout="topleft"
+ left="10"
+ name="message_estate_btn"
+ top_pad="20"
+ width="220" />
+ <button
+ follows="left|top"
+ height="23"
+ label="Kick Resident from Estate..."
+ layout="topleft"
+ left="280"
+ name="kick_user_from_estate_btn"
+ top_delta="0"
+ width="220" />
+
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
index 5093c52129..5d060c0a0d 100644
--- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
@@ -2,7 +2,7 @@
<panel
border="true"
follows="top|left"
- height="320"
+ height="460"
help_topic="panel_region_terrain_tab"
label="Terrain"
layout="topleft"
@@ -50,10 +50,10 @@
label="Terrain Raise Limit"
label_width="120"
layout="topleft"
- left="15"
+ left="240"
max_val="100"
name="terrain_raise_spin"
- top="60"
+ top="40"
width="180" />
<spinner
follows="left|top"
@@ -62,95 +62,336 @@
label="Terrain Lower Limit"
label_width="120"
layout="topleft"
- left="15"
+ left="240"
max_val="0"
min_val="-100"
name="terrain_lower_spin"
- top="80"
+ top="60"
width="180" />
- <check_box
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="60"
+ layout="topleft"
+ left="8"
+ top="30"
+ width="460" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
height="20"
- label="Use Estate Sun"
layout="topleft"
- left="250"
- name="use_estate_sun_check"
- top="35"
+ left="10"
+ name="detail_texture_text"
+ top="110"
+ width="300">
+ Terrain Textures (requires 512x512, 24 bit .tga files)
+ </text>
+ <texture_picker
+ follows="left|top"
+ height="100"
+ layout="topleft"
+ left_delta="0"
+ name="texture_detail_0"
+ top_delta="20"
width="100" />
- <check_box
- height="20"
- label="Fixed Sun"
+ <texture_picker
+ follows="left|top"
+ height="100"
+ layout="topleft"
+ left_pad="10"
+ name="texture_detail_1"
+ top_delta="0"
+ width="100" />
+ <texture_picker
+ follows="left|top"
+ height="100"
+ layout="topleft"
+ left_pad="10"
+ name="texture_detail_2"
+ top_delta="0"
+ width="100" />
+ <texture_picker
+ follows="left|top"
+ height="100"
layout="topleft"
- left="250"
- name="fixed_sun_check"
- top="55"
+ left_pad="10"
+ name="texture_detail_3"
+ top_delta="0"
width="100" />
- <icon
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
height="20"
- image_name="icon_day_cycle.tga"
layout="topleft"
- left="285"
- name="daycycle"
- top="80"
- width="165" />
- <slider
+ left="10"
+ name="height_text_lbl"
+ top_delta="90"
+ width="65">
+ 1 (Low)
+ </text>
+ <text
+ type="string"
+ length="1"
follows="left|top"
height="20"
- increment="0.001"
- label="Phase"
layout="topleft"
- left="250"
- max_val="30"
- min_val="6"
- name="sun_hour_slider"
- show_text="false"
- top="105"
- width="200" />
- <button
- enabled="false"
+ left_pad="45"
+ name="height_text_lbl2"
+ top_delta="0"
+ width="100">
+ 2
+ </text>
+ <text
+ type="string"
+ length="1"
follows="left|top"
height="20"
- label="Apply"
layout="topleft"
- left="350"
- name="apply_btn"
- top="135"
- width="90" />
- <view_border
- bevel_style="none"
- follows="top|left"
- height="130"
+ left_pad="10"
+ name="height_text_lbl3"
+ top_delta="0"
+ width="100">
+ 3
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
layout="topleft"
- left="8"
- top="30"
- width="460" />
+ left_pad="10"
+ name="height_text_lbl4"
+ top_delta="0"
+ width="100">
+ 4 (High)
+ </text>
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="height_text_lbl5"
+ top_delta="30"
+ width="300">
+ Texture Elevation Ranges
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="10"
+ name="height_text_lbl10"
+ top_delta="30"
+ width="200"
+ word_wrap="true">
+ These values represent the blend range for the textures above.
+ </text>
+ <text
+ follows="left|top"
+ height="60"
+ layout="topleft"
+ left_delta="0"
+ name="height_text_lbl11"
+ top_delta="32"
+ width="200"
+ word_wrap="true">
+ Measured in meters, the LOW value is the MAXIMUM height of Texture #1, and the HIGH value is the MINIMUM height of Texture #4.
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="270"
+ name="height_text_lbl6"
+ top="250"
+ width="100">
+ Northwest
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="10"
+ name="height_text_lbl7"
+ top_delta="0"
+ width="100">
+ Northeast
+ </text>
+<!-- northwest low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_1"
+ top_delta="15"
+ width="100" />
+<!-- northeast low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_3"
+ top_delta="0"
+ width="100" />
+<!-- northwest high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_1"
+ top_delta="20"
+ width="100" />
+<!-- northeast high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_3"
+ top_delta="0"
+ width="100" />
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left="270"
+ name="height_text_lbl8"
+ top_pad="10"
+ width="100">
+ Southwest
+ </text>
+ <text
+ follows="left|top"
+ height="20"
+ layout="topleft"
+ left_pad="10"
+ name="height_text_lbl9"
+ top_delta="0"
+ width="100">
+ Southeast
+ </text>
+<!-- southwest low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_0"
+ top_delta="15"
+ width="100" />
+<!-- southeast low-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="Low"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_start_spin_2"
+ top_delta="0"
+ width="100" />
+<!--southwest high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left="230"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_0"
+ top_delta="20"
+ width="100" />
+<!-- southeast high-->
+ <spinner
+ follows="left|top"
+ height="20"
+ increment="0.5"
+ label="High"
+ label_width="37"
+ layout="topleft"
+ left_pad="10"
+ max_val="500"
+ min_val="-500"
+ name="height_range_spin_2"
+ top_delta="0"
+ width="100" />
+<!-- Terrain Download/Upload/Bake buttons -->
<button
follows="left|top"
height="20"
label="Download RAW terrain..."
layout="topleft"
- left_delta="2"
+ left="10"
name="download_raw_btn"
tool_tip="Available only to estate owners, not managers"
- top_pad="60"
- width="170" />
+ top="390"
+ width="160" />
<button
follows="left|top"
height="20"
label="Upload RAW terrain..."
layout="topleft"
- left="10"
+ left_pad="10"
+ top_delta="0"
name="upload_raw_btn"
tool_tip="Available only to estate owners, not managers"
- top="243"
- width="170" />
+ width="160" />
<button
follows="left|top"
height="20"
label="Bake Terrain"
layout="topleft"
- left="10"
+ left_pad="10"
name="bake_terrain_btn"
tool_tip="Set current terrain as mid-point for raise/lower limits"
- top="283"
+ width="100" />
+ <button
+ enabled="true"
+ follows="left|top"
+ height="20"
+ label="Apply"
+ layout="topleft"
+ left_delta="0"
+ name="apply_btn"
+ top="430"
width="100" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_region_texture.xml b/indra/newview/skins/default/xui/en/panel_region_texture.xml
deleted file mode 100644
index 5d910ea659..0000000000
--- a/indra/newview/skins/default/xui/en/panel_region_texture.xml
+++ /dev/null
@@ -1,327 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- border="true"
- follows="top|left"
- height="320"
- help_topic="panel_region_texture_tab"
- label="Ground Textures"
- layout="topleft"
- left="0"
- name="Textures"
- top="320"
- width="480">
- <text
- type="string"
- length="1"
- follows="left|top"
- font="SansSerif"
- height="20"
- layout="topleft"
- left="10"
- name="region_text_lbl"
- top="10"
- width="100">
- Region:
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- font="SansSerif"
- height="20"
- layout="topleft"
- left_delta="50"
- name="region_text"
- top_delta="0"
- width="400">
- unknown
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="detail_texture_text"
- top="36"
- width="300">
- Terrain Textures (requires 512x512, 24 bit .tga files)
- </text>
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_delta="0"
- name="texture_detail_0"
- top_delta="20"
- width="100" />
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_pad="10"
- name="texture_detail_1"
- top_delta="0"
- width="100" />
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_pad="10"
- name="texture_detail_2"
- top_delta="0"
- width="100" />
- <texture_picker
- follows="left|top"
- height="100"
- layout="topleft"
- left_pad="10"
- name="texture_detail_3"
- top_delta="0"
- width="100" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl"
- top="146"
- width="65">
- 1 (Low)
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="45"
- name="height_text_lbl2"
- top_delta="0"
- width="100">
- 2
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl3"
- top_delta="0"
- width="100">
- 3
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl4"
- top_delta="0"
- width="100">
- 4 (High)
- </text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl5"
- top="170"
- width="300">
- Texture Elevation Ranges
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="51"
- name="height_text_lbl6"
- top="185"
- width="100">
- Northwest
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl7"
- top_delta="0"
- width="100">
- Northeast
- </text>
-<!-- northwest low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_1"
- top_delta="15"
- width="100" />
-<!-- northeast low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_3"
- top_delta="0"
- width="100" />
-<!-- northwest high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_1"
- top_delta="20"
- width="100" />
-<!-- northeast high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_3"
- top_delta="0"
- width="100" />
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="51"
- name="height_text_lbl8"
- top_pad="10"
- width="100">
- Southwest
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_pad="10"
- name="height_text_lbl9"
- top_delta="0"
- width="100">
- Southeast
- </text>
-<!-- southwest low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_0"
- top_delta="15"
- width="100" />
-<!-- southeast low-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="Low"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_start_spin_2"
- top_delta="0"
- width="100" />
-<!--southwest high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_0"
- top_delta="20"
- width="100" />
-<!-- southeast high-->
- <spinner
- follows="left|top"
- height="20"
- increment="0.5"
- label="High"
- label_width="37"
- layout="topleft"
- left_pad="10"
- max_val="500"
- min_val="-500"
- name="height_range_spin_2"
- top_delta="0"
- width="100" />
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left="10"
- name="height_text_lbl10"
- top_delta="30"
- width="400"
- word_wrap="true">
- These values represent the blend range for the textures above.
- </text>
- <text
- follows="left|top"
- height="20"
- layout="topleft"
- left_delta="0"
- name="height_text_lbl11"
- top_delta="32"
- width="400"
- word_wrap="true">
- Measured in meters, the LOW value is the MAXIMUM height of Texture #1, and the HIGH value is the MINIMUM height of Texture #4.
- </text>
- <button
- enabled="false"
- follows="left|bottom"
- height="20"
- label="Apply"
- layout="topleft"
- left="350"
- name="apply_btn"
- top="290"
- width="100" />
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray.xml b/indra/newview/skins/default/xui/en/panel_side_tray.xml
index 6ef93406ec..0f330a7b98 100644
--- a/indra/newview/skins/default/xui/en/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/en/panel_side_tray.xml
@@ -142,6 +142,7 @@
mouse_opaque="false"
background_visible="true"
>
+ <badge location="top_left" location_percent_vcenter="50" location_percent_hcenter="95" />
<panel
class="sidepanel_inventory"
name="sidepanel_inventory"
diff --git a/indra/newview/skins/default/xui/en/panel_sound_devices.xml b/indra/newview/skins/default/xui/en/panel_sound_devices.xml
index ccae7c5350..46cbc1e87f 100644
--- a/indra/newview/skins/default/xui/en/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/en/panel_sound_devices.xml
@@ -7,33 +7,54 @@
layout="topleft"
name="device_settings_panel"
width="360">
- <panel.string
- name="default_text">
- Default
- </panel.string>
- <icon
- height="18"
- image_name="Microphone_On"
- left_delta="4"
- name="microphone_icon"
- mouse_opaque="false"
- top="7"
- layout="topleft"
- visible="true"
- width="18" />
- <text
+ <panel.string
+ name="default_text">
+ Default
+ </panel.string>
+ <string
+ name="name_no_device">
+ No Device
+ </string>
+ <string
+ name="name_default_system_device">
+ Default System Device
+ </string>
+ <icon
+ follows="left|top"
+ height="18"
+ image_name="Microphone_On"
+ left_delta="-5"
+ name="microphone_icon"
+ mouse_opaque="false"
+ top="7"
+ layout="topleft"
+ visible="true"
+ width="18" />
+ <icon
+ follows="left|top"
+ height="18"
+ image_name="Parcel_Voice_Dark"
+ layout="topleft"
+ left_pad="220"
+ name="speaker_icon"
+ mouse_opaque="false"
+ top_delta="0"
+ visible="true"
+ width="22" />
+ <text
type="string"
length="1"
- font.style="BOLD"
+ font.style="BOLD"
follows="left|top"
height="16"
layout="topleft"
- left_pad="3"
+ left_pad="-240"
+ top_delta="5"
name="Input"
- width="70">
- Input
- </text>
- <combo_box
+ width="60">
+ Input
+ </text>
+ <combo_box
height="23"
control_name="VoiceInputAudioDevice"
follows="left|top"
@@ -42,33 +63,57 @@
max_chars="128"
name="voice_input_device"
top_delta="-5"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="16"
- layout="topleft"
- left_delta="-70"
- name="My volume label"
- top_pad="4"
- width="200">
- My volume:
- </text>
- <slider_bar
- control_name="AudioLevelMic"
- follows="top|right|left"
- height="17"
- increment="0.025"
- initial_value="1.0"
- layout="topleft"
- left_delta="-6"
- max_val="2"
- name="mic_volume_slider"
- tool_tip="Change the volume using this slider"
- top_pad="-1"
- width="220" />
- <text
+ width="150" />
+ <text
+ font.style="BOLD"
+ type="string"
+ length="1"
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left_pad="30"
+ name="Output"
+ top_delta="5"
+ width="60">
+ Output
+ </text>
+ <combo_box
+ control_name="VoiceOutputAudioDevice"
+ height="23"
+ follows="left|top"
+ layout="topleft"
+ left_pad="0"
+ max_chars="128"
+ name="voice_output_device"
+ top_delta="-4"
+ width="150" />
+ <text
+ type="string"
+ halign="left"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_delta="-300"
+ name="My volume label"
+ top_pad="14"
+ width="200">
+ My volume:
+ </text>
+ <slider_bar
+ control_name="AudioLevelMic"
+ follows="top|right|left"
+ height="17"
+ increment="0.025"
+ initial_value="1.0"
+ layout="topleft"
+ left_delta="95"
+ max_val="2"
+ name="mic_volume_slider"
+ tool_tip="Change the volume using this slider"
+ top_pad="-18"
+ width="110" />
+ <text
type="string"
text_color="EmphasisColor"
length="1"
@@ -79,8 +124,8 @@
name="wait_text"
top_delta="-1"
width="110">
- Please wait
- </text>
+ Please wait
+ </text>
<locate
follows="right|top"
height="20"
@@ -121,35 +166,4 @@
name="bar4"
top_delta="0"
width="20" />
- <icon
- height="18"
- image_name="Parcel_Voice_Light"
- left="5"
- name="speaker_icon"
- mouse_opaque="false"
- top_pad="3"
- visible="true"
- width="22" />
- <text
- font.style="BOLD"
- type="string"
- length="1"
- follows="left|top"
- height="15"
- layout="topleft"
- left_pad="0"
- name="Output"
- width="70">
- Output
- </text>
- <combo_box
- control_name="VoiceOutputAudioDevice"
- height="23"
- follows="left|top"
- layout="topleft"
- left_pad="0"
- max_chars="128"
- name="voice_output_device"
- top_delta="-3"
- width="200" />
-</panel>
+</panel> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index d756dfb7de..c780cf2696 100644
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -35,7 +35,7 @@
</panel.string>
<panel
height="18"
- left="-315"
+ left="-355"
width="95"
top="1"
follows="right|top"
@@ -77,19 +77,39 @@
top="0"
width="55" />
</panel>
+ <combo_box
+ follows="right|top"
+ drop_down_button.pad_left="10"
+ left_pad="5"
+ top="0"
+ width="120"
+ height="20"
+ pad_left="5"
+ name="mode_combo"
+ tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+ >
+ <combo_box.item
+ label="Basic Mode"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced Mode"
+ name="Advanced"
+ value="" />
+ </combo_box>
<text
+ left_pad="5"
type="string"
font="SansSerifSmall"
text_readonly_color="TimeTextColor"
follows="right|top"
- halign="right"
+ halign="center"
height="16"
top="5"
layout="topleft"
- left_pad="0"
name="TimeText"
tool_tip="Current time (Pacific)"
- width="145">
+ width="75">
24:00 AM PST
</text>
<button
@@ -100,7 +120,7 @@
image_pressed="Pause_Press"
image_pressed_selected="Play_Press"
is_toggle="true"
- left_pad="15"
+ left_pad="10"
top="1"
name="media_toggle_btn"
tool_tip="Start/Stop All Media (Music, Video, Web pages)"
diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
index 30d3064e14..79f29777ce 100644
--- a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
@@ -88,6 +88,16 @@
visible="false"
width="14"
/>
+ <icon
+ follows="right|top"
+ height="13"
+ image_name="Parcel_SeeAVsOff_Light"
+ left="2"
+ name="see_avatars_icon"
+ top="3"
+ visible="false"
+ width="14"
+ />
<text
follows="right|top"
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
index 8997c1a6d7..79a0ec7c72 100644
--- a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
@@ -9,7 +9,7 @@
min_width="240"
name="objects panel"
width="333">
- <panel
+ <panel
follows="all"
layout="topleft"
left="0"
@@ -19,24 +19,226 @@
height="570"
visible="true"
width="330">
- <panel
- class="panel_main_inventory"
- filename="panel_main_inventory.xml"
- follows="all"
- layout="topleft"
- left="0"
- name="panel_main_inventory"
- top="0"
- label=""
- height="545"
- width="330" />
+ <layout_stack
+ follows="left|right|top|bottom"
+ layout="topleft"
+ left="0"
+ top="0"
+ orientation="vertical"
+ name="inventory_layout_stack"
+ height="535"
+ width="330">
+ <layout_panel
+ name="main_inventory_layout_panel"
+ min_dim="150"
+ width="330"
+ follows="bottom|left|right"
+ user_resize="false"
+ height="480">
+ <panel
+ class="panel_main_inventory"
+ filename="panel_main_inventory.xml"
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="panel_main_inventory"
+ top="0"
+ label=""
+ height="480"
+ width="330" />
+ </layout_panel>
+ <layout_panel
+ width="330"
+ auto_resize="true"
+ user_resize="false"
+ follows="bottom|left|right"
+ name="inbox_layout_panel"
+ visible="false"
+ min_dim="35"
+ max_dim="200"
+ expanded_min_dim="90"
+ height="200">
+ <panel
+ follows="all"
+ layout="topleft"
+ left="0"
+ name="marketplace_inbox"
+ class="panel_marketplace_inbox"
+ top="0"
+ label=""
+ height="200"
+ width="330">
+ <string name="InboxLabelWithArg">Received Items ([NUM])</string>
+ <string name="InboxLabelNoArg">Received Items</string>
+ <button
+ label="Received Items"
+ name="inbox_btn"
+ height="35"
+ width="308"
+ image_unselected="MarketplaceBtn_Off"
+ image_selected="MarketplaceBtn_Selected"
+ halign="left"
+ handle_right_mouse="false"
+ follows="top|left|right"
+ is_toggle="true"
+ tab_stop="false"
+ pad_left="35"
+ top="0"
+ left="10" />
+ <text
+ type="string"
+ length="1"
+ follows="right|top"
+ layout="topleft"
+ height="13"
+ top="10"
+ right="-20"
+ name="inbox_fresh_new_count"
+ font="SansSerifMedium"
+ halign="right"
+ text_color="EmphasisColor"
+ top_pad="0"
+ width="300">
+ [NUM] New
+ </text>
+ <panel
+ follows="all"
+ left="10"
+ bottom="200"
+ width="308"
+ top="35"
+ bg_opaque_color="InventoryBackgroundColor"
+ background_visible="true"
+ background_opaque="true"
+ tool_tip="Drag and drop items to your inventory to manage and use them"
+ >
+ <text
+ name="inbox_inventory_placeholder"
+ type="string"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ width="308"
+ height="165"
+ wrap="true"
+ halign="center">
+ Purchases from the marketplace will be delivered here.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel
+ width="330"
+ auto_resize="true"
+ user_resize="false"
+ follows="bottom|left|right"
+ name="outbox_layout_panel"
+ visible="false"
+ min_dim="35"
+ max_dim="200"
+ expanded_min_dim="90"
+ height="200">
+ <panel
+ follows="all"
+ layout="topleft"
+ left="10"
+ name="marketplace_outbox"
+ class="panel_marketplace_outbox"
+ top="0"
+ label=""
+ height="200"
+ width="310">
+ <button
+ label="Merchant Outbox"
+ is_toggle="true"
+ handle_right_mouse="false"
+ name="outbox_btn"
+ follows="top|left|right"
+ image_unselected="MarketplaceBtn_Off"
+ image_selected="MarketplaceBtn_Selected"
+ height="35"
+ tab_stop="false"
+ width="308"
+ halign="left"
+ pad_left="35"
+ top="0"
+ left="0" />
+ <button
+ image_unselected="OutboxPush_Off"
+ image_selected="OutboxPush_Selected"
+ image_hover_selected="OutboxPush_Selected_Over"
+ image_hover_unselected="OutboxPush_Over"
+ image_disabled_selected="OutboxPush_Selected_Disabled"
+ image_disabled="OutboxPush_Disabled"
+ image_pressed="OutboxPush_Press"
+ image_pressed_selected="OutboxPush_Selected_Press"
+ label=""
+ tool_tip="Push to my Marketplace Storefront"
+ is_toggle="false"
+ name="outbox_sync_btn"
+ follows="top|right"
+ tab_stop="false"
+ halign="center"
+ top="6"
+ left="-50"
+ height="23"
+ width="32"
+ enabled="false" />
+ <loading_indicator
+ follows="top|right"
+ name="outbox_sync_indicator"
+ top="6"
+ left="-50"
+ height="23"
+ width="32"
+ images_per_sec="1.15"
+ tab_stop="false"
+ visible="false">
+ <images>
+ <image name="OutboxPush_Progress_1"/>
+ <image name="OutboxPush_Progress_2"/>
+ <image name="OutboxPush_Progress_3"/>
+ <image name="OutboxPush_Progress_4"/>
+ <image name="OutboxPush_Progress_5"/>
+ <image name="OutboxPush_Progress_6"/>
+ </images>
+ </loading_indicator>
+ <panel
+ follows="all"
+ left="10"
+ bottom="200"
+ width="308"
+ top="35"
+ bg_opaque_color="InventoryBackgroundColor"
+ background_visible="true"
+ background_opaque="true"
+ tool_tip="Drag and drop items here to prepare them for sale on your storefront"
+ >
+ <text
+ name="outbox_inventory_placeholder"
+ type="string"
+ follows="all"
+ layout="topleft"
+ top="0"
+ left="0"
+ width="308"
+ height="165"
+ wrap="true"
+ halign="center">
+ Set up your merchant account to use this feature.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel
follows="bottom|left|right"
- height="25"
+ height="30"
layout="topleft"
name="button_panel"
left="9"
- top_pad="-2"
+ top_pad="7"
width="308">
<layout_stack
follows="bottom|left|right"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 71f48c833d..2094275bed 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -18,6 +18,7 @@
<string name="StartupClearingCache">Clearing cache...</string>
<string name="StartupInitializingTextureCache">Initializing Texture Cache...</string>
<string name="StartupInitializingVFS">Initializing VFS...</string>
+ <string name="StartupRequireDriverUpdate">Graphics Initialization Failed. Please Update Your Graphics Driver!</string>
<!-- progress -->
<string name="ProgressRestoring">Restoring...</string>
@@ -43,6 +44,8 @@
<string name="LoginInitializingQuicktime">Initializing QuickTime...</string>
<string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string>
<string name="LoginQuicktimeOK">QuickTime initialized successfully.</string>
+ <string name="LoginRequestSeedCapGrant">Requesting region capabilities...</string>
+ <string name="LoginRetrySeedCapGrant">Requesting region capabilities, attempt [NUMBER]...</string>
<string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string>
<string name="LoginConnectingToRegion">Connecting to region...</string>
<string name="LoginDownloadingClothing">Downloading clothing...</string>
@@ -1759,10 +1762,10 @@ integer llGetParcelMaxPrims(vector pos, integer sim_wide)
Returns the maximum number of prims allowed on the parcel at pos
</string>
<string name="LSLTipText_llGetParcelDetails" translate="false">
-list llGetParcelDetails(vector pos, list params)
-Returns the parcel details specified in params for the parcel at pos.
-Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA
- </string>
+ list llGetParcelDetails(vector pos, list params)
+ Returns the parcel details specified in params for the parcel at pos.
+ Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA, _ID, _SEE_AVATARS
+ </string>
<string name="LSLTipText_llSetLinkPrimitiveParams" translate="false">
llSetLinkPrimitiveParams(integer linknumber, list rules)
Sets primitive parameters for linknumber based on rules
@@ -2021,6 +2024,8 @@ Returns a string with the requested data about the region
<string name="PlacesNoMatchingItems">Didn't find what you're looking for? Try [secondlife:///app/search/places/[SEARCH_TERM] Search].</string>
<string name="FavoritesNoMatchingItems">Drag a landmark here to add it to your favorites.</string>
<string name="InventoryNoTexture">You do not have a copy of this texture in your inventory</string>
+ <string name="InventoryInboxNoItems">Items purchased through the marketplace will be delivered here.</string>
+ <string name="InventoryOutboxNoItems">Drag items here in preparation for listing on your marketplace storefront.</string>
<!-- use value="" because they have preceding spaces -->
<string name="no_transfer" value=" (no transfer)" />
<string name="no_modify" value=" (no modify)" />
@@ -2067,7 +2072,6 @@ Returns a string with the requested data about the region
<!-- inventory folder -->
<string name="InvFolder My Inventory">My Inventory</string>
- <string name="InvFolder My Favorites">My Favorites</string>
<string name="InvFolder Library">Library</string>
<string name="InvFolder Textures">Textures</string>
<string name="InvFolder Sounds">Sounds</string>
@@ -2087,10 +2091,10 @@ Returns a string with the requested data about the region
<string name="InvFolder Uncompressed Sounds">Uncompressed Sounds</string>
<string name="InvFolder Animations">Animations</string>
<string name="InvFolder Gestures">Gestures</string>
- <string name="InvFolder Favorite">Favorites</string>
+ <string name="InvFolder Favorite">My Favorites</string>
<!-- historically default name of the Favorites folder can start from either "f" or "F" letter.
We should localize both of them with the same value -->
- <string name="InvFolder favorite">Favorites</string>
+ <string name="InvFolder favorite">My Favorites</string>
<string name="InvFolder Current Outfit">Current Outfit</string>
<string name="InvFolder Initial Outfits">Initial Outfits</string>
<string name="InvFolder My Outfits">My Outfits</string>
@@ -2236,6 +2240,7 @@ Returns a string with the requested data about the region
<string name="Unknown">(Unknown)</string>
<string name="SummaryForTheWeek" value="Summary for this week, beginning on " />
<string name="NextStipendDay" value="The next stipend day is " />
+ <string name="GroupPlanningDate">[mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]</string>
<string name="GroupIndividualShare" value=" Group Individual Share" />
<string name="GroupColumn" value=" Group" />
<string name="Balance">Balance</string>
@@ -2250,6 +2255,9 @@ Returns a string with the requested data about the region
<string name="IMMainland">mainland</string>
<string name="IMTeen">teen</string>
+ <!-- floater about land -->
+ <string name="Anyone">anyone</string>
+
<!-- floater region info -->
<!-- The following will replace variable [ALL_ESTATES] in notifications EstateAllowed*, EstateBanned*, EstateManager* -->
<string name="RegionInfoError">error</string>
@@ -2352,6 +2360,10 @@ Returns a string with the requested data about the region
<string name="GroupOwned">Group Owned</string>
<string name="Public">Public</string>
+ <!-- Environment settings -->
+ <string name="LocalSettings">Local Settings</string>
+ <string name="RegionSettings">Region Settings</string>
+
<!-- panel classified -->
<string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string>
<string name="ClassifiedUpdateAfterPublish">(will update after publish)</string>
@@ -2385,6 +2397,7 @@ Returns a string with the requested data about the region
<string name="GroupMoneyBalance">Balance</string>
<string name="GroupMoneyCredits">Credits</string>
<string name="GroupMoneyDebits">Debits</string>
+ <string name="GroupMoneyDate">[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]</string>
<!-- viewer object -->
<string name="ViewerObjectContents">Contents</string>
@@ -3133,6 +3146,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="LocationCtrlAdultIconTooltip">Adult Region</string>
<string name="LocationCtrlModerateIconTooltip">Moderate Region</string>
<string name="LocationCtrlGeneralIconTooltip">General Region</string>
+ <string name="LocationCtrlSeeAVsTooltip">Avatars visible and chat allowed outside of this parcel</string>
<!-- Strings used by the (currently Linux) auto-updater app -->
<string name="UpdaterWindowTitle">
@@ -3400,6 +3414,34 @@ Abuse Report</string>
<string name="Female - Stick tougue out">Female - Stick tougue out</string>
<string name="Female - Wow">Female - Wow</string>
+ <string name="/bow1">/bow1</string>
+ <string name="/clap">/clap</string>
+ <string name="/count">/count</string>
+ <string name="/extinguish">/extinguish</string>
+ <string name="/kmb">/kmb</string>
+ <string name="/muscle">/muscle</string>
+ <string name="/no">/no</string>
+ <string name="/no!">/no!</string>
+ <string name="/paper">/paper</string>
+ <string name="/pointme">/pointme</string>
+ <string name="/pointyou">/pointyou</string>
+ <string name="/rock">/rock</string>
+ <string name="/scissor">/scissor</string>
+ <string name="/smoke">/smoke</string>
+ <string name="/stretch">/stretch</string>
+ <string name="/whistle">/whistle</string>
+ <string name="/yes">/yes</string>
+ <string name="/yes!">/yes!</string>
+ <string name="afk">afk</string>
+ <string name="dance1">dance1</string>
+ <string name="dance2">dance2</string>
+ <string name="dance3">dance3</string>
+ <string name="dance4">dance4</string>
+ <string name="dance5">dance5</string>
+ <string name="dance6">dance6</string>
+ <string name="dance7">dance7</string>
+ <string name="dance8">dance8</string>
+
<!-- birth date format shared by avatar inspector and profile panels -->
<string name="AvatarBirthDateFormat">[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
new file mode 100644
index 0000000000..2d4c02b092
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/badge.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Additional attributes:
+ -->
+<badge border_image="Badge_Border"
+ border_color="BadgeBorderColor"
+ font="SansSerifSmall"
+ image="Badge_Background"
+ image_color="BadgeImageColor"
+ label_color="BadgeLabelColor"
+ label_offset_horiz="0"
+ label_offset_vert="0"
+ location="top_left"
+ location_percent_hcenter="85"
+ location_percent_vcenter="85"
+ padding_horiz="7"
+ padding_vert="4"
+ requests_front="true"
+ mouse_opaque="false"
+ >
+</badge>
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
index 16241ed84e..302014eb24 100644
--- a/indra/newview/skins/default/xui/en/widgets/button.xml
+++ b/indra/newview/skins/default/xui/en/widgets/button.xml
@@ -25,5 +25,6 @@
pad_bottom="3"
height="23"
scale_image="true"
+ handle_right_mouse="true"
use_draw_context_alpha="true">
</button>
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
index d1f68a9ef9..82d620d1e6 100644
--- a/indra/newview/skins/default/xui/en/widgets/combo_box.xml
+++ b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
@@ -16,6 +16,9 @@
font="SansSerifSmall"
scale_image="true"
pad_right="24"
+ halign="left"
+ tab_stop="true"
+ follows="all"
image_unselected="DropDown_Off"
image_selected="DropDown_On"
image_pressed="DropDown_Press"
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
new file mode 100644
index 0000000000..95f5cf2ecd
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_folder_view_folder
+ folder_arrow_image="Folder_Arrow"
+ folder_indentation="8"
+ item_height="20"
+ item_top_pad="4"
+ selection_image="Rounded_Square"
+ >
+ <new_badge
+ label="New"
+ label_offset_horiz="-1"
+ location="right"
+ padding_horiz="4"
+ padding_vert="1"
+ location_percent_hcenter="70"
+ border_image=""
+ image="Badge_Background_New"
+ />
+</inbox_folder_view_folder>
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml
new file mode 100644
index 0000000000..830c27bdac
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<inbox_inventory_panel show_load_status="false" />
diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml
index 93875d66e6..00f4c43915 100644
--- a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml
+++ b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml
@@ -3,4 +3,12 @@
bg_opaque_color="InventoryBackgroundColor"
background_visible="true"
background_opaque="true"
- />
+ show_load_status="true"
+ >
+ <scroll
+ name="Inventory Scroller"
+ follows="all"
+ reserve_scroll_corner="true"
+ tab_stop="true"
+ />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
index 37d60f1671..44436fb6f2 100644
--- a/indra/newview/skins/default/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml
@@ -123,6 +123,14 @@
font="SansSerifSmall"
text_color="TextFgColor"
/>
+ <see_avatars_icon
+ name="see_avatars_icon"
+ width="22"
+ height="18"
+ top="21"
+ follows="right|top"
+ image_name="Parcel_SeeAVsOff_Light"
+ />
<combo_button
name="Location History"
label=""
diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml
index 9bf99fa363..47a210d9b7 100644
--- a/indra/newview/skins/default/xui/en/widgets/panel.xml
+++ b/indra/newview/skins/default/xui/en/widgets/panel.xml
@@ -10,4 +10,5 @@
bg_alpha_image_overlay="White"
background_visible="false"
background_opaque="false"
- chrome="false"/> \ No newline at end of file
+ chrome="false"
+ accepts_badge="true"/> \ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/widgets/time.xml b/indra/newview/skins/default/xui/en/widgets/time.xml
new file mode 100644
index 0000000000..b5bdd564a6
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/time.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<time text_enabled_color="LabelTextColor"
+ text_disabled_color="LabelDisabledColor"
+ font="SansSerifSmall"
+ label_width="40" >
+ <time.up_button name="SpinCtrl Up"
+ image_unselected="Stepper_Up_Off"
+ image_selected="Stepper_Up_Press"
+ tab_stop="false"
+ follows="left|bottom" />
+ <time.down_button name="SpinCtrl Down"
+ image_unselected="Stepper_Down_Off"
+ image_selected="Stepper_Down_Press"
+ tab_stop="false"
+ follows="left|bottom" />
+</time>
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index 1c4b965f46..83749fc535 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -133,12 +133,12 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
0
</text>
<button label="Comprar terreno" left="130" name="Buy Land..." width="125"/>
+ <button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
<button label="Información de scripts" name="Scripts..."/>
<button label="Comprar para el grupo" name="Buy For Group..."/>
<button label="Comprar un pase" left="130" name="Buy Pass..." tool_tip="Un pase le da acceso temporal a este terreno." width="125"/>
<button label="Abandonar el terreno" name="Abandon Land..."/>
<button label="Reclamar el terreno" name="Reclaim Land..."/>
- <button label="Venta Linden" name="Linden Sale..." tool_tip="El terreno debe estar en propiedad, con contenido, y no estar en subasta."/>
</panel>
<panel label="CONTRATO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -308,6 +308,9 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
<panel.string name="push_restrict_region_text">
Sin &apos;empujones&apos; (prevalece lo marcado en la región)
</panel.string>
+ <panel.string name="see_avs_text">
+ Ver a los residentes de esta parcela y chatear con ellos
+ </panel.string>
<text name="allow_label">
Permitir a otros Residentes:
</text>
@@ -370,6 +373,10 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Pulse para elegir una imagen"/>
+ <text name="allow_label5">
+ Permitir a los residentes de otras parcelas:
+ </text>
+ <check_box label="Ver los avatares" name="SeeAvatarsCheck" tool_tip="Permite que los residentes de otras parcelas vean a los residentes de ésta y chateen con ellos, y también que tú puedas verles y chatear con ellos."/>
<text name="landing_point">
Punto de llegada: [LANDING]
</text>
@@ -429,6 +436,11 @@ los media:
Sonido:
</text>
<check_box label="Restringir sonidos de objetos y gestos a esta parcela" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Sonidos de avatar:
+ </text>
+ <check_box label="Todos" name="all av sound check"/>
+ <check_box label="Grupo" name="group av sound check"/>
<text name="Voice settings:">
Voz:
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml
index 9d63abd73c..a3e656cc17 100644
--- a/indra/newview/skins/default/xui/es/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/es/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPCIONES DE LA CUADRÃCULA">
- <spinner label="Unidad de la cuadrícula (metros)" label_width="192" name="GridResolution" width="250"/>
- <spinner label="Alcance de la cuadrícula (metros)" label_width="192" name="GridDrawSize" width="250"/>
+ <floater.string name="grid_screen_text">
+ Pantalla
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mundo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referencia
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Adjunto
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacidad de la cuadrícula">
+ Modo
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Elige qué cuadricula usar para posicionar el objeto">
+ <combo_box.item label="Mundo" name="World"/>
+ <combo_box.item label="Local" name="Local"/>
+ <combo_box.item label="Referencia" name="Reference"/>
+ </combo_box>
+ <spinner label="Unidades (metros)" label_width="192" name="GridResolution" width="250"/>
+ <spinner label="Extensión (metros)" label_width="192" name="GridDrawSize" width="250"/>
<check_box label="Activar subunidades" name="GridSubUnit"/>
<check_box label="Ver la sección transversal" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacidad de la cuadrícula">
diff --git a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
deleted file mode 100644
index 9c3ac1be0e..0000000000
--- a/indra/newview/skins/default/xui/es/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITOR DEL CICLO DE UN DÃA">
- <tab_container name="Day Cycle Tabs">
- <panel label="Ciclo de un día" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 12 am
- </text>
- <text name="WL3am">
- 3 am
- </text>
- <text name="WL6am">
- 6 am
- </text>
- <text name="WL9amHash">
- 9 am
- </text>
- <text name="WL12pmHash">
- 12 pm
- </text>
- <text name="WL3pm">
- 3 pm
- </text>
- <text name="WL6pm">
- 6 pm
- </text>
- <text name="WL9pm">
- 9 pm
- </text>
- <text name="WL12am2">
- 12 am
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Añadir un punto" label_selected="Añadir un punto" name="WLAddKey"/>
- <button label="Quitar un punto" label_selected="Quitar un punto" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Configuración del fotograma clave:
- </text>
- <text name="WLCurKeyTimeText">
- Hora clave:
- </text>
- <spinner label="Hora" name="WLCurKeyHour"/>
- <spinner label="Min." name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Modelo predefinido:
- </text>
- <combo_box label="Predefinido" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Intervalo:
- </text>
- <combo_box label="5 min." name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Duración del ciclo:
- </text>
- <spinner label="Hora" name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Seg." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Vista previa:
- </text>
- <button label="Probar" label_selected="Probar" name="WLAnimSky"/>
- <button label="Parar" label_selected="Parar" name="WLStopAnimSky"/>
- <button label="Usar el horario del estado" label_selected="Ir al horario del estado" name="WLUseLindenTime"/>
- <button label="Guardar este tipo de día" label_selected="Guardar este tipo de día" name="WLSaveDayCycle"/>
- <button label="Cargar y probar un tipo de día" label_selected="Cargar y probar un tipo de día" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..5e7df8530e
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="ELIMINAR EL ENV PREDEFINIDO">
+ <string name="title_water">
+ Eliminar el agua predefinida
+ </string>
+ <string name="title_sky">
+ Eliminar cielo predefinido
+ </string>
+ <string name="title_day_cycle">
+ Eliminar ciclo del día
+ </string>
+ <string name="label_water">
+ Predefinido:
+ </string>
+ <string name="label_sky">
+ Predefinido:
+ </string>
+ <string name="label_day_cycle">
+ Ciclo del día:
+ </string>
+ <string name="msg_confirm_deletion">
+ ¿Estás seguro de que quieres eliminar el valor predefinido seleccionado?
+ </string>
+ <string name="msg_sky_is_referenced">
+ No se puede quitar un valor predefinido al que se hace referencia en otro u otros ciclos del día.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="label">
+ Predefinido:
+ </text>
+ <button label="Borrar" name="delete"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..6ac46351db
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Editar ciclo del día">
+ <string name="title_new">
+ Crear un ciclo del día nuevo
+ </string>
+ <string name="title_edit">
+ Editar ciclo del día
+ </string>
+ <string name="hint_new">
+ Asigna un nombre al ciclo del día, ajusta los controles para crearlo y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar el ciclo del día, ajusta los controles siguientes y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="label">
+ Nombre predefinido:
+ </text>
+ <text name="note">
+ Nota: Si cambias el nombre del valor predefinido, crearás un predefinido nuevo y el actual no se modificará.
+ </text>
+ <text name="hint_item1">
+ - Pulsa en una pestaña para editar la configuración y el tiempo de un cielo determinado.
+ </text>
+ <text name="hint_item2">
+ - Pulsa y arrastra las pestañas para ajustar los tiempos de transición.
+ </text>
+ <text name="hint_item3">
+ - Usa el depurador para obtener una vista previa del ciclo del día.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Añadir clave" label_selected="Añadir clave" name="WLAddKey"/>
+ <button label="Eliminar clave" label_selected="Eliminar clave" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 12 AM
+ </text>
+ <text name="WL3am">
+ 3 AM
+ </text>
+ <text name="WL6am">
+ 6 AM
+ </text>
+ <text name="WL9amHash">
+ 9 AM
+ </text>
+ <text name="WL12pmHash">
+ 12 PM
+ </text>
+ <text name="WL3pm">
+ 3 PM
+ </text>
+ <text name="WL6pm">
+ 6 PM
+ </text>
+ <text name="WL9pm">
+ 9 PM
+ </text>
+ <text name="WL12am2">
+ 12 AM
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Configuración del cielo:
+ </text>
+ <combo_box label="Predefinido" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Hora:
+ </text>
+ <time name="time" value="6 AM"/>
+ <check_box label="Convertir en mi nuevo ciclo del día" name="make_default_cb"/>
+ <button label="Guardar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..d2197b80fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Editar cielo predefinido">
+ <string name="title_new">
+ Crear un nuevo cielo predefinido
+ </string>
+ <string name="title_edit">
+ Editar cielo predefinido
+ </string>
+ <string name="hint_new">
+ Asigna un nombre al valor predefinido, ajusta los controles para crearlo y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar el cielo predefinido, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="hint">
+ Para editar el valor predefinido, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </text>
+ <text name="label">
+ Nombre predefinido:
+ </text>
+ <text name="note">
+ Nota: Si cambias el nombre del valor predefinido, crearás un predefinido nuevo y el actual no se modificará.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMÓSFERA" name="Atmosphere">
+ <text name="BHText">
+ Horizonte azul
+ </text>
+ <text name="BDensText">
+ Cantidad de bruma
+ </text>
+ <text name="BDensText2">
+ Saturación
+ </text>
+ <text name="HDText">
+ Densidad de la bruma
+ </text>
+ <text name="DensMultText">
+ Densidad
+ </text>
+ <text name="WLDistanceMultText">
+ Distancia
+ </text>
+ <text name="MaxAltText">
+ Altitud máx.
+ </text>
+ </panel>
+ <panel label="LUZ" name="Lighting">
+ <text name="SLCText">
+ Color del sol y de la luna
+ </text>
+ <text name="WLAmbientText">
+ Ambiental
+ </text>
+ <text name="SunGlowText">
+ Resplandor del sol
+ </text>
+ <slider label="Visión" name="WLGlowB"/>
+ <slider label="Tamaño" name="WLGlowR"/>
+ <text name="WLStarText">
+ Brillo de las estrellas
+ </text>
+ <text name="SceneGammaText">
+ Gamma de la escena
+ </text>
+ <text name="TODText">
+ Posición del sol y la luna
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 12 AM
+ </text>
+ <text name="WL6am">
+ 6 AM
+ </text>
+ <text name="WL12pmHash">
+ 12 PM
+ </text>
+ <text name="WL6pm">
+ 6 PM
+ </text>
+ <text name="WL12am2">
+ 12 AM
+ </text>
+ <time name="WLDayTime" value="6:00 AM"/>
+ <text name="WLEastAngleText">
+ Ãngulo de elevación
+ </text>
+ </panel>
+ <panel label="NUBES" name="Clouds">
+ <text name="WLCloudColorText">
+ Color de las nubes
+ </text>
+ <text name="WLCloudColorText2">
+ Posición/Densidad de las nubes
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Nubosidad
+ </text>
+ <text name="WLCloudScaleText">
+ Altitud de las nubes
+ </text>
+ <text name="WLCloudDetailText">
+ Detalle de las nubes (Posición/Densidad)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Velocidad de las nubes: X
+ </text>
+ <check_box label="Lock" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Velocidad de las nubes: Y
+ </text>
+ <check_box label="Lock" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Convertir este valor predefinido en mi nueva configuración de cielo" name="make_default_cb"/>
+ <button label="Guardar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..f90ad59f78
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Editar el agua predefinida">
+ <string name="title_new">
+ Crear una nueva agua predefinida
+ </string>
+ <string name="title_edit">
+ Editar el agua predefinida
+ </string>
+ <string name="hint_new">
+ Asigna un nombre al valor predefinido, ajusta los controles para crearlo y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar el agua predefinida, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecciona un valor predefinido-
+ </string>
+ <text name="hint">
+ Para editar el valor predefinido, ajusta los controles y selecciona &quot;Guardar&quot;.
+ </text>
+ <text name="label">
+ Nombre predefinido:
+ </text>
+ <text name="note">
+ Nota: Si cambias el nombre del valor predefinido, crearás un predefinido nuevo y el actual no se modificará.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Color del agua
+ </text>
+ <text name="water_fog_density_label">
+ Transparencia
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modificar la claridad del agua
+ </text>
+ <text name="BHText">
+ Sentido de las olas grandes
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Tamaño de las ondulaciones
+ </text>
+ <text name="HDText">
+ Escala de Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Coeficiente de reflexión
+ </text>
+ <text name="BHText2">
+ Sentido de las olas pequeñas
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Refracción de la superficie
+ </text>
+ <text name="WaterScaleBelowText">
+ Refracción bajo la superficie
+ </text>
+ <text name="MaxAltText">
+ Desenfoque
+ </text>
+ <text name="BHText3">
+ Vista Normal
+ </text>
+ </panel>
+ <check_box label="Convertir este valor predefinido en mi nueva configuración de agua" name="make_default_cb"/>
+ <button label="Guardar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_env_settings.xml b/indra/newview/skins/default/xui/es/floater_env_settings.xml
deleted file mode 100644
index 195690f546..0000000000
--- a/indra/newview/skins/default/xui/es/floater_env_settings.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDITOR DEL ENTORNO">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Duración de
-un día
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <text name="EnvCloudText">
- Nubosidad
- </text>
- <text name="EnvWaterColorText">
- Color del
-agua
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Pulsa para abrir el selector de color"/>
- <text name="EnvWaterFogText">
- Claridad del
-agua
- </text>
- <button bottom="-144" label="Usar el horario del estado" name="EnvUseEstateTimeButton" width="155"/>
- <button label="Cielo avanzado" left="167" name="EnvAdvancedSkyButton" width="155"/>
- <button label="Agua avanzada" left="326" name="EnvAdvancedWaterButton" width="155"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_environment_settings.xml b/indra/newview/skins/default/xui/es/floater_environment_settings.xml
new file mode 100644
index 0000000000..a9c5705d52
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="CONFIGURACIÓN DE ENTORNO">
+ <text name="note">
+ Puedes personalizar la configuración del entorno de tu visor con las opciones siguientes.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar configuración de región" name="use_region_settings"/>
+ <radio_item label="Personalizar mi entorno" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Nota: La configuración personalizada no estará visible para otros usuarios.
+ </text>
+ <text name="water_settings_title">
+ Configuración de agua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Cielo/Ciclo del día
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo invariable" name="my_sky_settings"/>
+ <radio_item label="Ciclo del día" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_model_preview.xml b/indra/newview/skins/default/xui/es/floater_model_preview.xml
index 6208db75f9..36f988b25f 100644
--- a/indra/newview/skins/default/xui/es/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inactivo
</string>
+ <string name="status_parse_error">
+ Problema de análisis de DAE - consulta los datos en el registro.
+ </string>
<string name="status_reading_file">
Cargando...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Error: El número de intersección es superior a 65534. Cancelado.
</string>
+ <string name="bad_element">
+ Error: el elemento no es válido
+ </string>
<string name="high">
Alto
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Simplificando...
</string>
+ <string name="tbd">
+ TBD
+ </string>
<text name="name_label">
Nombre:
</text>
@@ -74,23 +83,26 @@
Nivel de detalle: Mínimo
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
- <text name="physics cost">
- Coste físico: [COSTE]
- </text>
- <text name="upload fee">
- Cuota de carga: N/A
- </text>
- </panel>
- <text name="status">
- [ESTADO]
+ <text name="warning_title">
+ ATENCIÓN:
+ </text>
+ <text name="warning_message">
+ No podrás terminar de subir este modelo a los servidores de Second Life. [[VURL] Averigua cómo] puedes obtener autorización para subir modelos de malla.
+ </text>
+ <text name="weights_text">
+ Descargar:
+Física:
+Servidor:
+
+Equiv. en prims:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Valores predeterminados" name="reset_btn" tool_tip="Restablecer valores predeterminados"/>
- <button label="Subir" name="ok_btn" tool_tip="Cargar al simulador"/>
- <button label="Cancelar" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Nivel de detalle" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Precio de subida: L$ [FEE]
+ </text>
+ <button label="Establecer en valores predeterminados" name="reset_btn" tool_tip="Establecer en valores predeterminados"/>
+ <button label="Calcular pesos y precio" name="calculate_btn" tool_tip="Calcular pesos y precio"/>
+ <button label="Subir" name="ok_btn" tool_tip="Cargar al simulador"/>
+ <button label="Cancelar" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_model_wizard.xml b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
index 019c2d3829..86de557ed9 100644
--- a/indra/newview/skins/default/xui/es/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/es/floater_model_wizard.xml
@@ -2,190 +2,216 @@
<floater name="Model Wizard" title="CARGAR ASISTENTE DE MODELO">
<button label="5. Subir" name="upload_btn"/>
<button label="4. Revisar" name="review_btn"/>
- <button label="3. Física" name="physics2_btn"/>
<button label="3. Física" name="physics_btn"/>
<button label="2. Optimizar" name="optimize_btn"/>
<button label="1. Seleccionar archivo" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Cargar modelo
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Elige el archivo de modelo
</text>
</panel>
- <text name="description">
- Este asistente te ayudará a importar modelos de redes en Second Life. En primer lugar, especifica un archivo que contenga el modelo que desees importar. Second Life es compatible con los archivos de COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nombre del archivo:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Usuarios avanzados: si tienes experiencia con las herramientas de creación de contenidos 3D, quizá te interese utilizar la función de subida avanzada.
+ </text>
+ <button label="Cambiar al modo Avanzado" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Elige el archivo de modelo que deseas subir
+ </text>
+ <button label="Buscar..." label_selected="Buscar..." name="browse"/>
+ <text name="support_collada_text">
+ ‎Second Life admite los archivos COLLADA (.dae)
+ </text>
+ <text name="dimensions_label">
+ Dimensiones (metros):
</text>
- <button label="Examinar..." label_selected="Examinar..." name="browse"/>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ ATENCIÓN:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ No podrás completar el paso final de la subida de este modelo a los servidores de Second Life. [secondlife:///app/floater/learn_more Averigua cómo] configurar tu cuenta para subir modelos de malla.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Optimizar
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Optimizar el modelo
</text>
</panel>
- <text name="description">
- Este asistente ha optimizado tu modelo con el fin de mejorar el rendimiento. Puedes ajustar los resultados del proceso de optimización a continuación o hacer clic en Siguiente para continuar.
+ <text name="optimize_hint">
+ Hemos optimizado el rendimiento del modelo, pero puedes ajustarlo más si lo deseas.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Generando el nivel de detalle
+ </text>
<text name="high_detail_text">
- Generar nivel de detalle: Alto
+ Generar el nivel de detalle: Alto
</text>
<text name="medium_detail_text">
- Generar nivel de detalle: Media
+ Generar el nivel de detalle: Medio
</text>
<text name="low_detail_text">
- Generar nivel de detalle: Bajo
+ Generar el nivel de detalle: Bajo
</text>
<text name="lowest_detail_text">
- Generar nivel de detalle: Mínimo
+ Generar el nivel de detalle: Mínimo
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Vista previa de modelo:
+ <text name="optimize_performance_text">
+ Rendimiento
+ </text>
+ <text name="optimize_faster_rendering_text">
+ Renderizado más rápido
+Menos detalles
+Menos peso de prim
+ </text>
+ <text name="optimize_accuracy_text">
+ Precisión
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Renderizado más lento
+Más detalles
+Más peso de prim
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Nivel de detalle disponible en la vista previa">
- <combo_item name="high">
- Alto
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Recalcular la geometría" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Vista previa de geometría
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="LOD para ver en renderizado de prueba">
+ <combo_item name="preview_lod_high">
+ Detalle alto
</combo_item>
- <combo_item name="medium">
- Media
+ <combo_item name="preview_lod_medium">
+ Detalles medios
</combo_item>
- <combo_item name="low">
- Bajo
+ <combo_item name="preview_lod_low">
+ Detalle bajo
</combo_item>
- <combo_item name="lowest">
- Mínimo
+ <combo_item name="preview_lod_lowest">
+ Detalles mínimos
</combo_item>
</combo_box>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Ajustar la física
</text>
</panel>
- <text name="description">
- El asistente creará una forma física, que determinará la manera en la que el objeto interactúa con otros objetos y avatares. Selecciona con el controlador deslizante el nivel de detalle más adecuado en función del uso del objeto:
+ <text name="physics_hint">
+ Crearemos una forma para la apariencia exterior del modelo. Ajusta el nivel de detalle de la forma según se necesite para el propósito proyectado del modelo.
</text>
- <panel name="content">
- <text name="streaming cost">
- Coste de recursos: [COSTE]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Rendimiento
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <text name="physics_faster_rendering_text">
+ Renderizado más rápido
+Menos detalles
+Menos peso de prim
</text>
- </panel>
- <text name="description">
- Obtén una vista previa de la forma física a continuación y haz clic en Siguiente para continuar. Para modificar la forma física, haz clic en el botón Atrás.
- </text>
- <panel name="content">
- <text name="lod_label">
- Vista previa de modelo:
+ <text name="physics_accuracy_text">
+ Precisión
+ </text>
+ <text name="physics_slower_dendering_text">
+ Renderizado más lento
+Más detalles
+Más peso de prim
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Nivel de detalle disponible en la vista previa">
- <combo_item name="high">
- Alto
+ <text name="physics_example_1">
+ Ejemplos:
+Objetos en movimiento
+Objetos voladores
+Vehículos
+ </text>
+ <text name="physics_example_2">
+ Ejemplos:
+Objetos estáticos pequeños
+Objetos con menos detalles
+Muebles sencillos
+ </text>
+ <text name="physics_example_3">
+ Ejemplos:
+Objetos estáticos
+Objetos con detalles
+Edificios
+ </text>
+ <button label="Recalcular física" name="recalculate_physics_btn"/>
+ <button label="Recalculando..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Prueba de física
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="LOD para ver en renderizado de prueba">
+ <combo_item name="preview_lod2_high">
+ Detalle alto
</combo_item>
- <combo_item name="medium">
- Media
+ <combo_item name="preview_lod2_medium">
+ Detalles medios
</combo_item>
- <combo_item name="low">
- Bajo
+ <combo_item name="preview_lod2_low">
+ Detalle bajo
</combo_item>
- <combo_item name="lowest">
- Mínimo
+ <combo_item name="preview_lod2_lowest">
+ Detalles mínimos
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Revisar
</text>
</panel>
- <text name="description">
- Revisa los detalles que aparecen más abajo y, a continuación, haz clic. Selecciona la opción de carga para cargar el modelo. Se realizará el cargo en tu saldo de L$ cuando hagas clic en Cargar.
- </text>
- <panel name="content">
- <text name="lod_label">
- Vista previa de modelo:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impacto en la parcela/región: [EQUIV] equivalentes en prim
</text>
- <combo_box name="preview_lod_combo" tool_tip="Nivel de detalle disponible en la vista previa">
- <combo_item name="high">
- Alto
- </combo_item>
- <combo_item name="medium">
- Media
- </combo_item>
- <combo_item name="low">
- Bajo
- </combo_item>
- <combo_item name="lowest">
- Mínimo
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ Cargaremos en tu cuenta el precio de subida de L$ [FEE].
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Al pulsar en el botón de subida, confirmas que posees los derechos necesarios sobre el material que contiene el modelo.
</text>
</panel>
- <text name="streaming cost">
- Coste de recursos: [COSTE]
- </text>
- <text name="physics cost">
- Coste físico: [COSTE]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carga completa.
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Subida finalizada
</text>
</panel>
- <text name="description">
- ¡Felicidades! Tu modelo se ha cargado correctamente. Encontrarás el modelo en la carpeta Objetos del inventario.
+ <text name="model_uploaded_text">
+ Se ha subido tu modelo.
+ </text>
+ <text name="inventory_text">
+ Puedes buscar la carpeta Objetos en tu inventario.
+ </text>
+ <text name="charged_fee">
+ Se han cargado [FEE] L$ en tu cuenta.
</text>
</panel>
<button label="&lt;&lt; Atrás" name="back"/>
<button label="Siguiente &gt;&gt;" name="next"/>
+ <button label="Calcular pesos y precio &gt;&gt;" name="calculate"/>
+ <button label="Calculando..." name="calculating"/>
<button label="Subir" name="upload" tool_tip="Cargar al simulador"/>
<button label="Cancelar" name="cancel"/>
<button label="Cerrar" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inactivo
</string>
+ <string name="status_parse_error">
+ Problema de análisis de DAE - consulta los datos en el registro.
+ </string>
<string name="status_reading_file">
Cargando...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Error: El número de intersección es superior a 65534. Cancelado.
</string>
+ <string name="bad_element">
+ Error: el elemento no es válido
+ </string>
<string name="high">
Alto
</string>
diff --git a/indra/newview/skins/default/xui/es/floater_search.xml b/indra/newview/skins/default/xui/es/floater_search.xml
index 377b848530..e24d8064a1 100644
--- a/indra/newview/skins/default/xui/es/floater_search.xml
+++ b/indra/newview/skins/default/xui/es/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="ENCONTRAR">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Cargando...
</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
index bca1839f09..1da2e491e1 100644
--- a/indra/newview/skins/default/xui/es/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="CONFIGURACIONES DEL DEPURADOR">
<radio_group name="boolean_combo">
- <radio_item label="VERDADERO" name="TRUE" value="verdadero"/>
- <radio_item label="FALSO" name="FALSE" value=""/>
+ <radio_item label="VERDADERO" name="TRUE" />
+ <radio_item label="FALSO" name="FALSE" />
</radio_group>
<color_swatch label="Color" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index 9d29bc40bf..f6e246ebae 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Pulsa y arrastra para seleccionar el terreno.
</floater.string>
- <floater.string name="grid_screen_text">
- Pantalla
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] objetos ( [PRIM_COUNT] prims[PE_STRING] ) seleccionados
</floater.string>
- <floater.string name="grid_local_text">
- Local
- </floater.string>
- <floater.string name="grid_world_text">
- Mundo
- </floater.string>
- <floater.string name="grid_reference_text">
- Referencia
- </floater.string>
- <floater.string name="grid_attachment_text">
- Añadido
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] equivalentes en prim
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Visión"/>
<button label="" label_selected="" name="button move" tool_tip="Mover"/>
@@ -65,21 +56,13 @@
</radio_group>
<check_box label="Editar las partes enlazadas" name="checkbox edit linked parts"/>
<button label="Enlazar" name="link_btn"/>
- <button label="Desenlazar" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Muestra cuánto se calcula que cuesta renderizar este objeto">
- þ: [COUNT]
- </text>
+ <button label="Desenlazar" name="unlink_btn" width="95"/>
<check_box label="" name="checkbox uniform"/>
<text label="Estirar ambos lados" name="checkbox uniform label">
Estirar ambos lados
</text>
<check_box initial_value="true" label="Estirar las texturas" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Usar la cuadrícula" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Elige qué cuadricula usar para posicionar el objeto" width="82">
- <combo_box.item label="Mundo" name="World"/>
- <combo_box.item label="Local" name="Local"/>
- <combo_box.item label="Referencia" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Intervalo" name="checkbox snap to grid"/>
<button label="Opciones..." label_selected="Opciones..." name="Options..." tool_tip="Ver más opciones de la cuadrícula"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -119,23 +102,11 @@
Fuerza
</text>
<button label="Aplicar" label_selected="Aplicar" left="146" name="button apply to selection" tool_tip="Modificar el terreno seleccionado"/>
- <text left="134" name="obj_count">
- Objetos: [COUNT]
- </text>
- <text left="134" name="prim_count">
- Primitivas: [COUNT]
- </text>
- <text name="linked_set_count">
- Conjuntos con enlaces: [RECUENTO]
- </text>
- <text name="linked_set_cost" tool_tip="Coste de los conjuntos con enlaces actualmente seleccionados como [prims], [complejidad física]">
- Coste: [COSTE] / [FÃSICO]
- </text>
- <text name="object_count">
- Objetos: [RECUENTO]
+ <text name="selection_empty">
+ No está seleccionado nada.
</text>
- <text name="object_cost" tool_tip="Coste de los objetos actualmente seleccionados como [prims] / [complejidad física]">
- Coste: [COSTE] / [FÃSICO]
+ <text name="selection_weight">
+ Peso de física [PHYS_WEIGHT], Coste de renderizado [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs" tab_max_width="62" tab_min_width="30" width="288">
<panel label="General" name="General">
@@ -353,7 +324,6 @@
<combo_box.item label="Toroide" name="Torus"/>
<combo_box.item label="Plano" name="Plane"/>
<combo_box.item label="Cilindro" name="Cylinder"/>
- <combo_box.item label="Red" name="Mesh"/>
</combo_box>
</panel>
<panel label="Caracter." name="Features">
@@ -405,7 +375,7 @@
</combo_box>
<spinner label="Gravedad" name="Physics Gravity"/>
<spinner label="Fricción" name="Physics Friction"/>
- <spinner label="Densidad" name="Physics Density"/>
+ <spinner label="Densidad en 100 kg/m^3" name="Physics Density"/>
<spinner label="Reemplazo" name="Physics Restitution"/>
</panel>
<panel label="Textura" name="Texture">
diff --git a/indra/newview/skins/default/xui/es/floater_voice_effect.xml b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
index 5ef4347958..1a265845af 100644
--- a/indra/newview/skins/default/xui/es/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(¡Nuevo!)
</string>
+ <string name="effect_Arena">
+ Campo
+ </string>
+ <string name="effect_Beast">
+ Bestia
+ </string>
+ <string name="effect_Buff">
+ Musculoso
+ </string>
+ <string name="effect_Buzz">
+ Murmullo
+ </string>
+ <string name="effect_Camille">
+ Camila
+ </string>
+ <string name="effect_Creepy">
+ Aterrador
+ </string>
+ <string name="effect_CreepyBot">
+ Robot aterrador
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ Robot profundo
+ </string>
+ <string name="effect_Demon">
+ Diablo
+ </string>
+ <string name="effect_Flirty">
+ Coqueta
+ </string>
+ <string name="effect_Foxy">
+ Astuto
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Halloween_2010_Bonus
+ </string>
+ <string name="effect_Helium">
+ Helio
+ </string>
+ <string name="effect_Husky">
+ Corpulento
+ </string>
+ <string name="effect_Intercom">
+ Intercom
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Pesadilla
+ </string>
+ <string name="effect_PopBot">
+ Robot pop
+ </string>
+ <string name="effect_Rachel">
+ Raquel
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Robot
+ </string>
+ <string name="effect_Roxanne">
+ Roxana
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samanta
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Bajito
+ </string>
+ <string name="effect_Sneaky">
+ Furtivo
+ </string>
+ <string name="effect_Stallion">
+ Mujeriego
+ </string>
+ <string name="effect_Sultry">
+ Sensual
+ </string>
+ <string name="effect_Thunder">
+ Trueno
+ </string>
+ <string name="effect_Vixen">
+ Tigresa
+ </string>
+ <string name="effect_WhinyBot">
+ Robot llorica
+ </string>
<text name="preview_text">
Para probarla
</text>
diff --git a/indra/newview/skins/default/xui/es/floater_water.xml b/indra/newview/skins/default/xui/es/floater_water.xml
deleted file mode 100644
index 2c1f6cfbfb..0000000000
--- a/indra/newview/skins/default/xui/es/floater_water.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="EDITOR AVANZADO DEL AGUA">
- <text name="KeyFramePresetsText">
- Agua predefinida:
- </text>
- <button label="Nueva" label_selected="Nueva" name="WaterNewPreset"/>
- <button label="Guardar" label_selected="Guardar" name="WaterSavePreset"/>
- <button label="Borrar" label_selected="Borrar" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="CONFIGURACIÓN" name="Settings">
- <text name="BHText">
- Color del agua
- </text>
- <button label="?" left="175" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Pulsa para abrir el selector de color"/>
- <text name="WaterFogDensText">
- Transparencia
- </text>
- <button label="?" left="175" name="WaterFogDensityHelp"/>
- <text name="WaterUnderWaterFogModText">
- Modificar la claridad del agua
- </text>
- <button label="?" left="175" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Tamaño de las ondulaciones
- </text>
- <button label="?" left="405" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Escala de Fresnel
- </text>
- <button label="?" left="405" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Coeficiente de reflexión
- </text>
- <button label="?" left="405" name="WaterFresnelOffsetHelp"/>
- <text name="DensMultText">
- Refracción de la superficie
- </text>
- <button label="?" left="640" name="WaterScaleAboveHelp"/>
- <text name="WaterScaleBelowText">
- Refracción bajo la superficie
- </text>
- <button label="?" left="640" name="WaterScaleBelowHelp"/>
- <text name="MaxAltText">
- Desenfoque
- </text>
- <button label="?" left="640" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="IMAGEN" name="Waves">
- <text name="BHText">
- Sentido de la onda grande
- </text>
- <button label="?" left="170" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Sentido de la onda pequeña
- </text>
- <button label="?" left="170" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Vista Normal
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_windlight_options.xml b/indra/newview/skins/default/xui/es/floater_windlight_options.xml
deleted file mode 100644
index 585a42e429..0000000000
--- a/indra/newview/skins/default/xui/es/floater_windlight_options.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="EDITOR AVANZADO DEL CIELO">
- <text name="KeyFramePresetsText">
- Cielos definidos:
- </text>
- <button label="Nuevo" label_selected="Nuevo" name="WLNewPreset"/>
- <button label="Guardar" label_selected="Guardar" name="WLSavePreset"/>
- <button label="Borrar" label_selected="Borrar" name="WLDeletePreset"/>
- <button font="SansSerifSmall" label="Editor del ciclo de un día" label_selected="Editor del ciclo de un día" left_delta="90" name="WLDayCycleMenuButton" width="150"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMÓSFERA" name="Atmosphere">
- <text name="BHText">
- Coloración
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- V
- </text>
- <text name="BHText4">
- A
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Cantidad de bruma
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Saturación
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- V
- </text>
- <text name="BHText8">
- A
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densidad de la bruma
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Densidad
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Distancia
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitud máx.
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="LUZ" name="Lighting">
- <text name="SLCText">
- Color del Sol y de la Luna
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- A
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Posición del Sol y la Luna
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Ambiental
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- V
- </text>
- <text name="BHText7">
- A
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Ãngulo de elevación
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Resplandor del Sol
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Visión" name="WLGlowB"/>
- <slider label="Tamaño" name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma de la escena
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Brillo de las estrellas
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUBES" name="Clouds">
- <text name="WLCloudColorText">
- Color de las nubes
- </text>
- <button label="?" left="190" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- A
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Posición/Densidad de las nubes
- </text>
- <button label="?" left="190" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Nubosidad
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Altitud de las nubes
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text font="SansSerifSmall" name="WLCloudDetailText">
- Detalle de las nubes (Posición/Densidad)
- </text>
- <button label="?" name="WLCloudDetailHelp"/>
- <text bottom="-113" name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <slider bottom="-127" name="WLCloudDetailX"/>
- <text name="WLCloudScrollXText">
- Velocidad de X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Bloquear" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Velocidad de Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Bloquear" name="WLCloudLockY"/>
- <check_box label="Incluir nubes clásicas" name="DrawClassicClouds"/>
- <button label="?" left="618" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
index c27d624732..cabcacaed5 100644
--- a/indra/newview/skins/default/xui/es/menu_login.xml
+++ b/indra/newview/skins/default/xui/es/menu_login.xml
@@ -17,7 +17,7 @@
<menu_item_call label="Mostrar los &apos;TOS&apos;" name="TOS"/>
<menu_item_call label="Mostrar mensaje crítico" name="Critical"/>
<menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/>
- <menu_item_call label="Prueba de ventanas de contenidos web" name="Web Content Floater Test"/>
+ <menu_item_call label="Prueba de depuración de ventanas de contenido web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Mostrar el selector de Grid" name="Show Grid Picker"/>
<menu_item_call label="Mostrar la consola de notificaciones" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
index f0fe383c0c..1403e4db01 100644
--- a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
<menu_item_check label="Ordenar según distancia" name="sort_distance"/>
<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+ <menu_item_check label="Ver mapa" name="view_map"/>
<menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 0824e386d5..b0d16d1ca4 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Mis grupos" name="My Groups"/>
<menu_item_check label="Chat" name="Nearby Chat"/>
<menu_item_call label="Gente cerca" name="Active Speakers"/>
+ <menu_item_check label="Chat de voz" name="Nearby Voice"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_check label="Minimapa" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Mediodía" name="Noon"/>
<menu_item_call label="Atardecer" name="Sunset"/>
<menu_item_call label="Medianoche" name="Midnight"/>
- <menu_item_call label="Hora del Estado" name="Revert to Region Default"/>
- <menu_item_call label="Editor del entorno" name="Environment Editor"/>
+ </menu>
+ <menu label="Editor de entorno" name="Enviroment Editor">
+ <menu_item_call label="Configuración de entorno..." name="Enviroment Settings"/>
+ <menu label="Agua predefinida" name="Water Presets">
+ <menu_item_call label="Nuevo predefinido..." name="new_water_preset"/>
+ <menu_item_call label="Editar predefinido..." name="edit_water_preset"/>
+ <menu_item_call label="Eliminar predefinido..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Cielos predefinidos" name="Sky Presets">
+ <menu_item_call label="Nuevo predefinido..." name="new_sky_preset"/>
+ <menu_item_call label="Editar predefinido..." name="edit_sky_preset"/>
+ <menu_item_call label="Eliminar predefinido..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Días predefinidos" name="Day Presets">
+ <menu_item_call label="Nuevo predefinido..." name="new_day_preset"/>
+ <menu_item_call label="Editar predefinido..." name="edit_day_preset"/>
+ <menu_item_call label="Eliminar predefinido..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Construir" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Desactivar los límites de la cámara" name="Disable Camera Distance"/>
<menu_item_check label="Foto en Alta Resolución" name="HighResSnapshot"/>
<menu_item_check label="Silenciar el Guardar una foto" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Comprimir las fotos para el disco duro" name="CompressSnapshotsToDisk"/>
<menu label="Herramientas de rendimiento" name="Performance Tools">
<menu_item_call label="Medidor de lag" name="Lag Meter"/>
<menu_item_check label="Estadísticas" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
index 9d9ce75e53..ec13f99a01 100644
--- a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Editar el vestuario" name="edit"/>
<menu_item_call label="Quitarme" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copiar la lista del vestuario al portapapeles" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index b2131fc038..2ec1b333a9 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -1560,6 +1560,11 @@ Vuelve a intentarlo más tarde.
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Has intentado hacer [OFFERS] ofertas de teleporte,
+excediendo el límite de [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
¿Obligar a este Residente a ir a tu localización?
<form name="form">
@@ -1980,6 +1985,10 @@ Linden Lab
¿Estás seguro de que quieres borrar tu historial web, de viajes y de búsquedas?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ ¿Estás seguro de que quieres vaciar la caché del visor?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
¿Estás seguro de que quieres limpiar tus cookies?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sí"/>
@@ -2005,48 +2014,30 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
¿Quieres sobrescribir la preselección guardada?
<usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
- <notification name="WLDeletePresetAlert">
- ¿Quieres borrar [SKY]?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
- </notification>
<notification name="WLNoEditDefault">
No puedes editar ni borrar una preselección por defecto.
</notification>
<notification name="WLMissingSky">
Este archivo del ciclo de un día se refiere a un archivo perdido de cielo: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Ya existe un efecto de procesamiento. ¿Quieres sobreescribirlo?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
+ <notification name="WLRegionApplyFail">
+ No se pudo aplicar la configuración a la región. El problema podría solucionarse saliendo de la región y regresando a ella. La razón especificada fue: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Dame un nombre para el cielo nuevo.
- <form name="form">
- <input name="message">
- Preselección nueva
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- ¡Esa preselección ya existe!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ No se puede eliminar la última clave de este ciclo del día, ya que no puedes vaciar la caché del día. En lugar de intentar eliminar la última clave restante y después intentar crear una nueva, debes modificarla.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Dame un nombre para la nueva preselección de agua.
- <form name="form">
- <input name="message">
- Preselección nueva
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ No se pueden añadir más fotogramas clave a este ciclo del día. El número máximo de fotogramas clave para ciclos del día de alcance [SCOPE] es [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- ¡Esa preselección ya existe!
+ <notification name="EnvUpdateRate">
+ La configuración de entorno de la región sólo puede actualizarse cada [WAIT] segundos. Espera por lo menos este tiempo y vuelve intentarlo.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- No puedes editar o borrar una preselección por defecto.
+ <notification name="PPSaveEffectAlert">
+ Ya existe un efecto de procesamiento. ¿Quieres sobreescribirlo?
+ <usetemplate name="okcancelbuttons" notext="No" yestext="Sí"/>
</notification>
<notification name="ChatterBoxSessionStartError">
No se puede empezar una nueva sesión de chat con [RECIPIENT].
@@ -2075,13 +2066,14 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
<usetemplate ignoretext="Ponerme la ropa que estoy creando mientras modifico mi apariencia" name="okcancelignore" notext="No" yestext="Sí"/>
</notification>
<notification name="NotAgeVerified">
- Debes haber verificado tu edad para visitar este sitio. ¿Quieres ir al sitio web de [SECOND_LIFE] y verificarla?
+ Para acceder al contenido Adulto y los lugares de Second Life con dicho carácter, debes tener por lo menos 18 años. Visita la página de verificación de edad para confirmar que tienes más de 18 años.
+Al hacerlo se iniciará el navegador web.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=es
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="No he verificado mi edad" name="okcancelignore" notext="No" yestext="Sí"/>
+ <usetemplate ignoretext="No he verificado mi edad" name="okcancelignore" notext="Cancelar" yestext="Ir a Verificación de la edad"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Para visitar este sitio debes haber aportado información de pago en tu cuenta. ¿Quieres ir al sitio web de [SECOND_LIFE] y configurar esto?
@@ -2337,6 +2329,9 @@ Aquí no puedes volar.
<notification name="NoBuild">
Este terreno tiene desactivado el poder construir. Aquí no puedes ni construir ni crear objetos.
</notification>
+ <notification name="SeeAvatars">
+ Esta parcela oculta los avatares y el chat de texto de otras parcelas. No podrás ver a los residentes que estén fuera la parcela ni ellos podrán verte a ti. El chat de texto regular del canal 0 también está bloqueado.
+ </notification>
<notification name="ScriptsStopped">
Un administrador ha detenido temporalmente los scripts en esta región.
</notification>
@@ -2431,7 +2426,7 @@ Por favor, vuelve a intentarlo en unos momentos.
</notification>
<notification name="ObjectGiveItem">
Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Guardar"/>
<button name="Discard" text="Descartar"/>
@@ -2763,7 +2758,15 @@ Se mostrará cuando haya suficiente espacio.
Selecciona los residentes con quienes deseas compartir.
</notification>
<notification name="MeshUploadError">
- No se ha cargado [ETIQUETA]: [MENSAJE] [IDENTIFICADOR] [IDENTIFICADOR_FALTA_VALIDEZ]
+ [LABEL] no se pudo subir: [MESSAGE] [IDENTIFIER]
+
+Consulta los detalles en el archivo de registro.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Error al solicitar los permisos para subir la malla.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ No se ha podido obtener la capacidad de la región &apos;[CAPABILITY]&apos;.
</notification>
<notification name="ShareItemsConfirmation">
¿Estás seguro de que quieres compartir los elementos siguientes?
diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
index 9b101ee4ba..cda465da9c 100644
--- a/indra/newview/skins/default/xui/es/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Guardar" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Cancelar" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_list.xml b/indra/newview/skins/default/xui/es/panel_outfits_list.xml
index 661b44e419..3f8057f242 100644
--- a/indra/newview/skins/default/xui/es/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/es/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="¿No encuentras lo que buscas? Inténtalo con [secondlife:///app/search/all/[SEARCH_TERM] Buscar]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Todavía no tienes vestuario. Inténtalo con [secondlife:///app/search/all/ Buscar]"/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Ver más opciones"/>
+ <menu_button name="options_gear_btn" tool_tip="Ver más opciones"/>
<button name="trash_btn" tool_tip="Eliminar el vestuario seleccionado"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 01149e412d..2fcbb00aed 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -66,17 +66,17 @@
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml
index 3c363859a4..e1cf1332e2 100644
--- a/indra/newview/skins/default/xui/es/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_place_profile.xml
@@ -64,6 +64,8 @@
<text name="scripts_value" value="Sí"/>
<text name="damage_label" value="Daño:"/>
<text name="damage_value" value="No"/>
+ <text name="see_avatars_label" value="Ver los avatares:"/>
+ <text name="see_avatars_value" value="No"/>
<button label="Acerca del terreno" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
index 4c90a7e6b4..e9984b4512 100644
--- a/indra/newview/skins/default/xui/es/panel_places.xml
+++ b/indra/newview/skins/default/xui/es/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
index 96e63e6fa0..620a95de4d 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Caché:
+ </text>
+ <spinner label="Tamaño de la caché (64 - 9984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Vaciar la caché" label_selected="Vaciar la caché" name="clear_cache"/>
+ <text name="Cache location">
+ Localización de la caché:
+ </text>
+ <button label="Elegir" label_selected="Elegir" name="set_cache"/>
+ <button label="Ubicación predeterminada" label_selected="Ubicación predeterminada" name="default_cache_location"/>
<text name="UI Size:">
Tamaño de la UI:
</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
index e6e4c13203..d47a6d718a 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
@@ -39,6 +39,6 @@
<text name="floater_opacity">
Opacidad de la ventana:
</text>
- <slider label="Activo:" name="active"/>
- <slider label="Inactivo:" name="inactive"/>
+ <slider label="Activa:" name="active"/>
+ <slider label="Inactiva:" name="inactive"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
index fa7806a75a..5cb1654c70 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
@@ -12,13 +12,14 @@
<slider label="Ambiental" name="Wind Volume"/>
<slider label="Efectos de sonido" name="SFX Volume"/>
<slider label="Música en streaming" name="Music Volume"/>
- <check_box label="Activados" name="enable_music"/>
+ <check_box label="Activada" name="enable_music"/>
<slider label="Multimedia" name="Media Volume"/>
<check_box label="Activados" name="enable_media"/>
<slider label="Chat de voz" name="Voice Volume"/>
<check_box label="Activado" name="enable_voice_check"/>
<check_box label="Permitir la ejecución automática de los media" name="media_auto_play_btn" tool_tip="Marcar esto para permitir la ejecución automática de los media" value="true"/>
<check_box label="Ejecutar para otros avatares los media anexados" name="media_show_on_others_btn" tool_tip="Al desmarcar esto se esconderán los media anexados a otros avatares cercanos" value="true"/>
+ <check_box label="Reproducir sonidos de los gestos" name="gesture_audio_play_btn" tool_tip="Selecciona esta opción para escuchar los sonidos de los gestos" value="verdadero"/>
<text name="voice_chat_settings">
Configuración del chat de voz
</text>
@@ -35,28 +36,5 @@
<button label="Elegir la tecla" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Reconfigurarlo al botón medio del ratón"/>
<button label="Dispositivos de entrada y salida" name="device_settings_btn" width="210"/>
- <panel label="Configuración de dispositivos" name="device_settings_panel">
- <panel.string name="default_text">
- Por defecto
- </panel.string>
- <panel.string name="default system device">
- Dispositivo del sistema por defecto
- </panel.string>
- <panel.string name="no device">
- Ningún dispositivo
- </panel.string>
- <text name="Input">
- Entrada
- </text>
- <text name="My volume label">
- Mi volumen:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia el volumen usando este deslizable"/>
- <text name="wait_text">
- Por favor, espera
- </text>
- <text name="Output">
- Salida
- </text>
- </panel>
+ <panel label="Configuración de dispositivos" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_environment.xml b/indra/newview/skins/default/xui/es/panel_region_environment.xml
new file mode 100644
index 0000000000..a73f1deed4
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Entorno" name="panel_env_info">
+ <text name="water_settings_title">
+ Selecciona la configuración de agua y cielo/ciclo del día que deseas que vean todos los visitantes de tu región. Más información
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar los valores predeterminados de Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Usar la configuración siguiente" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Configuración de agua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Cielo/Ciclo del día
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo invariable" name="my_sky_settings"/>
+ <radio_item label="Ciclo del día" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecciona un valor predefinido-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Aplicar" name="apply_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_region_terrain.xml b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
index 98b10e4895..cb6c03dbb5 100644
--- a/indra/newview/skins/default/xui/es/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
@@ -7,21 +7,56 @@
desconocida
</text>
<spinner label="Nivel del agua" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Límite de elevación &#10;del terreno" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Límite de bajada del &#10;terreno" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Usar el Sol del estado" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Fijar el Sol" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Fase" name="sun_hour_slider"/>
+ <spinner label="Límite de elevación
+del terreno" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Límite de bajada del
+terreno" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Texturas del terreno (requiere archivos .tga de 512x512, 24 bits)
+ </text>
+ <text name="height_text_lbl">
+ 1 (bajo)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (alto)
+ </text>
+ <text name="height_text_lbl5">
+ Intervalos de elevación de textura
+ </text>
+ <text name="height_text_lbl10">
+ Estos valores representan la gama de mezclas para las texturas anteriores.
+ </text>
+ <text name="height_text_lbl11">
+ El valor BAJA mide en metros la altura MÃXIMA de la textura n.º 1, y el valor ALTA es la altura MÃNIMA de la textura n.º 4.
+ </text>
+ <text name="height_text_lbl6">
+ Noroeste
+ </text>
+ <text name="height_text_lbl7">
+ Noreste
+ </text>
+ <spinner label="Bajo" name="height_start_spin_1"/>
+ <spinner label="Bajo" name="height_start_spin_3"/>
+ <spinner label="Alto" name="height_range_spin_1"/>
+ <spinner label="Alto" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Suroeste
+ </text>
+ <text name="height_text_lbl9">
+ Sureste
+ </text>
+ <spinner label="Bajo" name="height_start_spin_0"/>
+ <spinner label="Bajo" name="height_start_spin_2"/>
+ <spinner label="Alto" name="height_range_spin_0"/>
+ <spinner label="Alto" name="height_range_spin_2"/>
+ <button label="Descargar el RAW del terreno..." name="download_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores" width="230"/>
+ <button label="Subir un RAW para el terreno..." name="upload_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores" width="230"/>
+ <button label="Predeterminar este terreno" name="bake_terrain_btn" tool_tip="Definir el terreno actual como punto medio para los límites de elevación/bajada" width="230"/>
<button label="Aplicar" name="apply_btn"/>
- <button width="230" label="Descargar el RAW del terreno..." name="download_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
- <button left="246" label="?" name="download_raw_help"/>
- <button width="230" label="Subir un RAW para el terreno..." name="upload_raw_btn" tool_tip="Disponible sólo para los propietarios del estado, no para los administradores"/>
- <button left="246" label="?" name="upload_raw_help"/>
- <button width="230" label="Predeterminar este terreno" name="bake_terrain_btn" tool_tip="Definir el terreno actual como punto medio para los límites de elevación/bajada"/>
- <button left="246" label="?" name="bake_terrain_help"/>
</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_sound_devices.xml b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
index acf5c68cda..9531b99cc8 100644
--- a/indra/newview/skins/default/xui/es/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Por defecto
</panel.string>
+ <string name="name_no_device">
+ Ningún dispositivo
+ </string>
+ <string name="name_default_system_device">
+ Dispositivo del sistema por defecto
+ </string>
<text name="Input">
Entrada
</text>
+ <text name="Output">
+ Salida
+ </text>
<text name="My volume label">
Mi volumen:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Por favor, espera
</text>
- <text name="Output">
- Salida
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
index b233fdd734..84d19c703b 100644
--- a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Cosas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Objetos recibidos ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Objetos recibidos
+ </string>
+ <button label="Objetos recibidos" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] Nuevos
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Aquí se entregarán las compras realizadas en el mercado.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Buzón de salida de comerciante" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Poner en el escaparate de Mi Mercado"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Configura tu cuenta de comerciante para utilizar esta función.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index b759eed738..2c33177ab4 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -25,6 +25,9 @@
<string name="StartupInitializingVFS">
Iniciando VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Error de inicialización de gráficos. Actualiza tu controlador de gráficos.
+ </string>
<string name="ProgressRestoring">
Restaurando...
</string>
@@ -79,6 +82,12 @@
<string name="LoginQuicktimeOK">
QuickTime se ha iniciado adecuadamente.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Solicitando capacidades de la región...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Solicitando capacidades de la región, intento [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
Esperando la conexión con la región...
</string>
@@ -1171,6 +1180,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="InventoryNoTexture">
No tienes en tu inventario una copia de esta textura
</string>
+ <string name="InventoryInboxNoItems">
+ Aquí se entregarán los objetos comprados en el mercado.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Arrastra objetos aquí para preparar una lista del escaparate de tu mercado.
+ </string>
<string name="no_transfer" value="(no transferible)"/>
<string name="no_modify" value="(no modificable)"/>
<string name="no_copy" value="(no copiable)"/>
@@ -1211,9 +1226,6 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="InvFolder My Inventory">
Mi Inventario
</string>
- <string name="InvFolder My Favorites">
- Mis Favoritos
- </string>
<string name="InvFolder Library">
Biblioteca
</string>
@@ -1272,10 +1284,10 @@ Intenta iniciar sesión de nuevo en unos instantes.
Gestos
</string>
<string name="InvFolder Favorite">
- Favoritos
+ Mis Favoritos
</string>
<string name="InvFolder favorite">
- Favoritos
+ Mis Favoritos
</string>
<string name="InvFolder Current Outfit">
Vestuario actual
@@ -1298,6 +1310,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="InvFolder All">
Todas
</string>
+ <string name="no_attachments">
+ No tienes puestos anexos
+ </string>
<string name="Buy">
Comprar
</string>
@@ -1607,6 +1622,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
</string>
<string name="SummaryForTheWeek" value="Resumen de esta semana, empezando el "/>
<string name="NextStipendDay" value=". El próximo día de pago es el "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value="Grupo Aportaciones individuales"/>
<string name="GroupColumn" value="Grupo"/>
<string name="Balance">
@@ -1633,6 +1651,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="IMTeen">
teen
</string>
+ <string name="Anyone">
+ cualquiera
+ </string>
<string name="RegionInfoError">
error
</string>
@@ -1849,6 +1870,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="Public">
Público
</string>
+ <string name="LocalSettings">
+ Configuración local
+ </string>
+ <string name="RegionSettings">
+ Configuración de la región
+ </string>
<string name="ClassifiedClicksTxt">
Clics: [TELEPORT] teleportes, [MAP] mapa, [PROFILE] perfil
</string>
@@ -1921,6 +1948,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
<string name="GroupMoneyDebits">
Débitos
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Contenidos
</string>
@@ -3640,6 +3670,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Región General
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Los avatares están visibles y está permitido el chat fuera de esta parcela
+ </string>
<string name="UpdaterWindowTitle">
Actualizar [APP_NAME]
</string>
@@ -4056,6 +4089,87 @@ Denuncia de infracción
<string name="Female - Wow">
Mujer - Admiración
</string>
+ <string name="/bow">
+ /reverencia
+ </string>
+ <string name="/clap">
+ /aplaudir
+ </string>
+ <string name="/count">
+ /contar
+ </string>
+ <string name="/extinguish">
+ /apagar
+ </string>
+ <string name="/kmb">
+ /bmc
+ </string>
+ <string name="/muscle">
+ /músculo
+ </string>
+ <string name="/no">
+ /no
+ </string>
+ <string name="/no!">
+ /¡no!
+ </string>
+ <string name="/paper">
+ /papel
+ </string>
+ <string name="/pointme">
+ /señalarme
+ </string>
+ <string name="/pointyou">
+ /señalarte
+ </string>
+ <string name="/rock">
+ /piedra
+ </string>
+ <string name="/scissor">
+ /tijera
+ </string>
+ <string name="/smoke">
+ /fumar
+ </string>
+ <string name="/stretch">
+ /estirar
+ </string>
+ <string name="/whistle">
+ /silbar
+ </string>
+ <string name="/yes">
+ /sí
+ </string>
+ <string name="/yes!">
+ /¡sí!
+ </string>
+ <string name="afk">
+ ausente
+ </string>
+ <string name="dance1">
+ baile1
+ </string>
+ <string name="dance2">
+ baile2
+ </string>
+ <string name="dance3">
+ baile3
+ </string>
+ <string name="dance4">
+ baile4
+ </string>
+ <string name="dance5">
+ baile5
+ </string>
+ <string name="dance6">
+ baile6
+ </string>
+ <string name="dance7">
+ baile7
+ </string>
+ <string name="dance8">
+ baile8
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index bef41bb1ba..55dd913a22 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -135,12 +135,12 @@
0
</text>
<button label="Acheter du terrain" label_selected="Acheter le terrain..." left_delta="60" name="Buy Land..." width="125"/>
+ <button label="Vente Linden" label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
<button label="Infos sur les scripts" name="Scripts..." width="110"/>
<button label="Acheter pour le groupe" label_selected="Acheter pour le groupe..." name="Buy For Group..."/>
<button label="Acheter un pass" label_selected="Acheter un pass..." left_delta="-127" name="Buy Pass..." tool_tip="Un pass vous donne un accès temporaire à ce terrain." width="125"/>
<button label="Abandonner le terrain" label_selected="Abandonner le terrain..." name="Abandon Land..."/>
<button label="Récupérer le terrain" label_selected="Redemander le terrain…" name="Reclaim Land..."/>
- <button label="Vente Linden" label_selected="Vente Linden..." name="Linden Sale..." tool_tip="Le terrain doit être la propriété d&apos;un résident, avoir un contenu défini et ne pas être aux enchères."/>
</panel>
<panel label="RÈGLEMENT" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -312,6 +312,9 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
<panel.string name="push_restrict_region_text">
Pas de bousculades (les règles de la région priment)
</panel.string>
+ <panel.string name="see_avs_text">
+ Voir et chatter avec les résidents sur cette parcelle
+ </panel.string>
<text name="allow_label">
Autoriser les autres résidents à :
</text>
@@ -374,6 +377,10 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
Photo :
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Cliquez pour sélectionner une image"/>
+ <text name="allow_label5">
+ Autoriser les résidents sur les autres parcelles à :
+ </text>
+ <check_box label="Voir les avatars" name="SeeAvatarsCheck" tool_tip="Permettre aux résidents présents sur d&apos;autres parcelles de voir et chatter avec les résidents présents sur cette parcelle et vous permettre de les voir et de chatter avec eux."/>
<text name="landing_point">
Lieu d&apos;arrivée : [LANDING]
</text>
@@ -434,6 +441,11 @@ musique :
Son :
</text>
<check_box label="Limiter les gestes et sons d&apos;objet à cette parcelle" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Sons d&apos;avatar :
+ </text>
+ <check_box label="Tout le monde" name="all av sound check"/>
+ <check_box label="Groupe" name="group av sound check"/>
<text name="Voice settings:">
Voix :
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
index cad00ea866..a200ed192f 100644
--- a/indra/newview/skins/default/xui/fr/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/fr/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPTIONS DE LA GRILLE">
+ <floater.string name="grid_screen_text">
+ Écran
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Locale
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Monde
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Référence
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Élément attaché
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacité de la grille">
+ Mode
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Choisir le type d&apos;axe de grille pour le positionnement de l&apos;objet.">
+ <combo_box.item label="Grille du monde" name="World"/>
+ <combo_box.item label="Grille locale" name="Local"/>
+ <combo_box.item label="Grille de référence" name="Reference"/>
+ </combo_box>
<spinner label="Unités (mètres)" name="GridResolution"/>
- <spinner label="Mesures (mètres)" name="GridDrawSize"/>
+ <spinner label="Étendue (mètres)" name="GridDrawSize"/>
<check_box label="Fixation des sous-unités" name="GridSubUnit"/>
<check_box label="Afficher les sections transversales" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacité de la grille">
diff --git a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
deleted file mode 100644
index 0ce17b9dc6..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITEUR DU CYCLE DU JOUR">
- <tab_container name="Day Cycle Tabs">
- <panel label="Cycle du jour" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- Min.
- </text>
- <text name="WL3am">
- 3h
- </text>
- <text name="WL6am">
- 6h
- </text>
- <text name="WL9amHash">
- 9h
- </text>
- <text name="WL12pmHash">
- Midi
- </text>
- <text name="WL3pm">
- 15h
- </text>
- <text name="WL6pm">
- 18h
- </text>
- <text name="WL9pm">
- 21h
- </text>
- <text name="WL12am2">
- Min.
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Ajouter clé" label_selected="Ajouter clé" name="WLAddKey"/>
- <button label="Supprimer clé" label_selected="Supprimer clé" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Réglages des images-clés :
- </text>
- <text name="WLCurKeyTimeText">
- Heure de la clé :
- </text>
- <spinner label="Heure" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Préréglages clés :
- </text>
- <combo_box label="Préréglage" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Snap :
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Durée du cycle :
- </text>
- <spinner label="Heure" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sec" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Aperçu :
- </text>
- <button label="Lire" label_selected="Lire" name="WLAnimSky"/>
- <button label="Arrêter" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Utiliser heure domaine" label_selected="Aller heure domaine" name="WLUseLindenTime"/>
- <button label="Enregistrer jour test" label_selected="Enregistrer jour test" name="WLSaveDayCycle"/>
- <button label="Charger jour test" label_selected="Charger jour test" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..035bdbe5f3
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="SUPPRIMER PRÉRÉGLAGE ENV.">
+ <string name="title_water">
+ Supprimer un préréglage de l&apos;eau
+ </string>
+ <string name="title_sky">
+ Supprimer un préréglage du ciel
+ </string>
+ <string name="title_day_cycle">
+ Supprimer un cycle du jour
+ </string>
+ <string name="label_water">
+ Préréglage :
+ </string>
+ <string name="label_sky">
+ Préréglage :
+ </string>
+ <string name="label_day_cycle">
+ Cycle du jour :
+ </string>
+ <string name="msg_confirm_deletion">
+ Voulez-vous vraiment supprimer le préréglage sélectionné ?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Impossible de supprimer un préréglage référencé dans un ou plusieurs cycles du jour.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="label">
+ Préréglage :
+ </text>
+ <button label="Supprimer" name="delete"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..0100419bc5
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Modifier un cycle du jour">
+ <string name="title_new">
+ Créer un nouveau cycle du jour
+ </string>
+ <string name="title_edit">
+ Modifier un cycle du jour
+ </string>
+ <string name="hint_new">
+ Donnez un nom au cycle du jour, ajustez les contrôles afin de le créer, puis cliquez sur Enregistrer.
+ </string>
+ <string name="hint_edit">
+ Pour modifier le cycle du jour, ajustez les contrôles ci-dessous, puis cliquez sur Enregistrer.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="label">
+ Nom du préréglage :
+ </text>
+ <text name="note">
+ Remarque : si vous changez votre préréglage de nom, un nouveau préréglage sera créé et celui existant restera tel quel.
+ </text>
+ <text name="hint_item1">
+ - Cliquez sur un repère pour modifier le réglage du ciel et l&apos;heure associés.
+ </text>
+ <text name="hint_item2">
+ - Cliquez sur les repères et faites-les glisser afin de définir les heures de transition.
+ </text>
+ <text name="hint_item3">
+ - Déplacez le marqueur en forme de triangle pour afficher un aperçu du cycle du jour.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Ajouter clé" label_selected="Ajouter clé" name="WLAddKey"/>
+ <button label="Supprimer clé" label_selected="Supprimer clé" name="WLDeleteKey"/>
+ <text name="WL12am">
+ Min.
+ </text>
+ <text name="WL3am">
+ 3h
+ </text>
+ <text name="WL6am">
+ 6h
+ </text>
+ <text name="WL9amHash">
+ 9h
+ </text>
+ <text name="WL12pmHash">
+ Midi
+ </text>
+ <text name="WL3pm">
+ 15h
+ </text>
+ <text name="WL6pm">
+ 18h
+ </text>
+ <text name="WL9pm">
+ 21h
+ </text>
+ <text name="WL12am2">
+ Min.
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Réglage du ciel :
+ </text>
+ <combo_box label="Préréglage" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Heure :
+ </text>
+ <time name="time" value="6h"/>
+ <check_box label="Appliquer ce nouveau cycle du jour" name="make_default_cb"/>
+ <button label="Enregistrer" name="save"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..4ec9bbb3dd
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Modifier un préréglage du ciel">
+ <string name="title_new">
+ Créer un nouveau préréglage du ciel
+ </string>
+ <string name="title_edit">
+ Modifier un préréglage du ciel
+ </string>
+ <string name="hint_new">
+ Donnez un nom à votre préréglage, ajustez les contrôles afin de le créer, puis cliquez sur Enregistrer.
+ </string>
+ <string name="hint_edit">
+ Pour modifier le préréglage du ciel, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="hint">
+ Pour modifier le préréglage, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </text>
+ <text name="label">
+ Nom du préréglage :
+ </text>
+ <text name="note">
+ Remarque : si vous changez votre préréglage de nom, un nouveau préréglage sera créé et celui existant restera tel quel.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSPHÈRE" name="Atmosphere">
+ <text name="BHText">
+ Bleu de l&apos;horizon
+ </text>
+ <text name="BDensText">
+ Quantité de brume
+ </text>
+ <text name="BDensText2">
+ Densité du bleu
+ </text>
+ <text name="HDText">
+ Densité de la brume
+ </text>
+ <text name="DensMultText">
+ Multiplicateur de densité
+ </text>
+ <text name="WLDistanceMultText">
+ Multiplicateur de distance
+ </text>
+ <text name="MaxAltText">
+ Altitude maximum
+ </text>
+ </panel>
+ <panel label="LUMIÈRE" name="Lighting">
+ <text name="SLCText">
+ Couleur soleil/lune
+ </text>
+ <text name="WLAmbientText">
+ Éclairage ambiant
+ </text>
+ <text name="SunGlowText">
+ Rayonnement du soleil
+ </text>
+ <slider label="Netteté" name="WLGlowB"/>
+ <slider label="Taille" name="WLGlowR"/>
+ <text name="WLStarText">
+ Éclat des étoiles
+ </text>
+ <text name="SceneGammaText">
+ Gamma de la scène
+ </text>
+ <text name="TODText">
+ Position soleil/lune
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ Min.
+ </text>
+ <text name="WL6am">
+ 6h
+ </text>
+ <text name="WL12pmHash">
+ Midi
+ </text>
+ <text name="WL6pm">
+ 18h
+ </text>
+ <text name="WL12am2">
+ Min.
+ </text>
+ <time name="WLDayTime" value="6h"/>
+ <text name="WLEastAngleText">
+ Angle du levant
+ </text>
+ </panel>
+ <panel label="NUAGES" name="Clouds">
+ <text name="WLCloudColorText">
+ Couleur des nuages
+ </text>
+ <text name="WLCloudColorText2">
+ Nuages - XY/Densité
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Couverture nuageuse
+ </text>
+ <text name="WLCloudScaleText">
+ Altitude des nuages
+ </text>
+ <text name="WLCloudDetailText">
+ Détails des nuages - XY/Densité
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Direction et vitesse X
+ </text>
+ <check_box label="Verrouiller" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Direction et vitesse Y
+ </text>
+ <check_box label="Verrouiller" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Appliquer ce nouveau préréglage pour le ciel" name="make_default_cb"/>
+ <button label="Enregistrer" name="save"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..81d9d34cfb
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Modifier un préréglage de l&apos;eau">
+ <string name="title_new">
+ Créer un nouveau préréglage de l&apos;eau
+ </string>
+ <string name="title_edit">
+ Modifier un préréglage de l&apos;eau
+ </string>
+ <string name="hint_new">
+ Donnez un nom à votre préréglage, ajustez les contrôles afin de le créer, puis cliquez sur Enregistrer.
+ </string>
+ <string name="hint_edit">
+ Pour modifier le préréglage de l&apos;eau, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </string>
+ <string name="combo_label">
+ -Effectuer une sélection-
+ </string>
+ <text name="hint">
+ Pour modifier le préréglage, ajustez les contrôles, puis cliquez sur Enregistrer.
+ </text>
+ <text name="label">
+ Nom du préréglage :
+ </text>
+ <text name="note">
+ Remarque : si vous changez votre préréglage de nom, un nouveau préréglage sera créé et celui existant restera tel quel.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Couleur du brouillard dans l&apos;eau
+ </text>
+ <text name="water_fog_density_label">
+ Densité du brouillard
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Brouillard sous-marin
+ </text>
+ <text name="BHText">
+ Direction grande vague
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Échelle des vaguelettes
+ </text>
+ <text name="HDText">
+ Échelle Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Décalage Fresnel
+ </text>
+ <text name="BHText2">
+ Direction petite vague
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Réfraction au-dessus
+ </text>
+ <text name="WaterScaleBelowText">
+ Réfraction en dessous
+ </text>
+ <text name="MaxAltText">
+ Multiplicateur de flou
+ </text>
+ <text name="BHText3">
+ Normal Map
+ </text>
+ </panel>
+ <check_box label="Appliquer ce nouveau préréglage pour l&apos;eau" name="make_default_cb"/>
+ <button label="Enregistrer" name="save"/>
+ <button label="Annuler" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_env_settings.xml b/indra/newview/skins/default/xui/fr/floater_env_settings.xml
deleted file mode 100644
index dd714e85b6..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_env_settings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="ÉDITEUR D&apos;ENVIRONNEMENT">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text bottom="-45" name="EnvTimeText" top="29">
- Heure de la
-journée
- </text>
- <text bottom_delta="-36" name="EnvTimeText2">
- Midi
- </text>
- <text name="EnvCloudText">
- Couverture
-nuageuse
- </text>
- <text bottom="-45" name="EnvWaterColorText" top="29">
- Couleur de
-l&apos;eau
- </text>
- <color_swatch name="EnvWaterColor" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
- <text name="EnvWaterFogText">
- Brouillard
-dans l&apos;eau
- </text>
- <button bottom="-144" label="Utiliser heure du domaine" name="EnvUseEstateTimeButton" width="152"/>
- <button label="Ciel avancé" left="162" name="EnvAdvancedSkyButton" width="145"/>
- <button label="Eau avancée" left="316" name="EnvAdvancedWaterButton" width="145"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_environment_settings.xml b/indra/newview/skins/default/xui/fr/floater_environment_settings.xml
new file mode 100644
index 0000000000..9ea47a3dd7
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="PARAMÈTRES D&apos;ENVIRONNEMENT">
+ <text name="note">
+ Utilisez les options ci-dessous pour personnaliser l&apos;environnement de votre client.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Utiliser les réglages de la région" name="use_region_settings"/>
+ <radio_item label="Personnaliser mon environnement" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Remarque : les autres utilisateurs ne pourront pas voir votre configuration personnalisée.
+ </text>
+ <text name="water_settings_title">
+ Réglage de l&apos;eau
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciel / Cycle du jour
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Ciel fixe" name="my_sky_settings"/>
+ <radio_item label="Cycle du jour" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_model_preview.xml b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
index 213847bbd0..2639339be5 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inactif
</string>
+ <string name="status_parse_error">
+ Problème d&apos;analyse de fichier .dae ; reportez-vous au journal pour plus de détails.
+ </string>
<string name="status_reading_file">
Chargement...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Erreur : valeur de sommet supérieure à 65534. Opération abandonnée.
</string>
+ <string name="bad_element">
+ Erreur : élément non valide
+ </string>
<string name="high">
Élevé
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Simplification...
</string>
+ <string name="tbd">
+ TBD
+ </string>
<text name="name_label">
Nom :
</text>
@@ -74,23 +83,26 @@
Niveau de détail : Le plus faible
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
- <text name="physics cost">
- Coût des propriétés physiques : [COST]
- </text>
- <text name="upload fee">
- Frais de chargement : N/A
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ AVERTISSEMENT :
+ </text>
+ <text name="warning_message">
+ Vous ne pourrez pas effectuer le chargement final du modèle sur les serveurs Second Life. [[VURL] Découvrez comment] activer le chargement des modèles de maillage.
+ </text>
+ <text name="weights_text">
+ Téléchargement :
+Propriétés physiques :
+Serveur :
+
+Équiv. en prims :
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Valeurs par défaut" name="reset_btn" tool_tip="Rétablir les valeurs par défaut."/>
- <button label="Charger" name="ok_btn" tool_tip="Charger dans le simulateur."/>
- <button label="Annuler" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Niveau de détail" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Frais de chargement : [FEE] L$
+ </text>
+ <button label="Réinitialiser" name="reset_btn" tool_tip="Rétablir les paramètres par défaut."/>
+ <button label="Calculer les poids et les frais" name="calculate_btn" tool_tip="Calculer les poids et les frais."/>
+ <button label="Charger" name="ok_btn" tool_tip="Charger dans le simulateur."/>
+ <button label="Annuler" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
index bb64361959..f564b6f71a 100644
--- a/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/fr/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="ASSISTANT DE CHARGEMENT DE MODÈLE">
<button label="5. Chargement" name="upload_btn"/>
<button label="4. Vérification" name="review_btn"/>
- <button label="3. Propriétés physiques" name="physics2_btn"/>
<button label="3. Propriétés physiques" name="physics_btn"/>
<button label="2. Optimisation" name="optimize_btn"/>
<button label="1. Sélection du fichier" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Charger le modèle
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Choisir un fichier de modèle
</text>
</panel>
- <text name="description">
- Cet Assistant vous aidera à importer des modèles de maillage dans Second Life. Commencez par spécifier un fichier contenant le modèle à importer. Second Life prend en charge les fichiers COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nom du fichier :
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Utilisateurs expérimentés : si vous êtes habitué à utiliser des outils de création de contenu en 3D, l&apos;outil de chargement avancé est mis à votre disposition.
+ </text>
+ <button label="Passer à Avancé" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Choisir un fichier de modèle à charger
</text>
<button label="Parcourir..." label_selected="Parcourir..." name="browse"/>
+ <text name="support_collada_text">
+ Second Life prend en charge les fichiers COLLADA (.dae).
+ </text>
+ <text name="dimensions_label">
+ Dimensions (mètres) :
+ </text>
<text name="dimensions">
- X : Y : Z :
+ X Y Z
+ </text>
+ <text name="warning_label">
+ AVERTISSEMENT :
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Vous ne pourrez pas effectuer l&apos;étape de chargement finale du modèle sur les serveurs Second Life. [secondlife:///app/floater/learn_more Découvrez comment] configurer votre compte pour les chargements de modèle de maillage.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Optimisation
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Optimiser le modèle
</text>
</panel>
- <text name="description">
- Cet Assistant a optimisé votre modèle afin d&apos;améliorer les performances. Vous pouvez ajuster les résultats du processus d&apos;optimisation ci-dessous ou cliquer sur Suiv. pour continuer.
+ <text name="optimize_hint">
+ Le modèle a été optimisé en termes de performances. Vous pouvez l&apos;ajuster si vous le souhaitez.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Génération du niveau de détail
+ </text>
<text name="high_detail_text">
Générer le niveau de détail : Élevé
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Aperçu du modèle :
+ <text name="optimize_performance_text">
+ Performances
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
- <combo_item name="high">
- Élevé
+ <text name="optimize_faster_rendering_text">
+ Rendu plus rapide
+Moins de détail
+Poids en prims inférieur
+ </text>
+ <text name="optimize_accuracy_text">
+ Précision
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Rendu plus lent
+Plus de détail
+Poids en prims supérieur
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Recalcul géométrique" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Aperçu de la géométrie
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
+ <combo_item name="preview_lod_high">
+ Niveau de détail élevé
</combo_item>
- <combo_item name="medium">
- Moyen
+ <combo_item name="preview_lod_medium">
+ Niveau de détail moyen
</combo_item>
- <combo_item name="low">
- Faible
+ <combo_item name="preview_lod_low">
+ Niveau de détail faible
</combo_item>
- <combo_item name="lowest">
- Le plus faible
+ <combo_item name="preview_lod_lowest">
+ Niveau de détail le plus faible
</combo_item>
</combo_box>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
- <text name="dimensions">
- X : Y : Z :
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Propriétés physiques
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Ajuster les propriétés physiques
</text>
</panel>
- <text name="description">
- Cet Assistant créera une forme physique déterminant le mode d&apos;interaction de l&apos;objet avec les autres objets et avatars. Réglez le curseur sur le niveau de détail le plus approprié à l&apos;utilisation de l&apos;objet :
+ <text name="physics_hint">
+ Une forme va être créée pour l&apos;enveloppe externe du modèle. Ajustez le niveau de détail de la forme en fonction de l&apos;objectif souhaité pour votre modèle.
</text>
- <panel name="content">
- <text name="streaming cost">
- Coût de la ressource : [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Performances
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Propriétés physiques
+ <text name="physics_faster_rendering_text">
+ Rendu plus rapide
+Moins de détail
+Poids en prims inférieur
</text>
- </panel>
- <text name="description">
- Prévisualisez la forme physique ci-dessous, puis cliquez sur Suiv. pour continuer. Le bouton Préc. permet de modifier cette forme, le cas échéant.
- </text>
- <panel name="content">
- <text name="lod_label">
- Aperçu du modèle :
+ <text name="physics_accuracy_text">
+ Précision
+ </text>
+ <text name="physics_slower_dendering_text">
+ Rendu plus lent
+Plus de détail
+Poids en prims supérieur
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
- <combo_item name="high">
- Élevé
+ <text name="physics_example_1">
+ Exemples :
+Objets mobiles
+Objets volants
+Véhicules
+ </text>
+ <text name="physics_example_2">
+ Exemples :
+Petits objets statiques
+Objets moins détaillés
+Mobilier simple
+ </text>
+ <text name="physics_example_3">
+ Exemples :
+Objets statiques
+Objets détaillés
+Bâtiments
+ </text>
+ <button label="Recalcul physique" name="recalculate_physics_btn"/>
+ <button label="Recalcul en cours..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Aperçu des propriétés physiques
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
+ <combo_item name="preview_lod2_high">
+ Niveau de détail élevé
</combo_item>
- <combo_item name="medium">
- Moyen
+ <combo_item name="preview_lod2_medium">
+ Niveau de détail moyen
</combo_item>
- <combo_item name="low">
- Faible
+ <combo_item name="preview_lod2_low">
+ Niveau de détail faible
</combo_item>
- <combo_item name="lowest">
- Le plus faible
+ <combo_item name="preview_lod2_lowest">
+ Niveau de détail le plus faible
</combo_item>
</combo_box>
- <text name="dimensions">
- X : Y : Z :
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Vérification
</text>
</panel>
- <text name="description">
- Vérifiez les détails ci-dessous, puis cliquez sur Charger pour charger le modèle. Votre solde en L$ sera alors débité.
- </text>
- <panel name="content">
- <text name="lod_label">
- Aperçu du modèle :
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impact sur la parcelle/région : équivalent à [EQUIV] prims
</text>
- <combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
- <combo_item name="high">
- Élevé
- </combo_item>
- <combo_item name="medium">
- Moyen
- </combo_item>
- <combo_item name="low">
- Faible
- </combo_item>
- <combo_item name="lowest">
- Le plus faible
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X : Y : Z :
+ <text name="review_fee">
+ Votre compte sera débité de [FEE] L$ de frais de chargement.
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ En cliquant sur le bouton de chargement, vous confirmez que vous disposez des droits appropriés sur le contenu du modèle.
</text>
</panel>
- <text name="streaming cost">
- Coût de la ressource : [COST]
- </text>
- <text name="physics cost">
- Coût des propriétés physiques : [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Chargement terminé !
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Chargement terminé
</text>
</panel>
- <text name="description">
- Félicitations ! Votre modèle a été chargé. Il se trouve dans le dossier Objets de votre inventaire.
+ <text name="model_uploaded_text">
+ Votre modèle a été chargé.
+ </text>
+ <text name="inventory_text">
+ Vous le trouverez dans le dossier Objets de votre inventaire.
+ </text>
+ <text name="charged_fee">
+ Votre compte a été débité de [FEE] L$.
</text>
</panel>
<button label="&lt;&lt; Préc." name="back"/>
<button label="Suiv. &gt;&gt;" name="next"/>
+ <button label="Calculer les poids et les frais &gt;&gt;" name="calculate"/>
+ <button label="Calcul en cours..." name="calculating"/>
<button label="Charger" name="upload" tool_tip="Charger dans le simulateur."/>
<button label="Annuler" name="cancel"/>
<button label="Fermer" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inactif
</string>
+ <string name="status_parse_error">
+ Problème d&apos;analyse de fichier .dae ; reportez-vous au journal pour plus de détails.
+ </string>
<string name="status_reading_file">
Chargement...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Erreur : valeur de sommet supérieure à 65534. Opération abandonnée.
</string>
+ <string name="bad_element">
+ Erreur : élément non valide
+ </string>
<string name="high">
Élevé
</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_search.xml b/indra/newview/skins/default/xui/fr/floater_search.xml
index 672024466a..32800182ea 100644
--- a/indra/newview/skins/default/xui/fr/floater_search.xml
+++ b/indra/newview/skins/default/xui/fr/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="RECHERCHER">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Chargement...
</floater.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 09d77a8d34..bf687c412b 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Cliquez et faites glisser pour sélectionner le terrain.
</floater.string>
- <floater.string name="grid_screen_text">
- Écran
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] objets ( [PRIM_COUNT] prims[PE_STRING] ) sélectionnés
</floater.string>
- <floater.string name="grid_local_text">
- Local
- </floater.string>
- <floater.string name="grid_world_text">
- Monde
- </floater.string>
- <floater.string name="grid_reference_text">
- Référence
- </floater.string>
- <floater.string name="grid_attachment_text">
- Pièce jointe
+ <floater.string name="status_selectprimequiv">
+ , équiv. prims de [SEL_WEIGHT]
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Mise au point"/>
<button label="" label_selected="" name="button move" tool_tip="Déplacer"/>
@@ -66,20 +57,12 @@
<check_box label="Modification liée" name="checkbox edit linked parts"/>
<button label="Lien" name="link_btn"/>
<button label="Annuler le lien" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Affiche le coût du rendu calculé pour cet objet">
- þ : [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Étirer les deux côtés" name="checkbox uniform label">
Étirer les deux côtés
</text>
<check_box initial_value="true" label="Étirer les textures" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Fixer sur la grille" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Choisissez le type d&apos;axe de grille pour le positionnement de l&apos;objet">
- <combo_box.item label="Grille du monde" name="World"/>
- <combo_box.item label="Grille locale" name="Local"/>
- <combo_box.item label="Grille de référence" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Fixer" name="checkbox snap to grid"/>
<button label="Options..." label_selected="Options..." name="Options..." tool_tip="Afficher d&apos;autres options de grille"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cube"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisme droit"/>
@@ -119,23 +102,11 @@
Force
</text>
<button label="Appliquer" label_selected="Appliquer" left="176" name="button apply to selection" tool_tip="Modifier le terrain sélectionné"/>
- <text name="obj_count">
- Objets : [COUNT]
- </text>
- <text name="prim_count">
- Prims : [COUNT]
- </text>
- <text name="linked_set_count">
- Groupes liés : [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Coût des groupes liés actuellement sélectionnés en tant que [prims],[physics complexity].">
- Coût : [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Objets : [COUNT]
+ <text name="selection_empty">
+ Aucune sélection effectuée.
</text>
- <text name="object_cost" tool_tip="Coût des objets actuellement sélectionnés en tant que [prims] / [physics complexity].">
- Coût : [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Poids physique [PHYS_WEIGHT], Coût de rendu [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs">
<panel label="Général" name="General">
@@ -353,7 +324,6 @@
<combo_box.item label="Tore" name="Torus"/>
<combo_box.item label="Plan" name="Plane"/>
<combo_box.item label="Cylindre" name="Cylinder"/>
- <combo_box.item label="Maillage" name="Mesh"/>
</combo_box>
</panel>
<panel label="Attributs" name="Features">
@@ -405,7 +375,7 @@
</combo_box>
<spinner label="Gravité" name="Physics Gravity"/>
<spinner label="Friction" name="Physics Friction"/>
- <spinner label="Densité" name="Physics Density"/>
+ <spinner label="Densité en 100 kg/m^3" name="Physics Density"/>
<spinner label="Restitution" name="Physics Restitution"/>
</panel>
<panel label="Texture" name="Texture">
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
index 56cb654440..92ee6ecf24 100644
--- a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Nouveau !)
</string>
+ <string name="effect_Arena">
+ Stade
+ </string>
+ <string name="effect_Beast">
+ Brute
+ </string>
+ <string name="effect_Buff">
+ Nasal
+ </string>
+ <string name="effect_Buzz">
+ Friture
+ </string>
+ <string name="effect_Camille">
+ Camille
+ </string>
+ <string name="effect_Creepy">
+ Effrayant
+ </string>
+ <string name="effect_CreepyBot">
+ BotEffrayant
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ BotGrave
+ </string>
+ <string name="effect_Demon">
+ Démon
+ </string>
+ <string name="effect_Flirty">
+ Flirt
+ </string>
+ <string name="effect_Foxy">
+ Séduction
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Halloween_2010_Bonus
+ </string>
+ <string name="effect_Helium">
+ Hélium
+ </string>
+ <string name="effect_Husky">
+ Rauque
+ </string>
+ <string name="effect_Intercom">
+ Interphone
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Cauchemar
+ </string>
+ <string name="effect_PopBot">
+ BotPop
+ </string>
+ <string name="effect_Rachel">
+ Rachel
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Robot
+ </string>
+ <string name="effect_Roxanne">
+ Roxanne
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samantha
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Petite voix
+ </string>
+ <string name="effect_Sneaky">
+ Sournois
+ </string>
+ <string name="effect_Stallion">
+ Étalon
+ </string>
+ <string name="effect_Sultry">
+ Sensuel
+ </string>
+ <string name="effect_Thunder">
+ Tonnerre
+ </string>
+ <string name="effect_Vixen">
+ Mégère
+ </string>
+ <string name="effect_WhinyBot">
+ BotPleurnichard
+ </string>
<text name="preview_text">
Aperçu
</text>
diff --git a/indra/newview/skins/default/xui/fr/floater_water.xml b/indra/newview/skins/default/xui/fr/floater_water.xml
deleted file mode 100644
index 7d1e3cd65c..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_water.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ÉDITEUR D&apos;EAU AVANCÉ">
- <floater.string name="WLDefaultWaterNames">
- Valeur par défaut:Transparente:Bassin:Trouble:Première plaie:SERPENT !!!:Valdez
- </floater.string>
- <text name="KeyFramePresetsText" width="120">
- Préréglages :
- </text>
- <button label="Nouveau" label_selected="Nouveau" name="WaterNewPreset"/>
- <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WaterSavePreset" width="75"/>
- <button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="PARAMÈTRES" name="Settings">
- <text name="BHText">
- Couleur du brouillard dans l&apos;eau
- </text>
- <color_swatch left="75" name="WaterFogColor" tool_tip="Cliquez pour ouvrir le sélecteur de couleurs"/>
- <text name="WaterFogDensText">
- Densité du brouillard
- </text>
- <text name="WaterUnderWaterFogModText">
- Brouillard sous-marin
- </text>
- <text name="BDensText">
- Échelle des vaguelettes
- </text>
- <slider label="1" name="WaterNormalScaleX"/>
- <slider label="2" name="WaterNormalScaleY"/>
- <slider label="3" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Échelle Fresnel
- </text>
- <text name="FresnelOffsetText">
- Décalage Fresnel
- </text>
- <text name="DensMultText">
- Réfraction au-dessus
- </text>
- <text name="WaterScaleBelowText">
- Réfraction en dessous
- </text>
- <text name="MaxAltText">
- Multiplicateur de flou
- </text>
- </panel>
- <panel label="IMAGE" name="Waves">
- <text name="BHText">
- Direction grande vague
- </text>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Direction petite vague
- </text>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Normal Map
- </text>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml b/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
deleted file mode 100644
index 657e5f5051..0000000000
--- a/indra/newview/skins/default/xui/fr/floater_windlight_options.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="ÉDITEUR DE CIEL AVANCÉ" width="706">
- <text name="KeyFramePresetsText">
- Préréglages :
- </text>
- <button label="Nouveau" label_selected="Nouveau" name="WLNewPreset"/>
- <button label="Enregistrer" label_selected="Enregistrer" left_delta="75" name="WLSavePreset" width="75"/>
- <button label="Supprimer" label_selected="Supprimer" left_delta="80" name="WLDeletePreset"/>
- <button label="Éditeur du cycle du jour" label_selected="Éditeur du cycle du jour" left_delta="95" left_pad="20" name="WLDayCycleMenuButton" width="150"/>
- <tab_container name="WindLight Tabs" width="706">
- <panel label="ATMOSPHÈRE" name="Atmosphere">
- <text name="BHText">
- Bleu de l&apos;horizon
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- V
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Quantité de brume
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Densité du bleu
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- V
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densité de la brume
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Multiplicateur de densité
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Multiplicateur de distance
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitude maximum
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="LUMIÈRE" name="Lighting">
- <text name="SLCText">
- Couleur soleil/lune
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Position soleil/lune
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Éclairage ambiant
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- V
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Angle du levant
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Rayonnement du soleil
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Netteté " name="WLGlowB"/>
- <slider label="Taille " name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma de la scène
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Éclat des étoiles
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUAGES" name="Clouds">
- <text name="WLCloudColorText">
- Couleur des nuages
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- V
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Nuages XY/densité
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Couverture nuageuse
- </text>
- <button label="?" left="407" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Altitude des nuages
- </text>
- <button label="?" left="407" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Détails nuages (XY/densité)
- </text>
- <button bottom_delta="-2" label="?" left="407" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Direction et vitesse X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Verrouiller" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Direction et vitesse Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Verrouiller" name="WLCloudLockY"/>
- <check_box label="Nuages classiques" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-Minuit:A-Midi:A-3h:A-15h:A-16h30:A-6h:A-18h:A-9h:A-21h:Barcelone:Blizzard:Bleu mi-journée:Après-midi sur la côte:Coucher de soleil (côte):Valeur par défaut:Coucher de soleil (désert):Belle journée:Gros nuages floconneux:Brumeux:Funky Funky:Funky Funky Funky:Gelatto:Fantôme:Vérités incohérentes:Mi-journée 1:Mi-journée 2:Mi-journée 3:Mi-journée 4:Nuit:Pirate:Mauve:Rêve de navigateur:Sensualité pure
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml
index 400c77e51a..6b96a16e75 100644
--- a/indra/newview/skins/default/xui/fr/menu_login.xml
+++ b/indra/newview/skins/default/xui/fr/menu_login.xml
@@ -18,7 +18,7 @@
<menu_item_call label="Afficher les conditions d&apos;utilisation" name="TOS"/>
<menu_item_call label="Afficher le message critique" name="Critical"/>
<menu_item_call label="Test du navigateur de médias" name="Web Browser Test"/>
- <menu_item_call label="Test de la fenêtre flottante du contenu Web" name="Web Content Floater Test"/>
+ <menu_item_call label="Test de débogage de la fenêtre flottante du contenu Web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Afficher le sélecteur de grille" name="Show Grid Picker"/>
<menu_item_call label="Afficher la console des notifications" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
index 45f97e062e..0aad174fbd 100644
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
<menu_item_check label="Trier par nom" name="sort_name"/>
<menu_item_check label="Trier par distance" name="sort_distance"/>
<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+ <menu_item_check label="Afficher la carte" name="view_map"/>
<menu_item_call label="Afficher les résidents et les objets interdits" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index d614cfe00c..46adc79a00 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Mes groupes" name="My Groups"/>
<menu_item_check label="Chat près de moi" name="Nearby Chat"/>
<menu_item_call label="Personnes près de moi" name="Active Speakers"/>
+ <menu_item_check label="Chat vocal près de vous" name="Nearby Voice"/>
</menu>
<menu label="Monde" name="World">
<menu_item_check label="Mini-carte" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Milieu de journée" name="Noon"/>
<menu_item_call label="Coucher de soleil" name="Sunset"/>
<menu_item_call label="Minuit" name="Midnight"/>
- <menu_item_call label="Heure du domaine" name="Revert to Region Default"/>
- <menu_item_call label="Éditeur d&apos;environnement" name="Environment Editor"/>
+ </menu>
+ <menu label="Éditeur d&apos;environnement" name="Enviroment Editor">
+ <menu_item_call label="Paramètres d&apos;environnement..." name="Enviroment Settings"/>
+ <menu label="Préréglages de l&apos;eau" name="Water Presets">
+ <menu_item_call label="Nouveau préréglage..." name="new_water_preset"/>
+ <menu_item_call label="Modifier un préréglage..." name="edit_water_preset"/>
+ <menu_item_call label="Supprimer un préréglage..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Préréglages du ciel" name="Sky Presets">
+ <menu_item_call label="Nouveau préréglage..." name="new_sky_preset"/>
+ <menu_item_call label="Modifier un préréglage..." name="edit_sky_preset"/>
+ <menu_item_call label="Supprimer un préréglage..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Préréglages du jour" name="Day Presets">
+ <menu_item_call label="Nouveau préréglage..." name="new_day_preset"/>
+ <menu_item_call label="Modifier un préréglage..." name="edit_day_preset"/>
+ <menu_item_call label="Supprimer un préréglage..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Construire" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Désactiver les contraintes de la caméra" name="Disable Camera Distance"/>
<menu_item_check label="Photo haute résolution" name="HighResSnapshot"/>
<menu_item_check label="Photos discrètes sur disque" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Compresser les photos sur disque" name="CompressSnapshotsToDisk"/>
<menu label="Outils de performance" name="Performance Tools">
<menu_item_call label="Mesure du lag" name="Lag Meter"/>
<menu_item_check label="Barre de statistiques" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
index 0ca9fe1879..c3d9d908b0 100644
--- a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Modifier la tenue" name="edit"/>
<menu_item_call label="Enlever" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copier la liste de la tenue dans le presse-papiers" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 6bfab25087..ef95a1a389 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -1550,6 +1550,11 @@ Veuillez réessayer ultérieurement.
<button name="Cancel" text="Annuler"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Vous avez essayé d&apos;effectuer [OFFERS] offres de téléportation,
+or ce nombre dépasse la limite autorisée fixée à [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Exiger du résident qu&apos;il vienne vous rejoindre ?
<form name="form">
@@ -1971,6 +1976,10 @@ Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
Êtes-vous certain de vouloir supprimer l&apos;historique de vos visites et recherches ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Voulez-vous vraiment vider le cache de votre client ?
+ <usetemplate name="okcancelbuttons" notext="Annuler" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Êtes-vous certain de vouloir supprimer vos cookies ?
<usetemplate name="okcancelbuttons" notext="Annuler" yestext="Oui"/>
@@ -1996,48 +2005,30 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
Voulez-vous écraser l&apos;option précédemment enregistrée ?
<usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
</notification>
- <notification name="WLDeletePresetAlert">
- Voulez-vous supprimer [SKY] ?
- <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
- </notification>
<notification name="WLNoEditDefault">
Vous ne pouvez pas modifier ou supprimer un préréglage par défaut.
</notification>
<notification name="WLMissingSky">
Une dossier semble manquer au Cycle du jour : [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
- <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
+ <notification name="WLRegionApplyFail">
+ Impossible d&apos;appliquer les réglages à la région. Le problème est parfois résolu en quittant la région puis en y revenant. Motif fourni : [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Nommez le nouveau ciel.
- <form name="form">
- <input name="message">
- Nouveau préréglage
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annuler"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- Ce préréglage existe déjà !
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Impossible de supprimer la dernière clé de ce cycle du jour car ce dernier ne peut pas être vide. Modifiez la dernière clé restante au lieu d&apos;essayer de la supprimer puis d&apos;en créer une nouvelle.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Nommez ce nouveau préréglage d&apos;eau.
- <form name="form">
- <input name="message">
- Nouveau préréglage
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annuler"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Impossible d&apos;ajouter plus d&apos;images-clés à ce cycle du jour. Un maximum de [MAX] images-clés peut être associé aux cycles du jour de type [SCOPE].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- Ce préréglage existe déjà !
+ <notification name="EnvUpdateRate">
+ Vous ne pouvez mettre à jour les paramètres d&apos;environnement d&apos;une région que toutes les [WAIT] secondes. Veuillez patienter pendant au moins ce délai avant de réessayer.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Vous ne pouvez pas modifier ou supprimer un préréglage par défaut.
+ <notification name="PPSaveEffectAlert">
+ Certains effets post-traitement existent. Voulez-vous quand même écraser ce fichier ?
+ <usetemplate name="okcancelbuttons" notext="Non" yestext="Oui"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Impossible de démarrer une nouvelle session de chat avec [RECIPIENT].
@@ -2066,13 +2057,14 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
<usetemplate ignoretext="Porter automatiquement tout en modifiant mon apparence" name="okcancelignore" notext="Non" yestext="Oui"/>
</notification>
<notification name="NotAgeVerified">
- Pour pouvoir pénétrer dans cette zone, vous devez avoir procédé à la vérification de votre âge. Souhaitez-vous aller sur [SECOND_LIFE] et procéder à la vérification de votre âge ?
+ Vous devez avoir au moins 18 ans pour accéder au contenu et aux zones Adulte dans Second Life. Visitez la page de vérification de l&apos;âge afin de confirmer que vous avez plus de 18 ans.
+Cette opération lancera votre navigateur Web.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=fr
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Non" yestext="Oui"/>
+ <usetemplate ignoretext="Je n&apos;ai pas procédé à la vérification de mon âge" name="okcancelignore" notext="Annuler" yestext="Accéder à la page de vérification de l&apos;âge"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement. Souhaitez-vous aller sur [SECOND_LIFE] et enregistrer vos informations de paiement ?
@@ -2329,6 +2321,9 @@ Vous ne pouvez pas voler ici.
<notification name="NoBuild">
La construction est interdite dans cette zone. Vous ne pouvez pas construite ou rezzer d&apos;objets ici.
</notification>
+ <notification name="SeeAvatars">
+ Cette parcelle masque les avatars et le chat écrit des autres parcelles. Vous ne pouvez pas voir les résidents qui se trouvent en dehors, et ceux qui se trouvent en dehors ne peuvent pas vous voir. Le chat écrit habituel sur le canal 0 est également bloqué.
+ </notification>
<notification name="ScriptsStopped">
Un administrateur a temporairement stoppé les scripts dans cette région.
</notification>
@@ -2423,7 +2418,7 @@ Veuillez réessayer dans quelques minutes.
</notification>
<notification name="ObjectGiveItem">
Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous a donné un objet de type [OBJECTTYPE] :
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Garder"/>
<button name="Discard" text="Jeter"/>
@@ -2756,7 +2751,15 @@ Le bouton sera affiché quand il y aura suffisamment de place.
Sélectionnez les résidents avec lesquels partager l&apos;élément.
</notification>
<notification name="MeshUploadError">
- Échec de chargement de [LABEL] : [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ Échec de chargement de [LABEL] : [MESSAGE] [IDENTIFIER]
+
+Voir le fichier journal pour plus de détails.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Erreur lors de la demande des autorisations de chargement de maillage.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Impossible d&apos;obtenir la capacité de région : [CAPABILITY].
</notification>
<notification name="ShareItemsConfirmation">
Voulez-vous vraiment partager les articles suivants :
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
index 2364d9bbb2..247e18da82 100644
--- a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Enregistrer" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Annuler" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_list.xml b/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
index ab352deec4..416353e1d4 100644
--- a/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/all/[SEARCH_TERM] Rechercher]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Aucune tenue n&apos;est actuellement en votre possession. Essayez [secondlife:///app/search/all Rechercher]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
+ <menu_button name="options_gear_btn" tool_tip="Afficher d&apos;autres options"/>
<button name="trash_btn" tool_tip="Supprimer la tenue sélectionnée"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index 166f04b3e4..f035853efc 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -66,17 +66,17 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Appel" name="call_btn" tool_tip="Appeler ce résident"/>
+ <layout_panel name="call_btn_lp">
+ <button label="Appel" name="call_btn" tool_tip="Appeler ce résident."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire"/>
+ <layout_panel name="share_btn_lp">
+ <button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation."/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
index 3c2c1b9d37..30be838896 100644
--- a/indra/newview/skins/default/xui/fr/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
@@ -68,6 +68,8 @@
<text name="scripts_value" value="Activé"/>
<text name="damage_label" value="Dégâts :"/>
<text name="damage_value" value="Désactivé"/>
+ <text name="see_avatars_label" value="Voir les avatars :"/>
+ <text name="see_avatars_value" value="Désactivé"/>
<button label="À propos du terrain" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
index e252c224f8..5ec48c44c7 100644
--- a/indra/newview/skins/default/xui/fr/panel_places.xml
+++ b/indra/newview/skins/default/xui/fr/panel_places.xml
@@ -24,9 +24,9 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="Afficher d&apos;autres options"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
- <button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit"/>
+ <button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l&apos;endroit."/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_close_ls3">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
index 3468afbafe..3f3d0f51f4 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache :
+ </text>
+ <spinner label="Taille du cache (64 - 9984 Mo)" name="cachesizespinner"/>
+ <text name="text_box5">
+ Mo
+ </text>
+ <button label="Vider le cache" label_selected="Vider le cache" name="clear_cache"/>
+ <text name="Cache location">
+ Emplacement du cache :
+ </text>
+ <button label="Parcourir" label_selected="Parcourir" name="set_cache"/>
+ <button label="Par défaut" label_selected="Par défaut" name="default_cache_location"/>
<text name="UI Size:">
Taille d&apos;interface :
</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index a404aae483..deaec2e14f 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Activé" name="enable_voice_check"/>
<check_box label="Autoriser la lecture automatique du média" name="media_auto_play_btn" tool_tip="Cochez pour autoriser la lecture automatique du média" value="true"/>
<check_box label="Lecture du média aux autres avatars" name="media_show_on_others_btn" tool_tip="Décochez pour masquer le média aux autres avatars près de vous" value="true"/>
+ <check_box label="Lire les sons des gestes" name="gesture_audio_play_btn" tool_tip="Cochez cette case pour entendre les sons associés aux gestes." value="true"/>
<text name="voice_chat_settings">
Paramètres du chat vocal
</text>
@@ -35,28 +36,5 @@
<button label="Définir la touche" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Réinitialiser sur le bouton central de la souris"/>
<button label="Périphériques d&apos;entrée/de sortie" name="device_settings_btn"/>
- <panel label="Paramètres du matériel" name="device_settings_panel">
- <panel.string name="default_text">
- Défaut
- </panel.string>
- <panel.string name="default system device">
- Périphérique système par défaut
- </panel.string>
- <panel.string name="no device">
- Aucun périphérique
- </panel.string>
- <text name="Input">
- Entrée
- </text>
- <text name="My volume label">
- Mon volume :
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Régler le volume avec le curseur"/>
- <text name="wait_text">
- Veuillez patienter
- </text>
- <text name="Output">
- Sortie
- </text>
- </panel>
+ <panel label="Paramètres du matériel" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_environment.xml b/indra/newview/skins/default/xui/fr/panel_region_environment.xml
new file mode 100644
index 0000000000..d18503db86
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Environnement" name="panel_env_info">
+ <text name="water_settings_title">
+ Sélectionnez les réglages d&apos;eau et de ciel/cycle du jour que vous souhaitez afficher pour tous les résidents visitant votre région. En savoir plus
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Utiliser les réglages par défaut de Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Utiliser les réglages suivants" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Réglage de l&apos;eau
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciel / Cycle du jour
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Ciel fixe" name="my_sky_settings"/>
+ <radio_item label="Cycle du jour" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Effectuer une sélection-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Appliquer" name="apply_btn"/>
+ <button label="Annuler" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
index 4d7652eb6f..d7e321d06d 100644
--- a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
@@ -7,21 +7,56 @@
(inconnue)
</text>
<spinner label="Niveau de l&apos;eau" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Limite d&apos;élévation du &#10;terrain" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Limite d&apos;abaissement &#10;du terrain" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Utiliser le soleil du domaine" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Soleil fixe" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Phase" name="sun_hour_slider"/>
- <button label="Appliquer" name="apply_btn"/>
+ <spinner label="Limite d&apos;élévation du
+terrain" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Limite d&apos;abaissement
+du terrain" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Textures du terrain (fichiers .tga 512 x 512, 24 bit requis)
+ </text>
+ <text name="height_text_lbl">
+ 1 (Bas)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Haut)
+ </text>
+ <text name="height_text_lbl5">
+ Limites d&apos;élévation de texture
+ </text>
+ <text name="height_text_lbl10">
+ Ces valeurs représentent les limites de mélange pour les textures ci-dessus.
+ </text>
+ <text name="height_text_lbl11">
+ En mètres, la valeur BAS correspond à la hauteur MAXIMUM de la texture n°1 et la valeur HAUT à la hauteur MINIMUM de la texture n°4.
+ </text>
+ <text name="height_text_lbl6">
+ Nord-ouest
+ </text>
+ <text name="height_text_lbl7">
+ Nord-est
+ </text>
+ <spinner label="Bas" name="height_start_spin_1"/>
+ <spinner label="Bas" name="height_start_spin_3"/>
+ <spinner label="Haut" name="height_range_spin_1"/>
+ <spinner label="Haut" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Sud-ouest
+ </text>
+ <text name="height_text_lbl9">
+ Sud-est
+ </text>
+ <spinner label="Bas" name="height_start_spin_0"/>
+ <spinner label="Bas" name="height_start_spin_2"/>
+ <spinner label="Haut" name="height_range_spin_0"/>
+ <spinner label="Haut" name="height_range_spin_2"/>
<button label="Télécharger le terrain au format RAW..." name="download_raw_btn" tool_tip="Réservé aux propriétaires de domaine, pas aux gérants" width="230"/>
- <button label="?" name="download_raw_help" left="246" />
<button label="Charger le terrain au format RAW..." name="upload_raw_btn" tool_tip="Réservé aux propriétaires de domaine, pas aux gérants" width="230"/>
- <button label="?" name="upload_raw_help" left="246" />
<button label="Figer le terrain" name="bake_terrain_btn" tool_tip="Définir le terrain actuel comme point central pour les limites d&apos;élévation/abaissement"/>
- <button label="?" name="bake_terrain_help"/>
+ <button label="Appliquer" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
index a9802312dc..460b269f7c 100644
--- a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Valeur par défaut
</panel.string>
+ <string name="name_no_device">
+ Aucun périphérique
+ </string>
+ <string name="name_default_system_device">
+ Périphérique système par défaut
+ </string>
<text name="Input">
Entrée
</text>
+ <text name="Output">
+ Sortie
+ </text>
<text name="My volume label">
Mon volume :
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Veuillez patienter
</text>
- <text name="Output">
- Sortie
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index 3c4d2626c1..83543e3d0b 100644
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Choses" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Articles reçus ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Articles reçus
+ </string>
+ <button label="Articles reçus" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nouv.
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Ici seront livrés les achats effectués sur la Place du marché.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Boîte d&apos;envoi vendeur" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Vers ma vitrine de la Place du marché"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Configurez votre compte de vendeur de façon à pouvoir utiliser cette fonctionnalité.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 3ec85551da..e6d407f727 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -34,6 +34,9 @@
<string name="StartupInitializingVFS">
Initialisation VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Échec d&apos;initialisation des graphiques. Veuillez mettre votre pilote graphique à jour.
+ </string>
<string name="ProgressRestoring">
Restauration...
</string>
@@ -91,6 +94,12 @@
<string name="LoginQuicktimeOK">
Initialisation de Quicktime réussie.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Capacités de la région demandées...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Capacités de la région demandées... Tentative n° [NUMBER].
+ </string>
<string name="LoginWaitingForRegionHandshake">
Liaison avec la région en cours de création...
</string>
@@ -1192,6 +1201,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="InventoryNoTexture">
Vous n&apos;avez pas de copie de cette texture dans votre inventaire
</string>
+ <string name="InventoryInboxNoItems">
+ Ici seront livrés les articles achetés sur la Place du marché.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Faites glisser des articles ici en vue de les publier sur votre vitrine de la Place du marché.
+ </string>
<string name="no_transfer" value=" (pas de transfert)"/>
<string name="no_modify" value=" (pas de modification)"/>
<string name="no_copy" value=" (pas de copie)"/>
@@ -1238,9 +1253,6 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="InvFolder My Inventory">
Mon inventaire
</string>
- <string name="InvFolder My Favorites">
- Mes Favoris
- </string>
<string name="InvFolder Library">
Bibliothèque
</string>
@@ -1299,10 +1311,10 @@ Veuillez réessayer de vous connecter dans une minute.
Gestes
</string>
<string name="InvFolder Favorite">
- Favoris
+ Mes Favoris
</string>
<string name="InvFolder favorite">
- Favoris
+ Mes Favoris
</string>
<string name="InvFolder Current Outfit">
Tenue actuelle
@@ -1325,6 +1337,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="InvFolder All">
Tout
</string>
+ <string name="no_attachments">
+ Aucun élément attaché porté
+ </string>
<string name="Buy">
Acheter
</string>
@@ -1634,6 +1649,9 @@ Veuillez réessayer de vous connecter dans une minute.
</string>
<string name="SummaryForTheWeek" value="Récapitulatif de la semaine, début le "/>
<string name="NextStipendDay" value=". Prochaine prime le "/>
+ <string name="GroupPlanningDate">
+ [day,datetime,utc]/[mthnum,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value=" Groupe Part individuelle"/>
<string name="GroupColumn" value="Groupe"/>
<string name="Balance">
@@ -1660,6 +1678,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="IMTeen">
teen
</string>
+ <string name="Anyone">
+ n&apos;importe qui
+ </string>
<string name="RegionInfoError">
erreur
</string>
@@ -1882,6 +1903,12 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="Public">
Public
</string>
+ <string name="LocalSettings">
+ Réglages locaux
+ </string>
+ <string name="RegionSettings">
+ Réglages de la région
+ </string>
<string name="ClassifiedClicksTxt">
Clics : [TELEPORT] téléportation, [MAP] carte, [PROFILE] profil
</string>
@@ -1954,6 +1981,9 @@ Veuillez réessayer de vous connecter dans une minute.
<string name="GroupMoneyDebits">
Débits
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [day,datetime,utc] [mth,datetime,utc] [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Contenus
</string>
@@ -3727,6 +3757,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Région de type Général
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatars visibles et chat autorisé en dehors de cette parcelle
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] - Mise à jour
</string>
@@ -4152,6 +4185,87 @@ de l&apos;infraction signalée
<string name="Female - Wow">
Femme - Ouah !
</string>
+ <string name="/bow">
+ /s&apos;incliner
+ </string>
+ <string name="/clap">
+ /applaudir
+ </string>
+ <string name="/count">
+ /compter
+ </string>
+ <string name="/extinguish">
+ /éteindre
+ </string>
+ <string name="/kmb">
+ /vatefairevoir
+ </string>
+ <string name="/muscle">
+ /montrersesmuscles
+ </string>
+ <string name="/no">
+ /non
+ </string>
+ <string name="/no!">
+ /non !
+ </string>
+ <string name="/paper">
+ /papier
+ </string>
+ <string name="/pointme">
+ /memontrerdudoigt
+ </string>
+ <string name="/pointyou">
+ /montrerl&apos;autredudoigt
+ </string>
+ <string name="/rock">
+ /pierre
+ </string>
+ <string name="/scissor">
+ /ciseaux
+ </string>
+ <string name="/smoke">
+ /fumer
+ </string>
+ <string name="/stretch">
+ /s&apos;étirer
+ </string>
+ <string name="/whistle">
+ /siffler
+ </string>
+ <string name="/yes">
+ /oui
+ </string>
+ <string name="/yes!">
+ /oui !
+ </string>
+ <string name="afk">
+ absent
+ </string>
+ <string name="dance1">
+ danse1
+ </string>
+ <string name="dance2">
+ danse2
+ </string>
+ <string name="dance3">
+ danse3
+ </string>
+ <string name="dance4">
+ danse4
+ </string>
+ <string name="dance5">
+ danse5
+ </string>
+ <string name="dance6">
+ danse6
+ </string>
+ <string name="dance7">
+ danse7
+ </string>
+ <string name="dance8">
+ danse8
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
index a96433d7aa..cf0f8f2f6f 100644
--- a/indra/newview/skins/default/xui/it/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/it/floater_about_land.xml
@@ -136,12 +136,12 @@ Vai al menu Mondo &gt; Informazioni sul terreno oppure seleziona un altro appezz
0
</text>
<button label="Acquista il terreno..." label_selected="Acquista il terreno..." left="130" name="Buy Land..." width="125"/>
+ <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di proprietà, con contenuto impostato, e non già messa all&apos;asta."/>
<button label="Informazioni script" name="Scripts..."/>
<button label="Acquista per il gruppo" name="Buy For Group..."/>
<button label="Compra Pass..." label_selected="Compra Pass..." left="130" name="Buy Pass..." tool_tip="Un pass ti da un accesso temporaneo in questo territorio." width="125"/>
<button label="Abbandona la terra" name="Abandon Land..."/>
<button label="Reclama la terra" name="Reclaim Land..."/>
- <button label="Vendita Linden" name="Linden Sale..." tool_tip="La terra deve essere di proprietà, con contenuto impostato, e non già messa all&apos;asta."/>
</panel>
<panel label="REGOLAMENTO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -313,6 +313,9 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
<panel.string name="push_restrict_region_text">
Nessuna spinta (Impostazione regionale)
</panel.string>
+ <panel.string name="see_avs_text">
+ Vedi i residenti in questo lotto e chatta con loro
+ </panel.string>
<text name="allow_label">
Permetti ad altri residenti di:
</text>
@@ -375,6 +378,10 @@ Solamente terreni più grandi possono essere abilitati nella ricerca.
Fotografia:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clicca per scegliere una immagine"/>
+ <text name="allow_label5">
+ Permetti ai residenti in altri lotti di:
+ </text>
+ <check_box label="Vedi avatar" name="SeeAvatarsCheck" tool_tip="Consente ai residenti in altri lotti di vedere i residenti in questo lotto e chattare con loro, e ti consente di vederli e chattare con loro."/>
<text name="landing_point">
Punto di atterraggio: [LANDING]
</text>
@@ -434,6 +441,11 @@ Media:
Audio:
</text>
<check_box label="Limita l&apos;audio per oggetti e gesture a questo lotto" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Suoni avatar:
+ </text>
+ <check_box label="Tutti" name="all av sound check"/>
+ <check_box label="Gruppo" name="group av sound check"/>
<text name="Voice settings:">
Voce:
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
index 326aab1a31..080e396642 100644
--- a/indra/newview/skins/default/xui/it/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/it/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPZIONI DELLA GRIGLIA">
- <spinner label="Unità griglia (metri)" label_width="192" name="GridResolution" width="250"/>
- <spinner label="Estensione della griglia (metri)" label_width="192" name="GridDrawSize" width="250"/>
+ <floater.string name="grid_screen_text">
+ Schermo
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Locale
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mondo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Riferimento
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Allegato
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacità della griglia">
+ Modalità
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l&apos;oggetto">
+ <combo_box.item label="Griglia del mondo" name="World"/>
+ <combo_box.item label="Griglia locale" name="Local"/>
+ <combo_box.item label="Griglia di riferimento" name="Reference"/>
+ </combo_box>
+ <spinner label="Unità (metri)" label_width="192" name="GridResolution" width="250"/>
+ <spinner label="Ampiezza (metri)" label_width="192" name="GridDrawSize" width="250"/>
<check_box label="Usa sottounità" name="GridSubUnit"/>
<check_box label="Guarda le sezioni trasversali" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacità della griglia">
diff --git a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
deleted file mode 100644
index 98c385d29f..0000000000
--- a/indra/newview/skins/default/xui/it/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITOR DELLE CICLO GIORNO/NOTTE">
- <tab_container name="Day Cycle Tabs">
- <panel label="Ciclo giorno/notte" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 0:00
- </text>
- <text name="WL3am">
- 3:00
- </text>
- <text name="WL6am">
- 6:00
- </text>
- <text name="WL9amHash">
- 9:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 24:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Aggiungi voce" label_selected="Aggiungi voce" name="WLAddKey"/>
- <button label_selected="Cancella voce" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Impostazioni del fotogramma chiave:
- </text>
- <text name="WLCurKeyTimeText">
- Tempo:
- </text>
- <spinner label="Ora" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Impostazione chiave:
- </text>
- <combo_box label="Programma:" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Raggruppa:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Lunghezza del ciclo:
- </text>
- <spinner label="Ore" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sec" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Anteprima:
- </text>
- <button label="Avvia" label_selected="Avvia" name="WLAnimSky"/>
- <button label="Arresta!" label_selected="Arresta" name="WLStopAnimSky"/>
- <button label="Usa l&apos;ora della proprietà" label_selected="Vai all&apos;ora della proprietà" name="WLUseLindenTime"/>
- <button label="Salva il test del giorno" label_selected="Salva il test del giorno" name="WLSaveDayCycle"/>
- <button label="Carica il test del giorno" label_selected="Carica il test del giorno" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..71071825af
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="CANCELLA PREDEFINITO AMB">
+ <string name="title_water">
+ Cancella valore predefinito acqua
+ </string>
+ <string name="title_sky">
+ Cancella valore predefinito cielo
+ </string>
+ <string name="title_day_cycle">
+ Cancella ciclo giornata
+ </string>
+ <string name="label_water">
+ Valori predefiniti:
+ </string>
+ <string name="label_sky">
+ Valori predefiniti:
+ </string>
+ <string name="label_day_cycle">
+ Ciclo giornata:
+ </string>
+ <string name="msg_confirm_deletion">
+ Sei sicuro di volere eliminare il valore predefinito selezionato?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Impossibile rimuovere un valore predefinito che viene utilizzato in uno o più cicli di giornata.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="label">
+ Valori predefiniti:
+ </text>
+ <button label="Elimina" name="delete"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..c922b2e4f7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Modifica ciclo giornata">
+ <string name="title_new">
+ Crea un nuovo ciclo giornata
+ </string>
+ <string name="title_edit">
+ Modifica ciclo giornata
+ </string>
+ <string name="hint_new">
+ Dai un nome al ciclo della giornata, modifica i controlli per crearlo e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="hint_edit">
+ Per modificare il ciclo della giornata, modifica i controlli seguenti e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="label">
+ Nome predefinito:
+ </text>
+ <text name="note">
+ Nota: se cambi il nome del valore predefinito, in realtà ne crei uno nuovo e quello esistente non viene cambiato.
+ </text>
+ <text name="hint_item1">
+ - Fai clic su una scheda per modificare gli orari e le impostazioni cielo specifiche.
+ </text>
+ <text name="hint_item2">
+ - Fai clic e trascina le schede per impostare i tempi di transizione.
+ </text>
+ <text name="hint_item3">
+ - Usa lo scrubber per visualizzare in anteprima il ciclo giornata.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Aggiungi chiave" label_selected="Aggiungi chiave" name="WLAddKey"/>
+ <button label="Tasto cancella" label_selected="Tasto cancella" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 00:00
+ </text>
+ <text name="WL3am">
+ 03:00:00
+ </text>
+ <text name="WL6am">
+ 06:00:00
+ </text>
+ <text name="WL9amHash">
+ 09:00:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00:00
+ </text>
+ <text name="WL3pm">
+ 15:00:00
+ </text>
+ <text name="WL6pm">
+ 18:00:00
+ </text>
+ <text name="WL9pm">
+ 21:00:00
+ </text>
+ <text name="WL12am2">
+ 00:00
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Impostazioni cielo:
+ </text>
+ <combo_box label="Valori predefiniti" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Giorno/ora:
+ </text>
+ <time name="time" value="06:00:00"/>
+ <check_box label="Usa come nuovo ciclo giornata" name="make_default_cb"/>
+ <button label="Salva" name="save"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..571027fd29
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Modifica predefiniti cielo">
+ <string name="title_new">
+ Crea un nuovo valore predefinito per il cielo
+ </string>
+ <string name="title_edit">
+ Modifica predefiniti cielo
+ </string>
+ <string name="hint_new">
+ Dai un nome al valore predefinito, modifica i controlli per crearlo e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="hint_edit">
+ Per modificare il valore predefinito per il cielo, modifica i controlli e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="hint">
+ Per modificare i valori predefiniti, modifica i controlli e quindi fai clic su &quot;Salva&quot;
+ </text>
+ <text name="label">
+ Nome predefinito:
+ </text>
+ <text name="note">
+ Nota: se cambi il nome del valore predefinito, in realtà ne crei uno nuovo e quello esistente non viene cambiato.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSFERA" name="Atmosphere">
+ <text name="BHText">
+ Orizzonte blu
+ </text>
+ <text name="BDensText">
+ Orizzonte foschia
+ </text>
+ <text name="BDensText2">
+ Densità blu
+ </text>
+ <text name="HDText">
+ Densità foschia
+ </text>
+ <text name="DensMultText">
+ Fattore moltiplicativo densità
+ </text>
+ <text name="WLDistanceMultText">
+ Fattore moltiplicativo distanza
+ </text>
+ <text name="MaxAltText">
+ Altitudine massima
+ </text>
+ </panel>
+ <panel label="ILLUMINAZIONE" name="Lighting">
+ <text name="SLCText">
+ Colore sole/luna
+ </text>
+ <text name="WLAmbientText">
+ Ambiente
+ </text>
+ <text name="SunGlowText">
+ Bagliore sole
+ </text>
+ <slider label="Centro focale" name="WLGlowB"/>
+ <slider label="Dimensioni" name="WLGlowR"/>
+ <text name="WLStarText">
+ Luminosità cielo
+ </text>
+ <text name="SceneGammaText">
+ Gamma scena
+ </text>
+ <text name="TODText">
+ Posizione sole/luna
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 00:00
+ </text>
+ <text name="WL6am">
+ 06:00:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00:00
+ </text>
+ <text name="WL6pm">
+ 18:00:00
+ </text>
+ <text name="WL12am2">
+ 00:00
+ </text>
+ <time name="WLDayTime" value="06:00:00"/>
+ <text name="WLEastAngleText">
+ Angolo est
+ </text>
+ </panel>
+ <panel label="NUVOLE" name="Clouds">
+ <text name="WLCloudColorText">
+ Colore nuvole
+ </text>
+ <text name="WLCloudColorText2">
+ XY/Densità nuvole
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Copertura nuvole
+ </text>
+ <text name="WLCloudScaleText">
+ Scala nuvole
+ </text>
+ <text name="WLCloudDetailText">
+ Dettaglio nuvole (XY/Densità)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Scorrimento nuvole X
+ </text>
+ <check_box label="Blocca" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Scorrimento nuvole Y
+ </text>
+ <check_box label="Blocca" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Usa questo valore predefinito come nuova impostazione per il cielo" name="make_default_cb"/>
+ <button label="Salva" name="save"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..7bffc60ba2
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Modifica un valore predefinito acqua">
+ <string name="title_new">
+ Crea un nuovo valore predefinito per l&apos;acqua
+ </string>
+ <string name="title_edit">
+ Modifica un valore predefinito per l&apos;acqua
+ </string>
+ <string name="hint_new">
+ Dai un nome al valore predefinito, modifica i controlli per crearlo e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="hint_edit">
+ Per modificare il valore predefinito per l&apos;acqua, modifica i controlli e fai clic su &quot;Salva&quot;.
+ </string>
+ <string name="combo_label">
+ -Seleziona un valore predefinito-
+ </string>
+ <text name="hint">
+ Per modificare i valori predefiniti, modifica i controlli e quindi fai clic su &quot;Salva&quot;
+ </text>
+ <text name="label">
+ Nome predefinito:
+ </text>
+ <text name="note">
+ Nota: se cambi il nome del valore predefinito, in realtà ne crei uno nuovo e quello esistente non viene cambiato.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Colore nebbia acqua
+ </text>
+ <text name="water_fog_density_label">
+ Esponente densità nebbia
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modificatore nebbia sott&apos;acqua
+ </text>
+ <text name="BHText">
+ Direzione onda grande
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Scala wavelet riflesso
+ </text>
+ <text name="HDText">
+ Scala Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Spostamento Fresnel
+ </text>
+ <text name="BHText2">
+ Direzione onda piccola
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Scala wavelet sopra
+ </text>
+ <text name="WaterScaleBelowText">
+ Scala wavelet sotto
+ </text>
+ <text name="MaxAltText">
+ Fattore moltiplicativo blu
+ </text>
+ <text name="BHText3">
+ Mappa normale
+ </text>
+ </panel>
+ <check_box label="Usa questo valore predefinito come nuova impostazione per l&apos;acqua" name="make_default_cb"/>
+ <button label="Salva" name="save"/>
+ <button label="Annulla" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_env_settings.xml b/indra/newview/skins/default/xui/it/floater_env_settings.xml
deleted file mode 100644
index 1c17c18e84..0000000000
--- a/indra/newview/skins/default/xui/it/floater_env_settings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDITOR DELL&apos;AMBIENTE">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Ora del
-giorno
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <text name="EnvCloudText">
- Intensità delle
-Nuvole
- </text>
- <text name="EnvWaterColorText">
- Colore
-dell&apos;Acqua
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Clicca per aprire il selettore dei colori"/>
- <text name="EnvWaterFogText">
- Nebbiosità
-dell&apos;acqua
- </text>
- <button bottom="-144" label="Usa orario della regione" name="EnvUseEstateTimeButton" width="145"/>
- <button label="Cielo avanzato" name="EnvAdvancedSkyButton"/>
- <button label="Acqua avanzata" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_environment_settings.xml b/indra/newview/skins/default/xui/it/floater_environment_settings.xml
new file mode 100644
index 0000000000..f191078fad
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="IMPOSTAZIONI AMBIENTE">
+ <text name="note">
+ Usa le opzioni seguenti per personalizzare le impostazioni dell&apos;ambiente per il tuo viewer.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usa impostazioni regione" name="use_region_settings"/>
+ <radio_item label="Personalizza il mio ambiente" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Nota: gli altri utenti non vedranno le tue impostazioni personalizzate.
+ </text>
+ <text name="water_settings_title">
+ Impostazione Acqua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo giornata / cielo
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo fisso" name="my_sky_settings"/>
+ <radio_item label="Ciclo giornata" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_model_preview.xml b/indra/newview/skins/default/xui/it/floater_model_preview.xml
index a17b8b36c2..931fe7d382 100644
--- a/indra/newview/skins/default/xui/it/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Pausa
</string>
+ <string name="status_parse_error">
+ Problema nell&apos;elaborazione DAE - vedi il registro per informazioni al riguardo.
+ </string>
<string name="status_reading_file">
Caricamento in corso...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Errore: numero di vertici maggiore di 65534, annullato.
</string>
+ <string name="bad_element">
+ Errore: elemento non valido
+ </string>
<string name="high">
Alto
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Semplificazione in corso...
</string>
+ <string name="tbd">
+ Da definire
+ </string>
<text name="name_label">
Nome:
</text>
@@ -74,23 +83,26 @@
Livello di dettaglio: Bassissimo
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
- <text name="physics cost">
- Costo fisica: [COST]
- </text>
- <text name="upload fee">
- Costo caricamento: N/D
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ ATTENZIONE:
+ </text>
+ <text name="warning_message">
+ Non sarà possibile completare il caricamento finale di questo modello sui server di Second Life. [[VURL] Scopri come] ricevere l&apos;autorizzazione per il caricamento dei modelli con reticolo.
+ </text>
+ <text name="weights_text">
+ Download:
+Fisica:
+Server:
+
+Prim equivalenti:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Predefiniti" name="reset_btn" tool_tip="Ripristina predefiniti"/>
- <button label="Carica sul server" name="ok_btn" tool_tip="Carica al simulatore"/>
- <button label="Annulla" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Livello di dettaglio" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Costo caricamento: L$ [FEE]
+ </text>
+ <button label="Imposta sui valori predefiniti" name="reset_btn" tool_tip="Imposta sui valori predefiniti"/>
+ <button label="Calcolare pesi e tariffa" name="calculate_btn" tool_tip="Calcolare pesi e tariffa"/>
+ <button label="Carica sul server" name="ok_btn" tool_tip="Carica al simulatore"/>
+ <button label="Annulla" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_model_wizard.xml b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
index b17f731089..dbf41e2daf 100644
--- a/indra/newview/skins/default/xui/it/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/it/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="PROCEDURA GUIDATA CARICA MODELLO">
<button label="5. Carica sul server" name="upload_btn"/>
<button label="4. Rivedi" name="review_btn"/>
- <button label="3. Fisica" name="physics2_btn"/>
<button label="3. Fisica" name="physics_btn"/>
<button label="2. Ottimizza" name="optimize_btn"/>
<button label="1. Seleziona file" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carica modello
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Seleziona file modello
</text>
</panel>
- <text name="description">
- Questa procedura guidata permette di importare modelli di reticoli in Second Life. Specificare prima un file che contiene il modello da importare. Second Life supporta file COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nome file:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Utenti avanzati: Gli utenti che hanno dimestichezza con gli strumenti di creazione 3D possono usare le opzioni di caricamento avanzate.
+ </text>
+ <button label="Passa a modalità avanzata" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Scegli il file del modello da caricare
</text>
<button label="Sfoglia..." label_selected="Sfoglia..." name="browse"/>
+ <text name="support_collada_text">
+ Second Life supporta file COLLADA (.dae)
+ </text>
+ <text name="dimensions_label">
+ Dimensioni (metri):
+ </text>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ ATTENZIONE:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Non sarà possibile completare il passaggio finale per il caricamento finale di questo modello sui server di Second Life. [secondlife:///app/floater/learn_more Scopri come] impostare l&apos;account per il caricamento di modelli con reticolo.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Ottimizza
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Ottimizza modello
</text>
</panel>
- <text name="description">
- Questa procedura guidata ha ottimizzato il modello per migliorare le prestazioni. Si possono variare i risultati dell&apos;ottimizzazione in basso o fare clic su Avanti per continuare.
+ <text name="optimize_hint">
+ Abbiamo ottimizzato il modello per migliorare le prestazioni. Se necessario, può essere regolato ulteriormente.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Generazione livello di dettaglio
+ </text>
<text name="high_detail_text">
Genera livello di dettaglio: Alto
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Anteprima modello:
+ <text name="optimize_performance_text">
+ Prestazioni
</text>
- <combo_box name="preview_lod_combo2" tool_tip="Livello di dettaglio per anteprima rendering">
- <combo_item name="high">
- Alto
+ <text name="optimize_faster_rendering_text">
+ Rendering più veloce
+Meno dettagli
+Peso prim più basso
+ </text>
+ <text name="optimize_accuracy_text">
+ Fedeltà
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Rendering più lento
+Più dettagli
+Peso prim più elevato
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Ricalcola geometria" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Anteprima geometria
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="Livello di dettaglio per anteprima rendering">
+ <combo_item name="preview_lod_high">
+ Molti dettagli
</combo_item>
- <combo_item name="medium">
- Medio
+ <combo_item name="preview_lod_medium">
+ Dettagli medi
</combo_item>
- <combo_item name="low">
- Basso
+ <combo_item name="preview_lod_low">
+ Meno dettagli
</combo_item>
- <combo_item name="lowest">
- Bassissimo
+ <combo_item name="preview_lod_lowest">
+ Dettaglio minimo
</combo_item>
</combo_box>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Fisica
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Modifica fisica
</text>
</panel>
- <text name="description">
- La procedura guidata permette di creare una forma fisica che determina come l&apos;oggetto interagisce con altri oggetti e avatar. Impostare il comando a scorrimento sul livello di dettaglio appropriato per l&apos;uso dell&apos;oggetto:
+ <text name="physics_hint">
+ Verrà creata una forma per lo scafo esterno del modello. Regola il livello di dettaglio della forma in base al fine desiderato del modello.
</text>
- <panel name="content">
- <text name="streaming cost">
- Costo risorsa: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Prestazioni
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Fisica
+ <text name="physics_faster_rendering_text">
+ Rendering più veloce
+Meno dettagli
+Peso prim più basso
</text>
- </panel>
- <text name="description">
- Visualizza in anteprima la forma fisica in basso, quindi fai clic su Avanti per continuare. Per modificare la forma fisica, fare clic su Indietro.
- </text>
- <panel name="content">
- <text name="lod_label">
- Anteprima modello:
+ <text name="physics_accuracy_text">
+ Fedeltà
+ </text>
+ <text name="physics_slower_dendering_text">
+ Rendering più lento
+Più dettagli
+Peso prim più elevato
</text>
- <combo_box name="preview_lod_combo3" tool_tip="Livello di dettaglio per anteprima rendering">
- <combo_item name="high">
- Alto
+ <text name="physics_example_1">
+ Esempi:
+Oggetti in movimento
+Oggetti in volo
+Veicoli
+ </text>
+ <text name="physics_example_2">
+ Esempi:
+Piccoli oggetti statici
+Oggetti meno dettagliati
+Mobili semplici
+ </text>
+ <text name="physics_example_3">
+ Esempi:
+Oggetti statici
+Oggetti dettagliati
+Edifici
+ </text>
+ <button label="Ricalcola fisica" name="recalculate_physics_btn"/>
+ <button label="Ricalcolo in corso..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Anteprima fisica
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="Livello di dettaglio per anteprima rendering">
+ <combo_item name="preview_lod2_high">
+ Molti dettagli
</combo_item>
- <combo_item name="medium">
- Medio
+ <combo_item name="preview_lod2_medium">
+ Dettagli medi
</combo_item>
- <combo_item name="low">
- Basso
+ <combo_item name="preview_lod2_low">
+ Meno dettagli
</combo_item>
- <combo_item name="lowest">
- Bassissimo
+ <combo_item name="preview_lod2_lowest">
+ Dettaglio minimo
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Rivedi
</text>
</panel>
- <text name="description">
- Rivedere i dettagli in basso, quindi fare clic su Carica per caricare il modello. Il tuo saldo in L$ verrà addebitato quando fai clic su Carica.
- </text>
- <panel name="content">
- <text name="lod_label">
- Anteprima modello:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impatto sul lotto o sulla regione: [EQUIV] prim equivalenti
</text>
- <combo_box name="preview_lod_combo" tool_tip="Livello di dettaglio per anteprima rendering">
- <combo_item name="high">
- Alto
- </combo_item>
- <combo_item name="medium">
- Medio
- </combo_item>
- <combo_item name="low">
- Basso
- </combo_item>
- <combo_item name="lowest">
- Bassissimo
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ All&apos;account verrà accreditata una tariffa di caricamento pari a L$ [FEE].
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Facendo clic sul pulsante Carica, confermi di possedere i diritti relativi ai materiali contenuti nel modello.
</text>
</panel>
- <text name="streaming cost">
- Costo risorsa: [COST]
- </text>
- <text name="physics cost">
- Costo fisica: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Caricamento completato.
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Caricamento completato
</text>
</panel>
- <text name="description">
- Congratulazioni. Il modello è stato caricato correttamente e ora puoi trovarlo nella cartella Oggetti nel tuo inventario.
+ <text name="model_uploaded_text">
+ Il modello è stato caricato.
+ </text>
+ <text name="inventory_text">
+ Puoi trovarlo nella cartella Oggetti nel tuo inventario.
+ </text>
+ <text name="charged_fee">
+ La somma di L$ [FEE] è stata addebitata sul tuo account.
</text>
</panel>
<button label="&lt;&lt; Indietro" name="back"/>
<button label="Avanti &gt;&gt;" name="next"/>
+ <button label="Calcolare pesi e tariffa &gt;&gt;" name="calculate"/>
+ <button label="Calcolo in corso..." name="calculating"/>
<button label="Carica" name="upload" tool_tip="Carica al simulatore"/>
<button label="Annulla" name="cancel"/>
<button label="Chiudi" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Pausa
</string>
+ <string name="status_parse_error">
+ Problema nell&apos;elaborazione DAE - vedi il registro per informazioni al riguardo.
+ </string>
<string name="status_reading_file">
Caricamento in corso...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Errore: numero di vertici maggiore di 65534, annullato.
</string>
+ <string name="bad_element">
+ Errore: elemento non valido
+ </string>
<string name="high">
Alto
</string>
diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml
index 05f5dfe719..ac3dc17aa3 100644
--- a/indra/newview/skins/default/xui/it/floater_search.xml
+++ b/indra/newview/skins/default/xui/it/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="TROVA">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Caricamento in corso...
</floater.string>
diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
index aab00a26ce..489d52d3b8 100644
--- a/indra/newview/skins/default/xui/it/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="PARAMETRI DI DEBUG">
<radio_group name="boolean_combo">
- <radio_item label="VERO" name="TRUE" value="vero"/>
- <radio_item label="FALSO" name="FALSE" value=""/>
+ <radio_item label="VERO" name="TRUE" />
+ <radio_item label="FALSO" name="FALSE" />
</radio_group>
<color_swatch label="Colore" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
index 23e01a3943..d3b1503742 100644
--- a/indra/newview/skins/default/xui/it/floater_tools.xml
+++ b/indra/newview/skins/default/xui/it/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Clicca e trascina per selezionare il terreno
</floater.string>
- <floater.string name="grid_screen_text">
- Schermo
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] oggetti ( [PRIM_COUNT] prim [PE_STRING] ) selezionati
</floater.string>
- <floater.string name="grid_local_text">
- Locale
- </floater.string>
- <floater.string name="grid_world_text">
- Globale
- </floater.string>
- <floater.string name="grid_reference_text">
- Riferimento
- </floater.string>
- <floater.string name="grid_attachment_text">
- Accessorio
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] prim equivalenti
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Ingrandisci"/>
<button label="" label_selected="" name="button move" tool_tip="Sposta"/>
@@ -66,20 +57,12 @@
<check_box label="Modifica parti collegate" name="checkbox edit linked parts"/>
<button label="Collegamento" name="link_btn"/>
<button label="Scollega" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Mostra il costo di rendering calcolato per questo oggetto">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Allunga entrambi i lati" name="checkbox uniform label">
Allunga entrambi i lati
</text>
<check_box initial_value="true" label="Ridimensiona le texture" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Posiziona nella griglia" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Scegli il tipo di righello per posizionare l&apos;oggetto">
- <combo_box.item label="Rete del mondo" name="World"/>
- <combo_box.item label="Rete locale" name="Local"/>
- <combo_box.item label="Griglia di riferimento" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Scatto" name="checkbox snap to grid"/>
<button label="Opzioni..." label_selected="Opzioni..." name="Options..." tool_tip="Vedi più opzioni della griglia"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -120,23 +103,11 @@
Potenza
</text>
<button label="Applica" label_selected="Applica" name="button apply to selection" tool_tip="Modifica il terreno selezionato"/>
- <text name="obj_count">
- Oggetti: [COUNT]
- </text>
- <text name="prim_count">
- Prim: [COUNT]
- </text>
- <text name="linked_set_count">
- Set collegati: [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Costo dei set collegati attualmente selezionati come [prim],[complessità fisica]">
- Costo: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Oggetti: [COUNT]
+ <text name="selection_empty">
+ Nessuna selezione.
</text>
- <text name="object_cost" tool_tip="Costo degli oggetti attualmente selezionati come [prim] / [complessità fisica]">
- Costo: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Peso fisica [PHYS_WEIGHT], costo rendering [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs">
<panel label="Generale" name="General">
@@ -360,7 +331,6 @@
<combo_box.item label="Toroidale" name="Torus"/>
<combo_box.item label="Piana" name="Plane"/>
<combo_box.item label="Cilindrica" name="Cylinder"/>
- <combo_box.item label="Reticolo" name="Mesh"/>
</combo_box>
</panel>
<panel label="Caratteristiche" name="Features">
@@ -412,7 +382,7 @@
</combo_box>
<spinner label="Gravità" name="Physics Gravity"/>
<spinner label="Frizione" name="Physics Friction"/>
- <spinner label="Densità" name="Physics Density"/>
+ <spinner label="Densità in 100 kg/m^3" name="Physics Density"/>
<spinner label="Restituzione" name="Physics Restitution"/>
</panel>
<panel label="Texture" name="Texture">
diff --git a/indra/newview/skins/default/xui/it/floater_voice_effect.xml b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
index 4c440c45b6..a0e49525ea 100644
--- a/indra/newview/skins/default/xui/it/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Nuovo!)
</string>
+ <string name="effect_Arena">
+ Arena
+ </string>
+ <string name="effect_Beast">
+ Bestia
+ </string>
+ <string name="effect_Buff">
+ Appassionato
+ </string>
+ <string name="effect_Buzz">
+ Euforia
+ </string>
+ <string name="effect_Camille">
+ Camilla
+ </string>
+ <string name="effect_Creepy">
+ Terrificante
+ </string>
+ <string name="effect_CreepyBot">
+ TerrificanteBot
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ ProfondoBot
+ </string>
+ <string name="effect_Demon">
+ Demonio
+ </string>
+ <string name="effect_Flirty">
+ Civettuolo
+ </string>
+ <string name="effect_Foxy">
+ Scaltro
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Halloween_2010_Bonus
+ </string>
+ <string name="effect_Helium">
+ Elio
+ </string>
+ <string name="effect_Husky">
+ Fusto
+ </string>
+ <string name="effect_Intercom">
+ Interfono
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Incubo
+ </string>
+ <string name="effect_PopBot">
+ PopBot
+ </string>
+ <string name="effect_Rachel">
+ Rachele
+ </string>
+ <string name="effect_Radio">
+ Radio
+ </string>
+ <string name="effect_Robot">
+ Robot
+ </string>
+ <string name="effect_Roxanne">
+ Rosanna
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samanta
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Bassotto
+ </string>
+ <string name="effect_Sneaky">
+ Vile
+ </string>
+ <string name="effect_Stallion">
+ Stallone
+ </string>
+ <string name="effect_Sultry">
+ Focoso
+ </string>
+ <string name="effect_Thunder">
+ Tuono
+ </string>
+ <string name="effect_Vixen">
+ Maliziosa
+ </string>
+ <string name="effect_WhinyBot">
+ PiangiBot
+ </string>
<text name="preview_text">
Per l&apos;anteprima
</text>
diff --git a/indra/newview/skins/default/xui/it/floater_water.xml b/indra/newview/skins/default/xui/it/floater_water.xml
deleted file mode 100644
index b25f0a6266..0000000000
--- a/indra/newview/skins/default/xui/it/floater_water.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="EDITOR AVANZATO DELL&apos;ACQUA">
- <text name="KeyFramePresetsText" width="245">
- Impostazioni predeterminate dell&apos;acqua:
- </text>
- <combo_box left_delta="245" name="WaterPresetsCombo" width="150"/>
- <button label="Nuovo" label_selected="Nuovo" name="WaterNewPreset"/>
- <button label="Salva" label_selected="Salva" name="WaterSavePreset"/>
- <button label="Cancella" label_selected="Cancella" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="IMPOSTAZIONI" name="Settings">
- <text name="BHText">
- Colore della nebbiosità dell&apos;acqua
- </text>
- <button label="?" left="209" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Clicca per aprire il selettore dei colori"/>
- <text font="SansSerifSmall" name="WaterFogDensText">
- Esponente di densità della nebbia
- dell&apos;acqua
- </text>
- <slider bottom_delta="-40" name="WaterFogDensity"/>
- <button label="?" left="209" name="WaterFogDensityHelp"/>
- <text bottom="-140" font="SansSerifSmall" name="WaterUnderWaterFogModText">
- Regolatore effetto nebbia subacquea
- </text>
- <button label="?" left="209" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Scala di riflessione delle onde
- </text>
- <button label="?" left="415" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Scala Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Offset Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelOffsetHelp"/>
- <text font="SansSerifSmall" name="DensMultText">
- Scala di rifrazione nell&apos;acqua
- dall&apos;alto
- </text>
- <slider bottom_delta="-40" name="WaterScaleAbove"/>
- <button label="?" left="650" name="WaterScaleAboveHelp"/>
- <text bottom="-70" font="SansSerifSmall" name="WaterScaleBelowText">
- Scala di rifrazione nell&apos;acqua
- dal basso
- </text>
- <slider bottom_delta="-40" name="WaterScaleBelow"/>
- <button label="?" left="650" name="WaterScaleBelowHelp"/>
- <text bottom="-122" name="MaxAltText">
- Moltiplicatore della sfocatura
- </text>
- <button label="?" left="650" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="IMMAGINE" name="Waves">
- <text name="BHText">
- Direzione della grande onda
- </text>
- <button label="?" left="170" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Direzione della piccola onda
- </text>
- <button label="?" left="170" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Mappatura normale
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_windlight_options.xml b/indra/newview/skins/default/xui/it/floater_windlight_options.xml
deleted file mode 100644
index 6828d05be0..0000000000
--- a/indra/newview/skins/default/xui/it/floater_windlight_options.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="EDITOR AVANZATO DEL CIELO">
- <text name="KeyFramePresetsText" width="105">
- Cieli predefiniti:
- </text>
- <combo_box left_delta="105" name="WLPresetsCombo"/>
- <button label="Nuovo" label_selected="Nuovo" name="WLNewPreset"/>
- <button label="Salva" label_selected="Salva" left_delta="72" name="WLSavePreset"/>
- <button label="Elimina" label_selected="Elimina" left_delta="72" name="WLDeletePreset"/>
- <button font="SansSerifSmall" label="Editor del ciclo giorno/notte" label_selected="Editor del ciclo giorno/notte" left_delta="85" name="WLDayCycleMenuButton" width="165"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFERA" name="Atmosphere">
- <text name="BHText">
- Blu dell&apos;Orizzonte
- </text>
- <button label="?" left="189" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text font="SansSerifSmall" name="BDensText">
- Altezza della Foschia all&apos;Orizzonte
- </text>
- <button label="?" left="189" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Densità del Blu
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densità  della Foschia
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Moltiplicatore di Densità
- </text>
- <button label="?" left="645" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Moltiplicatore della Distanza
- </text>
- <button label="?" left="645" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitudine Massima
- </text>
- <button label="?" left="645" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="ILLUMINAZIONE" name="Lighting">
- <text name="SLCText">
- Colore Sole/Luna
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Posizione Sole/Luna
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Ambiente
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Angolo Est
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Corona intorno al sole
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Focus" name="WLGlowB"/>
- <slider label="Grandezza" name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma della Scena
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Luminosità  delle stelle
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUVOLE" name="Clouds">
- <text name="WLCloudColorText">
- Colore delle Nuvole
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Nuvole XY/Densità
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Copertura delle Nuvole
- </text>
- <button label="?" left="415" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Altitudine delle Nuvole
- </text>
- <button label="?" left="415" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Dettagli Nuvole (XY/ Densità)
- </text>
- <button label="?" left="415" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Scorrimento delle X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Blocca" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Scorrimento delle Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Blocca" name="WLCloudLockY"/>
- <check_box label="Mostra le Nuvole Classiche" name="DrawClassicClouds"/>
- <button label="?" left="645" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml
index bdf7d2094f..fe8bf703aa 100644
--- a/indra/newview/skins/default/xui/it/menu_login.xml
+++ b/indra/newview/skins/default/xui/it/menu_login.xml
@@ -17,7 +17,7 @@
<menu_item_call label="Mostra i Termini del servizio (TOS)" name="TOS"/>
<menu_item_call label="Mostra messaggio critico" name="Critical"/>
<menu_item_call label="Test browser multimedia" name="Web Browser Test"/>
- <menu_item_call label="Test finestra contenuti Web" name="Web Content Floater Test"/>
+ <menu_item_call label="Test debug finestra contenuti Web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Mostra selettore griglia" name="Show Grid Picker"/>
<menu_item_call label="Mostra Console notifiche" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
index aae2313702..2b5c235706 100644
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordina in base al nome" name="sort_name"/>
<menu_item_check label="Ordina in base alla distanza" name="sort_distance"/>
<menu_item_check label="Icone persone" name="view_icons"/>
+ <menu_item_check label="Visualizza mappa" name="view_map"/>
<menu_item_call label="Mostra oggetti e residenti bloccati" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index e4df0630d9..ef40cbda7c 100644
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="I miei gruppi" name="My Groups"/>
<menu_item_check label="Chat nei dintorni" name="Nearby Chat"/>
<menu_item_call label="Persone vicine" name="Active Speakers"/>
+ <menu_item_check label="Voce nei dintorni" name="Nearby Voice"/>
</menu>
<menu label="Mondo" name="World">
<menu_item_check label="Mini mappa" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Mezzogiorno" name="Noon"/>
<menu_item_call label="Tramonto" name="Sunset"/>
<menu_item_call label="Mezzanotte" name="Midnight"/>
- <menu_item_call label="Orario della proprietà" name="Revert to Region Default"/>
- <menu_item_call label="Editor dell&apos;ambiente" name="Environment Editor"/>
+ </menu>
+ <menu label="Editor ambiente" name="Enviroment Editor">
+ <menu_item_call label="Impostazioni ambiente..." name="Enviroment Settings"/>
+ <menu label="Valori predefiniti acqua" name="Water Presets">
+ <menu_item_call label="Nuovo valore predefinito..." name="new_water_preset"/>
+ <menu_item_call label="Modifica valori predefiniti..." name="edit_water_preset"/>
+ <menu_item_call label="Cancella valore predefinito..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Valori predefiniti cielo" name="Sky Presets">
+ <menu_item_call label="Nuovo valore predefinito..." name="new_sky_preset"/>
+ <menu_item_call label="Modifica valori predefiniti..." name="edit_sky_preset"/>
+ <menu_item_call label="Cancella valore predefinito..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Valori predefiniti giornata" name="Day Presets">
+ <menu_item_call label="Nuovo valore predefinito..." name="new_day_preset"/>
+ <menu_item_call label="Modifica valori predefiniti..." name="edit_day_preset"/>
+ <menu_item_call label="Cancella valore predefinito..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Costruisci" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Disabilita vincoli fotocamera" name="Disable Camera Distance"/>
<menu_item_check label="Foto ad alta risoluzione" name="HighResSnapshot"/>
<menu_item_check label="Manda foto su disco senza avvisi" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Comprimi le foto su disco" name="CompressSnapshotsToDisk"/>
<menu label="Strumenti di performance" name="Performance Tools">
<menu_item_call label="Misuratore lag" name="Lag Meter"/>
<menu_item_check label="Barra statistiche" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
index 7c8eef64e5..de25f88aca 100644
--- a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Modifica vestiario" name="edit"/>
<menu_item_call label="Togli" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copia gruppo vestiti negli Appunti" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index f50051c004..d09f207af2 100644
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -1555,6 +1555,11 @@ Riprova più tardi.
<button name="Cancel" text="Annulla"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Hai cercato di fare [OFFERS] offerte di teleport,
+più del limite [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Chiedere, in qualità di Admin, al residente di raggiungerti?
<form name="form">
@@ -1977,6 +1982,10 @@ Desideri abbandonare la modalità &apos;Occupato&apos; prima di completare quest
Vuoi veramente eliminare la cronologia viaggi, web e ricerche fatte?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Sei sicuro di volere cancellare la cache del viewer?
+ <usetemplate name="okcancelbuttons" notext="Annulla" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Confermi di volere cancellare i tuoi cookie?
<usetemplate name="okcancelbuttons" notext="Annulla" yestext="Si"/>
@@ -2002,48 +2011,30 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
Vuoi sovrascrivere le preimpostazioni salvate?
<usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
- <notification name="WLDeletePresetAlert">
- Vuoi cancellare [SKY]?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
- </notification>
<notification name="WLNoEditDefault">
Non puoi modificare o cancellare una preimpostazione di fabbrica.
</notification>
<notification name="WLMissingSky">
Questo file di ciclo giornaliero fa riferimento ad un file di cielo mancante: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Effetto di post elaborazione già presente. Vuoi sovrascrivere?
- <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
+ <notification name="WLRegionApplyFail">
+ Queste impostazioni non possono essere applicare alla regione. Uscendo dalla regione e ritornandoci potrebbe risolvere il problema. Il motivo fornito: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Fornisci il nome per il nuovo cielo.
- <form name="form">
- <input name="message">
- Nuova preimpostazione
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annulla"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- La preimpostazione esiste già!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Impossibile cancellare l&apos;ultima chiave in questo ciclo giornata. Il ciclo giornata non può essere vuoto. Invece di cancellare la chiave restante, modificala e quindi creane una nuova.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Fornisci il nome per la nuova preregolazione del livello dell&apos;acqua.
- <form name="form">
- <input name="message">
- Nuova preimpostazione
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Annulla"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Non puoi aggiungere altri frame chiave a questo ciclo giornata. Il numero massimo di frame chiave per i cicli giornata nell&apos;ambito [SCOPE] è [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- La preimpostazione esiste già!
+ <notification name="EnvUpdateRate">
+ Puoi aggiornare le impostazioni dell&apos;ambiente della regione ogni [WAIT] secondi. Attendi e riprova.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Non puoi modificare o cancellare una preimpostazione.
+ <notification name="PPSaveEffectAlert">
+ Effetto di post elaborazione già presente. Vuoi sovrascrivere?
+ <usetemplate name="okcancelbuttons" notext="No" yestext="Si"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Impossibile iniziare una nuova sessione di chat con [RECIPIENT].
@@ -2072,13 +2063,14 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
<usetemplate ignoretext="Indossare gli abiti che creo mentre modifico il mio aspetto" name="okcancelignore" notext="No" yestext="Si"/>
</notification>
<notification name="NotAgeVerified">
- Per entrare in questa zona, devi avere eseguito la verifica dell&apos;età. Vuoi andare sul sito di [SECOND_LIFE] per verificare la tua età?
+ Per accedere ai contenuti e alle aree per adulti in Second Life devi avere almeno 18 anni. Visita la pagina di verifica dell&apos;età per confermare di avere almeno 18 anni.
+Verrà avviato il browser Web.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=it
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Non ho verificato la mia età" name="okcancelignore" notext="No" yestext="Si"/>
+ <usetemplate ignoretext="Non ho verificato la mia età" name="okcancelignore" notext="Annulla" yestext="Passa alla verifica dell&apos;età"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Per poter visitare questa zona devi avere devi aver fornito informazioni di pagamento a Linden Lab. Vuoi andare sul sito di [SECOND_LIFE] ed impostarle?
@@ -2334,6 +2326,9 @@ Qui non puoi volare.
<notification name="NoBuild">
In questa zona è proibita la costruzione. Qui non puoi costruire né rezzare oggetti.
</notification>
+ <notification name="SeeAvatars">
+ In questo lotto non si possono vedere avatar e chat di testo presenti in altri lotti. Non puoi vedere altri residenti fuori dal lotto e loro non possono vederti. Viene bloccata anche la normale chat di testo sul canale 0.
+ </notification>
<notification name="ScriptsStopped">
Un amministratore ha temporaneamente disabilitato gli script in questa regione.
</notification>
@@ -2425,7 +2420,7 @@ Riprova tra qualche istante.
</notification>
<notification name="ObjectGiveItem">
Un oggetto denominato &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; di proprietà di [NAME_SLURL] ti ha dato questo [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Prendi"/>
<button name="Discard" text="Rifiuta"/>
@@ -2758,7 +2753,15 @@ Il pulsante verrà visualizzato quando lo spazio sarà sufficiente.
Scegli i residenti con i quali condividere.
</notification>
<notification name="MeshUploadError">
- [LABEL] non è stato caricato: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] non è stato caricato: [MESSAGE] [IDENTIFIER]
+
+Per informazioni dettagliate, vedi il file del registro.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Errore durante la richiesta di autorizzazione al caricamento del reticolo.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Non è stata ottenuta la capacità della regione &apos;[CAPABILITY]&apos;.
</notification>
<notification name="ShareItemsConfirmation">
Sei sicuro di volere condividere gli oggetti
diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
index 8e464ca037..145b8cf4e3 100644
--- a/indra/newview/skins/default/xui/it/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Salva luogo preferito" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Annulla" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_list.xml b/indra/newview/skins/default/xui/it/panel_outfits_list.xml
index e5194e95d7..d0c275e29f 100644
--- a/indra/newview/skins/default/xui/it/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/it/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/all/[SEARCH_TERM] Cerca]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Non hai ancora vestiario da indossare. Prova [secondlife:///app/search/all Cerca]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostra ulteriori opzioni"/>
+ <menu_button name="options_gear_btn" tool_tip="Mostra ulteriori opzioni"/>
<button name="trash_btn" tool_tip="Elimina il vestiario selezionato"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml
index b24a4055f7..f903ae6e2c 100644
--- a/indra/newview/skins/default/xui/it/panel_people.xml
+++ b/indra/newview/skins/default/xui/it/panel_people.xml
@@ -66,16 +66,16 @@ Stai cercando persone da frequentare? Prova la [secondlife:///app/worldmap Mappa
<layout_panel name="view_profile_btn_lp">
<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/it/panel_place_profile.xml b/indra/newview/skins/default/xui/it/panel_place_profile.xml
index c4ffe6af85..890dfc2458 100644
--- a/indra/newview/skins/default/xui/it/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/it/panel_place_profile.xml
@@ -64,6 +64,8 @@
<text name="scripts_value" value="Attivo"/>
<text name="damage_label" value="Danni:"/>
<text name="damage_value" value="Disattivato"/>
+ <text name="see_avatars_label" value="Vedi avatar:"/>
+ <text name="see_avatars_value" value="Disattiva"/>
<button label="Informazioni sui terreni" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
index 61830f186f..69995fb5de 100644
--- a/indra/newview/skins/default/xui/it/panel_places.xml
+++ b/indra/newview/skins/default/xui/it/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
index b628a29206..224780f234 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache:
+ </text>
+ <spinner label="Dimensione cache (64 - 9984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Pulizia della cache" label_selected="Pulizia della cache" name="clear_cache"/>
+ <text name="Cache location">
+ Ubicazione della cache:
+ </text>
+ <button label="Sfoglia" label_selected="Sfoglia" name="set_cache"/>
+ <button label="Posizione predefinita" label_selected="Posizione predefinita" name="default_cache_location"/>
<text name="UI Size:">
Dimensioni UI:
</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
index bbfae5e9e8..d00512aaf7 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Abilitato" name="enable_voice_check"/>
<check_box label="Consenti riproduzione multimediale automatica" name="media_auto_play_btn" tool_tip="Seleziona qui per consentire la riproduzione multimediale automatica" value="true"/>
<check_box label="Riproduci media in uso da altri avatar" name="media_show_on_others_btn" tool_tip="Deseleziona qui per nascondere i media in uso dagli altri avatar nei dintorni" value="true"/>
+ <check_box label="Riproduci suoni dai gesti" name="gesture_audio_play_btn" tool_tip="Seleziona per ascoltare i suoni dai gesti" value="true"/>
<text name="voice_chat_settings">
Impostazioni Chat vocale
</text>
@@ -35,28 +36,5 @@
<button label="Imposta tasto" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Reimposta sul pulsante centrale del mouse"/>
<button label="Dispositivi di Input/Output" name="device_settings_btn" width="165"/>
- <panel label="Impostazioni del dispositivo" name="device_settings_panel">
- <panel.string name="default_text">
- Predefinito
- </panel.string>
- <panel.string name="default system device">
- Dispositivo di sistema predefinito
- </panel.string>
- <panel.string name="no device">
- Nessun dispositivo
- </panel.string>
- <text name="Input">
- Input
- </text>
- <text name="My volume label">
- Il mio volume:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Cambia il volume utilizzando questa barra"/>
- <text name="wait_text">
- Attendi
- </text>
- <text name="Output">
- Output
- </text>
- </panel>
+ <panel label="Impostazioni del dispositivo" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_environment.xml b/indra/newview/skins/default/xui/it/panel_region_environment.xml
new file mode 100644
index 0000000000..81bc8253f4
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ambiente" name="panel_env_info">
+ <text name="water_settings_title">
+ Seleziona le impostazioni del ciclo dell&apos;acqua e del cielo/giornata che vuoi che vedano tutti coloro che visitano la tua regione. Maggiori informazioni
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usa valori predefiniti di Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Usa le impostazioni seguenti" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Impostazione Acqua
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo cielo / giornata
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Cielo fisso" name="my_sky_settings"/>
+ <radio_item label="Ciclo giornata" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Seleziona un valore predefinito-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Applica" name="apply_btn"/>
+ <button label="Annulla" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_region_terrain.xml b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
index 92044bae11..c61ac3ecce 100644
--- a/indra/newview/skins/default/xui/it/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
@@ -7,21 +7,56 @@
sconosciuto
</text>
<spinner label="Altezza dell&apos;acqua" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Limite di altezza del &#10;terreno" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Limite di abbassamento &#10;del terreno" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Usa il sole della regione" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Sole fisso" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Fase" name="sun_hour_slider"/>
- <button label="Applica" name="apply_btn"/>
+ <spinner label="Limite di altezza del
+terreno" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Limite di abbassamento
+del terreno" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Texture terreno (richiede file 512x512, 24 bit .tga)
+ </text>
+ <text name="height_text_lbl">
+ 1 (basso)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Alto)
+ </text>
+ <text name="height_text_lbl5">
+ Intervalli altitudine texture
+ </text>
+ <text name="height_text_lbl10">
+ Questi valori indicano la gamma di miscele per le texture di cui sopra.
+ </text>
+ <text name="height_text_lbl11">
+ Misurato in metri, il valore BASSO è la MASSIMA altezza della texture n. 1, e il valore ALTO è l&apos;altezza MINIMA della texture n. 4.
+ </text>
+ <text name="height_text_lbl6">
+ Nordovest
+ </text>
+ <text name="height_text_lbl7">
+ Nordest
+ </text>
+ <spinner label="Basso" name="height_start_spin_1"/>
+ <spinner label="Basso" name="height_start_spin_3"/>
+ <spinner label="Alto" name="height_range_spin_1"/>
+ <spinner label="Alto" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Sudovest
+ </text>
+ <text name="height_text_lbl9">
+ Sudest
+ </text>
+ <spinner label="Basso" name="height_start_spin_0"/>
+ <spinner label="Basso" name="height_start_spin_2"/>
+ <spinner label="Alto" name="height_range_spin_0"/>
+ <spinner label="Alto" name="height_range_spin_2"/>
<button label="Scarica terreno RAW..." name="download_raw_btn" tool_tip="Disponibile solo per i proprietari del terreno, non per i manager"/>
- <button label="?" name="download_raw_help"/>
<button label="Carica terreno RAW..." name="upload_raw_btn" tool_tip="Disponibile solo per i proprietari del terreno, non per i manager"/>
- <button label="?" name="upload_raw_help"/>
- <button width="170" label="Trasforma il terreno" name="bake_terrain_btn" tool_tip="Imposta il terreno corrente come punto medio per i limiti di innalzamento/abbassamento"/>
- <button left="190" label="?" name="bake_terrain_help"/>
+ <button label="Trasforma il terreno" name="bake_terrain_btn" tool_tip="Imposta il terreno corrente come punto medio per i limiti di innalzamento/abbassamento" width="170"/>
+ <button label="Applica" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_sound_devices.xml b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
index 8e7f0c8dc5..b1934fd515 100644
--- a/indra/newview/skins/default/xui/it/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Predefinito
</panel.string>
+ <string name="name_no_device">
+ Nessun dispositivo
+ </string>
+ <string name="name_default_system_device">
+ Dispositivo di sistema predefinito
+ </string>
<text name="Input">
Input
</text>
+ <text name="Output">
+ Output
+ </text>
<text name="My volume label">
Il mio volume:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Attendi
</text>
- <text name="Output">
- Output
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
index 1c1744d94b..72ca2f6d68 100644
--- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Cose" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Elementi ricevuti ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Elementi ricevuti
+ </string>
+ <button label="Elementi ricevuti" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] nuovi
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Gli acquisti dal mercato verranno consegnati qui.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Casella uscita commercianti" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Sposta al mercato"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Imposta il tuo account commercianti per usare questa funzione.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index cbe8ef24c4..1d335e55a6 100644
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -31,6 +31,9 @@
<string name="StartupInitializingVFS">
Inizializzazione VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Inizializzazione grafica non riuscita. Aggiorna il driver della scheda grafica!
+ </string>
<string name="ProgressRestoring">
Ripristino in corso...
</string>
@@ -85,6 +88,12 @@
<string name="LoginQuicktimeOK">
QuickTime configurato con successo.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Richiesta capacità regione...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Richiesta capacità regione, tentativo [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
In attesa della risposta della regione...
</string>
@@ -1177,6 +1186,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="InventoryNoTexture">
Non hai una copia di questa texture nel tuo inventario
</string>
+ <string name="InventoryInboxNoItems">
+ Gli elementi acquistati attraverso il mercato verranno consegnati qui
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Trascina gli elementi qui per poi elencarli nel tuo mercato.
+ </string>
<string name="no_transfer" value="(nessun trasferimento)"/>
<string name="no_modify" value="(nessuna modifica)"/>
<string name="no_copy" value="(nessuna copia)"/>
@@ -1217,9 +1232,6 @@ Prova ad accedere nuovamente tra un minuto.
<string name="InvFolder My Inventory">
Il mio inventario
</string>
- <string name="InvFolder My Favorites">
- I miei preferiti
- </string>
<string name="InvFolder Library">
Libreria
</string>
@@ -1278,10 +1290,10 @@ Prova ad accedere nuovamente tra un minuto.
Gesture
</string>
<string name="InvFolder Favorite">
- Preferiti
+ I miei preferiti
</string>
<string name="InvFolder favorite">
- Preferiti
+ I miei preferiti
</string>
<string name="InvFolder Current Outfit">
Abbigliamento attuale
@@ -1304,6 +1316,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="InvFolder All">
Tutto
</string>
+ <string name="no_attachments">
+ Nessun allegato indossato
+ </string>
<string name="Buy">
Acquista
</string>
@@ -1613,6 +1628,9 @@ Prova ad accedere nuovamente tra un minuto.
</string>
<string name="SummaryForTheWeek" value="Riassunto della settimana, partendo dal "/>
<string name="NextStipendDay" value=". Il prossimo giorno di stipendio è "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value="Gruppo Dividendi individuali"/>
<string name="GroupColumn" value="Gruppo"/>
<string name="Balance">
@@ -1639,6 +1657,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="IMTeen">
teen
</string>
+ <string name="Anyone">
+ chiunque
+ </string>
<string name="RegionInfoError">
errore
</string>
@@ -1846,7 +1867,7 @@ Prova ad accedere nuovamente tra un minuto.
<string name="RegionNoCovenantOtherOwner">
Non esiste alcun regolamento per questa proprietà. Il terreno di questa proprietà è messo in vendita dal proprietario, non dalla Linden Lab. Contatta il proprietario del terreno per i dettagli della vendita.
</string>
- <string name="covenant_last_modified" value="Ultima modifica:"/>
+ <string name="covenant_last_modified" value="Ultima modifica: "/>
<string name="none_text" value="(nessuno)"/>
<string name="never_text" value="(mai)"/>
<string name="GroupOwned">
@@ -1855,6 +1876,12 @@ Prova ad accedere nuovamente tra un minuto.
<string name="Public">
Pubblica
</string>
+ <string name="LocalSettings">
+ Impostazioni locali
+ </string>
+ <string name="RegionSettings">
+ Impostazioni regione
+ </string>
<string name="ClassifiedClicksTxt">
Clicca: [TELEPORT] teleport, [MAP] mappa, [PROFILE] profilo
</string>
@@ -1927,6 +1954,9 @@ Prova ad accedere nuovamente tra un minuto.
<string name="GroupMoneyDebits">
Debiti
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Contenuto
</string>
@@ -3643,6 +3673,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Regione generale
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatar visibili e chat consentita fuori di questo lotto
+ </string>
<string name="UpdaterWindowTitle">
Aggiornamento [APP_NAME]
</string>
@@ -4056,6 +4089,87 @@ Segnala abuso
<string name="Female - Wow">
Femmina - Accipicchia
</string>
+ <string name="/bow">
+ /inchino
+ </string>
+ <string name="/clap">
+ /applausi
+ </string>
+ <string name="/count">
+ /numero
+ </string>
+ <string name="/extinguish">
+ /estingui
+ </string>
+ <string name="/kmb">
+ /chissene
+ </string>
+ <string name="/muscle">
+ /muscolo
+ </string>
+ <string name="/no">
+ /no
+ </string>
+ <string name="/no!">
+ /no!
+ </string>
+ <string name="/paper">
+ /carta
+ </string>
+ <string name="/pointme">
+ /indicome
+ </string>
+ <string name="/pointyou">
+ /indicotu
+ </string>
+ <string name="/rock">
+ /sasso
+ </string>
+ <string name="/scissor">
+ /forbici
+ </string>
+ <string name="/smoke">
+ /fumo
+ </string>
+ <string name="/stretch">
+ /stiracchiata
+ </string>
+ <string name="/whistle">
+ /fischietto
+ </string>
+ <string name="/yes">
+ /si
+ </string>
+ <string name="/yes!">
+ /si!
+ </string>
+ <string name="afk">
+ non alla tastiera
+ </string>
+ <string name="dance1">
+ danza1
+ </string>
+ <string name="dance2">
+ danza2
+ </string>
+ <string name="dance3">
+ danza3
+ </string>
+ <string name="dance4">
+ danza4
+ </string>
+ <string name="dance5">
+ danza5
+ </string>
+ <string name="dance6">
+ danza6
+ </string>
+ <string name="dance7">
+ danza7
+ </string>
+ <string name="dance8">
+ danza8
+ </string>
<string name="AvatarBirthDateFormat">
[day,datetime,slt]/[mthnum,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
index 2f578862d3..e870a8ace9 100644
--- a/indra/newview/skins/default/xui/ja/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/ja/floater_about_land.xml
@@ -133,12 +133,12 @@
誤
</text>
<button label="土地ã®è³¼å…¥" label_selected="土地を購入..." left="130" name="Buy Land..." width="100"/>
+ <button label="リンデンセール" label_selected="Linden セール..." name="Linden Sale..." tool_tip="åœŸåœ°ãŒæ‰€æœ‰ã•れã¦ãŠã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¨­å®šã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オークションã®å¯¾è±¡ã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚å¿…è¦æ¡ä»¶ã§ã™ã€‚"/>
<button label="スクリプト情報" name="Scripts..." width="100"/>
<button label="グループã«è³¼å…¥" label_selected="グループ用ã«è³¼å…¥..." name="Buy For Group..."/>
<button label="入場許å¯ã‚’購入" label_selected="入場許å¯ã‚’購入..." left="130" name="Buy Pass..." tool_tip="ã“ã®åœŸåœ°ã¸ã®ä¸€æ™‚çš„ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚" width="100"/>
<button label="åœŸåœ°ã®æ”¾æ£„" label_selected="土地を放棄..." name="Abandon Land..."/>
<button label="土地をå–り戻ã™" label_selected="土地ã®è¿”é‚„ã‚’è¦æ±‚..." name="Reclaim Land..."/>
- <button label="リンデンセール" label_selected="Linden セール..." name="Linden Sale..." tool_tip="åœŸåœ°ãŒæ‰€æœ‰ã•れã¦ãŠã‚Šã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒè¨­å®šã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚オークションã®å¯¾è±¡ã«ãªã£ã¦ã„ãªã„ã“ã¨ã‚‚å¿…è¦æ¡ä»¶ã§ã™ã€‚"/>
</panel>
<panel label="約款" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -310,6 +310,9 @@
<panel.string name="push_restrict_region_text">
ãƒ—ãƒƒã‚·ãƒ¥ç¦æ­¢ (地域設定優先)
</panel.string>
+ <panel.string name="see_avs_text">
+ ã“ã®åŒºç”»ã«ã„ã‚‹ä½äººã¨ä¼šã£ã¦ãƒãƒ£ãƒƒãƒˆã™ã‚‹
+ </panel.string>
<text name="allow_label">
ä»–ã®ä½äººã¸ã®è¨±å¯ï¼š
</text>
@@ -372,6 +375,10 @@
スナップショット:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="写真をクリックã—ã¦é¸æŠž"/>
+ <text name="allow_label5">
+ ä»–ã®åŒºç”»ã«ã„ã‚‹ä½äººã¸ã®è¨±å¯ï¼š
+ </text>
+ <check_box label="ã‚¢ãƒã‚¿ãƒ¼ã‚’表示" name="SeeAvatarsCheck" tool_tip="ä»–ã®åŒºç”»ã®ä½äººãŒã€ã“ã®åŒºç”»ã«ã„ã‚‹ä½äººã«ä¼šã£ã¦ãƒãƒ£ãƒƒãƒˆã™ã‚‹ã“ã¨ã‚’許å¯ã—ã€ã‚ãªãŸã‚‚ãれらä½äººã«ä¼šã£ã¦ãƒãƒ£ãƒƒãƒˆã§ãるよã†ã«ã—ã¾ã™ã€‚"/>
<text name="landing_point">
ç€åœ°ç‚¹: [LANDING]
</text>
@@ -428,6 +435,11 @@
サウンド:
</text>
<check_box label="ジェスãƒãƒ£ãƒ¼ã¨ã‚ªãƒ–ジェクトã®éŸ³ã‚’ã“ã®åŒºç”»ã ã‘ã«é™å®šã™ã‚‹" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ ã‚¢ãƒã‚¿ãƒ¼ã®ã‚µã‚¦ãƒ³ãƒ‰ï¼š
+ </text>
+ <check_box label="全員" name="all av sound check"/>
+ <check_box label="グループ" name="group av sound check"/>
<text name="Voice settings:">
ボイス:
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml
index 8cb67ca521..6865409e7a 100644
--- a/indra/newview/skins/default/xui/ja/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/ja/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="グリッドオプション">
- <spinner label="グリッドå˜ä½ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰" name="GridResolution"/>
- <spinner label="グリッド゙範囲(メートル)" name="GridDrawSize"/>
+ <floater.string name="grid_screen_text">
+ ç”»é¢
+ </floater.string>
+ <floater.string name="grid_local_text">
+ ローカル
+ </floater.string>
+ <floater.string name="grid_world_text">
+ 世界
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ リファレンス
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ アタッãƒãƒ¡ãƒ³ãƒˆ
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="グリッドã®ä¸é€æ˜Žåº¦">
+ モード
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="オブジェクトã®é…ç½®ã«ä½¿ã†ã‚°ãƒªãƒƒãƒ‰ãƒ«ãƒ¼ãƒ©ã‚’é¸æŠž">
+ <combo_box.item label="インワールドグリッド" name="World"/>
+ <combo_box.item label="ローカルグリッド" name="Local"/>
+ <combo_box.item label="リファレンスグリッド" name="Reference"/>
+ </combo_box>
+ <spinner label="å˜ä½ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰" name="GridResolution"/>
+ <spinner label="範囲(メートル)" name="GridDrawSize"/>
<check_box label="より細ã‹ã„å˜ä½ã§ã‚¹ãƒŠãƒƒãƒ—フィット" name="GridSubUnit"/>
<check_box label="横断é¢ã‚’表示" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="グリッドã®ä¸é€æ˜Žåº¦">
diff --git a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
deleted file mode 100644
index b0949cd4e0..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="デイサイクル編集">
- <tab_container name="Day Cycle Tabs">
- <panel label="デイサイクル" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 深夜 12時
- </text>
- <text name="WL3am">
- åˆå‰ 3時
- </text>
- <text name="WL6am">
- åˆå‰ 6時
- </text>
- <text name="WL9amHash">
- åˆå‰ 9時
- </text>
- <text name="WL12pmHash">
- æ­£åˆ 12時
- </text>
- <text name="WL3pm">
- åˆå¾Œ 3時
- </text>
- <text name="WL6pm">
- åˆå¾Œ 6時
- </text>
- <text name="WL9pm">
- åˆå¾Œ 9時
- </text>
- <text name="WL12am2">
- 深夜 12時
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="キーã®è¿½åŠ " label_selected="キーã®è¿½åŠ " name="WLAddKey"/>
- <button label="キーã®å‰Šé™¤" label_selected="キーã®å‰Šé™¤" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- キーフレームã®è¨­å®šï¼š
- </text>
- <text name="WLCurKeyTimeText">
- キータイム:
- </text>
- <spinner label="時間" name="WLCurKeyHour"/>
- <spinner label="分" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- キーã®äº‹å‰è¨­å®šï¼š
- </text>
- <combo_box label="事å‰è¨­å®š" name="WLKeyPresets"/>
- <text name="DayCycleText">
- スナップ:
- </text>
- <combo_box label="5 分" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- サイクルã®é•·ã•:
- </text>
- <spinner label="時間" name="WLLengthOfDayHour"/>
- <spinner label="分" name="WLLengthOfDayMin"/>
- <spinner label="ç§’" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- プレビュー:
- </text>
- <button label="å†ç”Ÿ" label_selected="å†ç”Ÿ" name="WLAnimSky"/>
- <button label="åœæ­¢" label_selected="åœæ­¢" name="WLStopAnimSky"/>
- <button label="ä¸å‹•ç”£ã®æ™‚刻を使用" label_selected="ä¸å‹•ç”£ã®æ™‚刻ã«å¤‰æ›´" name="WLUseLindenTime"/>
- <button label="デイテストをä¿å­˜" label_selected="デイテストをä¿å­˜" name="WLSaveDayCycle"/>
- <button label="デイテストをロード" label_selected="デイテストをロード" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..eb39d1b336
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="環境ã®äº‹å‰è¨­å®šã‚’削除">
+ <string name="title_water">
+ æ°´ã®äº‹å‰è¨­å®šã‚’削除
+ </string>
+ <string name="title_sky">
+ 空ã®äº‹å‰è¨­å®šã‚’削除
+ </string>
+ <string name="title_day_cycle">
+ デイサイクルを削除
+ </string>
+ <string name="label_water">
+ 事å‰è¨­å®šï¼š
+ </string>
+ <string name="label_sky">
+ 事å‰è¨­å®šï¼š
+ </string>
+ <string name="label_day_cycle">
+ デイサイクル:
+ </string>
+ <string name="msg_confirm_deletion">
+ é¸æŠžã•れãŸäº‹å‰è¨­å®šã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
+ </string>
+ <string name="msg_sky_is_referenced">
+ デイサイクルã®å‚ç…§å…ˆã¨ã—ã¦ä½¿ã‚れã¦ã„る事å‰è¨­å®šã¯å‰Šé™¤ã§ãã¾ã›ã‚“。
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="label">
+ 事å‰è¨­å®šï¼š
+ </text>
+ <button label="削除" name="delete"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..fd601672b6
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="デイサイクルを編集">
+ <string name="title_new">
+ æ–°ãŸãªãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã‚’作æˆ
+ </string>
+ <string name="title_edit">
+ デイサイクルを編集
+ </string>
+ <string name="hint_new">
+ æ–°ã—ã„デイサイクルã«åå‰ã‚’ã¤ã‘ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="hint_edit">
+ 自分ã§ä½œæˆã—ãŸãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="label">
+ 事å‰è¨­å®šã®åå‰ï¼š
+ </text>
+ <text name="note">
+ 注æ„:自分ã§ä½œæˆã—ãŸäº‹å‰è¨­å®šã®åå‰ã‚’変更ã™ã‚‹ã¨ã€æ–°ã—ã„事å‰è¨­å®šãŒåˆ¥ã«ä½œæˆã•れるã ã‘ã§ã€å…ƒã®äº‹å‰è¨­å®šã¯å¤‰æ›´ã•れã¾ã›ã‚“。
+ </text>
+ <text name="hint_item1">
+ - 特定ã®ç©ºã®è¨­å®šã‚„時間を編集ã™ã‚‹ã«ã¯ã‚¿ãƒ–ã‚’1ã¤ã‚¯ãƒªãƒƒã‚¯ã—ã¾ã™ã€‚
+ </text>
+ <text name="hint_item2">
+ - 移行時間を設定ã™ã‚‹ã«ã¯ã‚¿ãƒ–をクリックã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚
+ </text>
+ <text name="hint_item3">
+ - デイサイクルをプレビューã™ã‚‹ã«ã¯ã‚¹ã‚¯ãƒ©ãƒãƒ¼ã‚’使ã„ã¾ã™ã€‚
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="キーã®è¿½åŠ " label_selected="キーã®è¿½åŠ " name="WLAddKey"/>
+ <button label="キーã®å‰Šé™¤" label_selected="キーã®å‰Šé™¤" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 12am
+ </text>
+ <text name="WL3am">
+ 3am
+ </text>
+ <text name="WL6am">
+ 6am
+ </text>
+ <text name="WL9amHash">
+ 9am
+ </text>
+ <text name="WL12pmHash">
+ 12pm
+ </text>
+ <text name="WL3pm">
+ 3pm
+ </text>
+ <text name="WL6pm">
+ 6pm
+ </text>
+ <text name="WL9pm">
+ 9pm
+ </text>
+ <text name="WL12am2">
+ 12am
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ 空ã®è¨­å®šï¼š
+ </text>
+ <combo_box label="事å‰è¨­å®š" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ 時間:
+ </text>
+ <time name="time" value="6:00 AM"/>
+ <check_box label="ã“れを新ã—ã„デイサイクルã«ã™ã‚‹" name="make_default_cb"/>
+ <button label="ä¿å­˜" name="save"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..68d0c70baa
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="空ã®äº‹å‰è¨­å®šã‚’編集">
+ <string name="title_new">
+ æ–°ã—ã„空ã®äº‹å‰è¨­å®šã‚’作æˆ
+ </string>
+ <string name="title_edit">
+ 空ã®äº‹å‰è¨­å®šã‚’編集
+ </string>
+ <string name="hint_new">
+ æ–°ã—ã„事å‰è¨­å®šã«åå‰ã‚’ã¤ã‘ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="hint_edit">
+ 空ã®äº‹å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="hint">
+ 事å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </text>
+ <text name="label">
+ 事å‰è¨­å®šã®åå‰ï¼š
+ </text>
+ <text name="note">
+ 注æ„:自分ã§ä½œæˆã—ãŸäº‹å‰è¨­å®šã®åå‰ã‚’変更ã™ã‚‹ã¨ã€æ–°ã—ã„事å‰è¨­å®šãŒåˆ¥ã«ä½œæˆã•れるã ã‘ã§ã€å…ƒã®äº‹å‰è¨­å®šã¯å¤‰æ›´ã•れã¾ã›ã‚“。
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="大気" name="Atmosphere">
+ <text name="BHText">
+ 空ã®é…色
+ </text>
+ <text name="BDensText">
+ 空ã¨é æ™¯ã®éœ²å…‰
+ </text>
+ <text name="BDensText2">
+ 空ã®é…è‰²ã¨æ¿ƒåº¦
+ </text>
+ <text name="HDText">
+ 大気ã®ä¸é€æ˜Žåº¦
+ </text>
+ <text name="DensMultText">
+ 大気ã®ä¸é€æ˜Žåº¦ã®å¢—å¹…
+ </text>
+ <text name="WLDistanceMultText">
+ 視界ã®å¢—å¹…
+ </text>
+ <text name="MaxAltText">
+ 最大高度
+ </text>
+ </panel>
+ <panel label="ライティング" name="Lighting">
+ <text name="SLCText">
+ 太陽/月ã®è‰²
+ </text>
+ <text name="WLAmbientText">
+ 風
+ </text>
+ <text name="SunGlowText">
+ 太陽ã®è¼ã
+ </text>
+ <slider label="焦点" name="WLGlowB"/>
+ <slider label="サイズ" name="WLGlowR"/>
+ <text name="WLStarText">
+ 星ã®è¼ã
+ </text>
+ <text name="SceneGammaText">
+ 風景ガンマ
+ </text>
+ <text name="TODText">
+ 太陽/月ã®ä½ç½®
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 12am
+ </text>
+ <text name="WL6am">
+ 6am
+ </text>
+ <text name="WL12pmHash">
+ 12pm
+ </text>
+ <text name="WL6pm">
+ 6pm
+ </text>
+ <text name="WL12am2">
+ 12am
+ </text>
+ <time name="WLDayTime" value="6:00 AM"/>
+ <text name="WLEastAngleText">
+ æ±ã®è§’度
+ </text>
+ </panel>
+ <panel label="雲" name="Clouds">
+ <text name="WLCloudColorText">
+ 雲ã®è‰²
+ </text>
+ <text name="WLCloudColorText2">
+ 雲ã®XY/密度
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ 雲ã®é‡
+ </text>
+ <text name="WLCloudScaleText">
+ 雲ã®ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="WLCloudDetailText">
+ 雲ã®è©³ç´°ï¼ˆXY/密度)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ 雲ã®ç§»å‹•速度(Xæ–¹å‘)
+ </text>
+ <check_box label="ロック" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ 雲ã®ç§»å‹•速度(Y æ–¹å‘)
+ </text>
+ <check_box label="ロック" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="ã“ã®äº‹å‰è¨­å®šã‚’æ–°ã—ã„空ã®è¨­å®šã«ã™ã‚‹" name="make_default_cb"/>
+ <button label="ä¿å­˜" name="save"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..eddfbd4298
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="æ°´ã®äº‹å‰è¨­å®šã‚’編集">
+ <string name="title_new">
+ æ–°ã—ã„æ°´ã®äº‹å‰è¨­å®šã‚’作æˆ
+ </string>
+ <string name="title_edit">
+ æ°´ã®äº‹å‰è¨­å®šã‚’編集
+ </string>
+ <string name="hint_new">
+ æ–°ã—ã„事å‰è¨­å®šã«åå‰ã‚’ã¤ã‘ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="hint_edit">
+ æ°´ã®äº‹å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </string>
+ <string name="combo_label">
+ - 事å‰è¨­å®šã‚’é¸æŠž -
+ </string>
+ <text name="hint">
+ 事å‰è¨­å®šã‚’編集ã™ã‚‹ã«ã¯ã€å¸Œæœ›ã®è¨­å®šã«èª¿ç¯€ã—ã¦ã€ã€Œä¿å­˜ã€ã‚’クリックã—ã¾ã™ã€‚
+ </text>
+ <text name="label">
+ 事å‰è¨­å®šã®åå‰ï¼š
+ </text>
+ <text name="note">
+ 注æ„:自分ã§ä½œæˆã—ãŸäº‹å‰è¨­å®šã®åå‰ã‚’変更ã™ã‚‹ã¨ã€æ–°ã—ã„事å‰è¨­å®šãŒåˆ¥ã«ä½œæˆã•れるã ã‘ã§ã€å…ƒã®äº‹å‰è¨­å®šã¯å¤‰æ›´ã•れã¾ã›ã‚“。
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ 水中ã®ãƒ•ォグ効果ã®è‰²
+ </text>
+ <text name="water_fog_density_label">
+ 水中ã®é€æ˜Žåº¦æŒ‡æ•°
+ </text>
+ <text name="underwater_fog_modifier_label">
+ 水中ã®ãƒ•ォグ効果加減
+ </text>
+ <text name="BHText">
+ å¤§æ³¢ã®æ–¹å‘
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ ã•ã–æ³¢ã®å射スケール
+ </text>
+ <text name="HDText">
+ フレãƒãƒ«ãƒ»ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="FresnelOffsetText">
+ フレãƒãƒ«ãƒ»ã‚ªãƒ•セット
+ </text>
+ <text name="BHText2">
+ å°æ³¢ã®æ–¹å‘
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ æ°´é¢ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="WaterScaleBelowText">
+ 水中ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
+ </text>
+ <text name="MaxAltText">
+ ä¸é€æ˜Žåº¦ã®å¢—å¹…
+ </text>
+ <text name="BHText3">
+ ノーマル・マップ
+ </text>
+ </panel>
+ <check_box label="ã“ã®äº‹å‰è¨­å®šã‚’æ–°ã—ã„æ°´ã®è¨­å®šã«ã™ã‚‹" name="make_default_cb"/>
+ <button label="ä¿å­˜" name="save"/>
+ <button label="å–り消ã—" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_env_settings.xml b/indra/newview/skins/default/xui/ja/floater_env_settings.xml
deleted file mode 100644
index 1d5f26a6eb..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_env_settings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="自然環境エディター">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- 時刻
- </text>
- <text name="EnvTimeText2">
- æ­£åˆ 12:00
- </text>
- <text name="EnvCloudText">
- 雲ã®é‡
- </text>
- <text name="EnvWaterColorText">
- æ°´ã®è‰²
- </text>
- <color_swatch name="EnvWaterColor" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
- <text name="EnvWaterFogText">
- 水中照度
- </text>
- <button label="ä¸å‹•ç”£ã®æ™‚刻を使用" name="EnvUseEstateTimeButton"/>
- <button label="空ã®é«˜åº¦ãªè¨­å®š" name="EnvAdvancedSkyButton"/>
- <button label="æ°´ã®é«˜åº¦ãªè¨­å®š" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_environment_settings.xml b/indra/newview/skins/default/xui/ja/floater_environment_settings.xml
new file mode 100644
index 0000000000..0e3803119f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="自然環境ã®è¨­å®š">
+ <text name="note">
+ ビューワã®è‡ªç„¶ç’°å¢ƒã®è¨­å®šã¯ä»¥ä¸‹ã®ã‚ªãƒ—ションを使ã£ã¦ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãã¾ã™ã€‚
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="リージョンã®è¨­å®šã‚’使用" name="use_region_settings"/>
+ <radio_item label="自然環境をカスタマイズ" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ 注æ„:カスタム設定ã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è¦‹ãˆã¾ã›ã‚“。
+ </text>
+ <text name="water_settings_title">
+ æ°´ã®è¨­å®š
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ 空 / デイサイクル
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="空ã®å›ºå®š" name="my_sky_settings"/>
+ <radio_item label="デイサイクル" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
index 5eb141a28c..07667bb697 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
待機状態
</string>
+ <string name="status_parse_error">
+ Dae ã«å•題ãŒè¦‹ã¤ã‹ã‚Šã¾ã—㟠- 詳細ã«ã¤ã„ã¦ã¯ãƒ­ã‚°ã‚’ã”å‚ç…§ãã ã•ã„。
+ </string>
<string name="status_reading_file">
ローディング...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
ã‚¨ãƒ©ãƒ¼ï¼šé ‚ç‚¹ã®æ•°ãŒ65534ã‚’è¶…éŽã—ãŸã®ã§ä¸­æ­¢ã•れã¾ã—ãŸã€‚
</string>
+ <string name="bad_element">
+ エラー:è¦ç´ ãŒç„¡åйã§ã™
+ </string>
<string name="high">
高
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
å˜ç´”化
</string>
+ <string name="tbd">
+ 未定
+ </string>
<text name="name_label">
åå‰ï¼š
</text>
@@ -74,23 +83,26 @@
æç”»è©³ç´°åº¦ï¼šæœ€ä½Ž
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
- <text name="physics cost">
- 物ç†åŠ¹æžœæ–™é‡‘ï¼š [COST]
- </text>
- <text name="upload fee">
- アップロード手数料:該当ãªã—
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ 警告:
+ </text>
+ <text name="warning_message">
+ ã“ã®ãƒ¢ãƒ‡ãƒ«ã‚’ Second Life サーãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。メッシュモデルã®ã‚¢ãƒƒãƒ—ロード手順ã«ã¤ã„ã¦ã¯ [[VURL] ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦ãã ã•ã„]。
+ </text>
+ <text name="weights_text">
+ ダウンロード:
+ç‰©ç†æ¼”算:
+サーãƒãƒ¼è² è·ï¼š
+
+プリムæ›ç®—:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="デフォルト" name="reset_btn" tool_tip="デフォルトã«ãƒªã‚»ãƒƒãƒˆ"/>
- <button label="アップロード" name="ok_btn" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ロード"/>
- <button label="å–り消ã—" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="æç”»è©³ç´°åº¦" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ アップロード料金:L$ [FEE]
+ </text>
+ <button label="デフォルトã«è¨­å®š" name="reset_btn" tool_tip="デフォルトã«è¨­å®š"/>
+ <button label="ã‚¦ã‚§ã‚¤ãƒˆã¨æ–™é‡‘ã®è¨ˆç®—" name="calculate_btn" tool_tip="ã‚¦ã‚§ã‚¤ãƒˆã¨æ–™é‡‘ã®è¨ˆç®—"/>
+ <button label="アップロード" name="ok_btn" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ロード"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
index a785172f20..2f336fcbde 100644
--- a/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/ja/floater_model_wizard.xml
@@ -2,42 +2,54 @@
<floater name="Model Wizard" title="モデルウィザードをアップロード">
<button label="5. アップロード" name="upload_btn"/>
<button label="4. 確èª" name="review_btn"/>
- <button label="3. 物ç†åŠ¹æžœ" name="physics2_btn"/>
<button label="3. 物ç†åŠ¹æžœ" name="physics_btn"/>
<button label="2. 最é©åŒ–" name="optimize_btn"/>
<button label="1. ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- モデルをアップロード
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ ãƒ¢ãƒ‡ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž
</text>
</panel>
- <text name="description">
- ã“ã®ã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã‚’使ã†ã¨ã€ãƒ¡ãƒƒã‚·ãƒ¥ãƒ¢ãƒ‡ãƒ«ã‚’ç°¡å˜ã«Second Lifeã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ã¾ãšã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã‚’å«ã‚€ãƒ•ァイルを指定ã—ã¾ã™ã€‚Second Life 㯠COLLADA (.dae) ファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
- </text>
- <panel name="content">
- <text name="Cache location">
- ファイルå:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ 上級ユーザーã®å ´åˆï¼š3D コンテンツã®åˆ¶ä½œãƒ„ãƒ¼ãƒ«ã‚’ä½¿ã„æ…£ã‚ŒãŸæ–¹ã¯ã€é«˜åº¦ãªã‚¢ãƒƒãƒ—ローダーもãŠè©¦ã—ãã ã•ã„。
+ </text>
+ <button label="アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ アップロードã™ã‚‹ãƒ¢ãƒ‡ãƒ«ãƒ•ァイルã®é¸æŠž
</text>
<button label="å‚ç…§" label_selected="å‚ç…§" name="browse"/>
+ <text name="support_collada_text">
+ Second Life 㯠COLLADA (.dae) ファイルをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+ </text>
+ <text name="dimensions_label">
+ サイズ(メートル):
+ </text>
<text name="dimensions">
- X: Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ 警告:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ ã“ã®ãƒ¢ãƒ‡ãƒ«ã‚’ Second Life サーãƒãƒ¼ã«ã‚¢ãƒƒãƒ—ロードã™ã‚‹ãŸã‚ã®æœ€çµ‚手順を実行ã§ãã¾ã›ã‚“。[secondlife:///app/floater/learn_more ã“ã¡ã‚‰ã‚’å‚ç…§ã—ã¦]ã€ãƒ¡ãƒƒã‚·ãƒ¥ãƒ¢ãƒ‡ãƒ«ã‚’アップロードã§ãるよã†ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’設定ã—ã¦ãã ã•ã„。
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- 最é©åŒ–
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ モデルを最é©åŒ–
</text>
</panel>
- <text name="description">
- ウィザードãŒãƒ¢ãƒ‡ãƒ«ã‚’最é©åŒ–ã—ã€ãƒ‘フォーマンスを改善ã—ã¾ã—ãŸã€‚ä»¥ä¸‹ã§æœ€é©åŒ–プロセスã®çµæžœã‚’変更ã™ã‚‹ã‹ã€ã€Œæ¬¡ã¸ã€ã‚’クリックã—ã¦ç¶šã‘ã¾ã™ã€‚
+ <text name="optimize_hint">
+ パフォーマンスをé‡è¦–ã—ã¦ãƒ¢ãƒ‡ãƒ«ã‚’最é©åŒ–ã—ã¾ã—ãŸã€‚å¿…è¦ã«å¿œã˜ã¦èª¿æ•´ã—ã¦ãã ã•ã„。
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½œæˆ
+ </text>
<text name="high_detail_text">
æ¬¡ã®æç”»è©³ç´°åº¦ã‚’ä½œæˆï¼šé«˜
</text>
@@ -52,140 +64,154 @@
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- モデルã®ãƒ—レビュー:
+ <text name="optimize_performance_text">
+ パフォーマンス
+ </text>
+ <text name="optimize_faster_rendering_text">
+ レンダリング速度ã®å‘上
+詳細度ã®ä½Žä¸‹
+プリムæ›ç®—ウェイトã®è»½æ¸›
+ </text>
+ <text name="optimize_accuracy_text">
+ 正確ã•
+ </text>
+ <text name="optimize_slower_rendering_text">
+ レンダリング速度ã®ä½Žä¸‹
+詳細化
+プリムæ›ç®—ウェイトã®å¢—加
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
</text>
- <combo_box name="preview_lod_combo2" tool_tip="プレビュー表示ã®LOD設定">
- <combo_item name="high">
- 高
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="ジオメトリをå†è¨ˆç®—" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ ジオメトリã®ãƒ—レビュー
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="プレビュー表示㮠LOD 設定">
+ <combo_item name="preview_lod_high">
+ 高ã„詳細度
</combo_item>
- <combo_item name="medium">
- 中
+ <combo_item name="preview_lod_medium">
+ 中ã®è©³ç´°åº¦
</combo_item>
- <combo_item name="low">
- 低
+ <combo_item name="preview_lod_low">
+ 低ã„詳細度
</combo_item>
- <combo_item name="lowest">
- 最低
+ <combo_item name="preview_lod_lowest">
+ 最低ã®è©³ç´°åº¦
</combo_item>
</combo_box>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- 物ç†åŠ¹æžœ
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ 物ç†ä½œç”¨ã®èª¿æ•´
</text>
</panel>
- <text name="description">
- ウィザードãŒä½œæˆã™ã‚‹å®Ÿåƒã«ã‚ˆã£ã¦ã€ã‚ªãƒ–ジェクトãŒä»–ã®ã‚ªãƒ–ジェクトやアãƒã‚¿ãƒ¼ã¨ã©ã®ã‚ˆã†ã«ã‚¤ãƒ³ã‚¿ãƒ©ã‚¯ã‚·ãƒ§ãƒ³ã™ã‚‹ã‹ãŒæ±ºã¾ã‚Šã¾ã™ã€‚オブジェクトã®ç”¨é€”ã«æœ€é©ãªæç”»è©³ç´°åº¦ã«ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’設定ã—ã¦ãã ã•ã„:
+ <text name="physics_hint">
+ モデルã®å¤–殻構造ã®ã‚·ã‚§ã‚¤ãƒ—ã¯å¼Šç¤¾ãŒä½œæˆã—ã¾ã™ã€‚モデルã®ç›®çš„ã«å¿œã˜ã¦ã‚·ã‚§ã‚¤ãƒ—ã®è©³ç´°åº¦ã‚’調整ã—ã¦ãã ã•ã„。
</text>
- <panel name="content">
- <text name="streaming cost">
- リソース料金: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ パフォーマンス
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- 物ç†åŠ¹æžœ
+ <text name="physics_faster_rendering_text">
+ レンダリング速度ã®å‘上
+詳細度ã®ä½Žä¸‹
+プリムæ›ç®—ウェイトã®è»½æ¸›
</text>
- </panel>
- <text name="description">
- 下ã®å®Ÿåƒã‚’プレビューã—ã€ã€Œæ¬¡ã¸ã€ã‚’クリックã—ã¦ç¶šã‘ã¾ã™ã€‚実åƒã‚’修正ã™ã‚‹ã«ã¯ã€Œæˆ»ã‚‹ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚
- </text>
- <panel name="content">
- <text name="lod_label">
- モデルã®ãƒ—レビュー:
+ <text name="physics_accuracy_text">
+ 正確
+ </text>
+ <text name="physics_slower_dendering_text">
+ レンダリング速度ã®ä½Žä¸‹
+詳細化
+プリムæ›ç®—ウェイトã®å¢—加
</text>
- <combo_box name="preview_lod_combo3" tool_tip="プレビュー表示ã®LOD設定">
- <combo_item name="high">
- 高
+ <text name="physics_example_1">
+ 例:
+å‹•ãオブジェクト
+飛行オブジェクト
+車
+ </text>
+ <text name="physics_example_2">
+ 例:
+å°ã•ãªé™æ­¢ã‚ªãƒ–ジェクト
+比較的詳細度ã®ä½Žã„オブジェクト
+シンプルãªå®¶å…·
+ </text>
+ <text name="physics_example_3">
+ 例:
+陿­¢ã‚ªãƒ–ジェクト
+詳細ãªã‚ªãƒ–ジェクト
+建物
+ </text>
+ <button label="ç‰©ç†æ¼”算ウェイトをå†è¨ˆç®—" name="recalculate_physics_btn"/>
+ <button label="å†è¨ˆç®—中..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ 物ç†ä½œç”¨ã®ãƒ—レビュー
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="プレビュー表示㮠LOD 設定">
+ <combo_item name="preview_lod2_high">
+ 高ã„詳細度
</combo_item>
- <combo_item name="medium">
- 中
+ <combo_item name="preview_lod2_medium">
+ 中ã®è©³ç´°åº¦
</combo_item>
- <combo_item name="low">
- 低
+ <combo_item name="preview_lod2_low">
+ 低ã„詳細度
</combo_item>
- <combo_item name="lowest">
- 最低
+ <combo_item name="preview_lod2_lowest">
+ 最低ã®è©³ç´°åº¦
</combo_item>
</combo_box>
- <text name="dimensions">
- X: Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
確èª
</text>
</panel>
- <text name="description">
- 以下ã®è©³ç´°ã‚’確èªã—ã¦ã‹ã‚‰ã€ã€Œã‚¢ãƒƒãƒ—ロードã€ã‚’クリックã™ã‚‹ã¨ãƒ¢ãƒ‡ãƒ«ãŒã‚¢ãƒƒãƒ—ロードã•れã¾ã™ã€‚「アップロードã€ã‚’クリックã—ãŸéš›ã«ã€æ–™é‡‘ãŒã‚ãªãŸã® L$ 残高ã‹ã‚‰å·®ã—引ã‹ã‚Œã¾ã™ã€‚
- </text>
- <panel name="content">
- <text name="lod_label">
- モデルã®ãƒ—レビュー:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ 区画/リージョンã¸ã®è² è·ï¼š[EQUIV] プリムæ›ç®—値
</text>
- <combo_box name="preview_lod_combo" tool_tip="プレビュー表示ã®LOD設定">
- <combo_item name="high">
- 高
- </combo_item>
- <combo_item name="medium">
- 中
- </combo_item>
- <combo_item name="low">
- 低
- </combo_item>
- <combo_item name="lowest">
- 最低
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X: Y: Z:
+ <text name="review_fee">
+ L$ [FEE] ã®ã‚¢ãƒƒãƒ—ロード料金ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«è«‹æ±‚ã•れã¾ã™ã€‚
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ アップロードボタンをクリックã™ã‚‹ã¨ã€ãƒ¢ãƒ‡ãƒ«ã«å«ã¾ã‚Œã‚‹ãƒžãƒ†ãƒªã‚¢ãƒ«ã®æ‰€æœ‰æ¨©ã‚„使用許å¯ã‚’所æŒã™ã‚‹ã“ã¨ã‚’èªã‚ãŸã“ã¨ã«ãªã‚Šã¾ã™ã€‚
</text>
</panel>
- <text name="streaming cost">
- リソース料金: [COST]
- </text>
- <text name="physics cost">
- 物ç†åŠ¹æžœæ–™é‡‘ï¼š [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- アップロード完了ï¼
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ アップロード完了
</text>
</panel>
- <text name="description">
- ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ãƒ¢ãƒ‡ãƒ«ãŒã‚¢ãƒƒãƒ—ロードã•れã¾ã—ãŸã€‚アップロードã•れãŸãƒ¢ãƒ‡ãƒ«ã¯ã€æŒã¡ç‰©ã®ã€Œã‚ªãƒ–ジェクトã€ãƒ•ォルダã«ã‚りã¾ã™ã€‚
+ <text name="model_uploaded_text">
+ モデルãŒã‚¢ãƒƒãƒ—ロードã•れã¾ã—ãŸã€‚
+ </text>
+ <text name="inventory_text">
+ ãã‚Œã¯æŒã¡ç‰©ã®ã€Œã‚ªãƒ–ジェクトã€ãƒ•ォルダã«ã‚りã¾ã™ã€‚
+ </text>
+ <text name="charged_fee">
+ ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã« L$ [FEE] ãŒè«‹æ±‚ã•れã¾ã—ãŸã€‚
</text>
</panel>
<button label="&lt;&lt; 戻る" name="back"/>
<button label="次ã¸&gt;&gt;" name="next"/>
+ <button label="ã‚¦ã‚§ã‚¤ãƒˆã¨æ–™é‡‘ã®è¨ˆç®— &gt;&gt;" name="calculate"/>
+ <button label="計算中..." name="calculating"/>
<button label="アップロード" name="upload" tool_tip="シミュレーターã«ã‚¢ãƒƒãƒ—ロード"/>
<button label="å–り消ã—" name="cancel"/>
<button label="é–‰ã˜ã‚‹" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
待機状態
</string>
+ <string name="status_parse_error">
+ Dae ã«å•題ãŒè¦‹ã¤ã‹ã‚Šã¾ã—㟠- 詳細ã«ã¤ã„ã¦ã¯ãƒ­ã‚°ã‚’ã”å‚ç…§ãã ã•ã„。
+ </string>
<string name="status_reading_file">
ローディング...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
ã‚¨ãƒ©ãƒ¼ï¼šé ‚ç‚¹ã®æ•°ãŒ65534ã‚’è¶…éŽã—ãŸã®ã§ä¸­æ­¢ã•れã¾ã—ãŸã€‚
</string>
+ <string name="bad_element">
+ エラー:è¦ç´ ãŒç„¡åйã§ã™
+ </string>
<string name="high">
高
</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_search.xml b/indra/newview/skins/default/xui/ja/floater_search.xml
index 289098a343..0723be0068 100644
--- a/indra/newview/skins/default/xui/ja/floater_search.xml
+++ b/indra/newview/skins/default/xui/ja/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="検索">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
ローディング...
</floater.string>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index f7d77d351e..a8b5febd54 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
土地をクリックã—ã€ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦é¸æŠž
</floater.string>
- <floater.string name="grid_screen_text">
- ç”»é¢
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] 個ã®ã‚ªãƒ–ジェクト([PRIM_COUNT] 個ã®ãƒ—リム [PE_STRING])ãŒé¸æŠžã•れã¦ã„ã¾ã™
</floater.string>
- <floater.string name="grid_local_text">
- ローカル
- </floater.string>
- <floater.string name="grid_world_text">
- インワールド
- </floater.string>
- <floater.string name="grid_reference_text">
- レファレンス
- </floater.string>
- <floater.string name="grid_attachment_text">
- アタッãƒãƒ¡ãƒ³ãƒˆ
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] プリムæ›ç®—値
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="フォーカス"/>
<button label="" label_selected="" name="button move" tool_tip="å‹•ã‹ã™"/>
@@ -66,21 +57,13 @@
<check_box label="リンク部分を編集" name="checkbox edit linked parts"/>
<button label="リンク" name="link_btn"/>
<button label="リンクを外ã™" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="ã“ã®ã‚ªãƒ–ジェクトã«ã‹ã‹ã‚‹ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆã‚’表示">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="両å´ã‚’å»¶ã°ã™" name="checkbox uniform label">
両å´ã‚’å»¶ã°ã™
</text>
<check_box initial_value="true" label="テクスãƒãƒ£ã‚’引ãå»¶ã°ã™" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="グリッドã«ã‚¹ãƒŠãƒƒãƒ—" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="オブジェクトã®é…ç½®ã«ä½¿ã†ã‚°ãƒªãƒƒãƒ‰ãƒ«ãƒ¼ãƒ©ã‚’é¸æŠžã—ã¾ã™" >
- <combo_box.item label="インワールドグリッド" name="World"/>
- <combo_box.item label="ローカルグリッド" name="Local"/>
- <combo_box.item label="リファレンスグリッド" name="Reference"/>
- </combo_box>
- <button label="オプション" label_selected="オプション" name="Options..." tool_tip="グリッドオプションを表示ã—ã¾ã™"/>
+ <check_box initial_value="true" label="スナップ" name="checkbox snap to grid"/>
+ <button label="オプション..." label_selected="オプション" name="Options..." tool_tip="グリッドオプションを表示ã—ã¾ã™"/>
<button label="" label_selected="" name="ToolCube" tool_tip="キューブ"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="プリズム"/>
<button label="" label_selected="" name="ToolPyramid" tool_tip="ピラミッド"/>
@@ -119,25 +102,13 @@
強度
</text>
<button label="é©ç”¨" label_selected="é©ç”¨" name="button apply to selection" tool_tip="é¸æŠžã—ãŸåœŸåœ°ã‚’修正ã—ã¾ã™"/>
- <text name="obj_count">
- オブジェクト: [COUNT]
- </text>
- <text name="prim_count">
- プリム: [COUNT]
- </text>
- <text name="linked_set_count">
- リンクセット:[COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="[prims] / [physics complexity] ã¨ã—ã¦ç¾åœ¨é¸æŠžã•れã¦ã„るリンクセットã®ã‚³ã‚¹ãƒˆ">
- 料金: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- オブジェクト: [COUNT]
+ <text name="selection_empty">
+ ä½•ã‚‚é¸æŠžã•れã¦ã„ã¾ã›ã‚“。
</text>
- <text name="object_cost" tool_tip="[prims] / [physics complexity] ã¨ã—ã¦ç¾åœ¨é¸æŠžã•れã¦ã„るオブジェクトã®ã‚³ã‚¹ãƒˆ">
- 料金: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ ç‰©ç†æ¼”算ウェイト [PHYS_WEIGHT]ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚³ã‚¹ãƒˆ [DISP_WEIGHT]。
</text>
- <tab_container name="Object Info Tabs" >
+ <tab_container name="Object Info Tabs">
<panel label="一般" name="General">
<panel.string name="text deed continued">
譲渡
@@ -359,7 +330,6 @@
<combo_box.item label="トーラス" name="Torus"/>
<combo_box.item label="å¹³é¢" name="Plane"/>
<combo_box.item label="シリンダー" name="Cylinder"/>
- <combo_box.item label="メッシュ" name="Mesh"/>
</combo_box>
</panel>
<panel label="特徴" name="Features">
@@ -379,22 +349,22 @@
オブジェクトã®ç‰¹å¾´ã‚’編集:
</text>
<check_box label="フレキシブルパス" name="Flexible1D Checkbox Ctrl" tool_tip="Z 軸を中心ã«ã‚ªãƒ–ジェクトã®å±ˆæ›²ã‚’有効ã«ã—ã¾ã™ï¼ˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã®ã¿ï¼‰"/>
- <spinner label="柔軟性" name="FlexNumSections" />
- <spinner label="é‡åŠ›" name="FlexGravity" />
- <spinner label="ドラッグ" name="FlexFriction" />
- <spinner label="風" name="FlexWind" />
- <spinner label="ç·Šå¼µ" name="FlexTension" />
- <spinner label="X 軸方å‘ã®åŠ›" name="FlexForceX" />
- <spinner label="Y 軸方å‘ã®åŠ›" name="FlexForceY" />
- <spinner label="Z 軸方å‘ã®åŠ›" name="FlexForceZ" />
+ <spinner label="柔軟性" name="FlexNumSections"/>
+ <spinner label="é‡åŠ›" name="FlexGravity"/>
+ <spinner label="ドラッグ" name="FlexFriction"/>
+ <spinner label="風" name="FlexWind"/>
+ <spinner label="ç·Šå¼µ" name="FlexTension"/>
+ <spinner label="X 軸方å‘ã®åŠ›" name="FlexForceX"/>
+ <spinner label="Y 軸方å‘ã®åŠ›" name="FlexForceY"/>
+ <spinner label="Z 軸方å‘ã®åŠ›" name="FlexForceZ"/>
<check_box label="å…‰" name="Light Checkbox Ctrl" tool_tip="オブジェクトãŒç™ºå…‰ã—ã¾ã™"/>
<color_swatch label="" name="colorswatch" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
<texture_picker label="" name="light texture control" tool_tip="ã‚¯ãƒªãƒƒã‚¯ã§æŠ•å½±ç”»ã‚’é¸æŠžã—ã¾ã™ï¼ˆé…延レンダリング有効時ã®ã¿ï¼‰"/>
- <spinner label="è¼åº¦" name="Light Intensity" />
+ <spinner label="è¼åº¦" name="Light Intensity"/>
<spinner label="FOV" name="Light FOV"/>
- <spinner label="åŠå¾„" name="Light Radius" />
+ <spinner label="åŠå¾„" name="Light Radius"/>
<spinner label="焦点" name="Light Focus"/>
- <spinner label="å¼±ã¾ã‚‹" name="Light Falloff" />
+ <spinner label="å¼±ã¾ã‚‹" name="Light Falloff"/>
<spinner label="環境" name="Light Ambiance"/>
<text name="label physicsshapetype">
実åƒã®ç¨®é¡žï¼š
@@ -411,7 +381,7 @@
</combo_box>
<spinner label="é‡åŠ›" name="Physics Gravity"/>
<spinner label="摩擦" name="Physics Friction"/>
- <spinner label="密度" name="Physics Density"/>
+ <spinner label="密度(100 kg/m^3)" name="Physics Density"/>
<spinner label="復元" name="Physics Restitution"/>
</panel>
<panel label="æè³ª" name="Texture">
@@ -496,18 +466,18 @@
</panel>
</panel>
<panel label="中身" name="Contents">
- <button label="æ–°ã—ã„スクリプト" label_selected="æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" name="button new script" />
- <button label="権é™" name="button permissions" />
+ <button label="æ–°ã—ã„スクリプト" label_selected="æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" name="button new script"/>
+ <button label="権é™" name="button permissions"/>
</panel>
</tab_container>
<panel name="land info panel">
<text name="label_parcel_info">
区画情報
</text>
- <text name="label_area_price" >
+ <text name="label_area_price">
価格: [AREA] 平方メートル L$ [PRICE]
</text>
- <text name="label_area" >
+ <text name="label_area">
é¢ç©ï¼š [AREA] 平方メートル
</text>
<button label="土地情報" label_selected="土地情報" name="button about land"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
index 4557815129..801b7a9db0 100644
--- a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(新登場ï¼ï¼‰
</string>
+ <string name="effect_Arena">
+ アリーナ
+ </string>
+ <string name="effect_Beast">
+ 野ç£
+ </string>
+ <string name="effect_Buff">
+ ãŒã£ã—り
+ </string>
+ <string name="effect_Buzz">
+ ブザー
+ </string>
+ <string name="effect_Camille">
+ カミール
+ </string>
+ <string name="effect_Creepy">
+ æ°—å‘³ã®æ‚ªã„
+ </string>
+ <string name="effect_CreepyBot">
+ 気味ã‚るボット
+ </string>
+ <string name="effect_Cyber">
+ サイãƒãƒ¼
+ </string>
+ <string name="effect_DeepBot">
+ ディープボット
+ </string>
+ <string name="effect_Demon">
+ デーモン
+ </string>
+ <string name="effect_Flirty">
+ æ°—ã®ã‚りãã†ãª
+ </string>
+ <string name="effect_Foxy">
+ 魅惑的
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ ãƒãƒ­ã‚¦ã‚£ãƒ³_2010_ボーナス
+ </string>
+ <string name="effect_Helium">
+ ヘリウム
+ </string>
+ <string name="effect_Husky">
+ ãƒã‚¹ã‚­ãƒ¼
+ </string>
+ <string name="effect_Intercom">
+ インターホン
+ </string>
+ <string name="effect_Macho">
+ マッãƒãƒ§
+ </string>
+ <string name="effect_Micro">
+ ミクロ
+ </string>
+ <string name="effect_Mini">
+ ミニ
+ </string>
+ <string name="effect_Nano">
+ ナノ
+ </string>
+ <string name="effect_Nightmare">
+ 悪夢
+ </string>
+ <string name="effect_PopBot">
+ ãƒãƒƒãƒ—ボット
+ </string>
+ <string name="effect_Rachel">
+ レイãƒã‚§ãƒ«
+ </string>
+ <string name="effect_Radio">
+ ラジオ
+ </string>
+ <string name="effect_Robot">
+ ロボット
+ </string>
+ <string name="effect_Roxanne">
+ ロクサン
+ </string>
+ <string name="effect_Sabrina">
+ サブリナ
+ </string>
+ <string name="effect_Samantha">
+ サマンサ
+ </string>
+ <string name="effect_Sexy">
+ セクシー
+ </string>
+ <string name="effect_Shorty">
+ ãƒãƒ“
+ </string>
+ <string name="effect_Sneaky">
+ コソコソ
+ </string>
+ <string name="effect_Stallion">
+ 雄馬
+ </string>
+ <string name="effect_Sultry">
+ 艶ã‹ã—ã„
+ </string>
+ <string name="effect_Thunder">
+ サンダー
+ </string>
+ <string name="effect_Vixen">
+ 性悪ãª
+ </string>
+ <string name="effect_WhinyBot">
+ 䏿©Ÿå«Œãƒœãƒƒãƒˆ
+ </string>
<text name="preview_text">
プレビュー
</text>
diff --git a/indra/newview/skins/default/xui/ja/floater_water.xml b/indra/newview/skins/default/xui/ja/floater_water.xml
deleted file mode 100644
index fb64332e79..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_water.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="æ°´ã®é«˜åº¦ãªç·¨é›†">
- <floater.string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </floater.string>
- <text name="KeyFramePresetsText">
- æ°´ã®äº‹å‰è¨­å®šï¼š
- </text>
- <button label="æ–°è¦" label_selected="æ–°è¦" name="WaterNewPreset"/>
- <button label="ä¿å­˜" label_selected="ä¿å­˜" name="WaterSavePreset"/>
- <button label="削除" label_selected="削除" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="設定" name="Settings">
- <text name="BHText">
- 水中ã®ãƒ•ォグ効果ã®è‰²
- </text>
- <color_swatch name="WaterFogColor" tool_tip="クリックã—ã¦ã‚«ãƒ©ãƒ¼ãƒ”ッカーを開ãã¾ã™"/>
- <text name="WaterFogDensText">
- 水中ã®é€æ˜Žåº¦æŒ‡æ•°
- </text>
- <text name="WaterUnderWaterFogModText">
- 水中ã®ãƒ•ォグ効果加減
- </text>
- <text name="BDensText">
- ã•ã–æ³¢ã®å射スケール
- </text>
- <slider label="1" name="WaterNormalScaleX"/>
- <slider label="2" name="WaterNormalScaleY"/>
- <slider label="3" name="WaterNormalScaleZ"/>
- <text name="HDText">
- フレãƒãƒ«ã®ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <text name="FresnelOffsetText">
- フレãƒãƒ«ã®ã‚ªãƒ•セット
- </text>
- <text name="DensMultText">
- æ°´é¢ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <text name="WaterScaleBelowText">
- 水中ã®å±ˆæŠ˜ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <text name="MaxAltText">
- ä¸é€æ˜Žåº¦ã®å¢—å¹…
- </text>
- </panel>
- <panel label="ç”»åƒ" name="Waves">
- <text name="BHText">
- å¤§æ³¢ã®æ–¹å‘
- </text>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- å°æ³¢ã®æ–¹å‘
- </text>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- ノーマルマップ
- </text>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_windlight_options.xml b/indra/newview/skins/default/xui/ja/floater_windlight_options.xml
deleted file mode 100644
index feb94ef73e..0000000000
--- a/indra/newview/skins/default/xui/ja/floater_windlight_options.xml
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="空ã®é«˜åº¦ãªç·¨é›†">
- <text name="KeyFramePresetsText">
- 空ã®äº‹å‰è¨­å®šï¼š
- </text>
- <button label="æ–°è¦" label_selected="æ–°è¦" name="WLNewPreset"/>
- <button label="ä¿å­˜" label_selected="ä¿å­˜" name="WLSavePreset"/>
- <button label="削除" label_selected="削除" name="WLDeletePreset"/>
- <button label="デイサイクル編集" label_selected="デイサイクル編集" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="大気" name="Atmosphere">
- <text name="BHText">
- 空ã®é…色
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- 空ã¨é æ™¯ã®éœ²å…‰
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- 空ã®é…è‰²ã¨æ¿ƒåº¦
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- 大気ã®ä¸é€æ˜Žåº¦
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- 大気ã®ä¸é€æ˜Žåº¦ã®å¢—å¹…
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- 視界ã®å¢—å¹…
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- 最大高度
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="ライティング" name="Lighting">
- <text name="SLCText">
- 太陽/月ã®è‰²
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- 太陽/月ã®ä½ç½®
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- アンビエント
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- æ±ã®è§’度
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- 太陽ã®è¼ã
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="フォーカス " name="WLGlowB"/>
- <slider label="サイズ " name="WLGlowR"/>
- <text name="SceneGammaText">
- 風景ガンマ
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- 星ã®è¼ã
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="雲" name="Clouds">
- <text name="WLCloudColorText">
- 雲ã®è‰²
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- 雲㮠XY/密度
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- 雲ã®é‡
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- 雲ã®ã‚¹ã‚±ãƒ¼ãƒ«
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- 雲ã®è©³ç´° (XY/密度)
- </text>
- <button label="?" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- 雲ã®ç§»å‹•速度 (X æ–¹å‘)
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="ロック" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- 雲ã®ç§»å‹•速度 (Y æ–¹å‘)
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="ロック" name="WLCloudLockY"/>
- <check_box label="従æ¥ã®é›²ã‚’æç”»" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml
index 265f3ebcd0..dca872e9b8 100644
--- a/indra/newview/skins/default/xui/ja/menu_login.xml
+++ b/indra/newview/skins/default/xui/ja/menu_login.xml
@@ -18,7 +18,7 @@
<menu_item_call label="利用è¦ç´„を表示" name="TOS"/>
<menu_item_call label="クリティカルメッセージを表示" name="Critical"/>
<menu_item_call label="メディアブラウザã®ãƒ†ã‚¹ãƒˆ" name="Web Browser Test"/>
- <menu_item_call label="Web コンテンツフローターã®ãƒ†ã‚¹ãƒˆ" name="Web Content Floater Test"/>
+ <menu_item_call label="Web コンテンツフローターã®ãƒ‡ãƒãƒƒã‚°ãƒ†ã‚¹ãƒˆ" name="Web Content Floater Debug Test"/>
<menu_item_check label="グリッドピッカーを表示ã™ã‚‹" name="Show Grid Picker"/>
<menu_item_call label="通知コンソールを表示ã™ã‚‹" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
index a31480158a..44c5438509 100644
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="最近ã®ç™ºè¨€è€…ã§ä¸¦ã¹æ›¿ãˆ" name="sort_by_recent_speakers"/>
<menu_item_check label="åå‰ã§ä¸¦ã¹æ›¿ãˆ" name="sort_name"/>
<menu_item_check label="è·é›¢ã§ä¸¦ã¹æ›¿ãˆ" name="sort_distance"/>
<menu_item_check label="人ã®ã‚¢ã‚¤ã‚³ãƒ³è¡¨ç¤º" name="view_icons"/>
+ <menu_item_check label="地図を表示" name="view_map"/>
<menu_item_call label="ブロックã•れãŸä½äººã¨ã‚ªãƒ–ジェクトを表示" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index ec9db02522..223c1e1f11 100644
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="所属グループ" name="My Groups"/>
<menu_item_check label="è¿‘ãã®ãƒãƒ£ãƒƒãƒˆ" name="Nearby Chat"/>
<menu_item_call label="è¿‘ãã«ã„る人" name="Active Speakers"/>
+ <menu_item_check label="è¿‘ãã®ãƒœã‚¤ã‚¹" name="Nearby Voice"/>
</menu>
<menu label="世界" name="World">
<menu_item_check label="ミニマップ" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="æ­£åˆ" name="Noon"/>
<menu_item_call label="日没" name="Sunset"/>
<menu_item_call label="深夜" name="Midnight"/>
- <menu_item_call label="エステートタイム" name="Revert to Region Default"/>
- <menu_item_call label="自然環境エディター" name="Environment Editor"/>
+ </menu>
+ <menu label="自然環境エディター" name="Enviroment Editor">
+ <menu_item_call label="環境ã®è¨­å®š..." name="Enviroment Settings"/>
+ <menu label="æ°´ã®äº‹å‰è¨­å®š" name="Water Presets">
+ <menu_item_call label="æ–°ã—ã„事å‰è¨­å®š..." name="new_water_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’編集..." name="edit_water_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’削除..." name="delete_water_preset"/>
+ </menu>
+ <menu label="空ã®äº‹å‰è¨­å®š" name="Sky Presets">
+ <menu_item_call label="æ–°ã—ã„事å‰è¨­å®š..." name="new_sky_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’編集..." name="edit_sky_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’削除..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="デイã®äº‹å‰è¨­å®š" name="Day Presets">
+ <menu_item_call label="æ–°ã—ã„事å‰è¨­å®š..." name="new_day_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’編集..." name="edit_day_preset"/>
+ <menu_item_call label="事å‰è¨­å®šã‚’削除..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="制作" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="カメラã®è·é›¢ç§»å‹•を制é™ã—ãªã„" name="Disable Camera Distance"/>
<menu_item_check label="高解åƒåº¦ã‚¹ãƒŠãƒƒãƒ—ショット" name="HighResSnapshot"/>
<menu_item_check label="シャッター音ã¨ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãªã—ã§ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜ã™ã‚‹" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="圧縮ã—ã¦ã‚¹ãƒŠãƒƒãƒ—ショットをディスクã«ä¿å­˜ã™ã‚‹" name="CompressSnapshotsToDisk"/>
<menu label="パフォーマンスツール" name="Performance Tools">
<menu_item_call label="ラグ計測器" name="Lag Meter"/>
<menu_item_check label="統計ãƒãƒ¼" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
index 7a97538117..5334042dc9 100644
--- a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="アウトフットã®ç·¨é›†" name="edit"/>
<menu_item_call label="å–り外ã™" name="takeoff"/>
-</menu>
+ <menu_item_call label="アウトフィットã®ãƒªã‚¹ãƒˆã‚’クリップボードã«ã‚³ãƒ”ー" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index d63ca84035..6bff82bec4 100644
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -1590,6 +1590,11 @@ http://wiki.secondlife.com/wiki/Setting_your_display_name ã‚’å‚ç…§ã—ã¦ãã ã
<button name="Cancel" text="å–り消ã—"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ [OFFERS] 回ã«ã‚ãŸã£ã¦ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚ã†ã¨ã—ã¾ã—ãŸãŒã€
+ãれã¯é™åº¦æ•° [LIMIT] ã‚’è¶…ãˆã¦ã„ã¾ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
ç¾åœ¨åœ°ã«ä½äººã‚’ゴッドサモンã—ã¾ã™ã‹ï¼Ÿ
<form name="form">
@@ -2018,6 +2023,10 @@ Linden Lab
トラベルã€Webã€æ¤œç´¢ã®å±¥æ­´ã‚’ã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ ビューワã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’クリアã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–り消ã—" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
本当ã«ã‚¯ãƒƒã‚­ãƒ¼ã‚’クリアã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="キャンセル" yestext="ã¯ã„"/>
@@ -2043,48 +2052,30 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
ä¿å­˜ã•れãŸäº‹å‰è¨­å®šã‚’上書ãã—ã¾ã™ã‹ï¼Ÿ
<usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
- <notification name="WLDeletePresetAlert">
- 「 [SKY] ã€ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
- </notification>
<notification name="WLNoEditDefault">
デフォルトã®è¨­å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
</notification>
<notification name="WLMissingSky">
ã“ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ¬¡ã®å­˜åœ¨ã—ãªã„「空ã€ãƒ•ァイルをå‚ç…§ã—ã¦ã„ã¾ã™ï¼š [SKY]。
</notification>
- <notification name="PPSaveEffectAlert">
- ãƒã‚¹ãƒˆãƒ—ロセス効果ãŒå­˜åœ¨ã—ã¾ã™ã€‚ 上書ãã—ã¾ã™ã‹ï¼Ÿ
- <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ <notification name="WLRegionApplyFail">
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“ãŒã€è¨­å®šã‚’リージョンã«é©ç”¨ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚一度リージョンを出ã¦ã‹ã‚‰æˆ»ã‚‹ã¨ã€å•題ãŒè§£æ±ºã•れるã‹ã‚‚ã—れã¾ã›ã‚“。å•題ã®ç™ºç”Ÿã—ãŸç†ç”±ï¼š[FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- æ–°ã—ã„空ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。
- <form name="form">
- <input name="message">
- æ–°ã—ã„事å‰è¨­å®š
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="キャンセル"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- 事å‰è¨­å®šãŒã™ã§ã«å­˜åœ¨ã—ã¾ã™ï¼
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ デイサイクルを空ã«ã¯ã§ããªã„ã®ã§ã€ã“ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã®æœ€å¾Œã®ã‚­ãƒ¼ã‚’削除ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。最後ã®ã‚­ãƒ¼ã‚’削除ã—ã¦æ–°ã—ã„キーを作æˆã™ã‚‹ã®ã§ã¯ãªãã€æœ€å¾Œã®ã‚­ãƒ¼ã‚’変更ã—ã¦ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- æ–°ã—ã„æ°´ã®äº‹å‰è¨­å®šã®åå‰ã‚’指定ã—ã¦ãã ã•ã„。
- <form name="form">
- <input name="message">
- æ–°ã—ã„事å‰è¨­å®š
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="キャンセル"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ ã“ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã«ã¯ã“れ以上キーフレームを追加ã§ãã¾ã›ã‚“。[SCOPE] ã®ç¯„囲ã®ãƒ‡ã‚¤ã‚µã‚¤ã‚¯ãƒ«ã«è¿½åŠ ã§ãã‚‹ã‚­ãƒ¼ãƒ•ãƒ¬ãƒ¼ãƒ æ•°ã¯æœ€é«˜ [MAX] ã§ã™ã€‚
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- 事å‰è¨­å®šãŒã™ã§ã«å­˜åœ¨ã—ã¾ã™ï¼
+ <notification name="EnvUpdateRate">
+ リージョンã®è‡ªç„¶ç’°å¢ƒã®è¨­å®šã¯ [WAIT] ç§’ã”ã¨ã«ã—ã‹æ›´æ–°ã§ãã¾ã›ã‚“。ãã®é–“隔を置ã„ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- デフォルトã®è¨­å®šã‚’編集ã—ãŸã‚Šå‰Šé™¤ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ <notification name="PPSaveEffectAlert">
+ ãƒã‚¹ãƒˆãƒ—ロセス効果ãŒå­˜åœ¨ã—ã¾ã™ã€‚ 上書ãã—ã¾ã™ã‹ï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification name="ChatterBoxSessionStartError">
[RECIPIENT] ã¨æ–°ã—ã„ãƒãƒ£ãƒƒãƒˆã‚’é–‹å§‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
@@ -2114,13 +2105,14 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<usetemplate ignoretext="「容姿ã€ã‚’編集中ã«ã€ä½œæˆã™ã‚‹è¡£é¡žã‚’装ç€ã™ã‚‹ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
</notification>
<notification name="NotAgeVerified">
- 年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã“ã®åŒºç”»ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§å¹´é½¢ã®ç¢ºèªã‚’行ã„ã¾ã™ã‹ï¼Ÿ
+ Second Life ã§ Adult 指定ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„や領域ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã®ã¯ 18 歳以上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ã§ã™ã€‚年齢確èªãƒšãƒ¼ã‚¸ã§ 18 歳以上ã§ã‚ã‚‹ã“ã¨ã‚’証明ã—ã¦ãã ã•ã„。
+ã“れをクリックã™ã‚‹ã¨ã‚¦ã‚§ãƒ–ブラウザãŒé–‹ãã¾ã™ã€‚
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=ja
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="å¹´é½¢ã®ç¢ºèªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã" name="okcancelignore" notext="ã„ã„ãˆ" yestext="ã¯ã„"/>
+ <usetemplate ignoretext="å¹´é½¢ã®ç¢ºèªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã" name="okcancelignore" notext="å–り消ã—" yestext="年齢確èªãƒšãƒ¼ã‚¸ã‚’é–‹ã"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
支払情報ãŒç™»éŒ²ã•れã¦ã„ãªã„ã¨ã“ã®ã‚¨ãƒªã‚¢ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [SECOND_LIFE] サイトã§ç™»éŒ²ã‚’行ã„ã¾ã™ã‹ï¼Ÿ
@@ -2378,6 +2370,9 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
<notification name="NoBuild">
ã“ã®ã‚¨ãƒªã‚¢ã§ã¯åˆ¶ä½œãŒç¦æ­¢ã•れã¦ã„ã¾ã™ã€‚ オブジェクトを制作ã—ãŸã‚Š Rez ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
</notification>
+ <notification name="SeeAvatars">
+ ã“ã®åŒºç”»ã«ã„ã‚‹ã‚¢ãƒã‚¿ãƒ¼ã‚„ã“ã®åŒºç”»å†…ã§è¡Œã‚れる文字ãƒãƒ£ãƒƒãƒˆã¯ã€ä»–ã®åŒºç”»ã‹ã‚‰è¦‹ãˆã¾ã›ã‚“。ã‚ãªãŸã«ã¯ã€ã“ã®åŒºç”»å¤–ã«ã„ã‚‹ä½äººãŒè¦‹ãˆãšã€å¤–ã®ä½äººã«ã¯ã‚ãªãŸã®å§¿ãŒè¦‹ãˆã¾ã›ã‚“。ãƒãƒ£ãƒ³ãƒãƒ« 0 ã§ã®é€šå¸¸ã®æ–‡å­—ãƒãƒ£ãƒƒãƒˆã‚‚ブロックã•れã¾ã™ã€‚
+ </notification>
<notification name="ScriptsStopped">
管ç†è€…ãŒã“ã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã®ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’ä¸€æ™‚åœæ­¢ã—ã¾ã—ãŸã€‚
</notification>
@@ -2472,7 +2467,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
</notification>
<notification name="ObjectGiveItem">
[NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« [OBJECTTYPE] を渡ã—ã¾ã—ãŸï¼š
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="å—ã‘å–ã‚‹"/>
<button name="Discard" text="破棄"/>
@@ -2802,7 +2797,15 @@ M キーを押ã—ã¦å¤‰æ›´ã—ã¾ã™ã€‚
共有ã™ã‚‹ä½äººã‚’é¸æŠžã—ã¾ã™ã€‚
</notification>
<notification name="MeshUploadError">
- [LABEL] をアップロードã§ãã¾ã›ã‚“ã§ã—ãŸï¼š [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] をアップロードã§ãã¾ã›ã‚“ã§ã—ãŸï¼š[MESSAGE] [IDENTIFIER]
+
+詳細ã«ã¤ã„ã¦ã¯ãƒ­ã‚°ã‚’ã”覧ãã ã•ã„。
+ </notification>
+ <notification name="MeshUploadPermError">
+ メッシュã®ã‚¢ãƒƒãƒ—ロード許å¯ã‚’リクエスト中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ リージョン㮠&apos;[CAPABILITY]&apos; ã¨ã„ã†æ©Ÿèƒ½ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
</notification>
<notification name="ShareItemsConfirmation">
次ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’共有ã—ã¾ã™ã‹ï¼Ÿ
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
index 4fb031b677..39ea1df1e3 100644
--- a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="ピックをä¿å­˜" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="å–り消ã—" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
index e9e36e4842..df9ef40113 100644
--- a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="ãŠæŽ¢ã—ã®ã‚‚ã®ã¯è¦‹ã¤ã‹ã‚Šã¾ã—ãŸã‹ï¼Ÿ[secondlife:///app/search/all/[SEARCH_TERM] 検索] ã‚’ãŠè©¦ã—ãã ã•ã„。"/>
+ <no_visible_tabs_text name="no_outfits_msg" value="アウトフィットãŒã¾ã ã‚りã¾ã›ã‚“。[secondlife:///app/search/all 検索] ã‚’ãŠè©¦ã—ãã ã•ã„。"/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
+ <menu_button name="options_gear_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
<button name="trash_btn" tool_tip="é¸æŠžã—ãŸã‚¢ã‚¦ãƒˆãƒ•ィットを削除ã™ã‚‹"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index c7f71c6de0..1c90f7327e 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -66,16 +66,16 @@
<layout_panel name="view_profile_btn_lp">
<button label="プロフィール" name="view_profile_btn" tool_tip="写真ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãã®ä»–ä½äººæƒ…報を表示"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開ãã¾ã™"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="コール" name="call_btn" tool_tip="ã“ã®ä½äººã«ã‚³ãƒ¼ãƒ«ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="共有" name="share_btn" tool_tip="「æŒã¡ç‰©ã€ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’共有ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="テレãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/ja/panel_place_profile.xml b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
index 8a40d7aa5a..7235bc0f18 100644
--- a/indra/newview/skins/default/xui/ja/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
@@ -68,6 +68,8 @@
<text name="scripts_value" value="オン"/>
<text name="damage_label" value="ダメージ:"/>
<text name="damage_value" value="オフ"/>
+ <text name="see_avatars_label" value="ã‚¢ãƒã‚¿ãƒ¼ã‚’表示:"/>
+ <text name="see_avatars_value" value="オフ"/>
<button label="土地情報" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
index e19b86e552..9d3925afdc 100644
--- a/indra/newview/skins/default/xui/ja/panel_places.xml
+++ b/indra/newview/skins/default/xui/ja/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="â–¼" name="overflow_btn" tool_tip="オプションを表示ã—ã¾ã™"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="プロフィール" name="profile_btn" tool_tip="場所ã®ãƒ—ロフィールを表示"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
index ccc5c3908b..dcaa23fee5 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ キャッシュ:
+ </text>
+ <spinner label="キャッシュサイズ(64~9,984MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="キャッシュをクリア" label_selected="キャッシュをクリア" name="clear_cache"/>
+ <text name="Cache location">
+ キャッシュã®ä¿å­˜å ´æ‰€ï¼š
+ </text>
+ <button label="å‚ç…§" label_selected="å‚ç…§" name="set_cache"/>
+ <button label="デフォルトã®å ´æ‰€" label_selected="デフォルトã®å ´æ‰€" name="default_cache_location"/>
<text name="UI Size:">
UI サイズ:
</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
index c11e636875..3a4c360ccc 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="有効" name="enable_voice_check"/>
<check_box label="メディアを自動å†ç”Ÿã™ã‚‹" name="media_auto_play_btn" tool_tip="ã“ã“ã«ãƒã‚§ãƒƒã‚¯ã‚’入れã¦ãƒ¡ãƒ‡ã‚£ã‚¢ã®è‡ªå‹•å†ç”Ÿã‚’許å¯ã—ã¾ã™" value="true"/>
<check_box label="ä»–ã®ã‚¢ãƒã‚¿ãƒ¼ã«å–り付ã‘られãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’å†ç”Ÿã™ã‚‹" name="media_show_on_others_btn" tool_tip="ã“ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã™ã¨ã€è¿‘ãã«ã„ã‚‹ä»–ã®ã‚¢ãƒã‚¿ãƒ¼ã«å–り付ã‘られãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚’éžè¡¨ç¤ºã«ã—ã¾ã™" value="true"/>
+ <check_box label="ジェスãƒãƒ£ãƒ¼ã®éŸ³ã‚’å†ç”Ÿ" name="gesture_audio_play_btn" tool_tip="ジェスãƒãƒ£ãƒ¼ã®éŸ³ã‚’èžãã«ã¯ã“ã‚Œã‚’é¸æŠž" value="true"/>
<text name="voice_chat_settings">
ボイスãƒãƒ£ãƒƒãƒˆã®è¨­å®š
</text>
@@ -35,28 +36,5 @@
<button label="キー設定" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="マウスã®ä¸­å¤®ãƒœã‚¿ãƒ³ã«ãƒªã‚»ãƒƒãƒˆ"/>
<button label="入力・出力機器" name="device_settings_btn"/>
- <panel label="機器ã®è¨­å®š" name="device_settings_panel">
- <panel.string name="default_text">
- デフォルト
- </panel.string>
- <panel.string name="default system device">
- デフォルトã®ã‚·ã‚¹ãƒ†ãƒ æ©Ÿå™¨
- </panel.string>
- <panel.string name="no device">
- 機器ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“
- </panel.string>
- <text name="Input">
- 入力
- </text>
- <text name="My volume label">
- ç§ã®éŸ³é‡ï¼š
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="スライダーを使ã£ã¦éŸ³é‡ã‚’調節ã—ã¾ã™"/>
- <text name="wait_text">
- ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。
- </text>
- <text name="Output">
- 出力
- </text>
- </panel>
+ <panel label="機器ã®è¨­å®š" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_environment.xml b/indra/newview/skins/default/xui/ja/panel_region_environment.xml
new file mode 100644
index 0000000000..f6ef3f0934
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="環境" name="panel_env_info">
+ <text name="water_settings_title">
+ ã‚ãªãŸã®ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã‚’訪れるユーザーã«è¦‹ã›ãŸã„ã€æ°´ã¨ç©º/デイサイクルã®è¨­å®šã‚’é¸æŠžã—ã¾ã™ã€‚詳細
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Second Life ã®ãƒ‡ãƒ•ォルト設定を使用" name="use_sl_default_settings"/>
+ <radio_item label="次ã®è¨­å®šã‚’使用" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ æ°´ã®è¨­å®š
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ 空 / デイサイクル
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="空ã®å›ºå®š" name="my_sky_settings"/>
+ <radio_item label="デイサイクル" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="- 事å‰è¨­å®šã‚’é¸æŠž -" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="é©ç”¨" name="apply_btn"/>
+ <button label="å–り消ã—" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_region_terrain.xml b/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
index 8df803b2dc..fb853c1925 100644
--- a/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="地形" name="Terrain">
<text name="region_text_lbl">
地域:
@@ -6,25 +6,55 @@
<text name="region_text">
未知
</text>
- <spinner label="æ°´é¢ã®é«˜ã•" name="water_height_spin" />
- <button label="?" name="water_height_help" />
- <spinner label="地形ã®ä¸Šæ˜‡é™åº¦" name="terrain_raise_spin" />
- <button label="?" name="terrain_raise_help" />
- <spinner label="地形ã®ä¸‹é™é™åº¦" name="terrain_lower_spin" />
- <button label="?" name="terrain_lower_help" />
- <check_box label="ä¸å‹•産太陽使用" name="use_estate_sun_check" />
- <button label="?" name="use_estate_sun_help" />
- <check_box label="太陽固定" name="fixed_sun_check" />
- <button label="?" name="fixed_sun_help" />
- <slider label="段階" name="sun_hour_slider" />
- <button label="é©ç”¨" name="apply_btn" />
- <button label="RAW 地形ダウンロード..." name="download_raw_btn"
- tool_tip="ä¸å‹•産オーナーã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™" />
- <button label="?" name="download_raw_help" />
- <button label="RAW 地形アップロード..." name="upload_raw_btn"
- tool_tip="ä¸å‹•産オーナーã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™" />
- <button label="?" name="upload_raw_help" />
- <button label="åœ°å½¢ã®æ§‹ç¯‰" name="bake_terrain_btn"
- tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’上昇・下é™ç¯„囲ã®ä¸­é–“点ã¨ã—ã¦è¨­å®šã—ã¾ã™" />
- <button label="?" name="bake_terrain_help" />
+ <spinner label="æ°´é¢ã®é«˜ã•" name="water_height_spin"/>
+ <spinner label="地形ã®ä¸Šæ˜‡é™åº¦" name="terrain_raise_spin"/>
+ <spinner label="地形ã®ä¸‹é™é™åº¦" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ 地形テクスãƒãƒ£ï¼ˆ512x512 ã® 24 bit .tga ファイル)
+ </text>
+ <text name="height_text_lbl">
+ 1(低)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4(高)
+ </text>
+ <text name="height_text_lbl5">
+ 地形ã®éš†èµ·ç¯„囲
+ </text>
+ <text name="height_text_lbl10">
+ 数値ã¯ä¸Šã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ãƒ–レンド範囲を示ã—ã¾ã™ã€‚
+ </text>
+ <text name="height_text_lbl11">
+ 計測å˜ä½ã¯ãƒ¡ãƒ¼ãƒˆãƒ«ã§ã€ã€Œä½Žã€ã®å€¤ã¯ã€1番ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®é«˜ã•ã®ã€Œæœ€å¤§å€¤ã€ã§ã™ã€‚「高ã€ã®å€¤ã¯ã€4番ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®é«˜ã•ã®ã€Œæœ€ä½Žå€¤ã€ã§ã™ã€‚
+ </text>
+ <text name="height_text_lbl6">
+ 北西
+ </text>
+ <text name="height_text_lbl7">
+ 北æ±
+ </text>
+ <spinner label="低" name="height_start_spin_1"/>
+ <spinner label="低" name="height_start_spin_3"/>
+ <spinner label="高" name="height_range_spin_1"/>
+ <spinner label="高" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ å—西
+ </text>
+ <text name="height_text_lbl9">
+ å—æ±
+ </text>
+ <spinner label="低" name="height_start_spin_0"/>
+ <spinner label="低" name="height_start_spin_2"/>
+ <spinner label="高" name="height_range_spin_0"/>
+ <spinner label="高" name="height_range_spin_2"/>
+ <button label="RAW 地形ダウンロード..." name="download_raw_btn" tool_tip="ä¸å‹•産オーナーã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™"/>
+ <button label="RAW 地形アップロード..." name="upload_raw_btn" tool_tip="ä¸å‹•産オーナーã®ã¿åˆ©ç”¨å¯èƒ½ã€ç®¡ç†è€…ã¯åˆ©ç”¨ä¸å¯ã§ã™"/>
+ <button label="åœ°å½¢ã®æ§‹ç¯‰" name="bake_terrain_btn" tool_tip="ç¾åœ¨ã®åœ°å½¢ã‚’上昇・下é™ç¯„囲ã®ä¸­é–“点ã¨ã—ã¦è¨­å®šã—ã¾ã™"/>
+ <button label="é©ç”¨" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
index da103a2d60..0824504235 100644
--- a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
デフォルト
</panel.string>
+ <string name="name_no_device">
+ 機器ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“
+ </string>
+ <string name="name_default_system_device">
+ デフォルトã®ã‚·ã‚¹ãƒ†ãƒ æ©Ÿå™¨
+ </string>
<text name="Input">
入力
</text>
+ <text name="Output">
+ 出力
+ </text>
<text name="My volume label">
ç§ã®éŸ³é‡ï¼š
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。
</text>
- <text name="Output">
- 出力
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index e26d8717d1..7edda6e1a3 100644
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="ã‚‚ã®" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ å—ã‘å–ã£ãŸå•†å“([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ å—ã‘å–ã£ãŸå•†å“
+ </string>
+ <button label="å—ã‘å–ã£ãŸå•†å“" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] 新登場
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ マーケットプレイスã‹ã‚‰è³¼å…¥ã—ãŸå•†å“ã¯ã“ã“ã«é…é”ã•れã¾ã™ã€‚
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="マーãƒãƒ£ãƒ³ãƒˆã®ã‚¢ã‚¦ãƒˆãƒœãƒƒã‚¯ã‚¹" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="自分ã®ãƒžãƒ¼ã‚±ãƒƒãƒˆãƒ—レイス店頭ã«ç§»å‹•"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ ã“ã®æ©Ÿèƒ½ã‚’使用ã™ã‚‹ã«ã¯ã€ãƒžãƒ¼ãƒãƒ£ãƒ³ãƒˆã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’セットアップã—ã¦ãã ã•ã„。
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index a6691fb764..f0c0d99a8e 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -34,6 +34,9 @@
<string name="StartupInitializingVFS">
VFS ã‚’åˆæœŸåŒ–中ã§ã™...
</string>
+ <string name="StartupRequireDriverUpdate">
+ ã‚°ãƒ©ãƒ•ã‚£ãƒƒã‚¯ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚グラフィックドライãƒã‚’æ›´æ–°ã—ã¦ãã ã•ã„。
+ </string>
<string name="ProgressRestoring">
復元中ã§ã™...
</string>
@@ -91,6 +94,12 @@
<string name="LoginQuicktimeOK">
QuickTime ãŒæ­£å¸¸ã«åˆæœŸåŒ–ã•れã¾ã—ãŸã€‚
</string>
+ <string name="LoginRequestSeedCapGrant">
+ ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã®æ©Ÿèƒ½ã‚’リクエストã—ã¦ã„ã¾ã™...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ ãƒªãƒ¼ã‚¸ãƒ§ãƒ³ã®æ©Ÿèƒ½ã‚’リクエストã€è©¦è¡Œ [NUMBER] 回....
+ </string>
<string name="LoginWaitingForRegionHandshake">
リージョンã®ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯ã‚’å¾…ã£ã¦ã„ã¾ã™...
</string>
@@ -1192,6 +1201,12 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="InventoryNoTexture">
「æŒã¡ç‰©ã€å†…ã«ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ã‚³ãƒ”ーãŒã‚りã¾ã›ã‚“
</string>
+ <string name="InventoryInboxNoItems">
+ マーケットプレイスã§è³¼å…¥ã—ãŸå•†å“ã¯ã“ã“ã«é…é”ã•れã¾ã™ã€‚
+ </string>
+ <string name="InventoryOutboxNoItems">
+ ãƒžãƒ¼ã‚±ãƒƒãƒˆãƒ—ãƒ¬ã‚¤ã‚¹åº—é ­ã«æŽ²è¼‰ã™ã‚‹ãŸã‚ã®æº–å‚™ã¨ã—ã¦ã€ã“ã“ã«å•†å“をドラッグã—ã¾ã™ã€‚
+ </string>
<string name="no_transfer" value=" (å†è²©ãƒ»ãƒ—レゼントä¸å¯ï¼‰"/>
<string name="no_modify" value=" (編集ä¸å¯ï¼‰"/>
<string name="no_copy" value=" (コピーä¸å¯ï¼‰"/>
@@ -1238,9 +1253,6 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="InvFolder My Inventory">
æŒã¡ç‰©
</string>
- <string name="InvFolder My Favorites">
- ãŠæ°—ã«å…¥ã‚Š
- </string>
<string name="InvFolder Library">
ライブラリ
</string>
@@ -1325,6 +1337,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="InvFolder All">
全員
</string>
+ <string name="no_attachments">
+ ç€ç”¨ã—ã¦ã„るアタッãƒãƒ¡ãƒ³ãƒˆã¯ã‚りã¾ã›ã‚“
+ </string>
<string name="Buy">
è²·ã†
</string>
@@ -1634,6 +1649,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
</string>
<string name="SummaryForTheWeek" value="今週ã®ã¾ã¨ã‚。開始日ã¯"/>
<string name="NextStipendDay" value="ã§ã™ã€‚次回ã®ãŠå°é£ã„支給日:"/>
+ <string name="GroupPlanningDate">
+ [year,datetime,utc]/[mthnum,datetime,utc]/[day,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value=" グループ 個人ã®å‰²ã‚Šå½“ã¦"/>
<string name="GroupColumn" value="グループã®è¨­å®š"/>
<string name="Balance">
@@ -1660,6 +1678,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="IMTeen">
ティーン
</string>
+ <string name="Anyone">
+ 全員
+ </string>
<string name="RegionInfoError">
エラー
</string>
@@ -1882,6 +1903,12 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="Public">
パブリック
</string>
+ <string name="LocalSettings">
+ ローカル設定
+ </string>
+ <string name="RegionSettings">
+ リージョン(地域)ã®è¨­å®š
+ </string>
<string name="ClassifiedClicksTxt">
クリック数: [TELEPORT] テレãƒãƒ¼ãƒˆã€ [MAP] 地図〠[PROFILE] プロフィール
</string>
@@ -1954,6 +1981,9 @@ support@secondlife.com ã«ãŠå•ã„åˆã‚ã›ãã ã•ã„。
<string name="GroupMoneyDebits">
支出
</string>
+ <string name="GroupMoneyDate">
+ [year,datetime,utc]年[mth,datetime,utc]月[day,datetime,utc]日[weekday,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
内容
</string>
@@ -3727,6 +3757,9 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="LocationCtrlGeneralIconTooltip">
General リージョン
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ ã“ã®åŒºç”»å¤–ã«ã‚¢ãƒã‚¿ãƒ¼ã‚’見ãˆã‚‹ã‚ˆã†ã«ã—ã¦ã€ãƒãƒ£ãƒƒãƒˆã‚‚許å¯
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] アップデート
</string>
@@ -3821,7 +3854,7 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
アドホックコンファレンス
</string>
<string name="conference-title-incoming">
- [AGENT_NAME]ã¨ã‚³ãƒ³ãƒ•ァレンスã™ã‚‹
+ [AGENT_NAME] ã¨ã‚³ãƒ³ãƒ•ァレンスã™ã‚‹
</string>
<string name="inventory_item_offered-im">
æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ã‚’é€ã‚Šã¾ã—ãŸ
@@ -4152,6 +4185,87 @@ www.secondlife.com ã‹ã‚‰æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ダウンロードã—ã¦ãã ã
<string name="Female - Wow">
女性 - Wow
</string>
+ <string name="/bow">
+ /ãŠã˜ãŽã™ã‚‹
+ </string>
+ <string name="/clap">
+ /æ‹æ‰‹
+ </string>
+ <string name="/count">
+ /æ•°ãˆã‚‹
+ </string>
+ <string name="/extinguish">
+ /消ã™
+ </string>
+ <string name="/kmb">
+ /ãããらãˆ
+ </string>
+ <string name="/muscle">
+ /筋肉もりもり
+ </string>
+ <string name="/no">
+ /ã„ã„ãˆ
+ </string>
+ <string name="/no!">
+ /ã ã‚ï¼
+ </string>
+ <string name="/paper">
+ /パー
+ </string>
+ <string name="/pointme">
+ /自分を指差ã™
+ </string>
+ <string name="/pointyou">
+ /相手を指差ã™
+ </string>
+ <string name="/rock">
+ /グー
+ </string>
+ <string name="/scissor">
+ /ãƒãƒ§ã‚­
+ </string>
+ <string name="/smoke">
+ /ã‚¿ãƒã‚³ã‚’å¸ã†
+ </string>
+ <string name="/stretch">
+ /伸ã³ã‚’ã™ã‚‹
+ </string>
+ <string name="/whistle">
+ /å£ç¬›ã‚’å¹ã
+ </string>
+ <string name="/yes">
+ /ã¯ã„
+ </string>
+ <string name="/yes!">
+ /イエスï¼
+ </string>
+ <string name="afk">
+ 一時退席中
+ </string>
+ <string name="dance1">
+ ダンス1
+ </string>
+ <string name="dance2">
+ ダンス2
+ </string>
+ <string name="dance3">
+ ダンス3
+ </string>
+ <string name="dance4">
+ ダンス4
+ </string>
+ <string name="dance5">
+ ダンス5
+ </string>
+ <string name="dance6">
+ ダンス6
+ </string>
+ <string name="dance7">
+ ダンス7
+ </string>
+ <string name="dance8">
+ ダンス8
+ </string>
<string name="AvatarBirthDateFormat">
[year,datetime,slt]/[mthnum,datetime,slt]/[day,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml
deleted file mode 100644
index 1f3e045a75..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="DAGCYCLUS EDITOR">
- <tab_container name="Day Cycle Tabs">
- <panel label="Dagcyclus" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 0:00
- </text>
- <text name="WL3am">
- 3:00
- </text>
- <text name="WL6am">
- 6:00
- </text>
- <text name="WL9amHash">
- 9:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 0:00
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Key toevoegen" label_selected="Key toevoegen" name="WLAddKey"/>
- <button label="Key verwijderen" label_selected="Key verwijderen" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Gemarkeerde frame instelling:
- </text>
- <text name="WLCurKeyTimeText">
- Markering tijd:
- </text>
- <spinner label="Uur" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Markering voorinstelling:
- </text>
- <combo_box label="Voorinstelling" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Snap:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Lengte van cyclus:
- </text>
- <spinner label="Uur" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sec" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Voorbeeld:
- </text>
- <button label="Afspelen" label_selected="Afspelen" name="WLAnimSky"/>
- <button label="Stop!" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Gebruik estatetijd" label_selected="Ga naar Estate tijd" name="WLUseLindenTime"/>
- <button label="Opslaan testdag" label_selected="Opslaan testdag" name="WLSaveDayCycle"/>
- <button label="Laad testdag" label_selected="Laad testdag" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_env_settings.xml b/indra/newview/skins/default/xui/nl/floater_env_settings.xml
deleted file mode 100644
index 3c207040d2..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_env_settings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="OMGEVING EDITOR">
- <text bottom="-42" name="EnvTimeText">
- Tijd van de
-dag
- </text>
- <text bottom_delta="-36" name="EnvTimeText2">
- 0:00
- </text>
- <text name="EnvCloudText">
- Wolkendek
- </text>
- <text name="EnvWaterColorText">
- Waterkleur
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Klik om de kleurkiezer te openen"/>
- <text name="EnvWaterFogText">
- Watermist
- </text>
- <button label="Gebruik estate tijd" name="EnvUseEstateTimeButton"/>
- <button label="Geavanceerde lucht" name="EnvAdvancedSkyButton"/>
- <button label="Geavanceerd water" name="EnvAdvancedWaterButton"/>
- <button label="?" name="EnvSettingsHelpButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_water.xml b/indra/newview/skins/default/xui/nl/floater_water.xml
deleted file mode 100644
index 1fb1ca241b..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_water.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="GEAVANCEERDE WATER EDITOR">
- <combo_box bottom="-50" height="18" left_delta="116" name="WaterPresetsCombo" width="150" />
- <text name="KeyFramePresetsText">
- Watervoorinstellingen
- </text>
- <button label="Nieuw" label_selected="Nieuw" name="WaterNewPreset" left_delta="190"/>
- <button label="Opslaan" label_selected="Opslaan" name="WaterSavePreset"/>
- <button label="Verwijderen" label_selected="Verwijderen" name="WaterDeletePreset" width="80"/>
- <tab_container name="Water Tabs">
- <panel label="Instellingen" name="Settings">
- <text name="BHText">
- Watermistkleur
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Klik om de kleurkiezer te openen"/>
- <text name="WaterFogDensText">
- Mistdichtheidsexponent
- </text>
- <button label="?" name="WaterFogDensityHelp"/>
- <text name="WaterUnderWaterFogModText">
- Onderwatermist wijziger
- </text>
- <button label="?" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Reflectie wavelet schaal
- </text>
- <button label="?" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Fresnelschaal
- </text>
- <button label="?" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Fresnelverplaatsing
- </text>
- <button label="?" name="WaterFresnelOffsetHelp"/>
- <text name="DensMultText">
- Refractieschaal boven
- </text>
- <button label="?" name="WaterScaleAboveHelp"/>
- <text name="WaterScaleBelowText">
- Refractieschaal onder
- </text>
- <button label="?" name="WaterScaleBelowHelp"/>
- <text name="MaxAltText">
- Wazigheidvermeerderaar
- </text>
- <button label="?" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="Afbeelding" name="Waves">
- <text name="BHText">
- Grote golven richting
- </text>
- <button label="?" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Kleine golf richting
- </text>
- <button label="?" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Normaalmap
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml b/indra/newview/skins/default/xui/nl/floater_windlight_options.xml
deleted file mode 100644
index b26dd7916e..0000000000
--- a/indra/newview/skins/default/xui/nl/floater_windlight_options.xml
+++ /dev/null
@@ -1,190 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="GEAVANCEERDE LUCHT EDITOR">
- <combo_box allow_text_entry="false" follows="left|top" mouse_opaque="true" name="WLPresetsCombo"/>
- <text name="KeyFramePresetsText">
- Lucht voorinstellingen
- </text>
- <button label="Nieuw" label_selected="Nieuw" name="WLNewPreset"/>
- <button label="Opslaan" label_selected="Opslaan" name="WLSavePreset"/>
- <button label="Verwijderen" label_selected="Verwijderen" name="WLDeletePreset"/>
- <button label="Dag cyclus editor" label_selected="Dag cyclus editor" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="Atmosfeer" name="Atmosphere">
- <text name="BHText">
- Blauw Horizon
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Nevel horizon
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Blauw dichtheid
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Nevel dichtheid
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Dichtheidsfactor
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Afstandsfactor
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Max hoogte
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="Licht" name="Lighting">
- <text name="SLCText">
- Zon/maan kleur
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Zon/maan positie
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Omgeving
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Oosthoek
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Zonnegloed
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Focus " name="WLGlowB"/>
- <slider label="Grootte" name="WLGlowR"/>
- <text name="SceneGammaText">
- Scenegamma
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Ster helderheid
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="Wolken" name="Clouds">
- <text name="WLCloudColorText">
- Wolkenkleur
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Wolken (XY/Dichtheid)
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Wolkenbedekking
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Wolkenschaal
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text name="WLCloudDetailText">
- Wolkendetail (XY/Dichtheid)
- </text>
- <button label="?" name="WLCloudDetailHelp" left="404"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Wolk verplaatsing X
- </text>
- <button label="?" name="WLCloudScrollXHelp" left="600"/>
- <check_box label="Vastzetten" name="WLCloudLockX" left="622"/>
- <text name="WLCloudScrollYText">
- Wolk verplaatsing Y
- </text>
- <button label="?" name="WLCloudScrollYHelp" left="600"/>
- <check_box label="Vastzetten" name="WLCloudLockY" left="622"/>
- <check_box label="Teken klassieke wolken" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp" left="620"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/nl/notifications.xml b/indra/newview/skins/default/xui/nl/notifications.xml
index f27b83d3f9..06e6d8ae7a 100644
--- a/indra/newview/skins/default/xui/nl/notifications.xml
+++ b/indra/newview/skins/default/xui/nl/notifications.xml
@@ -2698,7 +2698,7 @@ Probeer het alstublieft opnieuw over enkele ogenblikken.
Geen geldig perceel kon gevonden worden.
</notification>
<notification name="ObjectGiveItem">
- Een object genaamd &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, eigendom van [NAME_SLURL], heeft u een [OBJECTTYPE] genaamd [ITEM_SLURL] gegeven.
+ Een object genaamd &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, eigendom van [NAME_SLURL], heeft u een [OBJECTTYPE] genaamd &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; gegeven.
<form name="form">
<button name="Keep" text="Behouden"/>
<button name="Discard" text="Afwijzen"/>
diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml
index a53c0769dc..ca6b8eb521 100644
--- a/indra/newview/skins/default/xui/nl/strings.xml
+++ b/indra/newview/skins/default/xui/nl/strings.xml
@@ -849,9 +849,6 @@
<string name="InvFolder My Inventory">
Mijn Inventaris
</string>
- <string name="InvFolder My Favorites">
- Mijn Favorieten
- </string>
<string name="InvFolder Library">
Bibliotheek
</string>
@@ -910,10 +907,10 @@
Gebaren
</string>
<string name="InvFolder Favorite">
- Favoriten
+ Mijn Favorieten
</string>
<string name="InvFolder favorite">
- Favoriten
+ Mijn Favorieten
</string>
<string name="InvFolder Current Outfit">
Huidige Uitrusting
@@ -1303,9 +1300,7 @@
<string name="RegionNoCovenantOtherOwner">
There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.
</string>
- <string name="covenant_last_modified">
- Laatst bewerkt:
- </string>
+ <string name="covenant_last_modified" value="Laatst bewerkt: " />
<string name="none_text" value="(none)"/>
<string name="never_text" value="(never)"/>
<string name="GroupOwned">
diff --git a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
deleted file mode 100644
index f3929df3e3..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDYTOR CYKLU DNIA">
- <tab_container name="Day Cycle Tabs">
- <panel label="Cykl dnia" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <multi_slider label="" name="WLTimeSlider"/>
- <multi_slider label="" name="WLDayCycleKeys"/>
- <text name="WL12am">
- 12am
- </text>
- <text name="WL3am">
- 3am
- </text>
- <text name="WL6am">
- 6am
- </text>
- <text name="WL9amHash">
- 9am
- </text>
- <text name="WL12pmHash">
- 12pm
- </text>
- <text name="WL3pm">
- 3pm
- </text>
- <text name="WL6pm">
- 6pm
- </text>
- <text name="WL9pm">
- 9pm
- </text>
- <text name="WL12am2">
- 12am
- </text>
- <text name="WL12amHash">
- |
- </text>
- <text name="WL3amHash">
- I
- </text>
- <text name="WL6amHash">
- |
- </text>
- <text name="WL9amHash2">
- I
- </text>
- <text name="WL12pmHash2">
- |
- </text>
- <text name="WL3pmHash">
- I
- </text>
- <text name="WL6pmHash">
- |
- </text>
- <text name="WL9pmHash">
- I
- </text>
- <text name="WL12amHash2">
- |
- </text>
- <button label="Dodaj" label_selected="Dodaj" name="WLAddKey"/>
- <button label="Usuń" label_selected="Usuń" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Preferencje czasu:
- </text>
- <text name="WLCurKeyTimeText">
- Czas:
- </text>
- <spinner label="Godz" name="WLCurKeyHour"/>
- <spinner label="Min" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Ustawienia:
- </text>
- <combo_box label="Preset" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Przerwij:
- </text>
- <combo_box label="5 min" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Długość cyklu:
- </text>
- <spinner label="Godz" name="WLLengthOfDayHour"/>
- <spinner label="Min" name="WLLengthOfDayMin"/>
- <spinner label="Sek" name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- PrzeglÄ…daj:
- </text>
- <button label="Start" label_selected="Start" name="WLAnimSky"/>
- <button label="Stop" label_selected="Stop" name="WLStopAnimSky"/>
- <button label="Używaj czasu regionu" label_selected="Używaj czasu regionu" name="WLUseLindenTime"/>
- <button label="Zapisz test dnia" label_selected="Zapisz test dnia" name="WLSaveDayCycle"/>
- <button label="Załaduj test dnia" label_selected="Załaduj test dnia" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_env_settings.xml b/indra/newview/skins/default/xui/pl/floater_env_settings.xml
deleted file mode 100644
index 3ab854fbbb..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_env_settings.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDYTOR ÅšRODOWISKA">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Czas
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <slider label="" name="EnvTimeSlider"/>
- <text name="EnvCloudText">
- Chmury:
- </text>
- <slider label="" name="EnvCloudSlider"/>
- <text name="EnvWaterColorText">
- Kolor wody
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Kliknij aby wybrać kolor"/>
- <text name="EnvWaterFogText">
- Zamglenie:
- </text>
- <slider label="" name="EnvWaterFogSlider"/>
- <button label="Używaj czasu regionu" name="EnvUseEstateTimeButton"/>
- <button label="Zaawansowane niebo" name="EnvAdvancedSkyButton"/>
- <button label="Zaawansowana woda" name="EnvAdvancedWaterButton"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
index 7c29d52e7b..131f92d56f 100644
--- a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="USTAWIENIA DEBUGOWANIA">
<radio_group name="boolean_combo">
- <radio_item label="PRAWDA" name="TRUE" value="prawda"/>
- <radio_item label="NIEPRAWDA" name="FALSE" value=""/>
+ <radio_item label="PRAWDA" name="TRUE" />
+ <radio_item label="NIEPRAWDA" name="FALSE" />
</radio_group>
<color_swatch label="Kolor" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/pl/floater_water.xml b/indra/newview/skins/default/xui/pl/floater_water.xml
deleted file mode 100644
index 9720dae516..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_water.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="ZAAWANSOWANY EDYTOR WODY">
- <text name="KeyFramePresetsText">
- Ustawienia wody:
- </text>
- <button label="Nowe" label_selected="Nowe" name="WaterNewPreset"/>
- <button label="Zapisz" label_selected="Zapisz" name="WaterSavePreset"/>
- <button label="Usuń" label_selected="Usuń" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="USTAWIENIA" name="Settings">
- <text name="BHText">
- Kolor podwodnej mgły
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Kliknij aby wybrać kolor"/>
- <text name="WaterFogDensText">
- Wykładnik gęstości mgły
- </text>
- <button label="?" name="WaterFogDensityHelp"/>
- <slider label="" name="WaterFogDensity"/>
- <text name="WaterUnderWaterFogModText">
- Modyfikator mgły
- </text>
- <button label="?" name="WaterUnderWaterFogModHelp"/>
- <slider label="" name="WaterUnderWaterFogMod"/>
- <text name="BDensText">
- Skala zmarszczeń
- </text>
- <button label="?" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <slider label="" name="WaterNormalScaleX"/>
- <slider label="" name="WaterNormalScaleY"/>
- <slider label="" name="WaterNormalScaleZ"/>
- <text name="HDText">
- Skala Fresnela
- </text>
- <button label="?" name="WaterFresnelScaleHelp"/>
- <slider label="" name="WaterFresnelScale"/>
- <text name="FresnelOffsetText">
- Przesunięcie Fresnela
- </text>
- <button label="?" name="WaterFresnelOffsetHelp"/>
- <slider label="" name="WaterFresnelOffset"/>
- <text name="DensMultText">
- Górna refrakcja
- </text>
- <button label="?" name="WaterScaleAboveHelp"/>
- <slider label="" name="WaterScaleAbove"/>
- <text name="WaterScaleBelowText">
- Dolna refrakcja
- </text>
- <button label="?" name="WaterScaleBelowHelp"/>
- <slider label="" name="WaterScaleBelow"/>
- <text name="MaxAltText">
- Mnożnik rozmycia
- </text>
- <button label="?" name="WaterBlurMultiplierHelp"/>
- <slider label="" name="WaterBlurMult"/>
- </panel>
- <panel label="OBRAZ" name="Waves">
- <text name="BHText">
- Kierunek dużych fal
- </text>
- <button label="?" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <slider label="" name="WaterWave1DirX"/>
- <slider label="" name="WaterWave1DirY"/>
- <text name="BHText2">
- Kierunek małych fal
- </text>
- <button label="?" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <slider label="" name="WaterWave2DirX"/>
- <slider label="" name="WaterWave2DirY"/>
- <text name="BHText3">
- Mapa normalnych
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- <texture_picker label="" name="WaterNormalMap"/>
- </panel>
- </tab_container>
- <string name="WLDefaultWaterNames">
- Default:Glassy:Pond:Murky:Second Plague:SNAKE!!!:Valdez
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml b/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
deleted file mode 100644
index 930e904464..0000000000
--- a/indra/newview/skins/default/xui/pl/floater_windlight_options.xml
+++ /dev/null
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="ZAAWANSOWANY EDYTOR NIEBA">
- <text name="KeyFramePresetsText">
- Ustawienia nieba:
- </text>
- <button label="Nowe" label_selected="Nowe" name="WLNewPreset"/>
- <button label="Zapisz" label_selected="Zapisz" name="WLSavePreset"/>
- <button label="Usuń" label_selected="Usuń" name="WLDeletePreset"/>
- <button label="Edytor cyklu dnia" label_selected="Edytor cyklu dnia" name="WLDayCycleMenuButton"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFERA" name="Atmosphere">
- <text name="BHText">
- Horyzont błękitu
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <slider label="" name="WLBlueHorizonR"/>
- <slider label="" name="WLBlueHorizonG"/>
- <slider label="" name="WLBlueHorizonB"/>
- <slider label="" name="WLBlueHorizonI"/>
- <text name="BDensText">
- Horyzont zamglenia
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <slider label="" name="WLHazeHorizon"/>
- <text name="BDensText2">
- Gęstość błękitu
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <slider label="" name="WLBlueDensityR"/>
- <slider label="" name="WLBlueDensityG"/>
- <slider label="" name="WLBlueDensityB"/>
- <slider label="" name="WLBlueDensityI"/>
- <text name="HDText">
- Gęstość zamglenia
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <slider label="" name="WLHazeDensity"/>
- <text name="DensMultText">
- Mnożnik gęsości
- </text>
- <button label="?" name="WLDensityMultHelp"/>
- <slider label="" name="WLDensityMult"/>
- <text name="WLDistanceMultText">
- Mnożnik dystansu
- </text>
- <button label="?" name="WLDistanceMultHelp"/>
- <slider label="" name="WLDistanceMult"/>
- <text name="MaxAltText">
- Max wysokość
- </text>
- <button label="?" name="WLMaxAltitudeHelp"/>
- <slider label="" name="WLMaxAltitude"/>
- </panel>
- <panel label="ÅšWIATÅO" name="Lighting">
- <text name="SLCText">
- Kolor Słońca/Księżyca
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLSunlightR"/>
- <slider label="" name="WLSunlightG"/>
- <slider label="" name="WLSunlightB"/>
- <slider label="" name="WLSunlightI"/>
- <text name="TODText">
- Pozycja Słońca/Księżyca
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <slider label="" name="WLSunAngle"/>
- <text name="WLAmbientText">
- Otoczenie
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <slider label="" name="WLAmbientR"/>
- <slider label="" name="WLAmbientG"/>
- <slider label="" name="WLAmbientB"/>
- <slider label="" name="WLAmbientI"/>
- <text name="WLEastAngleText">
- Pozycja wschodu
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <slider label="" name="WLEastAngle"/>
- <text name="SunGlowText">
- Blask Słońca
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Ostrość" name="WLGlowB"/>
- <slider label="Rozmiar" name="WLGlowR"/>
- <text name="SceneGammaText">
- Jasność obrazu
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <slider label="" name="WLGamma"/>
- <text name="WLStarText">
- Blask gwiazd
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- <slider label="" name="WLStarAlpha"/>
- </panel>
- <panel label="CHMURY" name="Clouds">
- <text name="WLCloudColorText">
- Kolor chmur
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <slider label="" name="WLCloudColorR"/>
- <slider label="" name="WLCloudColorG"/>
- <slider label="" name="WLCloudColorB"/>
- <slider label="" name="WLCloudColorI"/>
- <text name="WLCloudColorText2">
- Chmury (XY/Gęstość)
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- G
- </text>
- <slider label="" name="WLCloudX"/>
- <slider label="" name="WLCloudY"/>
- <slider label="" name="WLCloudDensity"/>
- <text name="WLCloudCoverageText">
- Pokrycie chmur
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <slider label="" name="WLCloudCoverage"/>
- <text name="WLCloudScaleText">
- Skala chmur
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <slider label="" name="WLCloudScale"/>
- <text name="WLCloudDetailText">
- Szczegóły (XY/gęstość)
- </text>
- <button label="?" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- G
- </text>
- <slider label="" name="WLCloudDetailX"/>
- <slider label="" name="WLCloudDetailY"/>
- <slider label="" name="WLCloudDetailDensity"/>
- <text name="WLCloudScrollXText">
- Przewijanie chmur X
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Zablokuj" name="WLCloudLockX"/>
- <slider label="" name="WLCloudScrollX"/>
- <text name="WLCloudScrollYText">
- Przewijanie chmur Y
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Zablokuj" name="WLCloudLockY"/>
- <slider label="" name="WLCloudScrollY"/>
- <check_box label="Klasyczne chmury" name="DrawClassicClouds"/>
- <button label="?" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
- <string name="WLDefaultSkyNames">
- A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
- </string>
-</floater>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index e869806d04..fe4662c5a2 100644
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -138,7 +138,6 @@
<menu_item_check label="Wyłącz ograniczenia zasięgu kamery" name="Disable Camera Distance"/>
<menu_item_check label="Wysoka rozdzielczość zdjęć" name="HighResSnapshot"/>
<menu_item_check label="Zapisuj zdjęcia na dysk twardy bez efektu dźwiękowego" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Skompresuj zdjęcie na dysk twardy" name="CompressSnapshotsToDisk"/>
<menu label="Narzędzia" name="Performance Tools">
<menu_item_call label="Pomiar lagów" name="Lag Meter"/>
<menu_item_check label="Statystyki" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 63f976a314..7d3225ea31 100644
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -2385,7 +2385,7 @@ Spróbuj ponowanie za kilka minut.
</notification>
<notification name="ObjectGiveItem">
Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, należący do [NAME_SLURL] dał Tobie [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Zachowaj"/>
<button name="Discard" text="Wyrzuć"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
index 8a183c00cf..72c162f63d 100644
--- a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Zapisz obrazek" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Cofnij" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
index da9f84cb2e..ef52e2148b 100644
--- a/indra/newview/skins/default/xui/pl/panel_people.xml
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -66,16 +66,16 @@ Chcesz spotkać ludzi? Spróbuj [secondlife:///app/worldmap Mapa Świata].
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml
index 34c105225d..d69d137d23 100644
--- a/indra/newview/skins/default/xui/pl/panel_places.xml
+++ b/indra/newview/skins/default/xui/pl/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Profil" name="profile_btn" tool_tip="Pokaż profil miejsca"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
index 6eceed46d3..6a8309cca5 100644
--- a/indra/newview/skins/default/xui/pl/strings.xml
+++ b/indra/newview/skins/default/xui/pl/strings.xml
@@ -1072,9 +1072,6 @@
<string name="InvFolder My Inventory">
Moja Szafa
</string>
- <string name="InvFolder My Favorites">
- Moje ulubione
- </string>
<string name="InvFolder Library">
Biblioteka
</string>
@@ -1133,10 +1130,10 @@
Gesturki
</string>
<string name="InvFolder Favorite">
- Ulubione
+ Moje ulubione
</string>
<string name="InvFolder favorite">
- Ulubione
+ Moje ulubione
</string>
<string name="InvFolder Current Outfit">
Obecny strój
@@ -1698,7 +1695,7 @@
<string name="RegionNoCovenantOtherOwner">
Brak umowy dla tego majątku. Każda posiadłość w tym majątku została sprzedana przez właściciela majątku nie Linden Lab. Skontaktuj się z właścicielem majątku w celu uzuskania szczegółów sprzedaży.
</string>
- <string name="covenant_last_modified" value="Ostatnio modyfikowano:"/>
+ <string name="covenant_last_modified" value="Ostatnio modyfikowano: "/>
<string name="none_text" value=" (żadne) "/>
<string name="never_text" value=" (nigdy) "/>
<string name="GroupOwned">
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index e48cac7d1f..514c7382f8 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -133,12 +133,12 @@ Vá para o menu Mundo &gt; Sobre o terreno ou selecione outro lote para mostrar
0
</text>
<button label="Comprar terreno..." label_selected="Comprar terreno..." left="130" name="Buy Land..." width="125"/>
+ <button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possuído, estar com o conteúdo configurado e não estar pronto para leilão."/>
<button label="Dados do script" name="Scripts..."/>
<button label="Comprar para o grupo" name="Buy For Group..."/>
<button label="Comprar passe..." label_selected="Comprar passe..." left="130" name="Buy Pass..." tool_tip="Um passe concede a você acesso temporário a este terreno." width="125"/>
<button label="Abandonar terreno..." label_selected="Abandonar terreno..." name="Abandon Land..."/>
<button label="Pedir terreno" name="Reclaim Land..."/>
- <button label="Venda Linden" name="Linden Sale..." tool_tip="O terreno precisa ser possuído, estar com o conteúdo configurado e não estar pronto para leilão."/>
</panel>
<panel label="CONTRATO" name="land_covenant_panel">
<panel.string name="can_resell">
@@ -308,6 +308,9 @@ Apenas lotes maiores podem ser listados na busca.
<panel.string name="push_restrict_region_text">
Proibido empurrar (regulamento da região)
</panel.string>
+ <panel.string name="see_avs_text">
+ Veja e bata papo com os residentes deste terreno
+ </panel.string>
<text name="allow_label">
Autorizar outros residentes a:
</text>
@@ -370,6 +373,10 @@ Apenas lotes maiores podem ser listados na busca.
Foto:
</text>
<texture_picker label="" name="snapshot_ctrl" tool_tip="Clique para escolher uma imagem"/>
+ <text name="allow_label5">
+ Permitir que residentes de outros terrenos:
+ </text>
+ <check_box label="Ver avatares" name="SeeAvatarsCheck" tool_tip="Permite que residentes de outros terrenos vejam e conversem com os residentes deste terreno e vice-versa."/>
<text name="landing_point">
Ponto de Aterrissagem: [LANDING]
</text>
@@ -429,6 +436,11 @@ Mídia:
Som:
</text>
<check_box label="Limitar sons de gestos e objetos a esta parcela" name="check sound local"/>
+ <text name="Avatar Sounds:">
+ Ãudio de avatares:
+ </text>
+ <check_box label="Todos" name="all av sound check"/>
+ <check_box label="Grupo" name="group av sound check"/>
<text name="Voice settings:">
Voz:
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
index 666e185819..acc462ea94 100644
--- a/indra/newview/skins/default/xui/pt/floater_build_options.xml
+++ b/indra/newview/skins/default/xui/pt/floater_build_options.xml
@@ -1,7 +1,30 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="build options floater" title="OPÇÕES DE GRADE">
- <spinner label="Unidade da grade (metros)" name="GridResolution"/>
- <spinner label="Ext. da Grade (metros)" name="GridDrawSize"/>
+ <floater.string name="grid_screen_text">
+ Tela
+ </floater.string>
+ <floater.string name="grid_local_text">
+ Local
+ </floater.string>
+ <floater.string name="grid_world_text">
+ Mundo
+ </floater.string>
+ <floater.string name="grid_reference_text">
+ Referência
+ </floater.string>
+ <floater.string name="grid_attachment_text">
+ Anexo
+ </floater.string>
+ <text name="grid_mode_label" tool_tip="Opacidade da grade">
+ Modo
+ </text>
+ <combo_box name="combobox grid mode" tool_tip="Selecione o tipo de régua da grade onde o objeto será colocado">
+ <combo_box.item label="Grid SL" name="World"/>
+ <combo_box.item label="Grid local" name="Local"/>
+ <combo_box.item label="Grid de referência" name="Reference"/>
+ </combo_box>
+ <spinner label="Unidades (metros):" name="GridResolution"/>
+ <spinner label="Extensões (metros)" name="GridDrawSize"/>
<check_box label="Encaixar em sub-unidades" name="GridSubUnit"/>
<check_box label="Ver corte transversal" name="GridCrossSection"/>
<text name="grid_opacity_label" tool_tip="Opacidade da grade">
diff --git a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml b/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
deleted file mode 100644
index 9560a3b418..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Day Cycle Floater" title="EDITOR DE CICLO DE DIA">
- <tab_container name="Day Cycle Tabs">
- <panel label="Ciclo do dia" name="Day Cycle">
- <button label="?" name="WLDayCycleHelp"/>
- <text name="WL12am">
- 0:00
- </text>
- <text name="WL3am">
- 3:00
- </text>
- <text name="WL6am">
- 6:00
- </text>
- <text name="WL9amHash">
- 9:00
- </text>
- <text name="WL12pmHash">
- 12:00
- </text>
- <text name="WL3pm">
- 15:00
- </text>
- <text name="WL6pm">
- 18:00
- </text>
- <text name="WL9pm">
- 21:00
- </text>
- <text name="WL12am2">
- 24:00
- </text>
- <button label="Adicionar chave" label_selected="Adicionar chave" name="WLAddKey"/>
- <button label="Apagar chave" label_selected="Apagar chave" name="WLDeleteKey"/>
- <text name="WLCurKeyFrameText">
- Configurações de Quadro-chave:
- </text>
- <text name="WLCurKeyTimeText">
- Tempo-chave:
- </text>
- <spinner label="Hora" name="WLCurKeyHour"/>
- <spinner label="Minutos" name="WLCurKeyMin"/>
- <text name="WLCurKeyTimeText2">
- Ajuste-chave:
- </text>
- <combo_box label="Ajuste" name="WLKeyPresets"/>
- <text name="DayCycleText">
- Grudar:
- </text>
- <combo_box label="5 minutos" name="WLSnapOptions"/>
- <text name="DayCycleText2">
- Duração do Ciclo:
- </text>
- <spinner label="Hora" name="WLLengthOfDayHour"/>
- <spinner label="Min." name="WLLengthOfDayMin"/>
- <spinner label="Seg." name="WLLengthOfDaySec"/>
- <text name="DayCycleText3">
- Visualizar
- </text>
- <button label="Tocar" label_selected="Tocar" name="WLAnimSky"/>
- <button label="Pare!" label_selected="Pare" name="WLStopAnimSky"/>
- <button label="Usar o horário da Propriedade" label_selected="Ir para o horário da Propriedade" name="WLUseLindenTime"/>
- <button label="Salvar o Dia teste" label_selected="Salvar o Dia teste" name="WLSaveDayCycle"/>
- <button label="Carregar o Dia teste" label_selected="Carregar o Dia teste" name="WLLoadDayCycle"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml
new file mode 100644
index 0000000000..a8b5d8f67d
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<floater name="Delete Env Preset" title="EXCLUIR CONF AMBIENTE">
+ <string name="title_water">
+ Excluir pré-configuração da água
+ </string>
+ <string name="title_sky">
+ Excluir pré-configuração de céu
+ </string>
+ <string name="title_day_cycle">
+ Excluir pré-configuração dos dias
+ </string>
+ <string name="label_water">
+ Pré-configuração:
+ </string>
+ <string name="label_sky">
+ Pré-configuração:
+ </string>
+ <string name="label_day_cycle">
+ Ciclo dia:
+ </string>
+ <string name="msg_confirm_deletion">
+ Tem certeza de que quer excluir esta pré-configuração?
+ </string>
+ <string name="msg_sky_is_referenced">
+ Impossível excluir pré-configuração utilizada por um ou mais ciclos de dia .
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="label">
+ Pré-configuração:
+ </text>
+ <button label="Excluir" name="delete"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml
new file mode 100644
index 0000000000..9e25938986
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Day cycle" title="Editar ciclo dos dias">
+ <string name="title_new">
+ Criar novo ciclo de dias
+ </string>
+ <string name="title_edit">
+ Editar ciclo dos dias
+ </string>
+ <string name="hint_new">
+ Dê um nome ao seu ciclo dos dias, ajuste os controles para criá-lo e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar sua configuração do dia, ajuste os controles e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="label">
+ Nome:
+ </text>
+ <text name="note">
+ Observação: trocar o nome de uma pré-configuração criará uma nova sem modificar a uma pré-configuração atual.
+ </text>
+ <text name="hint_item1">
+ - Clique em uma guia para editar as configurações e horário de um céu.
+ </text>
+ <text name="hint_item2">
+ - Clique e arraste as guias para definir as transições.
+ </text>
+ <text name="hint_item3">
+ - Use a seta para rever o ciclo dos dias.
+ </text>
+ <panel name="day_cycle_slider_panel">
+ <multi_slider initial_value="0" name="WLTimeSlider"/>
+ <multi_slider initial_value="0" name="WLDayCycleKeys"/>
+ <button label="Adicionar chave" label_selected="Adicionar chave" name="WLAddKey"/>
+ <button label="Excluir chave" label_selected="Excluir chave" name="WLDeleteKey"/>
+ <text name="WL12am">
+ 24:00
+ </text>
+ <text name="WL3am">
+ 03:00
+ </text>
+ <text name="WL6am">
+ 06:00
+ </text>
+ <text name="WL9amHash">
+ 09:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL3pm">
+ 15:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL9pm">
+ 21:00
+ </text>
+ <text name="WL12am2">
+ 24:00
+ </text>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL3amHash">
+ I
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL9amHash2">
+ I
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL3pmHash">
+ I
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL9pmHash">
+ I
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ </panel>
+ <text name="WLCurKeyPresetText">
+ Configuração do céu:
+ </text>
+ <combo_box label="Pré-configuração" name="WLSkyPresets"/>
+ <text name="WLCurKeyTimeText">
+ Hora:
+ </text>
+ <time name="time" value="06:00"/>
+ <check_box label="Usar como novo ciclo de dias" name="make_default_cb"/>
+ <button label="Salvar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml
new file mode 100644
index 0000000000..1f1fbcce7e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Sky Preset" title="Editar pré-configuração do céu">
+ <string name="title_new">
+ Criar nova pré-configuração de céu
+ </string>
+ <string name="title_edit">
+ Editar pré-configuração do céu
+ </string>
+ <string name="hint_new">
+ Dê um nome à sua pré-configuração, ajuste os controles para criá-la e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar sua pré-configuração do céu, ajuste os controles e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="hint">
+ Para editar sua pré-configuração do céu, ajuste os controles e clique em &quot;Salvar&quot;.
+ </text>
+ <text name="label">
+ Nome:
+ </text>
+ <text name="note">
+ Observação: trocar o nome de uma pré-configuração criará uma nova sem modificar a pré-configuração atual.
+ </text>
+ <tab_container name="WindLight Tabs">
+ <panel label="ATMOSFERA" name="Atmosphere">
+ <text name="BHText">
+ Horizonte azul
+ </text>
+ <text name="BDensText">
+ Horizonte com névoa
+ </text>
+ <text name="BDensText2">
+ Densidade azul
+ </text>
+ <text name="HDText">
+ Densidade da névoa
+ </text>
+ <text name="DensMultText">
+ Multiplicador de densidade
+ </text>
+ <text name="WLDistanceMultText">
+ Multiplicador de distância
+ </text>
+ <text name="MaxAltText">
+ Altitude máxima
+ </text>
+ </panel>
+ <panel label="ILUMINAÇÃO" name="Lighting">
+ <text name="SLCText">
+ Cor do sol/lua
+ </text>
+ <text name="WLAmbientText">
+ Ambiente
+ </text>
+ <text name="SunGlowText">
+ Brilho do sol
+ </text>
+ <slider label="Foco" name="WLGlowB"/>
+ <slider label="Tamanho" name="WLGlowR"/>
+ <text name="WLStarText">
+ Brilho das estrelas
+ </text>
+ <text name="SceneGammaText">
+ Raios gama
+ </text>
+ <text name="TODText">
+ Posição do sol/lua
+ </text>
+ <multi_slider initial_value="0" name="WLSunPos"/>
+ <text name="WL12amHash">
+ |
+ </text>
+ <text name="WL6amHash">
+ |
+ </text>
+ <text name="WL12pmHash2">
+ |
+ </text>
+ <text name="WL6pmHash">
+ |
+ </text>
+ <text name="WL12amHash2">
+ |
+ </text>
+ <text name="WL12am">
+ 24:00
+ </text>
+ <text name="WL6am">
+ 06:00
+ </text>
+ <text name="WL12pmHash">
+ 12:00
+ </text>
+ <text name="WL6pm">
+ 18:00
+ </text>
+ <text name="WL12am2">
+ 24:00
+ </text>
+ <time name="WLDayTime" value="06:00"/>
+ <text name="WLEastAngleText">
+ Ângulo leste
+ </text>
+ </panel>
+ <panel label="NUVENS" name="Clouds">
+ <text name="WLCloudColorText">
+ Cor das nuvens
+ </text>
+ <text name="WLCloudColorText2">
+ XY / densidade das nuvens
+ </text>
+ <slider label="X" name="WLCloudX"/>
+ <slider label="Y" name="WLCloudY"/>
+ <slider label="D" name="WLCloudDensity"/>
+ <text name="WLCloudCoverageText">
+ Cobertura das nuvens
+ </text>
+ <text name="WLCloudScaleText">
+ Escala das nuvens
+ </text>
+ <text name="WLCloudDetailText">
+ Detalhe das nuvens (XY / densidade)
+ </text>
+ <slider label="X" name="WLCloudDetailX"/>
+ <slider label="Y" name="WLCloudDetailY"/>
+ <slider label="D" name="WLCloudDetailDensity"/>
+ <text name="WLCloudScrollXText">
+ Passagem das nuvens X
+ </text>
+ <check_box label="Fixar" name="WLCloudLockX"/>
+ <text name="WLCloudScrollYText">
+ Passagem das nuvens Y
+ </text>
+ <check_box label="Fixar" name="WLCloudLockY"/>
+ </panel>
+ </tab_container>
+ <check_box label="Usar esta pré-configuração como meu novo céu" name="make_default_cb"/>
+ <button label="Salvar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml
new file mode 100644
index 0000000000..7bde22851e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Edit Water Preset" title="Editar pré-configuração da água">
+ <string name="title_new">
+ Criar nova pré-configuração de água
+ </string>
+ <string name="title_edit">
+ Editar pré-configuração da água
+ </string>
+ <string name="hint_new">
+ Dê um nome à sua pré-configuração, ajuste os controles para criá-la e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="hint_edit">
+ Para editar sua pré-configuração de água, ajuste os controles e clique em &quot;Salvar&quot;.
+ </string>
+ <string name="combo_label">
+ -Selecione uma pré-configuração-
+ </string>
+ <text name="hint">
+ Para editar sua pré-configuração, ajuste os controles e clique em &quot;Salvar&quot;.
+ </text>
+ <text name="label">
+ Nome da pré-configuração:
+ </text>
+ <text name="note">
+ Observação: trocar o nome de uma pré-configuração criará uma nova sem modificar a configuração atual.
+ </text>
+ <panel name="panel_water_preset">
+ <text name="water_color_label">
+ Cor da névoa da água
+ </text>
+ <text name="water_fog_density_label">
+ Expoente da densidade da névoa
+ </text>
+ <text name="underwater_fog_modifier_label">
+ Modificador de névoa submerso
+ </text>
+ <text name="BHText">
+ Direção de onda grande
+ </text>
+ <slider label="X" name="WaterWave1DirX"/>
+ <slider label="Y" name="WaterWave1DirY"/>
+ <text name="BDensText">
+ Escala de ondas de reflexo
+ </text>
+ <text name="HDText">
+ Escala de Fresnel
+ </text>
+ <text name="FresnelOffsetText">
+ Recuo de Fresnel
+ </text>
+ <text name="BHText2">
+ Direção de onda pequena
+ </text>
+ <slider label="X" name="WaterWave2DirX"/>
+ <slider label="Y" name="WaterWave2DirY"/>
+ <text name="DensMultText">
+ Escala de refração acima
+ </text>
+ <text name="WaterScaleBelowText">
+ Escala de refração abaixo
+ </text>
+ <text name="MaxAltText">
+ Multiplicador de distorção
+ </text>
+ <text name="BHText3">
+ Mapa normal
+ </text>
+ </panel>
+ <check_box label="Usar esta pré-configuração na minha água" name="make_default_cb"/>
+ <button label="Salvar" name="save"/>
+ <button label="Cancelar" name="cancel"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_env_settings.xml b/indra/newview/skins/default/xui/pt/floater_env_settings.xml
deleted file mode 100644
index 3ca8d934c9..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_env_settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Environment Editor Floater" title="EDITOR DO AMBIENTE">
- <floater.string name="timeStr">
- [hour12,datetime,utc]:[min,datetime,utc] [ampm,datetime,utc]
- </floater.string>
- <text name="EnvTimeText">
- Hora do Dia
- </text>
- <text name="EnvTimeText2">
- 12:00 PM
- </text>
- <text name="EnvCloudText">
- Cobertura de
-Nuvens
- </text>
- <text name="EnvWaterColorText">
- Cor da água
- </text>
- <color_swatch label="" name="EnvWaterColor" tool_tip="Selecionar a cor"/>
- <text name="EnvWaterFogText">
- Névoa da
-água
- </text>
- <button bottom="-144" label="Usar hora da propriedade" name="EnvUseEstateTimeButton" width="155"/>
- <button label="Céu Avançado" left="167" name="EnvAdvancedSkyButton" width="155"/>
- <button label="Ãgua Avançada" left="326" name="EnvAdvancedWaterButton" width="155"/>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_environment_settings.xml b/indra/newview/skins/default/xui/pt/floater_environment_settings.xml
new file mode 100644
index 0000000000..4055ba97ef
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_environment_settings.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="Environment Editor Floater" title="AMBIENTE">
+ <text name="note">
+ Use as opções abaixo para personalizar as configurações de ambiente no visualizador.
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar configurações da região" name="use_region_settings"/>
+ <radio_item label="Personalizar meu ambiente" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="note">
+ Observação: suas configurações não se aplicam aos outros usuários.
+ </text>
+ <text name="water_settings_title">
+ Configuração de água
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo céu / dia
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Céu fixo" name="my_sky_settings"/>
+ <radio_item label="Ciclo dia" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="OK" name="ok_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_model_preview.xml b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
index cdad55bded..4a537fafb1 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
@@ -3,6 +3,9 @@
<string name="status_idle">
Inativo
</string>
+ <string name="status_parse_error">
+ Dae parsing - erro, detalhes no log.
+ </string>
<string name="status_reading_file">
Carregando...
</string>
@@ -12,6 +15,9 @@
<string name="status_vertex_number_overflow">
Erro: Número de Vertex acima de 65534. Abortado.
</string>
+ <string name="bad_element">
+ Erro: elemento inválido
+ </string>
<string name="high">
Alto
</string>
@@ -54,6 +60,9 @@
<string name="simplifying">
Simplificando...
</string>
+ <string name="tbd">
+ A ser definido
+ </string>
<text name="name_label">
Nome:
</text>
@@ -74,23 +83,26 @@
Nível de detalhamento: Mais baixo
</combo_item>
</combo_box>
- <panel>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
- <text name="physics cost">
- Custo físico: [COST]
- </text>
- <text name="upload fee">
- Taxa de upload: N/D
- </text>
- </panel>
- <text name="status">
- [STATUS]
+ <text name="warning_title">
+ AVISO:
+ </text>
+ <text name="warning_message">
+ Não será possível concluir o upload final desse modelo para os servidores do Second Life. [[VURL] Saiba como] ativar o upload de modelos mesh.
+ </text>
+ <text name="weights_text">
+ Download:
+Físico:
+Servidor:
+
+Equivalente em prims:
+ </text>
+ <text name="weights">
+ [ST]
+[PH]
+[SIM]
+
+[EQ]
</text>
- <button label="Padrão" name="reset_btn" tool_tip="Valores padrão"/>
- <button label="Upload" name="ok_btn" tool_tip="Carregar no simulador"/>
- <button label="Cancelar" name="cancel_btn"/>
<tab_container name="import_tab">
<panel label="Nível de detalhamento:" name="lod_panel">
<text name="lod_table_header">
@@ -228,4 +240,11 @@
<spinner name="pelvis_offset" value="0.0"/>
</panel>
</tab_container>
+ <text name="upload_fee">
+ Tarifa de upload: L$ [FEE]
+ </text>
+ <button label="Definir como padrão" name="reset_btn" tool_tip="Definir como padrão"/>
+ <button label="Calcular pesos e tarifa" name="calculate_btn" tool_tip="Calcular pesos e tarifa"/>
+ <button label="Upload" name="ok_btn" tool_tip="Carregar no simulador"/>
+ <button label="Cancelar" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
index 1064e16e83..a67a66a446 100644
--- a/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
+++ b/indra/newview/skins/default/xui/pt/floater_model_wizard.xml
@@ -2,190 +2,216 @@
<floater name="Model Wizard" title="CARREGAR ASSISTENTE DE MODELAGEM">
<button label="5. Carregar" name="upload_btn"/>
<button label="4. Revisar" name="review_btn"/>
- <button label="3. Física" name="physics2_btn"/>
<button label="3. Física" name="physics_btn"/>
<button label="2. Otimizar" name="optimize_btn"/>
<button label="1. Selecionra arquivo" name="choose_file_btn"/>
<panel name="choose_file_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carregar modelo
+ <panel name="choose_file_header_panel">
+ <text name="choose_file_header_text">
+ Escolher arquivo de modelo
</text>
</panel>
- <text name="description">
- O assistente ajuda você a importar modelos mesh para o Second Life. Para começar, especifique o arquivo com o modelo a ser importado. O Second Life suporta arquivos COLLADA (.dae).
- </text>
- <panel name="content">
- <text name="Cache location">
- Nome do arquivo:
+ <panel name="choose_file_content_panel">
+ <text name="advanced_users_text">
+ Usuários avançados: se você estiver familiarizado com ferramentas de criação de conteúdo 3D, use o Advanced Uploader.
+ </text>
+ <button label="Trocar para avançado" name="switch_to_advanced"/>
+ <text name="choose_model_file_label">
+ Escolha o arquivo de modelo para upload
</text>
<button label="Procurar..." label_selected="Procurar..." name="browse"/>
+ <text name="support_collada_text">
+ O Second Life oferece suporte a arquivos COLLADA (.dae)
+ </text>
+ <text name="dimensions_label">
+ Dimensões (metros):
+ </text>
<text name="dimensions">
- X Y: Z:
+ X Y Z
+ </text>
+ <text name="warning_label">
+ AVISO:
</text>
- <text name="dimension_dividers">
- | |
+ <text name="warning_text">
+ Não será possível concluir a etapa final do upload desse modelo para os servidores do Second Life. [secondlife:///app/floater/learn_more Saiba como] configurar sua conta para uploads de modelos mesh.
</text>
</panel>
</panel>
<panel name="optimize_panel">
- <panel name="header_panel">
- <text name="header_text">
- Otimizar
+ <panel name="optimize_header_panel">
+ <text name="optimize_header_text">
+ Otimizar modelo
</text>
</panel>
- <text name="description">
- O assistente otimizou seu modelo para melhorar o desempenho. Ajuste os resultados da otimização abaixou ou clique em Próximo para prosseguir.
+ <text name="optimize_hint">
+ O modelo foi ajustado para desempenho. Faça novos ajustes, se desejar.
</text>
- <panel name="content">
+ <panel name="optimize_content_panel">
+ <text name="generating_lod_label">
+ Gerar nível de detalhes
+ </text>
<text name="high_detail_text">
- Gerar nível de detalhamento: Alto
+ Gerar nível de detalhes: Alto
</text>
<text name="medium_detail_text">
- Gerar nível de detalhamento: Médio
+ Gerar nível de detalhes: Médio
</text>
<text name="low_detail_text">
- Gerar nível de detalhamento: Baixo
+ Gerar nível de detalhes: Baixo
</text>
<text name="lowest_detail_text">
- Gerar nível de detalhamento: Mais baixo
+ Gerar nível de detalhes: mais baixo
</text>
</panel>
<panel name="content2">
- <text name="lod_label">
- Visualizar modelo:
+ <text name="optimize_performance_text">
+ Desempenho
+ </text>
+ <text name="optimize_faster_rendering_text">
+ Renderização mais rápida
+Menos detalhes
+Peso menor do prim
+ </text>
+ <text name="optimize_accuracy_text">
+ Precisão
+ </text>
+ <text name="optimize_slower_rendering_text">
+ Renderização mais lenta
+Mais detalhes
+Peso maior do prim
+ </text>
+ <text name="accuracy_slider_mark1">
+ &apos;
+ </text>
+ <text name="accuracy_slider_mark2">
+ &apos;
</text>
- <combo_box name="preview_lod_combo2" tool_tip="LOD para ver no renderizador de pré-visualização">
- <combo_item name="high">
- Alto
+ <text name="accuracy_slider_mark3">
+ &apos;
+ </text>
+ <button label="Recalcular geometria" name="recalculate_geometry_btn"/>
+ <text name="geometry_preview_label">
+ Visualização da geometria
+ </text>
+ <combo_box name="preview_lod_combo" tool_tip="LOD para exibir na renderização de visualização">
+ <combo_item name="preview_lod_high">
+ Máximo de detalhes
</combo_item>
- <combo_item name="medium">
- Médio
+ <combo_item name="preview_lod_medium">
+ Detalhes médios
</combo_item>
- <combo_item name="low">
- Baixo
+ <combo_item name="preview_lod_low">
+ Poucos detalhes
</combo_item>
- <combo_item name="lowest">
- Mais baixo
+ <combo_item name="preview_lod_lowest">
+ Mínimo de detalhes
</combo_item>
</combo_box>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
- <text name="dimensions">
- X Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
</panel>
</panel>
<panel name="physics_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <panel name="physics_header_panel">
+ <text name="physics_header_text">
+ Ajustar físico
</text>
</panel>
- <text name="description">
- O assistente cria uma forma física que determina como o objeto interage com outros objetos e avatares. Ajuste a barra para o nível de detalhamento mais apropriado para a finalidade do seu objeto:
+ <text name="physics_hint">
+ Criaremos uma forma para o corpo externo do modelo. Ajuste o nível de detalhes como necessário para a finalidade desejada de seu modelo.
</text>
- <panel name="content">
- <text name="streaming cost">
- Custo do recurso: [COST]
+ <panel name="physics_content_panel">
+ <text name="physics_performance_text">
+ Desempenho
</text>
- </panel>
- </panel>
- <panel name="physics2_panel">
- <panel name="header_panel">
- <text name="header_text">
- Física
+ <text name="physics_faster_rendering_text">
+ Renderização mais rápida
+Menos detalhes
+Peso menor do prim
</text>
- </panel>
- <text name="description">
- Veja a forma física abaixo e clique em Próximo para prosseguir. Para modificar o formato físico, clique em Anterior.
- </text>
- <panel name="content">
- <text name="lod_label">
- Visualizar modelo:
+ <text name="physics_accuracy_text">
+ Precisão
+ </text>
+ <text name="physics_slower_dendering_text">
+ Renderização mais lenta
+Mais detalhes
+Peso maior do prim
</text>
- <combo_box name="preview_lod_combo3" tool_tip="LOD para ver no renderizador de pré-visualização">
- <combo_item name="high">
- Alto
+ <text name="physics_example_1">
+ Exemplos:
+Objetos em movimento
+Objetos voadores
+Veículos
+ </text>
+ <text name="physics_example_2">
+ Exemplos:
+Objetos estáticos pequenos
+Objetos menos detalhados
+Mobília simples
+ </text>
+ <text name="physics_example_3">
+ Exemplos:
+Objetos estáticos
+Objetos detalhados
+Construções
+ </text>
+ <button label="Recalcular físico" name="recalculate_physics_btn"/>
+ <button label="Recalculando..." name="recalculating_physics_btn"/>
+ <text name="physics_preview_label">
+ Visualização do físico
+ </text>
+ <combo_box name="preview_lod_combo2" tool_tip="LOD para exibir na renderização de visualização">
+ <combo_item name="preview_lod2_high">
+ Máximo de detalhes
</combo_item>
- <combo_item name="medium">
- Médio
+ <combo_item name="preview_lod2_medium">
+ Detalhes médios
</combo_item>
- <combo_item name="low">
- Baixo
+ <combo_item name="preview_lod2_low">
+ Poucos detalhes
</combo_item>
- <combo_item name="lowest">
- Mais baixo
+ <combo_item name="preview_lod2_lowest">
+ Mínimo de detalhes
</combo_item>
</combo_box>
- <text name="dimensions">
- X Y: Z:
- </text>
- <text name="dimension_dividers">
- | |
- </text>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
</panel>
</panel>
<panel name="review_panel">
- <panel name="header_panel">
- <text name="header_text">
+ <panel name="review_header_panel">
+ <text name="review_header_text">
Revisar
</text>
</panel>
- <text name="description">
- Veja os detalhes abaixo e clique em Carregar para carregar seu modelo. Seu saldo L$ será cobrado quando você clicar em Carregar.
- </text>
- <panel name="content">
- <text name="lod_label">
- Visualizar modelo:
+ <panel name="review_content_panel">
+ <text name="review_prim_equiv">
+ Impacto no lote/região: [EQUIV] equivalentes de prim
</text>
- <combo_box name="preview_lod_combo" tool_tip="LOD para ver no renderizador de pré-visualização">
- <combo_item name="high">
- Alto
- </combo_item>
- <combo_item name="medium">
- Médio
- </combo_item>
- <combo_item name="low">
- Baixo
- </combo_item>
- <combo_item name="lowest">
- Mais baixo
- </combo_item>
- </combo_box>
- <text name="dimensions">
- X Y: Z:
+ <text name="review_fee">
+ Uma tarifa de upload de L$ [FEE] será debitada da sua conta.
</text>
- <text name="dimension_dividers">
- | |
+ <text name="review_confirmation">
+ Ao clicar no botão de upload, você confirma que detém os direitos apropriados sobre o material contido no modelo.
</text>
</panel>
- <text name="streaming cost">
- Custo do recurso: [COST]
- </text>
- <text name="physics cost">
- Custo físico: [COST]
- </text>
</panel>
<panel name="upload_panel">
- <panel name="header_panel">
- <text name="header_text">
- Carregado!
+ <panel name="upload_header_panel">
+ <text name="upload_header_text">
+ Upload concluído
</text>
</panel>
- <text name="description">
- Parabéns! Seu modelo foi carregado com êxito. Procure-o na pasta Objetos de seu inventário.
+ <text name="model_uploaded_text">
+ Seu modelo foi carregado.
+ </text>
+ <text name="inventory_text">
+ Disponível na pasta Objetos do seu inventário.
+ </text>
+ <text name="charged_fee">
+ L$ [FEE] foram debitados da sua conta.
</text>
</panel>
<button label="&lt;&lt; Voltar" name="back"/>
<button label="Próximo &gt;&gt;" name="next"/>
+ <button label="Calcular pesos e tarifa &gt;&gt;" name="calculate"/>
+ <button label="Calculando..." name="calculating"/>
<button label="Carregar" name="upload" tool_tip="Carregar no simulador"/>
<button label="Cancelar" name="cancel"/>
<button label="Fechar" name="close"/>
@@ -193,6 +219,9 @@
<string name="status_idle">
Inativo
</string>
+ <string name="status_parse_error">
+ Dae parsing - erro, detalhes no log.
+ </string>
<string name="status_reading_file">
Carregando...
</string>
@@ -202,6 +231,9 @@
<string name="status_vertex_number_overflow">
Erro: Número de Vertex acima de 65534. Abortado.
</string>
+ <string name="bad_element">
+ Erro: elemento inválido
+ </string>
<string name="high">
Alto
</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_search.xml b/indra/newview/skins/default/xui/pt/floater_search.xml
index 4bf7181180..3509cb786d 100644
--- a/indra/newview/skins/default/xui/pt/floater_search.xml
+++ b/indra/newview/skins/default/xui/pt/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="BUSCAR">
+<floater name="floater_search" title="">
<floater.string name="loading_text">
Carregando...
</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
index c6694d13b2..83f7b24572 100644
--- a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_debug" title="DEBUG SETTINGS">
<radio_group name="boolean_combo">
- <radio_item label="TRUE" name="TRUE" value="verdadeiro"/>
- <radio_item label="FALSE" name="FALSE" value=""/>
+ <radio_item label="TRUE" name="TRUE" />
+ <radio_item label="FALSE" name="FALSE" />
</radio_group>
<color_swatch label="Cor" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index ed273d9f28..6850bf2d7c 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -24,20 +24,11 @@
<floater.string name="status_selectland">
Clicar e arrastar para selecionar a terra
</floater.string>
- <floater.string name="grid_screen_text">
- Tela
+ <floater.string name="status_selectcount">
+ [OBJ_COUNT] objetos ( [PRIM_COUNT] prims[PE_STRING] ) selecionados
</floater.string>
- <floater.string name="grid_local_text">
- Local
- </floater.string>
- <floater.string name="grid_world_text">
- Mundo
- </floater.string>
- <floater.string name="grid_reference_text">
- Referência
- </floater.string>
- <floater.string name="grid_attachment_text">
- Anexo
+ <floater.string name="status_selectprimequiv">
+ , [SEL_WEIGHT] equivalentes de prims
</floater.string>
<button label="" label_selected="" name="button focus" tool_tip="Foco"/>
<button label="" label_selected="" name="button move" tool_tip="Mover"/>
@@ -66,20 +57,12 @@
<check_box label="Editar partes linkadas" name="checkbox edit linked parts"/>
<button label="Link" name="link_btn"/>
<button label="Desconectar links" name="unlink_btn"/>
- <text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto">
- þ: [COUNT]
- </text>
<check_box label="" name="checkbox uniform"/>
<text label="Esticar ambos lados" name="checkbox uniform label">
Esticar ambos lados
</text>
<check_box initial_value="true" label="Esticar texturas" name="checkbox stretch textures"/>
- <check_box initial_value="true" label="Mostrar na grade" name="checkbox snap to grid"/>
- <combo_box name="combobox grid mode" tool_tip="Selecione a régua da grade onde o objeto será colocado">
- <combo_box.item label="Grade SL" name="World"/>
- <combo_box.item label="Local" name="Local"/>
- <combo_box.item label="Referência" name="Reference"/>
- </combo_box>
+ <check_box initial_value="true" label="Ajustar" name="checkbox snap to grid"/>
<button label="Opções..." label_selected="Opções..." name="Options..." tool_tip="Mais opções de grade"/>
<button label="" label_selected="" name="ToolCube" tool_tip="Cubo"/>
<button label="" label_selected="" name="ToolPrism" tool_tip="Prisma"/>
@@ -119,23 +102,11 @@
Força
</text>
<button label="Aplicar" label_selected="Aplicar" name="button apply to selection" tool_tip="Modificar a terra selecionada"/>
- <text left="134" name="obj_count">
- Objetos: [COUNT]
- </text>
- <text left="134" name="prim_count">
- Prims: [COUNT]
- </text>
- <text name="linked_set_count">
- Conjuntos linkados: [COUNT]
- </text>
- <text name="linked_set_cost" tool_tip="Custo dos conjuntos selecionados [prims],[complexidade física]">
- Custo: [COST] / [PHYSICS]
- </text>
- <text name="object_count">
- Objetos: [COUNT]
+ <text name="selection_empty">
+ Nada selecionado.
</text>
- <text name="object_cost" tool_tip="Custo dos objetos selecionados [prims] / [complexidade física]">
- Custo: [COST] / [PHYSICS]
+ <text name="selection_weight">
+ Peso do físico [PHYS_WEIGHT], custo de renderização [DISP_WEIGHT].
</text>
<tab_container name="Object Info Tabs" tab_max_width="60" tab_min_width="30" width="288">
<panel label="Comum" name="General">
@@ -353,7 +324,6 @@
<combo_box.item label="Toróide" name="Torus"/>
<combo_box.item label="Plano" name="Plane"/>
<combo_box.item label="Cilindro" name="Cylinder"/>
- <combo_box.item label="Mesh" name="Mesh"/>
</combo_box>
</panel>
<panel label="Recursos" name="Features">
@@ -405,7 +375,7 @@
</combo_box>
<spinner label="Gravidade" name="Physics Gravity"/>
<spinner label="Fricção" name="Physics Friction"/>
- <spinner label="Densidade" name="Physics Density"/>
+ <spinner label="Densidade em 100 kg/m^3" name="Physics Density"/>
<spinner label="Restituição" name="Physics Restitution"/>
</panel>
<panel label="Textura" name="Texture">
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
index cb9b3c8c0d..4f01600d9f 100644
--- a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
@@ -12,6 +12,114 @@
<string name="new_voice_effect">
(Novo!)
</string>
+ <string name="effect_Arena">
+ Arena
+ </string>
+ <string name="effect_Beast">
+ Fera
+ </string>
+ <string name="effect_Buff">
+ Entusiasmado
+ </string>
+ <string name="effect_Buzz">
+ Zumbido
+ </string>
+ <string name="effect_Camille">
+ Camille
+ </string>
+ <string name="effect_Creepy">
+ Assustador
+ </string>
+ <string name="effect_CreepyBot">
+ RobôAssustador
+ </string>
+ <string name="effect_Cyber">
+ Cyber
+ </string>
+ <string name="effect_DeepBot">
+ RobôVozGrossa
+ </string>
+ <string name="effect_Demon">
+ Demônio
+ </string>
+ <string name="effect_Flirty">
+ Paquerador
+ </string>
+ <string name="effect_Foxy">
+ Sensual
+ </string>
+ <string name="effect_Halloween_2010_Bonus">
+ Bônus_Halloween_2010
+ </string>
+ <string name="effect_Helium">
+ Hélio
+ </string>
+ <string name="effect_Husky">
+ Rouco
+ </string>
+ <string name="effect_Intercom">
+ Interfone
+ </string>
+ <string name="effect_Macho">
+ Macho
+ </string>
+ <string name="effect_Micro">
+ Micro
+ </string>
+ <string name="effect_Mini">
+ Mini
+ </string>
+ <string name="effect_Nano">
+ Nano
+ </string>
+ <string name="effect_Nightmare">
+ Pesadelo
+ </string>
+ <string name="effect_PopBot">
+ RobôPop
+ </string>
+ <string name="effect_Rachel">
+ Rachel
+ </string>
+ <string name="effect_Radio">
+ Rádio
+ </string>
+ <string name="effect_Robot">
+ Robô
+ </string>
+ <string name="effect_Roxanne">
+ Roxanne
+ </string>
+ <string name="effect_Sabrina">
+ Sabrina
+ </string>
+ <string name="effect_Samantha">
+ Samantha
+ </string>
+ <string name="effect_Sexy">
+ Sexy
+ </string>
+ <string name="effect_Shorty">
+ Baixinho
+ </string>
+ <string name="effect_Sneaky">
+ Sorrateiro
+ </string>
+ <string name="effect_Stallion">
+ Garanhão
+ </string>
+ <string name="effect_Sultry">
+ Ardente
+ </string>
+ <string name="effect_Thunder">
+ Trovão
+ </string>
+ <string name="effect_Vixen">
+ Maliciosa
+ </string>
+ <string name="effect_WhinyBot">
+ RobôReclamão
+ </string>
<text name="preview_text">
Visualizar
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_water.xml b/indra/newview/skins/default/xui/pt/floater_water.xml
deleted file mode 100644
index b2a06f4ff2..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_water.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Water Floater" title="EDITOR DE ÃGUA AVANÇADO">
- <text name="KeyFramePresetsText" width="175">
- Pré-configurações da Ãgua:
- </text>
- <combo_box left_delta="175" name="WaterPresetsCombo" width="150"/>
- <button label="Novo" label_selected="Novo" name="WaterNewPreset"/>
- <button label="Salvar" label_selected="Salvar" name="WaterSavePreset"/>
- <button label="Deletar" label_selected="Deletar" name="WaterDeletePreset"/>
- <tab_container name="Water Tabs">
- <panel label="DEFINIÇÕES" name="Settings">
- <text name="BHText">
- Cor da névoa da Ãgua
- </text>
- <button label="?" name="WaterFogColorHelp"/>
- <color_swatch label="" name="WaterFogColor" tool_tip="Selecionar a cor"/>
- <text name="WaterFogDensText">
- Expoente da Densidade de névoa
- </text>
- <button label="?" left="209" name="WaterFogDensityHelp"/>
- <text name="WaterUnderWaterFogModText">
- Modificador da névoa Subaquática
- </text>
- <button label="?" left="209" name="WaterUnderWaterFogModHelp"/>
- <text name="BDensText">
- Escala da Marola de Reflexão
- </text>
- <button label="?" left="415" name="WaterNormalScaleHelp"/>
- <text name="BHText2">
- 1
- </text>
- <text name="BHText3">
- 2
- </text>
- <text name="BHText4">
- 3
- </text>
- <text name="HDText">
- Escala de Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelScaleHelp"/>
- <text name="FresnelOffsetText">
- Deslocamento de Fresnel
- </text>
- <button label="?" left="415" name="WaterFresnelOffsetHelp"/>
- <text name="DensMultText">
- Refratar a Escala para Cima
- </text>
- <button label="?" left="640" name="WaterScaleAboveHelp"/>
- <text name="WaterScaleBelowText">
- Refratar a Escala para Baixo
- </text>
- <button label="?" left="640" name="WaterScaleBelowHelp"/>
- <text name="MaxAltText">
- Multiplicador de Difusão
- </text>
- <button label="?" left="640" name="WaterBlurMultiplierHelp"/>
- </panel>
- <panel label="IMAGEM" name="Waves">
- <text name="BHText">
- Direção da Onda Maior
- </text>
- <button label="?" left="170" name="WaterWave1Help"/>
- <text name="WaterWave1DirXText">
- X
- </text>
- <text name="WaterWave1DirYText">
- Y
- </text>
- <text name="BHText2">
- Direção da Onda Pequena
- </text>
- <button label="?" left="170" name="WaterWave2Help"/>
- <text name="WaterWave2DirXText">
- X
- </text>
- <text name="WaterWave2DirYText">
- Y
- </text>
- <text name="BHText3">
- Mapa Normal
- </text>
- <button label="?" name="WaterNormalMapHelp"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml b/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
deleted file mode 100644
index ec459bbb26..0000000000
--- a/indra/newview/skins/default/xui/pt/floater_windlight_options.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="WindLight floater" title="EDITOR DE CÉU AVANÇADO">
- <text name="KeyFramePresetsText" width="140">
- Pré-definições de Céu:
- </text>
- <combo_box left_delta="140" name="WLPresetsCombo"/>
- <button label="Novo" label_selected="Novo" name="WLNewPreset"/>
- <button label="Salvar" label_selected="Salvar" left_delta="72" name="WLSavePreset"/>
- <button label="Deletar" label_selected="Deletar" left_delta="72" name="WLDeletePreset"/>
- <button label="Editor de Ciclos do Dia" label_selected="Editor de Ciclos do Dia" left_delta="84" name="WLDayCycleMenuButton" width="150"/>
- <tab_container name="WindLight Tabs">
- <panel label="ATMOSFERA" name="Atmosphere">
- <text name="BHText">
- Horizonte Azul
- </text>
- <button label="?" name="WLBlueHorizonHelp"/>
- <text name="BHText2">
- R
- </text>
- <text name="BHText3">
- G
- </text>
- <text name="BHText4">
- B
- </text>
- <text name="BHText5">
- I
- </text>
- <text name="BDensText">
- Horizonte da Neblina
- </text>
- <button label="?" name="WLHazeHorizonHelp"/>
- <text name="BDensText2">
- Densidade de Azul
- </text>
- <button label="?" name="WLBlueDensityHelp"/>
- <text name="BHText6">
- R
- </text>
- <text name="BHText7">
- G
- </text>
- <text name="BHText8">
- B
- </text>
- <text name="BHText9">
- I
- </text>
- <text name="HDText">
- Densidade da Neblina
- </text>
- <button label="?" name="WLHazeDensityHelp"/>
- <text name="DensMultText">
- Multiplicador de Densidade
- </text>
- <button label="?" left="635" name="WLDensityMultHelp"/>
- <text name="WLDistanceMultText">
- Multiplicador de Distância
- </text>
- <button label="?" left="635" name="WLDistanceMultHelp"/>
- <text name="MaxAltText">
- Altitude Máxima
- </text>
- <button label="?" left="635" name="WLMaxAltitudeHelp"/>
- </panel>
- <panel label="ILUMINAÇÃO" name="Lighting">
- <text name="SLCText">
- Cor do Sol/Lua
- </text>
- <button label="?" name="WLSunlightColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="TODText">
- Posição do Sol/Lua
- </text>
- <button label="?" name="WLTimeOfDayHelp"/>
- <text name="WLAmbientText">
- Ambiente
- </text>
- <button label="?" name="WLAmbientHelp"/>
- <text name="BHText5">
- R
- </text>
- <text name="BHText6">
- G
- </text>
- <text name="BHText7">
- B
- </text>
- <text name="BHText8">
- I
- </text>
- <text name="WLEastAngleText">
- Ângulo Leste
- </text>
- <button label="?" name="WLEastAngleHelp"/>
- <text name="SunGlowText">
- Brilho do Sol
- </text>
- <button label="?" name="WLSunGlowHelp"/>
- <slider label="Foco" name="WLGlowB"/>
- <slider label="Tamanho" name="WLGlowR"/>
- <text name="SceneGammaText">
- Gamma da Cena
- </text>
- <button label="?" name="WLSceneGammaHelp"/>
- <text name="WLStarText">
- Brilho da Estrela
- </text>
- <button label="?" name="WLStarBrightnessHelp"/>
- </panel>
- <panel label="NUVENS" name="Clouds">
- <text name="WLCloudColorText">
- Cor da Nuvem
- </text>
- <button label="?" name="WLCloudColorHelp"/>
- <text name="BHText">
- R
- </text>
- <text name="BHText2">
- G
- </text>
- <text name="BHText3">
- B
- </text>
- <text name="BHText4">
- I
- </text>
- <text name="WLCloudColorText2">
- Densidade/ XY da Nuvem
- </text>
- <button label="?" name="WLCloudDensityHelp"/>
- <text name="BHText5">
- X
- </text>
- <text name="BHText6">
- Y
- </text>
- <text name="BHText7">
- D
- </text>
- <text name="WLCloudCoverageText">
- Cobertura da Nuvem
- </text>
- <button label="?" name="WLCloudCoverageHelp"/>
- <text name="WLCloudScaleText">
- Escala da Nuvem
- </text>
- <button label="?" name="WLCloudScaleHelp"/>
- <text font="SansSerifSmall" name="WLCloudDetailText">
- Detalhe da Nuvem (XY/Densidade)
- </text>
- <button label="?" left="421" name="WLCloudDetailHelp"/>
- <text name="BHText8">
- X
- </text>
- <text name="BHText9">
- Y
- </text>
- <text name="BHText10">
- D
- </text>
- <text name="WLCloudScrollXText">
- Rolagem X da Nuvem
- </text>
- <button label="?" name="WLCloudScrollXHelp"/>
- <check_box label="Travar" name="WLCloudLockX"/>
- <text name="WLCloudScrollYText">
- Rolagem Y da Nuvem
- </text>
- <button label="?" name="WLCloudScrollYHelp"/>
- <check_box label="Travar" name="WLCloudLockY"/>
- <check_box label="Desenhar Nuvens Clássicas" name="DrawClassicClouds"/>
- <button label="?" left="645" name="WLClassicCloudsHelp"/>
- </panel>
- </tab_container>
-</floater>
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
index 3dff3d7c8a..1d3fa48fb3 100644
--- a/indra/newview/skins/default/xui/pt/menu_login.xml
+++ b/indra/newview/skins/default/xui/pt/menu_login.xml
@@ -17,7 +17,7 @@
<menu_item_call label="Mostrar TOS" name="TOS"/>
<menu_item_call label="Mostrar mensagem crítica" name="Critical"/>
<menu_item_call label="Teste de mídia do navegador" name="Web Browser Test"/>
- <menu_item_call label="Teste de conteúdo web" name="Web Content Floater Test"/>
+ <menu_item_call label="Test de Bugs de Conteúdo Web" name="Web Content Floater Debug Test"/>
<menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/>
<menu_item_call label="Exibir painel de notificações" name="Show Notifications Console"/>
</menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
index 228ce46a31..0d32d58de4 100644
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_group_plus">
+<toggleable_menu name="menu_group_plus">
<menu_item_check label="Ordenar por conversas mais recentes" name="sort_by_recent_speakers"/>
<menu_item_check label="Ordenar por nome" name="sort_name"/>
<menu_item_check label="Ordenar por distância" name="sort_distance"/>
<menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
+ <menu_item_check label="Ver Mapa" name="view_map"/>
<menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 4213db7440..ea54afed5e 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -31,6 +31,7 @@
<menu_item_call label="Meus grupos" name="My Groups"/>
<menu_item_check label="Bate-papo local" name="Nearby Chat"/>
<menu_item_call label="Pessoas por perto" name="Active Speakers"/>
+ <menu_item_check label="Voz por perto" name="Nearby Voice"/>
</menu>
<menu label="Mundo" name="World">
<menu_item_check label="Mini Mapa" name="Mini-Map"/>
@@ -63,8 +64,24 @@
<menu_item_call label="Meio-dia" name="Noon"/>
<menu_item_call label="Pôr-do-Sol" name="Sunset"/>
<menu_item_call label="Meia-noite" name="Midnight"/>
- <menu_item_call label="Horário da propriedade" name="Revert to Region Default"/>
- <menu_item_call label="Editor de ambiente" name="Environment Editor"/>
+ </menu>
+ <menu label="Editor de ambientes" name="Enviroment Editor">
+ <menu_item_call label="Configurações de ambiente..." name="Enviroment Settings"/>
+ <menu label="Pré-configurações de água" name="Water Presets">
+ <menu_item_call label="Nova pré-configuração..." name="new_water_preset"/>
+ <menu_item_call label="Editar pré-configuração..." name="edit_water_preset"/>
+ <menu_item_call label="Excluir pré-configuração..." name="delete_water_preset"/>
+ </menu>
+ <menu label="Pré-configurações de céu" name="Sky Presets">
+ <menu_item_call label="Nova pré-configuração..." name="new_sky_preset"/>
+ <menu_item_call label="Editar pré-configuração..." name="edit_sky_preset"/>
+ <menu_item_call label="Excluir pré-configuração..." name="delete_sky_preset"/>
+ </menu>
+ <menu label="Pré-configurações de dias" name="Day Presets">
+ <menu_item_call label="Nova pré-configuração..." name="new_day_preset"/>
+ <menu_item_call label="Editar pré-configuração..." name="edit_day_preset"/>
+ <menu_item_call label="Excluir pré-configuração..." name="delete_day_preset"/>
+ </menu>
</menu>
</menu>
<menu label="Construir" name="BuildTools">
@@ -142,7 +159,6 @@
<menu_item_check label="Disable Camera Constraints" name="Disable Camera Distance"/>
<menu_item_check label="Foto de alta resolução" name="HighResSnapshot"/>
<menu_item_check label="Compactar fotos para HD" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="Compactar fotos para HD" name="CompressSnapshotsToDisk"/>
<menu label="Ferramentas de desempenho" name="Performance Tools">
<menu_item_call label="Medidor de lag" name="Lag Meter"/>
<menu_item_check label="Barra de estatísticas" name="Statistics Bar"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
index 7b6ce4d87e..75dca703cb 100644
--- a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear Wearing">
+<toggleable_menu name="Gear Wearing">
<menu_item_call label="Editar look" name="edit"/>
<menu_item_call label="Tirar" name="takeoff"/>
-</menu>
+ <menu_item_call label="Copiar lista do look para a área de transferência" name="copy"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 56a33f51e8..22de7edfdd 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -1541,6 +1541,10 @@ Por favor volte mais tarde.
<button name="Cancel" text="Cancelar"/>
</form>
</notification>
+ <notification name="TooManyTeleportOffers">
+ Você fez [OFFERS] ofertas de teletransporte, porém o seu limite é [LIMIT].
+ <usetemplate name="okbutton" yestext="OK"/>
+ </notification>
<notification name="OfferTeleportFromGod">
Convocar residente à sua localização com poderes de deus?
<form name="form">
@@ -1962,6 +1966,10 @@ Você gostaria de deixar o modo Ocupado antes de completar esta transação?
Tem certeza de que quer apagar todo o histórico de viagens, web e buscas?
<usetemplate name="okcancelbuttons" notext="Não" yestext="OK"/>
</notification>
+ <notification name="ConfirmClearCache">
+ Tem certeza que deseja apagar o cache do visualizador?
+ <usetemplate name="okcancelbuttons" notext="Cancelar" yestext="OK"/>
+ </notification>
<notification name="ConfirmClearCookies">
Você tem certeza de que deseja limpar os cookies?
<usetemplate name="okcancelbuttons" notext="Cancelar" yestext="Sim"/>
@@ -1987,48 +1995,30 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
Você deseja substituir a pré-configuração salva?
<usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
- <notification name="WLDeletePresetAlert">
- Você deseja apagar [SKY]?
- <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
- </notification>
<notification name="WLNoEditDefault">
Você não pode editar ou excluir um padrão predefinido.
</notification>
<notification name="WLMissingSky">
Este arquivo de ciclo de dia se refere a um arquivo de céu faltando: [SKY].
</notification>
- <notification name="PPSaveEffectAlert">
- Existe efeito de Pós-Processamento. Você deseja substituí-lo?
- <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
+ <notification name="WLRegionApplyFail">
+ As configurações não podem ser aplicadas à região. Talvez sair e votlar à região resolva. Motivo: [FAIL_REASON]
</notification>
- <notification name="NewSkyPreset">
- Me dê o nome para o novo céu.
- <form name="form">
- <input name="message">
- Novo padrão
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
- </notification>
- <notification name="ExistsSkyPresetAlert">
- Este padrão já existe!
+ <notification name="EnvCannotDeleteLastDayCycleKey">
+ Impossível excluir a última chave do ciclo pois um ciclo não pode ficar vazio. Modifique a última chave em vez de tentar apagá-la, depois crie uma chave nova.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="NewWaterPreset">
- Dê o nome para o novo padrão de água.
- <form name="form">
- <input name="message">
- Nova Apresentação
- </input>
- <button name="OK" text="OK"/>
- <button name="Cancel" text="Cancelar"/>
- </form>
+ <notification name="DayCycleTooManyKeyframes">
+ Não é possível adicionar mais chaves de quadro a este ciclo. O máximo de chaves de quadro para ciclos de dia de [SCOPE] é [MAX].
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="ExistsWaterPresetAlert">
- Este padrão já existe!
+ <notification name="EnvUpdateRate">
+ Cada configuração de ambiente só pode ser atualizada a cada [WAIT] segundos. Aguarde pelo menos isso e tente novamente.
+ <usetemplate name="okbutton" yestext="OK"/>
</notification>
- <notification name="WaterNoEditDefault">
- Você não pode editar ou apagar um padrão predefinido.
+ <notification name="PPSaveEffectAlert">
+ Existe efeito de Pós-Processamento. Você deseja substituí-lo?
+ <usetemplate name="okcancelbuttons" notext="Não" yestext="Sim"/>
</notification>
<notification name="ChatterBoxSessionStartError">
Não foi possível iniciar uma nova sessão bate-papo com [RECIPIENT].
@@ -2057,13 +2047,14 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
<usetemplate ignoretext="Vestir as roupas que eu criar enquanto edito minha aparência" name="okcancelignore" notext="Não" yestext="Sim"/>
</notification>
<notification name="NotAgeVerified">
- Ãrea restrita a residentes com idade comprovada. Deseja ir ao site do [SECOND_LIFE] para comprovar sua idade?
+ Você deve ter no mínimo 18 anos para acessar conteúdo e áreas adultas no Second Life. Visite nossa página de verificação de idade para confirmar que você tem mais de 18 anos.
+Isso abrirá o seu navegador.
[_URL]
<url name="url" option="0">
- https://secondlife.com/account/verification.php?lang=pt
+ https://secondlife.com/my/account/verification.php
</url>
- <usetemplate ignoretext="Ainda não comprovei minha idade" name="okcancelignore" notext="Não" yestext="Sim"/>
+ <usetemplate ignoretext="Ainda não comprovei minha idade" name="okcancelignore" notext="Cancelar" yestext="Ir para verificação de idade"/>
</notification>
<notification name="Cannot enter parcel: no payment info on file">
Ãrea restrita a residentes que já cadastraram seus dados de pagamento Deseja ir ao site do [SECOND_LIFE] para cuidar disso?
@@ -2316,6 +2307,9 @@ Logo, não é possível voar aqui.
<notification name="NoBuild">
Esta área desativou a opção de construir. Não é possível construir ou fazer rez de objetos nesta área.
</notification>
+ <notification name="SeeAvatars">
+ Este terreno oculta os avatares e bate-papo de outro terreno. Não é possível ver residentes fora do terreno e vice-versa. O bate-papo por texto no canal 0 também está bloqueado.
+ </notification>
<notification name="ScriptsStopped">
Um administrador não permitiu scripts temporariamente nesta região.
</notification>
@@ -2407,7 +2401,7 @@ Por favor, tente novamente em alguns instantes.
</notification>
<notification name="ObjectGiveItem">
Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], lhe deu este(a) [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Segure"/>
<button name="Discard" text="Descarte"/>
@@ -2740,7 +2734,15 @@ O botão será exibido quando houver espaço suficente.
Selecione os residentes com quem compartilhar.
</notification>
<notification name="MeshUploadError">
- [LABEL] não foi carregado: [MESSAGE] [IDENTIFIER] [INVALIDITY_IDENTIFIER]
+ [LABEL] não foi carregado: [MESSAGE] [IDENTIFIER]
+
+Mais detalhes no log.
+ </notification>
+ <notification name="MeshUploadPermError">
+ Erro ao solicitar permissões de upload de mesh.
+ </notification>
+ <notification name="RegionCapabilityRequestError">
+ Não foi possível obter o recurso &apos;[CAPABILITY]&apos; da região.
</notification>
<notification name="ShareItemsConfirmation">
Tem certeza de que quer compartilhar os itens abaixo?
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
index 432affcf09..5eb9987e71 100644
--- a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
+++ b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
@@ -29,7 +29,7 @@
<layout_panel name="layout_panel1">
<button label="Salvar destaque" name="save_changes_btn"/>
</layout_panel>
- <layout_panel name="layout_panel1">
+ <layout_panel name="layout_panel2">
<button label="Cancelar" name="cancel_btn"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_list.xml b/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
index 2b2e7c1dbf..2d74e092a4 100644
--- a/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
+++ b/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
@@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Outfits">
+ <accordion name="outfits_accordion">
+ <no_matched_tabs_text name="no_matched_outfits_msg" value="Não encontrou o que procura? Tente fazer uma [secondlife:///app/search/people/[SEARCH_TERM] Busca]."/>
+ <no_visible_tabs_text name="no_outfits_msg" value="Você ainda não tem nenhum look. Tente encontrar um na [secondlife:///app/search/groups Busca]."/>
+ </accordion>
<panel name="bottom_panel">
- <button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
+ <menu_button name="options_gear_btn" tool_tip="Mostrar opções adicionais"/>
<button name="trash_btn" tool_tip="Excluir o look selecionado"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index aece30738b..f3af15b991 100644
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -66,16 +66,16 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
index 7fc07483c0..8abe579702 100644
--- a/indra/newview/skins/default/xui/pt/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
@@ -64,6 +64,8 @@
<text name="scripts_value" value="Ligado"/>
<text name="damage_label" value="Dano:"/>
<text name="damage_value" value="Desligado"/>
+ <text name="see_avatars_label" value="Ver avatares:"/>
+ <text name="see_avatars_value" value="Desligar"/>
<button label="Sobre o terreno" name="about_land_btn"/>
</panel>
</accordion_tab>
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
index 828ef3e469..69f0baf65f 100644
--- a/indra/newview/skins/default/xui/pt/panel_places.xml
+++ b/indra/newview/skins/default/xui/pt/panel_places.xml
@@ -24,7 +24,7 @@
<menu_button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>
</layout_panel>
</layout_stack>
- <layout_stack name="bottom_bar_ls3">
+ <layout_stack name="bottom_bar_profile_ls">
<layout_panel name="profile_btn_lp">
<button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
index bbe7e15ba2..c72928fc35 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
@@ -3,6 +3,19 @@
<panel.string name="aspect_ratio_text">
[NUM]:[DEN]
</panel.string>
+ <text name="Cache:">
+ Cache:
+ </text>
+ <spinner label="Cache (64 - 9984 MB)" name="cachesizespinner"/>
+ <text name="text_box5">
+ MB
+ </text>
+ <button label="Limpar cache" label_selected="Limpar cache" name="clear_cache"/>
+ <text name="Cache location">
+ Localização do cache:
+ </text>
+ <button label="Navegar" label_selected="Navegar" name="set_cache"/>
+ <button label="Localização padrão" label_selected="Localização padrão" name="default_cache_location"/>
<text name="UI Size:">
Interface:
</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
index 4164147e5c..d910a7b812 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
@@ -19,6 +19,7 @@
<check_box label="Ativado" name="enable_voice_check"/>
<check_box label="Autorizar auto-play de mídias" name="media_auto_play_btn" tool_tip="Marque esta opção para auto-executar mídias, se elas quiserem" value="true"/>
<check_box label="Tocar mídia anexada em outros avatares" name="media_show_on_others_btn" tool_tip="Desmarque esta opção para ocultar mídias anexadas em avatares por perto" value="true"/>
+ <check_box label="Tocar áudio de gestos" name="gesture_audio_play_btn" tool_tip="Selecione para ouvir o áudio de gestos" value="verdadeiro"/>
<text name="voice_chat_settings">
Configuração de bate-papo de voz
</text>
@@ -35,28 +36,5 @@
<button label="Definir chave" name="set_voice_hotkey_button"/>
<button name="set_voice_middlemouse_button" tool_tip="Redefinir como botão do meio do mouse"/>
<button label="Controles de entrada/saída" name="device_settings_btn" width="180"/>
- <panel label="Configuração dos dispositivo" name="device_settings_panel">
- <panel.string name="default_text">
- Padrão
- </panel.string>
- <panel.string name="default system device">
- Dispositivo padrão do sistema
- </panel.string>
- <panel.string name="no device">
- Nenhum
- </panel.string>
- <text name="Input">
- Entrada
- </text>
- <text name="My volume label">
- Meu volume:
- </text>
- <slider_bar initial_value="1.0" name="mic_volume_slider" tool_tip="Mude o volume usando o controle deslizante"/>
- <text name="wait_text">
- Aguarde
- </text>
- <text name="Output">
- Saída
- </text>
- </panel>
+ <panel label="Configuração dos dispositivo" name="device_settings_panel"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_environment.xml b/indra/newview/skins/default/xui/pt/panel_region_environment.xml
new file mode 100644
index 0000000000..79eedebe5f
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_region_environment.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel label="Ambiente" name="panel_env_info">
+ <text name="water_settings_title">
+ Selecione as configurações de Ãgua e céu / Ciclo dos dias que todos os visitantes à sua região verão. Mais informações
+ </text>
+ <radio_group name="region_settings_radio_group">
+ <radio_item label="Usar o padrão do Second Life" name="use_sl_default_settings"/>
+ <radio_item label="Usar as seguintes configurações" name="use_my_settings"/>
+ </radio_group>
+ <panel name="user_environment_settings">
+ <text name="water_settings_title">
+ Configuração de água
+ </text>
+ <combo_box name="water_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <text name="sky_dayc_settings_title">
+ Ciclo céu / dia
+ </text>
+ <radio_group name="sky_dayc_settings_radio_group">
+ <radio_item label="Céu fixo" name="my_sky_settings"/>
+ <radio_item label="Ciclo dia" name="my_dayc_settings"/>
+ </radio_group>
+ <combo_box name="sky_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ <combo_box name="dayc_settings_preset_combo">
+ <combo_box.item label="-Selecione uma pré-configuração-" name="item0"/>
+ </combo_box>
+ </panel>
+ <button label="Aplicar" name="apply_btn"/>
+ <button label="Cancelar" name="cancel_btn"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
index b9b0e9d90f..74330a8946 100644
--- a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
@@ -7,21 +7,56 @@
nenhum
</text>
<spinner label="Altura da água" name="water_height_spin"/>
- <button label="?" name="water_height_help"/>
- <spinner label="Limite do aumento do &#10;terreno" name="terrain_raise_spin"/>
- <button label="?" name="terrain_raise_help"/>
- <spinner label="Limite mais baixo do &#10;terreno" name="terrain_lower_spin" bottom_delta="-34"/>
- <button label="?" name="terrain_lower_help"/>
- <check_box label="Usar o sol da propriedade" name="use_estate_sun_check"/>
- <button label="?" name="use_estate_sun_help"/>
- <check_box label="Sol fixo" name="fixed_sun_check"/>
- <button label="?" name="fixed_sun_help"/>
- <slider label="Fase" name="sun_hour_slider"/>
- <button label="Aplicar" name="apply_btn"/>
+ <spinner label="Limite do aumento do
+terreno" name="terrain_raise_spin"/>
+ <spinner bottom_delta="-34" label="Limite mais baixo do
+terreno" name="terrain_lower_spin"/>
+ <text name="detail_texture_text">
+ Texturas de terreno (exige arquivos .tga 512x512, 24 bit)
+ </text>
+ <text name="height_text_lbl">
+ 1 (Baixo)
+ </text>
+ <text name="height_text_lbl2">
+ 2
+ </text>
+ <text name="height_text_lbl3">
+ 3
+ </text>
+ <text name="height_text_lbl4">
+ 4 (Alto)
+ </text>
+ <text name="height_text_lbl5">
+ Intervalos de elevação de textura
+ </text>
+ <text name="height_text_lbl10">
+ Os valores representam o intervalo de mistura das texturas acima.
+ </text>
+ <text name="height_text_lbl11">
+ Em metros, o valor BAIXO é a altura MÃXIMA da Textura 1, e HIGH é a altura MÃNIMA da Textura 4.
+ </text>
+ <text name="height_text_lbl6">
+ Noroeste
+ </text>
+ <text name="height_text_lbl7">
+ Nordeste
+ </text>
+ <spinner label="Baixo" name="height_start_spin_1"/>
+ <spinner label="Baixo" name="height_start_spin_3"/>
+ <spinner label="Alto" name="height_range_spin_1"/>
+ <spinner label="Alto" name="height_range_spin_3"/>
+ <text name="height_text_lbl8">
+ Sudoeste
+ </text>
+ <text name="height_text_lbl9">
+ Sudeste
+ </text>
+ <spinner label="Baixo" name="height_start_spin_0"/>
+ <spinner label="Baixo" name="height_start_spin_2"/>
+ <spinner label="Alto" name="height_range_spin_0"/>
+ <spinner label="Alto" name="height_range_spin_2"/>
<button label="Download de terreno RAW..." name="download_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
- <button label="?" name="download_raw_help"/>
<button label="Upload de terreno RAW..." name="upload_raw_btn" tool_tip="Não disponível aos gerentes, somente aos proprietários."/>
- <button label="?" name="upload_raw_help"/>
- <button width="170" label="Nivelar o terreno" name="bake_terrain_btn" tool_tip="Ajustar terreno atual como o ponto médio para os limites de aumento/decréscimo"/>
- <button left="190" label="?" name="bake_terrain_help"/>
+ <button label="Nivelar o terreno" name="bake_terrain_btn" tool_tip="Ajustar terreno atual como o ponto médio para os limites de aumento/decréscimo" width="170"/>
+ <button label="Aplicar" name="apply_btn"/>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
index fb612ca19b..66db89f48f 100644
--- a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
+++ b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
@@ -3,9 +3,18 @@
<panel.string name="default_text">
Padrão
</panel.string>
+ <string name="name_no_device">
+ Nenhum
+ </string>
+ <string name="name_default_system_device">
+ Dispositivo padrão do sistema
+ </string>
<text name="Input">
Entrada
</text>
+ <text name="Output">
+ Saída
+ </text>
<text name="My volume label">
Meu volume:
</text>
@@ -13,7 +22,4 @@
<text name="wait_text">
Aguarde
</text>
- <text name="Output">
- Saída
- </text>
</panel>
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index 11ac6c106a..988e7c7076 100644
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -1,6 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="Coisas" name="objects panel">
<panel label="" name="sidepanel__inventory_panel">
+ <layout_stack name="inventory_layout_stack">
+ <layout_panel name="inbox_layout_panel">
+ <panel label="" name="marketplace_inbox">
+ <string name="InboxLabelWithArg">
+ Itens recebidos ([NUM])
+ </string>
+ <string name="InboxLabelNoArg">
+ Itens recebidos
+ </string>
+ <button label="Itens recebidos" name="inbox_btn"/>
+ <text name="inbox_fresh_new_count">
+ [NUM] novos
+ </text>
+ <panel tool_tip="Drag and drop items to your inventory to manage and use them">
+ <text name="inbox_inventory_placeholder">
+ Compras do marketplace serão entregues aqui.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel name="outbox_layout_panel">
+ <panel label="" name="marketplace_outbox">
+ <button label="Caixa de saída de comerciante" name="outbox_btn"/>
+ <button label="" name="outbox_sync_btn" tool_tip="Enviar para minha vitrine no Marketplace"/>
+ <panel tool_tip="Drag and drop items here to prepare them for sale on your storefront">
+ <text name="outbox_inventory_placeholder">
+ Abra uma conta de comerciante para usar este recurso.
+ </text>
+ </panel>
+ </panel>
+ </layout_panel>
+ </layout_stack>
<panel name="button_panel">
<layout_stack name="button_panel_ls">
<layout_panel name="info_btn_lp">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index c5268966c1..2f3b438564 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -25,6 +25,9 @@
<string name="StartupInitializingVFS">
Iniciando VFS...
</string>
+ <string name="StartupRequireDriverUpdate">
+ Falha na inicialização dos gráficos. Atualize seu driver gráfico!
+ </string>
<string name="ProgressRestoring">
Restaurando...
</string>
@@ -79,6 +82,12 @@
<string name="LoginQuicktimeOK">
O QuickTime foi inicializado com sucesso.
</string>
+ <string name="LoginRequestSeedCapGrant">
+ Solicitando recursos da região...
+ </string>
+ <string name="LoginRetrySeedCapGrant">
+ Solicitando recursos da região, tentativa [NUMBER]...
+ </string>
<string name="LoginWaitingForRegionHandshake">
Aguardando handshake com a região...
</string>
@@ -1132,6 +1141,12 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="InventoryNoTexture">
Você não possui uma cópia desta textura no seu inventário
</string>
+ <string name="InventoryInboxNoItems">
+ Compras do marketplace serão entregues aqui.
+ </string>
+ <string name="InventoryOutboxNoItems">
+ Arraste seus itens aqui para preparar sua listagem na sua vitrine do Marketplace.
+ </string>
<string name="no_transfer" value="(não transferível)"/>
<string name="no_modify" value="(não modificável)"/>
<string name="no_copy" value="(não copiável)"/>
@@ -1172,9 +1187,6 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="InvFolder My Inventory">
Meu inventário
</string>
- <string name="InvFolder My Favorites">
- Meus favoritos
- </string>
<string name="InvFolder Library">
Biblioteca
</string>
@@ -1233,10 +1245,10 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
Gestos
</string>
<string name="InvFolder Favorite">
- Favoritos
+ Meus favoritos
</string>
<string name="InvFolder favorite">
- Favoritos
+ Meus favoritos
</string>
<string name="InvFolder Current Outfit">
Look atual
@@ -1259,6 +1271,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="InvFolder All">
Tudo
</string>
+ <string name="no_attachments">
+ Nenhum anexo vestido
+ </string>
<string name="Buy">
Comprar
</string>
@@ -1568,6 +1583,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
</string>
<string name="SummaryForTheWeek" value="Resumo para esta semana, com início em "/>
<string name="NextStipendDay" value=". Próximo dia de salário é "/>
+ <string name="GroupPlanningDate">
+ [mthnum,datetime,utc]/[day,datetime,utc]/[year,datetime,utc]
+ </string>
<string name="GroupIndividualShare" value="Grupo Divisão individualI"/>
<string name="GroupColumn" value="Grupo"/>
<string name="Balance">
@@ -1594,6 +1612,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="IMTeen">
adolescente
</string>
+ <string name="Anyone">
+ qualquer um
+ </string>
<string name="RegionInfoError">
erro
</string>
@@ -1801,7 +1822,7 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="RegionNoCovenantOtherOwner">
Não foi definido um contrato para essa Região. O terreno nesta região está sendo vendido pelo Proprietário, não pela Linden Lab. Favor contatar o Proprietário da região para detalhes de venda.
</string>
- <string name="covenant_last_modified" value="Última modificação:"/>
+ <string name="covenant_last_modified" value="Última modificação: "/>
<string name="none_text" value="(nenhum)"/>
<string name="never_text" value="(nunca)"/>
<string name="GroupOwned">
@@ -1810,6 +1831,12 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="Public">
Público
</string>
+ <string name="LocalSettings">
+ Configurações locais
+ </string>
+ <string name="RegionSettings">
+ Configurações da região
+ </string>
<string name="ClassifiedClicksTxt">
Cliques: [TELEPORT] teletransporte, [MAP] mapa, [PROFILE] perfil
</string>
@@ -1882,6 +1909,9 @@ Titulares de contas gratuitas não poderão acessar o Second Life para acomodar
<string name="GroupMoneyDebits">
Débitos
</string>
+ <string name="GroupMoneyDate">
+ [weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
+ </string>
<string name="ViewerObjectContents">
Conteúdo
</string>
@@ -3597,6 +3627,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="LocationCtrlGeneralIconTooltip">
Região em geral
</string>
+ <string name="LocationCtrlSeeAVsTooltip">
+ Avatar visíveis e bate-papo permitido fora deste terreno
+ </string>
<string name="UpdaterWindowTitle">
[APP_NAME] Atualização
</string>
@@ -4013,6 +4046,87 @@ Denunciar abuso
<string name="Female - Wow">
Wow - feminino
</string>
+ <string name="/bow">
+ /reverência
+ </string>
+ <string name="/clap">
+ /palmas
+ </string>
+ <string name="/count">
+ /contar
+ </string>
+ <string name="/extinguish">
+ /apagar
+ </string>
+ <string name="/kmb">
+ /dane_se
+ </string>
+ <string name="/muscle">
+ /músculos
+ </string>
+ <string name="/no">
+ /não
+ </string>
+ <string name="/no!">
+ /não!
+ </string>
+ <string name="/paper">
+ /papel
+ </string>
+ <string name="/pointme">
+ /apontar_eu
+ </string>
+ <string name="/pointyou">
+ /apontar_você
+ </string>
+ <string name="/rock">
+ /pedra
+ </string>
+ <string name="/scissor">
+ /tesoura
+ </string>
+ <string name="/smoke">
+ /fumar
+ </string>
+ <string name="/stretch">
+ /alongar
+ </string>
+ <string name="/whistle">
+ /assobiar
+ </string>
+ <string name="/yes">
+ /sim
+ </string>
+ <string name="/yes!">
+ /sim!
+ </string>
+ <string name="afk">
+ ldt
+ </string>
+ <string name="dance1">
+ dança1
+ </string>
+ <string name="dance2">
+ dança2
+ </string>
+ <string name="dance3">
+ dança3
+ </string>
+ <string name="dance4">
+ dança4
+ </string>
+ <string name="dance5">
+ dança5
+ </string>
+ <string name="dance6">
+ dança6
+ </string>
+ <string name="dance7">
+ dança7
+ </string>
+ <string name="dance8">
+ dança8
+ </string>
<string name="AvatarBirthDateFormat">
[mthnum,datetime,slt]/[day,datetime,slt]/[year,datetime,slt]
</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml
index bee940ddc1..0ac85d399e 100644
--- a/indra/newview/skins/default/xui/zh/floater_about.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about.xml
@@ -35,7 +35,7 @@ Qt Webkit 版本: [QT_WEBKIT_VERSION]
(無)
</floater.string>
<floater.string name="AboutTraffic">
- Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+ å°åŒ…æå¤±ï¼š[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
</floater.string>
<tab_container name="about_tab">
<panel label="資訊" name="support_panel">
@@ -77,7 +77,7 @@ google-perftools Copyright (c) 2005, Google Inc.
All rights reserved. See licenses.txt for details.
-Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
+語音èŠå¤©éŸ³é »ç·¨ç¢¼ï¼šPolycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C)
</text_editor>
</panel>
</tab_container>
diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml
index efd8909e67..e59a23fda0 100644
--- a/indra/newview/skins/default/xui/zh/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml
@@ -30,7 +30,7 @@
Anyone
</panel.string>
<panel.string name="area_text">
- Area
+ å€åŸŸ
</panel.string>
<panel.string name="area_size_text">
[AREA] m²
@@ -42,7 +42,7 @@
You must approve your purchase to modify this land.
</panel.string>
<panel.string name="group_owned_text">
- ï¼ˆç¤¾åœ˜æ‰€æ“æœ‰ï¼‰
+ ï¼ˆç¾¤çµ„æ‰€æ“æœ‰ï¼‰
</panel.string>
<panel.string name="profile_text">
檔案
@@ -81,13 +81,13 @@
分級:
</text>
<text name="ContentRatingText">
- æˆäºº
+ 完全æˆäºº
</text>
<text name="Owner:">
æ“æœ‰è€…:
</text>
<text name="Group:">
- 社團:
+ 群組:
</text>
<button label="設定" name="Set..."/>
<check_box label="Allow Deed to Group" name="check deed" tool_tip="A group officer can deed this land to the group, so it will be supported by the group&apos;s land allocation."/>
@@ -133,7 +133,7 @@
</text>
<button label="購買土地" name="Buy Land..."/>
<button label="腳本資訊" name="Scripts..."/>
- <button label="Buy For Group" name="Buy For Group..."/>
+ <button label="為群組購買" name="Buy For Group..."/>
<button label="購買通行權" name="Buy Pass..." tool_tip="A pass gives you temporary access to this land."/>
<button label="放棄土地" name="Abandon Land..."/>
<button label="Reclaim Land" name="Reclaim Land..."/>
@@ -186,7 +186,7 @@
分級:
</text>
<text name="region_maturity_text">
- æˆäºº
+ 完全æˆäºº
</text>
<text name="resellable_lbl">
Resale:
@@ -238,7 +238,7 @@
<button label="顯示" label_selected="顯示" name="ShowOwner"/>
<button label="退回" name="ReturnOwner..." tool_tip="Return objects to their owners."/>
<text name="Set to group:">
- Set to group:
+ 設定群組:
</text>
<text name="group_objects_text">
[COUNT]
@@ -286,10 +286,10 @@ Only large parcels can be listed in search.
This option is disabled because you cannot modify this parcel&apos;s options.
</panel.string>
<panel.string name="mature_check_mature">
- Moderate Content
+ é©åº¦æˆäººå…§å®¹
</panel.string>
<panel.string name="mature_check_adult">
- æˆäººå…§å®¹
+ 完全æˆäººå…§å®¹
</panel.string>
<panel.string name="mature_check_mature_tooltip">
Your parcel information or content is considered moderate.
@@ -315,17 +315,17 @@ Only large parcels can be listed in search.
建造:
</text>
<check_box label="任何人" name="edit objects check"/>
- <check_box label="社團" name="edit group objects check"/>
+ <check_box label="群組" name="edit group objects check"/>
<text name="allow_label3">
物件進入:
</text>
<check_box label="任何人" name="all object entry check"/>
- <check_box label="社團" name="group object entry check"/>
+ <check_box label="群組" name="group object entry check"/>
<text name="allow_label4">
執行腳本:
</text>
<check_box label="任何人" name="check other scripts"/>
- <check_box label="社團" name="check group scripts"/>
+ <check_box label="群組" name="check group scripts"/>
<text name="land_options_label">
土地é¸é …:
</text>
@@ -335,7 +335,7 @@ Only large parcels can be listed in search.
<combo_box name="land category with adult">
<combo_box.item label="任何類別" name="item0"/>
<combo_box.item label="Linden Location" name="item1"/>
- <combo_box.item label="æˆäºº" name="item2"/>
+ <combo_box.item label="完全æˆäºº" name="item2"/>
<combo_box.item label="Arts &amp; Culture" name="item3"/>
<combo_box.item label="Business" name="item4"/>
<combo_box.item label="Educational" name="item5"/>
@@ -363,7 +363,7 @@ Only large parcels can be listed in search.
<combo_box.item label="Rental" name="item13"/>
<combo_box.item label="Other" name="item12"/>
</combo_box>
- <check_box label="Moderate Content" name="MatureCheck" tool_tip=" "/>
+ <check_box label="é©åº¦æˆäººå…§å®¹" name="MatureCheck" tool_tip=" "/>
<text name="Snapshot:">
快照:
</text>
@@ -416,12 +416,12 @@ Only large parcels can be listed in search.
</text>
<check_box label="Loop" name="media_loop" tool_tip="Play media in a loop. When the media has finished playing, it will restart from the beginning."/>
</panel>
- <panel label="SOUND" name="land_audio_panel">
+ <panel label="è²éŸ³" name="land_audio_panel">
<text name="MusicURL:">
- Music URL:
+ 音樂 URL:
</text>
<text name="Sound:">
- Sound:
+ è²éŸ³ï¼š
</text>
<check_box label="Restrict gesture and object sounds to this parcel" name="check sound local"/>
<text name="Voice settings:">
@@ -449,11 +449,11 @@ Only large parcels can be listed in search.
</text>
<check_box label="Payment Information on File [ESTATE_PAYMENT_LIMIT]" name="limit_payment" tool_tip="Ban unidentified Residents."/>
<check_box label="年齡驗證 [ESTATE_AGE_LIMIT]" name="limit_age_verified" tool_tip="Ban Residents who have not verified their age. See the [SUPPORT_SITE] for more information."/>
- <check_box label="Allow Group Access: [GROUP]" name="GroupCheck" tool_tip="Set group in the General tab."/>
- <check_box label="Sell passes to:" name="PassCheck" tool_tip="Allows temporary access to this parcel"/>
+ <check_box label="å…許出入的群組:[GROUP]" name="GroupCheck" tool_tip="Set group in the General tab."/>
+ <check_box label="出售通行權給:" name="PassCheck" tool_tip="å…許暫時出入這個地段"/>
<combo_box name="pass_combo">
<combo_box.item label="Anyone" name="Anyone"/>
- <combo_box.item label="社團" name="Group"/>
+ <combo_box.item label="群組" name="Group"/>
</combo_box>
<spinner label="Price in L$:" name="PriceSpin"/>
<spinner label="Hours of access:" name="HoursSpin"/>
@@ -462,11 +462,11 @@ Only large parcels can be listed in search.
Allowed Residents
</text>
<name_list name="AccessList" tool_tip="([LISTED] listed, [MAX] max)"/>
- <button label="Add" name="add_allowed"/>
- <button label="Remove" label_selected="Remove" name="remove_allowed"/>
+ <button label="添加" name="add_allowed"/>
+ <button label="移除" label_selected="移除" name="remove_allowed"/>
</panel>
<panel name="Banned_layout_panel">
- <text label="Ban" name="BanCheck">
+ <text label="ç¦æ­¢" name="BanCheck">
被å°éŽ–çš„å±…æ°‘
</text>
<name_list name="BannedList" tool_tip="([LISTED] listed, [MAX] max)"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_animation_preview.xml b/indra/newview/skins/default/xui/zh/floater_animation_preview.xml
index b5d65119f7..baf68ffce6 100644
--- a/indra/newview/skins/default/xui/zh/floater_animation_preview.xml
+++ b/indra/newview/skins/default/xui/zh/floater_animation_preview.xml
@@ -35,7 +35,7 @@ Maximum animation length is [MAX_LENGTH] seconds.
Cannot get JOINT name.
</floater.string>
<floater.string name="E_ST_NO_OFFSET">
- Cannot find OFFSET.
+ 無法尋找ä½ç§»ã€‚
</floater.string>
<floater.string name="E_ST_NO_CHANNELS">
Cannot find CHANNELS.
diff --git a/indra/newview/skins/default/xui/zh/floater_auction.xml b/indra/newview/skins/default/xui/zh/floater_auction.xml
index eb1c9e55dc..b1862bc582 100644
--- a/indra/newview/skins/default/xui/zh/floater_auction.xml
+++ b/indra/newview/skins/default/xui/zh/floater_auction.xml
@@ -6,6 +6,6 @@
<check_box initial_value="true" label="Include yellow selection fence" name="fence_check"/>
<button label="Snapshot" label_selected="Snapshot" name="snapshot_btn"/>
<button label="Sell to Anyone" label_selected="Sell to Anyone" name="sell_to_anyone_btn"/>
- <button label="Clear Settings" label_selected="Clear Settings" name="reset_parcel_btn"/>
+ <button label="清除設定" label_selected="清除設定" name="reset_parcel_btn"/>
<button label="Start Auction" label_selected="Start Auction" name="start_auction_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
index 27a4199f8c..7e2d74c728 100644
--- a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
+++ b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
@@ -36,7 +36,7 @@
</panel>
<panel label="接近我" name="NearMePanel">
<text name="InstructSelectResident">
- 鏿“‡ä¸€ä½é™„近的人:
+ 鏿“‡ä¸€å€‹é™„近的人:
</text>
<slider label="範åœ" name="near_me_range"/>
<text name="meters">
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
index b1dc081f04..36dae7c798 100644
--- a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
+++ b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
@@ -17,31 +17,31 @@ Textures
<panel name="scroll_content_panel">
<texture_picker label="é ­é«®" name="hair-baked"/>
<texture_picker label="é ­é«®" name="hair_grain"/>
- <texture_picker label="Hair Alpha" name="hair_alpha"/>
+ <texture_picker label="é ­é«®åŠé€æ˜Ž" name="hair_alpha"/>
<texture_picker label="頭部" name="head-baked"/>
- <texture_picker label="Makeup" name="head_bodypaint"/>
- <texture_picker label="Head Alpha" name="head_alpha"/>
+ <texture_picker label="化å¦" name="head_bodypaint"/>
+ <texture_picker label="頭部åŠé€æ˜Ž" name="head_alpha"/>
<texture_picker label="頭部刺é’" name="head_tattoo"/>
<texture_picker label="眼ç›" name="eyes-baked"/>
<texture_picker label="眼ç›" name="eyes_iris"/>
- <texture_picker label="Eyes Alpha" name="eyes_alpha"/>
- <texture_picker label="Upper Body" name="upper-baked"/>
- <texture_picker label="Upper BodyPaint" name="upper_bodypaint"/>
+ <texture_picker label="眼ç›åŠé€æ˜Ž" name="eyes_alpha"/>
+ <texture_picker label="上åŠèº«åŠé€æ˜Ž" name="upper-baked"/>
+ <texture_picker label="上åŠèº«èº«é«”部ä½" name="upper_bodypaint"/>
<texture_picker label="å…§è¡£" name="upper_undershirt"/>
<texture_picker label="手套" name="upper_gloves"/>
<texture_picker label="襯衫" name="upper_shirt"/>
- <texture_picker label="Upper Jacket" name="upper_jacket"/>
- <texture_picker label="Upper Alpha" name="upper_alpha"/>
- <texture_picker label="Upper Tattoo" name="upper_tattoo"/>
- <texture_picker label="Lower Body" name="lower-baked"/>
- <texture_picker label="Lower BodyPaint" name="lower_bodypaint"/>
+ <texture_picker label="上åŠèº«å¤¾å…‹" name="upper_jacket"/>
+ <texture_picker label="上åŠèº«åŠé€æ˜Ž" name="upper_alpha"/>
+ <texture_picker label="上åŠèº«åˆºé’" name="upper_tattoo"/>
+ <texture_picker label="下åŠèº«" name="lower-baked"/>
+ <texture_picker label="下åŠèº«èº«é«”部ä½" name="lower_bodypaint"/>
<texture_picker label="內褲" name="lower_underpants"/>
<texture_picker label="襪å­" name="lower_socks"/>
<texture_picker label="éž‹å­" name="lower_shoes"/>
<texture_picker label="褲å­" name="lower_pants"/>
<texture_picker label="夾克" name="lower_jacket"/>
- <texture_picker label="Lower Alpha" name="lower_alpha"/>
- <texture_picker label="Lower Tattoo" name="lower_tattoo"/>
+ <texture_picker label="下åŠèº«åŠé€æ˜Ž" name="lower_alpha"/>
+ <texture_picker label="下åŠèº«åˆºé’" name="lower_tattoo"/>
<texture_picker label="裙å­" name="skirt-baked"/>
<texture_picker label="裙å­" name="skirt"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
index 629b0d17d5..660710fb7b 100644
--- a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
+++ b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floaterbulkperms" title="EDIT CONTENT PERMISSIONS">
+<floater name="floaterbulkperms" title="編輯內容物權é™">
<floater.string name="nothing_to_modify_text">
- Selection contains no editable contents.
+ 鏿“‡æœªåŒ…å«å¯ç·¨è¼¯çš„內容物。
</floater.string>
<floater.string name="status_text">
- Setting permissions on [NAME]
+ è¨­å®šæ¬Šé™æ–¼ [NAME]
</floater.string>
<floater.string name="start_text">
- Starting permission change requests...
+ 開始進行權é™è®Šæ›´è¦æ±‚...
</floater.string>
<floater.string name="done_text">
- Finished permission change requests.
+ 權é™è®Šæ›´è¦æ±‚已完æˆã€‚
</floater.string>
<icon name="icon_animation" tool_tip="動作"/>
<icon name="icon_bodypart" tool_tip="身體部ä½"/>
@@ -24,10 +24,10 @@
<button label="√ 全部" name="check_all"/>
<button label="清除" label_selected="無" name="check_none"/>
<text name="newperms">
- New Content Permissions
+ 新內容物權é™
</text>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="share_with_group"/>
<text name="AnyoneLabel">
@@ -39,7 +39,7 @@
</text>
<check_box label="修改" name="next_owner_modify"/>
<check_box label="覆製" name="next_owner_copy"/>
- <check_box initial_value="true" label="轉移" name="next_owner_transfer" tool_tip="Next owner can give away or resell this object"/>
+ <check_box initial_value="true" label="轉移" name="next_owner_transfer" tool_tip="ä¸‹ä¸€å€‹æ“æœ‰è€…能é€å‡ºæˆ–轉售這個物件"/>
<button label="確定" name="apply"/>
<button label="å–æ¶ˆ" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_bumps.xml b/indra/newview/skins/default/xui/zh/floater_bumps.xml
index d2b7494b08..64c11af953 100644
--- a/indra/newview/skins/default/xui/zh/floater_bumps.xml
+++ b/indra/newview/skins/default/xui/zh/floater_bumps.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="floater_bumps" title="BUMPS, PUSHES &amp; HITS">
<floater.string name="none_detected">
- None detected
+ æœªåµæ¸¬åˆ°
</floater.string>
<floater.string name="bump">
- [TIME] [NAME] bumped you
+ [TIME] [NAME] 碰撞你
</floater.string>
<floater.string name="llpushobject">
- [TIME] [NAME] pushed you with a script
+ [TIME] [NAME] 以腳本推撞你
</floater.string>
<floater.string name="selected_object_collide">
- [TIME] [NAME] hit you with an object
+ [TIME] [NAME] 以物件擊中你
</floater.string>
<floater.string name="scripted_object_collide">
- [TIME] [NAME] hit you with a scripted object
+ [TIME] [NAME] 以腳本物件擊中你
</floater.string>
<floater.string name="physical_object_collide">
- [TIME] [NAME] hit you with a physical object
+ [TIME] [NAME] 以物ç†ç‰©ä»¶æ“Šä¸­ä½ 
</floater.string>
<floater.string name="timeStr">
[[hour,datetime,slt]:[min,datetime,slt]]
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
index d8e9fb0ecc..f187a1ab40 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
@@ -7,7 +7,7 @@
ä½ éœ€è¦æ›´å¤š L$
</text>
<text name="contacting">
- Contacting LindeX...
+ è¯æŽ¥åˆ° LindeX 中...
</text>
<text name="info_buying">
購買 L$
@@ -28,7 +28,7 @@
1234
</line_editor>
<text name="buying_label">
- For the price
+ 以此價格
</text>
<text name="currency_est">
approx. [LOCALAMOUNT]
@@ -60,7 +60,7 @@
<button label="ç«‹å³è³¼è²·" name="buy_btn"/>
<button label="å–æ¶ˆ" name="cancel_btn"/>
<text name="info_cannot_buy">
- Unable to Buy
+ 無法購買
</text>
- <button label="Continue to the Web" name="error_web"/>
+ <button label="繼續到網é " name="error_web"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_land.xml b/indra/newview/skins/default/xui/zh/floater_buy_land.xml
index 34401c11d0..c4a5d174ef 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_land.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_land.xml
@@ -16,7 +16,7 @@
You do not have permission to buy land for your active group.
</floater.string>
<floater.string name="no_land_selected">
- No land selected.
+ ç„¡åœŸåœ°è¢«é¸æ“‡ã€‚
</floater.string>
<floater.string name="multiple_parcels_selected">
Multiple different parcels selected.
@@ -32,7 +32,7 @@ Try selecting a smaller area.
The group already owns the parcel.
</floater.string>
<floater.string name="you_already_own">
- You already own the parcel.
+ ä½ å·²ç¶“æ“æœ‰é€™å€‹åœ°æ®µã€‚
</floater.string>
<floater.string name="set_to_sell_to_other">
The selected parcel is set to sell to another party.
@@ -47,7 +47,7 @@ Try selecting a smaller area.
<floater.string name="processing">
Processing your purchase...
-(This may take a minute or two.)
+(éŽç¨‹é€™å°‡æœƒèŠ±è²»ä¸€åˆ°å…©åˆ†é˜ï¼‰
</floater.string>
<floater.string name="fetching_error">
There has been an error while fetching land buying information.
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_object.xml b/indra/newview/skins/default/xui/zh/floater_buy_object.xml
index ef8bc183a4..507e482766 100644
--- a/indra/newview/skins/default/xui/zh/floater_buy_object.xml
+++ b/indra/newview/skins/default/xui/zh/floater_buy_object.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="contents" title="BUY COPY OF OBJECT">
+<floater name="contents" title="購買物件副本">
<floater.string name="title_buy_text">
購買
</floater.string>
diff --git a/indra/newview/skins/default/xui/zh/floater_camera.xml b/indra/newview/skins/default/xui/zh/floater_camera.xml
index 65d04583f5..f4db20684c 100644
--- a/indra/newview/skins/default/xui/zh/floater_camera.xml
+++ b/indra/newview/skins/default/xui/zh/floater_camera.xml
@@ -10,56 +10,56 @@
Move Camera Up and Down, Left and Right
</floater.string>
<floater.string name="camera_modes_title">
- Camera modes
+ æ”影機模å¼
</floater.string>
<floater.string name="pan_mode_title">
- Orbit Zoom Pan
+ 環繞縮放平移
</floater.string>
<floater.string name="presets_mode_title">
- Preset Views
+ é è¨­è¦–è§’
</floater.string>
<floater.string name="free_mode_title">
- View Object
+ 視角物件
</floater.string>
<panel name="controls">
<panel name="preset_views_list">
<panel_camera_item name="front_view">
<panel_camera_item.text name="front_view_text">
- Front View
+ å‰è¦–視角
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="group_view">
<panel_camera_item.text name="side_view_text">
- Side View
+ å´è¦–視角
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view">
<panel_camera_item.text name="rear_view_text">
- Rear View
+ 後視視角
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="camera_modes_list">
<panel_camera_item name="object_view">
<panel_camera_item.text name="object_view_text">
- Object View
+ 物件視角
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="mouselook_view">
<panel_camera_item.text name="mouselook_view_text">
- Mouselook View
+ 第一人稱視角
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="zoom">
<joystick_rotate name="cam_rotate_stick" tool_tip="Orbit camera around focus"/>
<slider_bar name="zoom_slider" tool_tip="Zoom camera toward focus"/>
- <joystick_track name="cam_track_stick" tool_tip="Move camera up and down, left and right"/>
+ <joystick_track name="cam_track_stick" tool_tip="移動æ”影機上下左å³"/>
</panel>
</panel>
<panel name="buttons">
- <button label="" name="presets_btn" tool_tip="Preset Views"/>
+ <button label="" name="presets_btn" tool_tip="é è¨­è¦–è§’"/>
<button label="" name="pan_btn" tool_tip="Orbit Zoom Pan"/>
- <button label="" name="avatarview_btn" tool_tip="Camera modes"/>
+ <button label="" name="avatarview_btn" tool_tip="æ”影機模å¼"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_choose_group.xml b/indra/newview/skins/default/xui/zh/floater_choose_group.xml
index 9968565bf2..9977bfc828 100644
--- a/indra/newview/skins/default/xui/zh/floater_choose_group.xml
+++ b/indra/newview/skins/default/xui/zh/floater_choose_group.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="groups" title="社團">
+<floater name="groups" title="群組">
<text name="groupdesc">
- 鏿“‡ä¸€å€‹ç¤¾åœ˜ï¼š
+ 鏿“‡ä¸€å€‹ç¾¤çµ„:
</text>
<button label="確定" label_selected="確定" name="OK"/>
<button label="å–æ¶ˆ" label_selected="å–æ¶ˆ" name="Cancel"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_display_name.xml b/indra/newview/skins/default/xui/zh/floater_display_name.xml
index e12fc21166..39abfe0b8b 100644
--- a/indra/newview/skins/default/xui/zh/floater_display_name.xml
+++ b/indra/newview/skins/default/xui/zh/floater_display_name.xml
@@ -13,6 +13,6 @@
Type your new name again to confirm:
</text>
<button label="儲存" name="save_btn" tool_tip="Save your new Display Name"/>
- <button label="Reset" name="reset_btn" tool_tip="Make Display Name the same as Username"/>
+ <button label="é‡è¨­" name="reset_btn" tool_tip="Make Display Name the same as Username"/>
<button label="å–æ¶ˆ" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_env_settings.xml b/indra/newview/skins/default/xui/zh/floater_env_settings.xml
index 65a97f0cff..534ee7f0d0 100644
--- a/indra/newview/skins/default/xui/zh/floater_env_settings.xml
+++ b/indra/newview/skins/default/xui/zh/floater_env_settings.xml
@@ -13,13 +13,13 @@
Cloud Cover
</text>
<text name="EnvWaterColorText">
- Water Color
+ 水色
</text>
<color_swatch name="EnvWaterColor" tool_tip="Click to open color picker"/>
<text name="EnvWaterFogText">
- Water Fog
+ 水霧
</text>
<button label="Use Estate Time" name="EnvUseEstateTimeButton"/>
- <button label="Advanced Sky" name="EnvAdvancedSkyButton"/>
- <button label="Advanced Water" name="EnvAdvancedWaterButton"/>
+ <button label="進階天空" name="EnvAdvancedSkyButton"/>
+ <button label="進階水文" name="EnvAdvancedWaterButton"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_gesture.xml b/indra/newview/skins/default/xui/zh/floater_gesture.xml
index 651a976774..a809cf085c 100644
--- a/indra/newview/skins/default/xui/zh/floater_gesture.xml
+++ b/indra/newview/skins/default/xui/zh/floater_gesture.xml
@@ -4,7 +4,7 @@
載入中...
</floater.string>
<floater.string name="playing">
- (Playing)
+ (播放中)
</floater.string>
<floater.string name="copy_name">
Copy of [COPY_NAME]
diff --git a/indra/newview/skins/default/xui/zh/floater_god_tools.xml b/indra/newview/skins/default/xui/zh/floater_god_tools.xml
index fbe89ab2a6..448113bf74 100644
--- a/indra/newview/skins/default/xui/zh/floater_god_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_god_tools.xml
@@ -2,25 +2,25 @@
<floater name="godtools floater" title="神之工具">
<tab_container name="GodTools Tabs">
<panel label="網格" name="grid">
- <button label="Flush This Region&apos;s Map Visibility Caches" label_selected="Flush This Region&apos;s Map Visibility Caches" name="Flush This Region&apos;s Map Visibility Caches"/>
+ <button label="刷新這個地å€çš„地圖å¯è¦–å¿«å–" label_selected="刷新這個地å€çš„地圖å¯è¦–å¿«å–" name="Flush This Region&apos;s Map Visibility Caches"/>
</panel>
<panel label="地å€" name="region">
<text name="Region Name:">
地å€å稱:
</text>
<check_box label="Prelude" name="check prelude" tool_tip="Set this to make the region a prelude"/>
- <check_box label="Fixed Sun" name="check fixed sun" tool_tip="Fix the sun position (like in Region/Estate &gt; Terrain"/>
+ <check_box label="固定太陽" name="check fixed sun" tool_tip="Fix the sun position (like in Region/Estate &gt; Terrain"/>
<check_box label="Reset Home On Teleport" name="check reset home" tool_tip="When Resident teleports out, reset their home to the destination position."/>
<check_box label="Visible" name="check visible" tool_tip="Set this to make the region visible to non-gods"/>
- <check_box label="Damage" name="check damage" tool_tip="Set this to enable damage in this region"/>
- <check_box label="Block Traffic Tracking" name="block dwell" tool_tip="Set this to make the region not compute traffic"/>
- <check_box label="Block Terraform" name="block terraform" tool_tip="Set this to disallow people terraforming their land"/>
- <check_box label="Sandbox" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/>
- <button label="Bake Terrain" label_selected="Bake Terrain" name="Bake Terrain" tool_tip="Save the current terrain as default"/>
+ <check_box label="傷害" name="check damage" tool_tip="Set this to enable damage in this region"/>
+ <check_box label="阻止æµé‡è¿½è¹¤" name="block dwell" tool_tip="Set this to make the region not compute traffic"/>
+ <check_box label="阻止變形" name="block terraform" tool_tip="Set this to disallow people terraforming their land"/>
+ <check_box label="沙盒" name="is sandbox" tool_tip="Toggle whether this is a sandbox region"/>
+ <button label="Bake Terrain" label_selected="Bake Terrain" name="Bake Terrain" tool_tip="儲存目å‰çš„地形為é è¨­"/>
<button label="Revert Terrain" label_selected="Revert Terrain" name="Revert Terrain" tool_tip="Replace the current terrain with default"/>
<button label="Swap Terrain" label_selected="Swap Terrain" name="Swap Terrain" tool_tip="Swap current terrain with default"/>
<text name="estate id">
- Estate ID:
+ 領地 ID:
</text>
<text name="parent id">
Parent ID:
@@ -40,14 +40,14 @@
<text name="land cost text">
L$ per m²:
</text>
- <button label="Refresh" label_selected="Refresh" name="Refresh" tool_tip="Click here to refresh the above information"/>
- <button label="套用" label_selected="套用" name="Apply" tool_tip="Click here to apply any changes from above"/>
+ <button label="釿–°æ•´ç†" label_selected="釿–°æ•´ç†" name="Refresh" tool_tip="Click here to refresh the above information"/>
+ <button label="套用" label_selected="套用" name="Apply" tool_tip="點擊此處以接å—套用上述變更"/>
<button label="鏿“‡åœ°å€" label_selected="鏿“‡åœ°å€" name="Select Region" tool_tip="Select the whole region with the land tool"/>
<button label="ç«‹å³è‡ªå‹•儲存" label_selected="ç«‹å³è‡ªå‹•儲存" name="Autosave now" tool_tip="Save gzipped state to autosave directory"/>
</panel>
<panel label="物件" name="objects">
<panel.string name="no_target">
- (no target)
+ (無目標)
</panel.string>
<text name="Region Name:">
地å€å稱:
@@ -61,7 +61,7 @@
<button label="套用" label_selected="套用" name="Apply" tool_tip="Click here to apply any changes from above"/>
<button label="Set Target" label_selected="Set Target" name="Set Target" tool_tip="Set the target avatar for object deletion"/>
<text name="target_avatar_name">
- (no target)
+ (無目標)
</text>
<button label="Delete Target&apos;s Scripted Objects On Others Land" label_selected="Delete Target&apos;s Scripted Objects On Others Land" name="Delete Target&apos;s Scripted Objects On Others Land" tool_tip="Delete all scripted objects owned by the target on land not owned by the target. (no copy) objects will be returned."/>
<button label="Delete Target&apos;s Scripted Objects On *Any* Land" label_selected="Delete Target&apos;s Scripted Objects On *Any* Land" name="Delete Target&apos;s Scripted Objects On *Any* Land" tool_tip="Delete all scripted objects owned by the target in this region. (no copy) objects will be returned."/>
diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
index fcd702b16d..a41be7ef9a 100644
--- a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
@@ -46,7 +46,7 @@
</text>
<check_box label="覆製" name="CheckEveryoneCopy"/>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="CheckShareWithGroup"/>
<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
index a4ede92ab1..370ab32b9f 100644
--- a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Inventory Finder" title="最近_æ”¶ç´å€_物å“">
<check_box label="動作" name="check_animation"/>
- <check_box label="Calling Cards" name="check_calling_card"/>
+ <check_box label="å片" name="check_calling_card"/>
<check_box label="æœè£" name="check_clothing"/>
<check_box label="å§¿å‹¢" name="check_gesture"/>
<check_box label="地標" name="check_landmark"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
index 3d9d391a21..1d172f63e1 100644
--- a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
+++ b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="land holdings floater" title="MY LAND">
+<floater name="land holdings floater" title="我的土地">
<floater.string name="area_string">
[AREA] m²
</floater.string>
<scroll_list name="parcel list">
<scroll_list.columns label="地段" name="name"/>
<scroll_list.columns label="地å€" name="location"/>
- <scroll_list.columns label="Type" name="type"/>
- <scroll_list.columns label="Area" name="area"/>
+ <scroll_list.columns label="類型" name="type"/>
+ <scroll_list.columns label="å€åŸŸ" name="area"/>
</scroll_list>
- <button label="瞬間傳é€" label_selected="瞬間傳é€" name="Teleport" tool_tip="Teleport to the center of this land."/>
- <button label="地圖" label_selected="地圖" name="Show on Map" tool_tip="Show this land on the world map"/>
+ <button label="瞬間傳é€" label_selected="瞬間傳é€" name="Teleport" tool_tip="瞬間傳é€åˆ°é€™åœŸåœ°çš„中央。"/>
+ <button label="地圖" label_selected="地圖" name="Show on Map" tool_tip="將這塊土地顯示在世界地圖上。"/>
<text name="contrib_label">
Contributions to your groups:
</text>
<scroll_list name="grant list">
- <scroll_list.columns label="社團" name="group"/>
- <scroll_list.columns label="Area" name="area"/>
+ <scroll_list.columns label="群組" name="group"/>
+ <scroll_list.columns label="å€åŸŸ" name="area"/>
</scroll_list>
<text name="allowed_label">
Allowed land holdings at current payment plan:
diff --git a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
index e6f6e32352..fe61c312ed 100644
--- a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
+++ b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
@@ -9,7 +9,7 @@
<floater.string name="Title">
腳本:[NAME]
</floater.string>
- <button label="Reset" label_selected="Reset" name="Reset"/>
- <check_box initial_value="true" label="Running" name="running"/>
+ <button label="é‡è¨­" label_selected="é‡è¨­" name="Reset"/>
+ <check_box initial_value="true" label="執行中" name="running"/>
<check_box initial_value="true" label="Mono" name="mono"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_moveview.xml b/indra/newview/skins/default/xui/zh/floater_moveview.xml
index 3e44f458e7..e1155bdf34 100644
--- a/indra/newview/skins/default/xui/zh/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/zh/floater_moveview.xml
@@ -43,33 +43,33 @@
å‘下飛(按下 C éµï¼‰
</string>
<string name="jump_tooltip">
- Jump (press E)
+ è·³èºï¼ˆæŒ‰ä¸‹ E éµï¼‰
</string>
<string name="crouch_tooltip">
- Crouch (press C)
+ 蹲下(按下 C éµï¼‰
</string>
<string name="walk_title">
- Walk
+ 行走
</string>
<string name="run_title">
- Run
+ è·‘æ­¥
</string>
<string name="fly_title">
飛行
</string>
<panel name="panel_actions">
- <button name="turn left btn" tool_tip="Turn left (press Left Arrow or A)"/>
- <joystick_slide name="move left btn" tool_tip="Walk left (press Shift + Left Arrow or A)"/>
- <button name="turn right btn" tool_tip="Turn right (press Right Arrow or D)"/>
- <joystick_slide name="move right btn" tool_tip="Walk right (press Shift + Right Arrow or D)"/>
- <joystick_turn name="forward btn" tool_tip="Walk forward (press up arrow or W)"/>
- <joystick_turn name="backward btn" tool_tip="Walk backward (press down arrow or S)"/>
+ <button name="turn left btn" tool_tip="左轉(按下左方å‘鵿ˆ–按 A éµï¼‰"/>
+ <joystick_slide name="move left btn" tool_tip="å‘左走(按下 Shift 加左方å‘鵿ˆ–按 A éµï¼‰"/>
+ <button name="turn right btn" tool_tip="å³è½‰ï¼ˆæŒ‰ä¸‹å³æ–¹å‘鵿ˆ–按 D éµï¼‰"/>
+ <joystick_slide name="move right btn" tool_tip="å‘å³èµ°ï¼ˆæŒ‰ä¸‹ Shift åŠ å³æ–¹å‘鵿ˆ–按 D éµï¼‰"/>
+ <joystick_turn name="forward btn" tool_tip="å‘å‰èµ°ï¼ˆæŒ‰å‘上方å‘鵿ˆ–按 W éµï¼‰"/>
+ <joystick_turn name="backward btn" tool_tip="å‘後退(按å‘下方å‘鵿ˆ–按 S éµï¼‰"/>
<button name="move up btn" tool_tip="å‘上飛(按下 E éµï¼‰"/>
<button name="move down btn" tool_tip="å‘下飛(按下 C 建)"/>
</panel>
<panel name="panel_modes">
- <button label="" name="mode_walk_btn" tool_tip="Walking mode"/>
- <button label="" name="mode_run_btn" tool_tip="Running mode"/>
+ <button label="" name="mode_walk_btn" tool_tip="行走模å¼"/>
+ <button label="" name="mode_run_btn" tool_tip="跑步模å¼"/>
<button label="" name="mode_fly_btn" tool_tip="飛行模å¼"/>
</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_mute_object.xml b/indra/newview/skins/default/xui/zh/floater_mute_object.xml
index 7d76f4de08..606e061395 100644
--- a/indra/newview/skins/default/xui/zh/floater_mute_object.xml
+++ b/indra/newview/skins/default/xui/zh/floater_mute_object.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="block by name" title="BLOCK OBJECT BY NAME">
+<floater name="block by name" title="ä¾å稱å°éŽ–ç‰©ä»¶">
<text name="message">
Block an object:
</text>
<line_editor name="object_name">
- Object name
+ 物件å稱
</line_editor>
<text name="note">
* Only blocks object text, not sounds
diff --git a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
index e33183a0dc..a557e1c2e3 100644
--- a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
+++ b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
@@ -6,6 +6,6 @@
å„²å­˜æˆ‘æ­£åœ¨ç©¿çš„ç‚ºæ–°è£æ‰®ï¼š
</text>
<line_editor name="name ed">
- [DESC] (new)
+ [DESC] (新)
</line_editor>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_pay.xml b/indra/newview/skins/default/xui/zh/floater_pay.xml
index b4841df0ff..0a823cd82e 100644
--- a/indra/newview/skins/default/xui/zh/floater_pay.xml
+++ b/indra/newview/skins/default/xui/zh/floater_pay.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money">
<string name="payee_group">
- 支付社團
+ 支付群組
</string>
<string name="payee_resident">
支付居民
diff --git a/indra/newview/skins/default/xui/zh/floater_pay_object.xml b/indra/newview/skins/default/xui/zh/floater_pay_object.xml
index 2a2aec93b9..39259524d7 100644
--- a/indra/newview/skins/default/xui/zh/floater_pay_object.xml
+++ b/indra/newview/skins/default/xui/zh/floater_pay_object.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Give Money">
<string name="payee_group">
- 支付社團
+ 支付群組
</string>
<string name="payee_resident">
支付居民
diff --git a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
index 31b8133a18..498848ee56 100644
--- a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
+++ b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="perm prefs" title="é è¨­ä¸Šå‚³æ¬Šé™">
<panel label="權é™" name="permissions">
- <check_box label="與社團分享" name="share_with_group"/>
+ <check_box label="與群組分享" name="share_with_group"/>
<check_box label="å…許任何人覆製" name="everyone_copy"/>
<text name="NextOwnerLabel">
ä¸‹ä¸€å€‹æ“æœ‰è€…å¯ä»¥ï¼š
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
index 0649ecb791..ad49370423 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
@@ -40,7 +40,7 @@
<combo_box label="ç„¡" name="modifier_combo"/>
<combo_box label="ç„¡" name="key_combo"/>
<text name="library_label">
- Library:
+ 資æºåº«ï¼š
</text>
<scroll_list name="library_list">
<scroll_list.rows name="action_animation" value="動作"/>
@@ -48,7 +48,7 @@
<scroll_list.rows name="action_chat" value="èŠå¤©"/>
<scroll_list.rows name="action_wait" value="等待"/>
</scroll_list>
- <button label="Add &gt;&gt;" name="add_btn"/>
+ <button label="添加 &gt;&gt;" name="add_btn"/>
<text name="steps_label">
Steps:
</text>
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
index 3c2f913a6d..9447939801 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview notecard" title="記事å¡ï¼š">
<floater.string name="no_object">
- Unable to find object containing this notecard.
+ 未發ç¾ç‰©ä»¶åŒ…嫿­¤è¨˜äº‹å¡ã€‚
</floater.string>
<floater.string name="not_allowed">
- You do not have permission to view this notecard.
+ 你並沒有權é™åŽ»å¯Ÿçœ‹æ­¤è¨˜äº‹å¡ã€‚
</floater.string>
<floater.string name="Title">
記事å¡ï¼š [NAME]
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_sound.xml b/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
index d9854a85b6..d99d13669f 100644
--- a/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
+++ b/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview_sound">
<floater.string name="Title">
- Sound: [NAME]
+ è²éŸ³ï¼š [NAME]
</floater.string>
<text name="desc txt">
æè¿°ï¼š
diff --git a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
index acec1efcb0..5f0ffea182 100644
--- a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
+++ b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
@@ -5,7 +5,7 @@
Remember, Classified fees are non-refundable.
</text>
- <spinner label="價格: L$" name="price_for_listing" tool_tip="Price for listing." value="50"/>
- <button label="Publish" name="publish_btn"/>
+ <spinner label="價格: L$" name="price_for_listing" tool_tip="刊登費用。" value="50"/>
+ <button label="發布" name="publish_btn"/>
<button label="å–æ¶ˆ" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml b/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
index b16a3bd9cc..4ff2a3fc79 100644
--- a/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
+++ b/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="region_debug_console" title="Region Debug"/>
+<floater name="region_debug_console" title="地å€é™¤éŒ¯"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_script_preview.xml b/indra/newview/skins/default/xui/zh/floater_script_preview.xml
index 75ef4ebe73..c3d05402c0 100644
--- a/indra/newview/skins/default/xui/zh/floater_script_preview.xml
+++ b/indra/newview/skins/default/xui/zh/floater_script_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="preview lsl text" title="SCRIPT: ROTATION SCRIPT">
<floater.string name="Title">
- SCRIPT: [NAME]
+ 腳本:[NAME]
</floater.string>
<text name="desc txt">
æè¿°ï¼š
diff --git a/indra/newview/skins/default/xui/zh/floater_script_queue.xml b/indra/newview/skins/default/xui/zh/floater_script_queue.xml
index 4062db5014..ff02946d86 100644
--- a/indra/newview/skins/default/xui/zh/floater_script_queue.xml
+++ b/indra/newview/skins/default/xui/zh/floater_script_queue.xml
@@ -7,13 +7,13 @@
Done.
</floater.string>
<floater.string name="Resetting">
- Resetting
+ é‡è¨­ä¸­
</floater.string>
<floater.string name="Running">
- Running
+ 執行中
</floater.string>
<floater.string name="NotRunning">
- Not running
+ éžåŸ·è¡Œä¸­
</floater.string>
<button label="關閉" label_selected="關閉" name="close"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_search.xml b/indra/newview/skins/default/xui/zh/floater_search.xml
index 5b247350b8..bb693b7a70 100644
--- a/indra/newview/skins/default/xui/zh/floater_search.xml
+++ b/indra/newview/skins/default/xui/zh/floater_search.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="floater_search" title="FIND">
+<floater name="floater_search" title="尋找">
<floater.string name="loading_text">
載入中...
</floater.string>
diff --git a/indra/newview/skins/default/xui/zh/floater_settings_debug.xml b/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
index bba075cf08..56a31bc292 100644
--- a/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
+++ b/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
@@ -4,10 +4,10 @@
<radio_item label="TRUE" name="TRUE" value="true"/>
<radio_item label="FALSE" name="FALSE" value=""/>
</radio_group>
- <color_swatch label="Color" name="val_color_swatch"/>
+ <color_swatch label="é¡è‰²" name="val_color_swatch"/>
<spinner label="x" name="val_spinner_1"/>
<spinner label="x" name="val_spinner_2"/>
<spinner label="x" name="val_spinner_3"/>
<spinner label="x" name="val_spinner_4"/>
- <button label="Reset to default" name="default_btn"/>
+ <button label="回復至é è¨­å€¼" name="default_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml
index eebd5df3f7..582572d0e2 100644
--- a/indra/newview/skins/default/xui/zh/floater_stats.xml
+++ b/indra/newview/skins/default/xui/zh/floater_stats.xml
@@ -50,9 +50,9 @@
<stat_bar label="物件" name="simobjects"/>
<stat_bar label="Active Objects" name="simactiveobjects"/>
<stat_bar label="Active Scripts" name="simactivescripts"/>
- <stat_bar label="Script Events" name="simscripteps"/>
- <stat_bar label="Packets In" name="siminpps"/>
- <stat_bar label="Packets Out" name="simoutpps"/>
+ <stat_bar label="腳本事件" name="simscripteps"/>
+ <stat_bar label="進入å°åŒ…" name="siminpps"/>
+ <stat_bar label="出去å°åŒ…" name="simoutpps"/>
<stat_bar label="擱置下載" name="simpendingdownloads"/>
<stat_bar label="擱置上傳" name="simpendinguploads"/>
<stat_bar label="Total Unacked Bytes" name="simtotalunackedbytes"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml
index 300d7ee63b..c70e70451e 100644
--- a/indra/newview/skins/default/xui/zh/floater_tools.xml
+++ b/indra/newview/skins/default/xui/zh/floater_tools.xml
@@ -49,13 +49,13 @@
</text>
<radio_group name="focus_radio_group">
<radio_item label="Zoom" name="radio zoom"/>
- <radio_item label="Orbit (Ctrl)" name="radio orbit"/>
- <radio_item label="Pan (Ctrl+Shift)" name="radio pan"/>
+ <radio_item label="環繞(Ctrl)" name="radio orbit"/>
+ <radio_item label="平移(Ctrl+Shift)" name="radio pan"/>
</radio_group>
<slider_bar initial_value="0.125" name="slider zoom"/>
<radio_group name="move_radio_group">
<radio_item label="移動" name="radio move"/>
- <radio_item label="Lift (Ctrl)" name="radio lift"/>
+ <radio_item label="舉起(Ctrl)" name="radio lift"/>
<radio_item label="Spin (Ctrl+Shift)" name="radio spin"/>
</radio_group>
<radio_group name="edit_radio_group">
@@ -178,10 +178,10 @@
æ“æœ‰è€…:
</text>
<text name="Group:">
- 社團:
+ 群組:
</text>
<name_box initial_value="載入中..." name="Group Name Proxy"/>
- <button name="button set group" tool_tip="鏿“‡ä¸€å€‹ç¤¾åœ˜ä»¥åˆ†äº«é€™ç‰©ä»¶æ¬Šé™"/>
+ <button name="button set group" tool_tip="鏿“‡ä¸€å€‹ç¾¤çµ„以分享這物件權é™"/>
<check_box label="分享" name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/>
<button label="Deed" label_selected="Deed" name="button deed" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."/>
<text name="label click action">
@@ -480,7 +480,7 @@
<check_box label="é¡¯ç¤ºæ“æœ‰è€…" name="checkbox show owners" tool_tip="Colorize the parcels according to the type of owner:
綠色 = 你的土地
-æ°´è— = 你社團的土地
+æ°´è— = 你群組的土地
紅色 = 其他人所有
黃色 = 出售
紫色 = æ‹è³£
diff --git a/indra/newview/skins/default/xui/zh/floater_top_objects.xml b/indra/newview/skins/default/xui/zh/floater_top_objects.xml
index 074a4a1881..0e7e0c5b1a 100644
--- a/indra/newview/skins/default/xui/zh/floater_top_objects.xml
+++ b/indra/newview/skins/default/xui/zh/floater_top_objects.xml
@@ -22,7 +22,7 @@
ç©åˆ†
</floater.string>
<floater.string name="none_descriptor">
- None found.
+ 未發ç¾ã€‚
</floater.string>
<text name="title_text">
載入中...
@@ -39,7 +39,7 @@
<text name="id_text">
物件 ID:
</text>
- <button label="Show Beacon" name="show_beacon_btn"/>
+ <button label="顯示指標" name="show_beacon_btn"/>
<text name="obj_name_text">
物件å稱:
</text>
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
index 4d650eaaee..c27b80e9c5 100644
--- a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
@@ -4,13 +4,13 @@
NEARBY VOICE
</string>
<string name="title_group">
- Group Call with [GROUP]
+ 與 [GROUP] 進行群組通話
</string>
<string name="title_adhoc">
- Conference Call
+ 會議通話
</string>
<string name="title_peer_2_peer">
- Call with [NAME]
+ 與 [NAME] 進行通話
</string>
<string name="no_one_near">
No one near has voice enabled
@@ -22,7 +22,7 @@
<layout_panel name="leave_call_panel">
<layout_stack name="voice_effect_and_leave_call_stack">
<layout_panel name="leave_call_btn_panel">
- <button label="Leave Call" name="leave_call_btn"/>
+ <button label="çµæŸé€šè©±" name="leave_call_btn"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/floater_web_content.xml b/indra/newview/skins/default/xui/zh/floater_web_content.xml
index a756498b81..be6bf8bb27 100644
--- a/indra/newview/skins/default/xui/zh/floater_web_content.xml
+++ b/indra/newview/skins/default/xui/zh/floater_web_content.xml
@@ -2,13 +2,13 @@
<floater name="floater_web_content" title="">
<layout_stack name="stack1">
<layout_panel name="nav_controls">
- <button name="back" tool_tip="Navigate back"/>
- <button name="forward" tool_tip="Navigate forward"/>
+ <button name="back" tool_tip="å‘後導覽"/>
+ <button name="forward" tool_tip="å‘å‰å°Žè¦½"/>
<button name="stop" tool_tip="åœæ­¢å°Žè¦½"/>
<button name="reload" tool_tip="é‡è¼‰é é¢"/>
<combo_box name="address" tool_tip="在此輸入 URL ä½ç½®"/>
- <icon name="media_secure_lock_flag" tool_tip="Secured Browsing"/>
- <button name="popexternal" tool_tip="Open current URL in your desktop browser"/>
+ <icon name="media_secure_lock_flag" tool_tip="加密的ç€è¦½"/>
+ <button name="popexternal" tool_tip="在你的桌é¢ç€è¦½å™¨ä¸­é–‹å•Ÿç›®å‰çš„ URL ä½å€"/>
</layout_panel>
</layout_stack>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
index 36e00049f0..967e36ead7 100644
--- a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
+++ b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="whitelist_entry" title="WHITELIST ENTRY">
+<floater name="whitelist_entry" title="許å¯çš„項目清單">
<text name="media_label">
- Enter a URL or URL pattern to add to the list of allowed domains
+ 輸入一個 URL ä½å€æˆ– URL æ ¼å¼ä»¥æ·»åŠ åˆ°å…許的網域清單中
</text>
- <line_editor name="whitelist_entry" tool_tip="Enter a URL or URL pattern to White List"/>
+ <line_editor name="whitelist_entry" tool_tip="輸入一個 URL ä½å€æˆ– URL æ ¼å¼åˆ°ç™½åå–®"/>
<button label="確定" name="ok_btn"/>
<button label="å–æ¶ˆ" name="cancel_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_windlight_options.xml b/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
index fce851cc90..383e35d50d 100644
--- a/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
+++ b/indra/newview/skins/default/xui/zh/floater_windlight_options.xml
@@ -4,16 +4,16 @@
A-12AM:A-12PM:A-3AM:A-3PM:A-4.30PM:A-6AM:A-6PM:A-9AM:A-9PM:Barcelona:Blizzard:Blue Midday:Coastal Afternoon:Coastal Sunset:Default:Desert Sunset:Fine Day:Fluffy Big Clouds:Foggy:Funky Funky:Funky Funky Funky:Gelatto:Ghost:Incongruent Truths:Midday 1:Midday 2:Midday 3:Midday 4:Night:Pirate:Purple:Sailor&apos;s Delight:Sheer Sensuality
</floater.string>
<text name="KeyFramePresetsText">
- Sky Presets:
+ 天空é è¨­å€¼ï¼š
</text>
<button label="新增" label_selected="新增" name="WLNewPreset"/>
<button label="儲存" label_selected="儲存" name="WLSavePreset"/>
<button label="刪除" label_selected="刪除" name="WLDeletePreset"/>
- <button label="Day Cycle Editor" label_selected="Day Cycle Editor" name="WLDayCycleMenuButton"/>
+ <button label="日循環編輯器" label_selected="日循環編輯器" name="WLDayCycleMenuButton"/>
<tab_container name="WindLight Tabs">
- <panel label="ATMOSPHERE" name="Atmosphere">
+ <panel label="大氣" name="Atmosphere">
<text name="BHText">
- Blue Horizon
+ è—天水平線
</text>
<text name="BHText2">
R
@@ -28,10 +28,10 @@
I
</text>
<text name="BDensText">
- Haze Horizon
+ 陰霾水平線
</text>
<text name="BDensText2">
- Blue Density
+ è—天密度
</text>
<text name="BHText6">
R
@@ -46,21 +46,21 @@
I
</text>
<text name="HDText">
- Haze Density
+ 陰霾密度
</text>
<text name="DensMultText">
- Density Multiplier
+ 密度å€å¢ž
</text>
<text name="WLDistanceMultText">
- Distance Multiplier
+ è·é›¢å€å¢ž
</text>
<text name="MaxAltText">
- Max Altitude
+ 最大高度
</text>
</panel>
- <panel label="LIGHTING" name="Lighting">
+ <panel label="照明" name="Lighting">
<text name="SLCText">
- Sun/Moon Color
+ æ—¥ï¼æœˆ é¡è‰²
</text>
<text name="BHText">
R
@@ -75,10 +75,10 @@
I
</text>
<text name="TODText">
- Sun/Moon Position
+ æ—¥ï¼æœˆ ä½ç½®
</text>
<text name="WLAmbientText">
- Ambient
+ 環境
</text>
<text name="BHText5">
R
@@ -93,23 +93,23 @@
I
</text>
<text name="WLEastAngleText">
- East Angle
+ æ±å‡è§’度
</text>
<text name="SunGlowText">
- Sun Glow
+ 太陽光è¼
</text>
- <slider label="Focus" name="WLGlowB"/>
+ <slider label="焦點" name="WLGlowB"/>
<slider label="尺寸" name="WLGlowR"/>
<text name="SceneGammaText">
- Scene Gamma
+ 場景 Gamma 值
</text>
<text name="WLStarText">
- Star Brightness
+ 星空é‡åº¦
</text>
</panel>
- <panel label="CLOUDS" name="Clouds">
+ <panel label="雲彩" name="Clouds">
<text name="WLCloudColorText">
- Cloud Color
+ 雲彩é¡è‰²
</text>
<text name="BHText">
R
@@ -124,7 +124,7 @@
I
</text>
<text name="WLCloudColorText2">
- Cloud XY/Density
+ 雲彩 XY 軸 / 密度
</text>
<text name="BHText5">
X
@@ -136,13 +136,13 @@
D
</text>
<text name="WLCloudCoverageText">
- Cloud Coverage
+ 雲彩覆蓋
</text>
<text name="WLCloudScaleText">
- Cloud Scale
+ é›²å½©è¦æ¨¡
</text>
<text name="WLCloudDetailText">
- Cloud Detail (XY/Density)
+ 雲彩細節(XY 軸 / 密度)
</text>
<text name="BHText8">
X
@@ -154,14 +154,14 @@
D
</text>
<text name="WLCloudScrollXText">
- Cloud Scroll X
+ 雲彩 X 滾軸
</text>
- <check_box label="Lock" name="WLCloudLockX"/>
+ <check_box label="鎖定" name="WLCloudLockX"/>
<text name="WLCloudScrollYText">
- Cloud Scroll Y
+ 雲彩 Y 滾軸
</text>
- <check_box label="Lock" name="WLCloudLockY"/>
- <check_box label="Draw Classic Clouds" name="DrawClassicClouds"/>
+ <check_box label="鎖定" name="WLCloudLockY"/>
+ <check_box label="æç¹ªå‚³çµ±é›²å½©" name="DrawClassicClouds"/>
</panel>
</tab_container>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_world_map.xml b/indra/newview/skins/default/xui/zh/floater_world_map.xml
index 552bb02582..6ac6fb76b7 100644
--- a/indra/newview/skins/default/xui/zh/floater_world_map.xml
+++ b/indra/newview/skins/default/xui/zh/floater_world_map.xml
@@ -2,45 +2,45 @@
<floater name="worldmap" title="世界地圖">
<panel name="layout_panel_1">
<text name="events_label">
- Legend
+ 圖例
</text>
</panel>
<panel name="layout_panel_2">
- <button name="Show My Location" tool_tip="Center map on my avatar&apos;s location"/>
+ <button name="Show My Location" tool_tip="以我的化身所在ä½ç½®å±…中地圖"/>
<text name="me_label">
- Me
+ 自己
</text>
<text name="person_label">
人
</text>
<text name="infohub_label">
- Infohub
+ 資訊中心
</text>
<text name="land_sale_label">
- Land Sale
+ 土地出售
</text>
<text name="auction_label">
- land auction
+ 土地æ‹è³£
</text>
<text name="by_owner_label">
- by owner
+ 便“有者
</text>
<button name="Go Home" tool_tip="瞬間傳é€åˆ°æˆ‘的家ä½ç½®"/>
<text name="Home_label">
å®¶
</text>
<text name="events_label">
- Events:
+ 事件:
</text>
<text name="pg_label">
- 一般
+ 一般普級
</text>
<check_box initial_value="true" name="events_mature_chk"/>
<text name="events_mature_label">
- Moderate
+ é©åº¦æˆäºº
</text>
<text name="events_adult_label">
- æˆäºº
+ 完全æˆäºº
</text>
</panel>
<panel name="layout_panel_3">
@@ -55,8 +55,8 @@
<combo_box label="我的地標" name="landmark combo" tool_tip="將地標ä½ç½®é¡¯ç¤ºåœ¨åœ°åœ–上">
<combo_box.item label="我的地標" name="item1"/>
</combo_box>
- <search_editor label="Regions by Name" name="location" tool_tip="輸入一個地å€çš„å稱"/>
- <button label="Find" name="DoSearch" tool_tip="Search for region"/>
+ <search_editor label="地å€ä¾å稱" name="location" tool_tip="輸入一個地å€çš„å稱"/>
+ <button label="尋找" name="DoSearch" tool_tip="æœå°‹åœ°å€"/>
<button name="Clear" tool_tip="Clear tracking lines and reset map"/>
<text name="events_label">
ä½ç½®ï¼š
diff --git a/indra/newview/skins/default/xui/zh/inspect_group.xml b/indra/newview/skins/default/xui/zh/inspect_group.xml
index 3583976646..ac331be203 100644
--- a/indra/newview/skins/default/xui/zh/inspect_group.xml
+++ b/indra/newview/skins/default/xui/zh/inspect_group.xml
@@ -5,16 +5,16 @@
-->
<floater name="inspect_group">
<string name="PrivateGroup">
- ç§äººç¤¾åœ˜
+ ç§äººç¾¤çµ„
</string>
<string name="FreeToJoin">
å…費加入
</string>
<string name="CostToJoin">
- L$[AMOUNT] to join
+ 花費 L$[AMOUNT] 加入
</string>
<string name="YouAreMember">
- You are a member
+ 你是æˆå“¡
</string>
<text name="group_subtitle">
123 members
diff --git a/indra/newview/skins/default/xui/zh/inspect_remote_object.xml b/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
index 26f49ce69a..bed19d6d78 100644
--- a/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
+++ b/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
@@ -17,6 +17,6 @@
http://slurl.com/Ahern/50/50/50
</text>
<button label="地圖" name="map_btn"/>
- <button label="Block" name="block_btn"/>
+ <button label="å°éŽ–" name="block_btn"/>
<button label="關閉" name="close_btn"/>
</floater>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
index a04d59bc81..885c4b9add 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
@@ -5,13 +5,13 @@
<menu_item_call label="加為朋å‹" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="通話" name="Call"/>
- <menu_item_call label="邀請加入社團" name="Invite..."/>
+ <menu_item_call label="邀請加入群組" name="Invite..."/>
<menu_item_call label="å°éŽ–" name="Avatar Mute"/>
<menu_item_call label="回報" name="abuse"/>
<menu_item_call label="å‡çµ" name="Freeze..."/>
<menu_item_call label="踢出" name="Eject..."/>
<menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/>
- <menu_item_call label="Zoom In" name="Zoom In"/>
+ <menu_item_call label="放大" name="Zoom In"/>
<menu_item_call label="支付" name="Pay..."/>
<menu_item_call label="物件檔案" name="Object Inspect"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
index e3a791cde5..1911a1aeff 100644
--- a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
@@ -9,7 +9,7 @@
<menu_item_call label="ç·¨è¼¯æˆ‘çš„è£æ‰®" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="我的朋å‹" name="Friends..."/>
- <menu_item_call label="我的社團" name="Groups..."/>
+ <menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的檔案" name="Profile..."/>
<menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/>
<menu_item_call label="丟棄" name="Drop"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
index acf98dfdfa..260571eb54 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
@@ -5,7 +5,7 @@
<menu_item_call label="加為朋å‹" name="Add Friend"/>
<menu_item_call label="IM" name="Send IM..."/>
<menu_item_call label="通話" name="Call"/>
- <menu_item_call label="邀請加入社團" name="Invite..."/>
+ <menu_item_call label="邀請加入群組" name="Invite..."/>
<menu_item_call label="Block" name="Avatar Mute"/>
<menu_item_call label="回報" name="abuse"/>
<menu_item_call label="å‡çµ" name="Freeze..."/>
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
index 646edcf563..d516e3ab58 100644
--- a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
@@ -15,7 +15,7 @@
<menu_item_call label="內褲" name="Self Underpants"/>
<menu_item_call label="刺é’" name="Self Tattoo"/>
<menu_item_call label="Physics" name="Self Physics"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
+ <menu_item_call label="åŠé€æ˜Ž" name="Self Alpha"/>
<menu_item_call label="全部衣æœ" name="All Clothes"/>
</context_menu>
<context_menu label="HUD" name="Object Detach HUD"/>
@@ -26,7 +26,7 @@
<menu_item_call label="ç·¨è¼¯æˆ‘è£æ‰®" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="我的朋å‹" name="Friends..."/>
- <menu_item_call label="我的社團" name="Groups..."/>
+ <menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的檔案" name="Profile..."/>
<menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
index e053eb2388..a331c47a6e 100644
--- a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_gesture_gear">
- <menu_item_call label="Add/Remove from Favorites" name="activate"/>
+ <menu_item_call label="由我的最愛中 添加/移除" name="activate"/>
<menu_item_call label="覆製" name="copy_gesture"/>
<menu_item_call label="貼上" name="paste"/>
<menu_item_call label="覆製 UUID" name="copy_uuid"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_group_plus.xml b/indra/newview/skins/default/xui/zh/menu_group_plus.xml
index 77c2c92491..d4a5a69104 100644
--- a/indra/newview/skins/default/xui/zh/menu_group_plus.xml
+++ b/indra/newview/skins/default/xui/zh/menu_group_plus.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_group_plus">
- <menu_item_call label="Join Group..." name="item_join"/>
- <menu_item_call label="New Group..." name="item_new"/>
+ <menu_item_call label="加入群組..." name="item_join"/>
+ <menu_item_call label="新群組..." name="item_new"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
index 2577c582a7..4664fcb027 100644
--- a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
+++ b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="IMChiclet Group Menu">
- <menu_item_call label="社團資訊" name="Show Profile"/>
+ <menu_item_call label="群組資訊" name="Show Profile"/>
<menu_item_call label="顯示會話" name="Chat"/>
<menu_item_call label="çµæŸæœƒè©±" name="End Session"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
index 0f14057c07..7385764e4c 100644
--- a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
@@ -5,7 +5,7 @@
<menu_item_call label="IM" name="im"/>
<menu_item_call label="通話" name="call"/>
<menu_item_call label="瞬間傳é€" name="teleport"/>
- <menu_item_call label="Invite to Group" name="invite_to_group"/>
+ <menu_item_call label="邀請加入群組" name="invite_to_group"/>
<menu_item_call label="Block" name="block"/>
<menu_item_call label="Unblock" name="unblock"/>
<menu_item_call label="回報" name="report"/>
@@ -14,7 +14,7 @@
<menu_item_call label="踢出" name="kick"/>
<menu_item_call label="CSR" name="csr"/>
<menu_item_call label="æè³ªé™¤éŒ¯" name="debug"/>
- <menu_item_call label="Find On Map" name="find_on_map"/>
+ <menu_item_call label="在地圖上尋找" name="find_on_map"/>
<menu_item_call label="Zoom In" name="zoom_in"/>
<menu_item_call label="支付" name="pay"/>
<menu_item_call label="分享" name="share"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
index 2d7da70bfc..1c75705743 100644
--- a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
@@ -14,7 +14,7 @@
<menu_item_call label="å…§è¡£" name="Self Undershirt"/>
<menu_item_call label="內褲" name="Self Underpants"/>
<menu_item_call label="刺é’" name="Self Tattoo"/>
- <menu_item_call label="Alpha" name="Self Alpha"/>
+ <menu_item_call label="åŠé€æ˜Ž" name="Self Alpha"/>
<menu_item_call label="全部衣æœ" name="All Clothes"/>
</context_menu>
<context_menu label="HUD" name="Object Detach HUD"/>
@@ -25,7 +25,7 @@
<menu_item_call label="ç·¨è¼¯æˆ‘çš„è£æ‰®" name="Edit Outfit"/>
<menu_item_call label="編輯我的體形" name="Edit My Shape"/>
<menu_item_call label="我的朋å‹" name="Friends..."/>
- <menu_item_call label="我的社團" name="Groups..."/>
+ <menu_item_call label="我的群組" name="Groups..."/>
<menu_item_call label="我的檔案" name="Profile..."/>
<menu_item_call label="æè³ªé™¤éŒ¯" name="Debug..."/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml
index a93e8be149..49a50c97c6 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml
@@ -23,9 +23,9 @@
<menu_item_call label="新手套" name="New Gloves"/>
<menu_item_call label="æ–°å…§è¡£" name="New Undershirt"/>
<menu_item_call label="新內褲" name="New Underpants"/>
- <menu_item_call label="New Alpha Mask" name="New Alpha Mask"/>
+ <menu_item_call label="æ–°åŠé€æ˜Žé®ç½©" name="New Alpha Mask"/>
<menu_item_call label="新刺é’" name="New Tattoo"/>
- <menu_item_call label="New Physics" name="New Physics"/>
+ <menu_item_call label="新身體物ç†" name="New Physics"/>
</menu>
<menu label="新身體部ä½" name="New Body Parts">
<menu_item_call label="新體形" name="New Shape"/>
@@ -51,7 +51,7 @@
<menu_item_call label="å–代目å‰çš„è£æ‰®" name="Replace Outfit"/>
<menu_item_call label="添加到目å‰è£æ‰®" name="Add To Outfit"/>
<menu_item_call label="由目å‰çš„è£æ‰®ç§»é™¤" name="Remove From Outfit"/>
- <menu_item_call label="Find Original" name="Find Original"/>
+ <menu_item_call label="尋找原件" name="Find Original"/>
<menu_item_call label="Purge Item" name="Purge Item"/>
<menu_item_call label="Restore Item" name="Restore Item"/>
<menu_item_call label="開啟" name="Open"/>
@@ -71,7 +71,7 @@
<menu_item_call label="Play Inworld" name="Animation Play"/>
<menu_item_call label="Play Locally" name="Animation Audition"/>
<menu_item_call label="é€å‡ºå³æ™‚訊æ¯" name="Send Instant Message"/>
- <menu_item_call label="Offer Teleport..." name="Offer Teleport..."/>
+ <menu_item_call label="發給瞬間傳é€è«‹æ±‚..." name="Offer Teleport..."/>
<menu_item_call label="Start Conference Chat" name="Conference Chat"/>
<menu_item_call label="Activate" name="Activate"/>
<menu_item_call label="Deactivate" name="Deactivate"/>
@@ -81,7 +81,7 @@
<menu label="Attach To" name="Attach To"/>
<menu label="Attach To HUD" name="Attach To HUD"/>
<menu_item_call label="編輯" name="Wearable Edit"/>
- <menu_item_call label="Add" name="Wearable Add"/>
+ <menu_item_call label="添加" name="Wearable Add"/>
<menu_item_call label="脫下" name="Take Off"/>
<menu_item_call label="-- ç„¡é¸é … --" name="--no options--"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
index 9199608200..a0fc060e27 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
@@ -21,9 +21,9 @@
<menu_item_call label="新手套" name="New Gloves"/>
<menu_item_call label="æ–°å…§è¡£" name="New Undershirt"/>
<menu_item_call label="新內褲" name="New Underpants"/>
- <menu_item_call label="New Alpha" name="New Alpha"/>
+ <menu_item_call label="æ–°åŠé€æ˜Ž" name="New Alpha"/>
<menu_item_call label="新刺é’" name="New Tattoo"/>
- <menu_item_call label="New Physics" name="New Physics"/>
+ <menu_item_call label="新身體物ç†" name="New Physics"/>
</menu>
<menu label="新身體部ä½" name="New Body Parts">
<menu_item_call label="新體形" name="New Shape"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
index f51b27d9ce..74b90ada5e 100644
--- a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
@@ -11,7 +11,7 @@
<menu_item_call label="清空 Lost and Found" name="empty_lostnfound"/>
<menu_item_call label="儲存æè³ªç‚º" name="Save Texture As"/>
<menu_item_call label="分享" name="Share"/>
- <menu_item_call label="Find Original" name="Find Original"/>
- <menu_item_call label="Find All Links" name="Find All Links"/>
+ <menu_item_call label="尋找原件" name="Find Original"/>
+ <menu_item_call label="尋找全部è¯çµ" name="Find All Links"/>
<menu_item_call label="清空垃圾筒" name="empty_trash"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
index cf47020bd9..90704fee65 100644
--- a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
@@ -13,8 +13,8 @@
<menu_item_call label="新手套" name="New Gloves"/>
<menu_item_call label="æ–°å…§è¡£" name="New Undershirt"/>
<menu_item_call label="新內褲" name="New Underpants"/>
- <menu_item_call label="New Alpha" name="New Alpha"/>
- <menu_item_call label="New Physics" name="New Physics"/>
+ <menu_item_call label="æ–°åŠé€æ˜Ž" name="New Alpha"/>
+ <menu_item_call label="新身體物ç†" name="New Physics"/>
<menu_item_call label="新刺é’" name="New Tattoo"/>
</menu>
<menu label="新身體部ä½" name="New Body Parts">
diff --git a/indra/newview/skins/default/xui/zh/menu_participant_list.xml b/indra/newview/skins/default/xui/zh/menu_participant_list.xml
index 3737e3d041..81ae6e4e85 100644
--- a/indra/newview/skins/default/xui/zh/menu_participant_list.xml
+++ b/indra/newview/skins/default/xui/zh/menu_participant_list.xml
@@ -8,7 +8,7 @@
<menu_item_call label="通話" name="Call"/>
<menu_item_call label="分享" name="Share"/>
<menu_item_call label="支付" name="Pay"/>
- <menu_item_check label="View People Icons" name="View Icons"/>
+ <menu_item_check label="察看人群圖示" name="View Icons"/>
<menu_item_check label="Block Voice" name="Block/Unblock"/>
<menu_item_check label="Block Text" name="MuteText"/>
<context_menu label="Moderator Options" name="Moderator Options">
diff --git a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
index 2b0c461312..59854faeec 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
@@ -2,7 +2,7 @@
<toggleable_menu name="menu_group_plus">
<menu_item_check label="ä¾å稱排åº" name="sort_name"/>
<menu_item_check label="ä¾ç‹€æ…‹æŽ’åº" name="sort_status"/>
- <menu_item_check label="View People Icons" name="view_icons"/>
- <menu_item_check label="View Permissions Granted" name="view_permissions"/>
- <menu_item_call label="Show Blocked Residents &amp; Objects" name="show_blocked_list"/>
+ <menu_item_check label="察看人群圖示" name="view_icons"/>
+ <menu_item_check label="å¯Ÿçœ‹è¨±å¯æ¬Šé™" name="view_permissions"/>
+ <menu_item_call label="顯示被å°éŽ–çš„å±…æ°‘èˆ‡ç‰©ä»¶" name="show_blocked_list"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
index cf36507d74..1be5c69b94 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_group_plus">
- <menu_item_check label="顯示社團圖示" name="Display Group Icons"/>
- <menu_item_call label="è„«é›¢æ‰€é¸æ“‡çš„社團" name="Leave Selected Group"/>
+ <menu_item_check label="顯示群組圖示" name="Display Group Icons"/>
+ <menu_item_call label="è„«é›¢æ‰€é¸æ“‡çš„群組" name="Leave Selected Group"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
index 49fa775424..9faa35001c 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
@@ -9,5 +9,5 @@
<menu_item_call label="分享" name="Share"/>
<menu_item_call label="支付" name="Pay"/>
<menu_item_check label="Block/Unblock" name="Block/Unblock"/>
- <menu_item_call label="Offer Teleport" name="teleport"/>
+ <menu_item_call label="發給瞬間傳é€è«‹æ±‚" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
index c7aff48df4..1380e0b307 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
@@ -6,5 +6,5 @@
<menu_item_call label="通話" name="Call"/>
<menu_item_call label="分享" name="Share"/>
<menu_item_call label="支付" name="Pay"/>
- <menu_item_call label="Offer Teleport" name="teleport"/>
+ <menu_item_call label="發給瞬間傳é€è«‹æ±‚" name="teleport"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
index 5cf54b117b..a7f5c74b82 100644
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<toggleable_menu name="menu_group_plus">
- <menu_item_check label="Sort by Recent Speakers" name="sort_by_recent_speakers"/>
+ <menu_item_check label="便œ€è¿‘說話者排åº" name="sort_by_recent_speakers"/>
<menu_item_check label="ä¾å稱排åº" name="sort_name"/>
<menu_item_check label="ä¾è·é›¢æŽ’åº" name="sort_distance"/>
- <menu_item_check label="View People Icons" name="view_icons"/>
- <menu_item_call label="Show Blocked Residents &amp; Objects" name="show_blocked_list"/>
+ <menu_item_check label="察看人群圖示" name="view_icons"/>
+ <menu_item_call label="顯示笨å°éŽ–çš„å±…æ°‘èˆ‡ç‰©ä»¶" name="show_blocked_list"/>
</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
index d0b9438cfc..95f8917234 100644
--- a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
+++ b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<menu name="menu_folder_gear">
- <menu_item_call label="Add Folder" name="add_folder"/>
+ <menu_item_call label="添加資料夾" name="add_folder"/>
<menu_item_call label="添加地標" name="add_landmark"/>
</menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_url_group.xml b/indra/newview/skins/default/xui/zh/menu_url_group.xml
index 2cbdd602cb..de97bb731f 100644
--- a/indra/newview/skins/default/xui/zh/menu_url_group.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_group.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<context_menu name="Url Popup">
- <menu_item_call label="顯示社團資訊" name="show_group"/>
- <menu_item_call label="覆製社團到剪貼簿" name="url_copy_label"/>
+ <menu_item_call label="顯示群組資訊" name="show_group"/>
+ <menu_item_call label="覆製群組到剪貼簿" name="url_copy_label"/>
<menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/>
</context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 6d70ac4c1f..a51e26c3f4 100644
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -26,7 +26,7 @@
</menu>
<menu label="æºé€š" name="Communicate">
<menu_item_call label="我的朋å‹" name="My Friends"/>
- <menu_item_call label="我的社團" name="My Groups"/>
+ <menu_item_call label="我的群組" name="My Groups"/>
<menu_item_check label="附近的èŠå¤©" name="Nearby Chat"/>
<menu_item_call label="附近的人群" name="Active Speakers"/>
</menu>
@@ -96,7 +96,7 @@
<menu label="腳本" name="Scripts">
<menu_item_call label="釿–°ç·¨è­¯è…³æœ¬ï¼ˆMono)" name="Mono"/>
<menu_item_call label="釿–°ç·¨è­¯è…³æœ¬ï¼ˆLSL)" name="LSL"/>
- <menu_item_call label="Reset Scripts" name="Reset Scripts"/>
+ <menu_item_call label="é‡è¨­è…³æœ¬" name="Reset Scripts"/>
<menu_item_call label="設定腳本為執行中" name="Set Scripts to Running"/>
<menu_item_call label="設定腳本為éžåŸ·è¡Œä¸­" name="Set Scripts to Not Running"/>
</menu>
@@ -139,7 +139,6 @@
<menu_item_check label="Disable Camera Constraints" name="Disable Camera Distance"/>
<menu_item_check label="高解æžåº¦å¿«ç…§" name="HighResSnapshot"/>
<menu_item_check label="éœéŸ³æ‹æ”快照到硬碟" name="QuietSnapshotsToDisk"/>
- <menu_item_check label="壓縮快照存到硬碟" name="CompressSnapshotsToDisk"/>
<menu label="效能工具" name="Performance Tools">
<menu_item_call label="Lag Meter" name="Lag Meter"/>
<menu_item_check label="統計列" name="Statistics Bar"/>
@@ -155,7 +154,7 @@
</menu>
<menu label="Rendering Types" name="Rendering Types">
<menu_item_check label="Simple" name="Simple"/>
- <menu_item_check label="Alpha" name="Alpha"/>
+ <menu_item_check label="åŠé€æ˜Ž" name="Alpha"/>
<menu_item_check label="Tree" name="Tree"/>
<menu_item_check label="Avatars" name="Character"/>
<menu_item_check label="SurfacePath" name="SurfacePath"/>
@@ -179,21 +178,21 @@
<menu_item_check label="Flexible Objects" name="Flexible Objects"/>
</menu>
<menu_item_check label="Use Plugin Read Thread" name="Use Plugin Read Thread"/>
- <menu_item_call label="Clear Group Cache" name="ClearGroupCache"/>
- <menu_item_check label="Mouse Smoothing" name="Mouse Smoothing"/>
+ <menu_item_call label="清除群組快å–資料" name="ClearGroupCache"/>
+ <menu_item_check label="滑鼠平滑移動" name="Mouse Smoothing"/>
<menu label="快速éµ" name="Shortcuts">
<menu_item_call label="圖åƒï¼ˆL$[COST])..." name="Upload Image"/>
<menu_item_check label="æœå°‹" name="Search"/>
<menu_item_call label="釋出按éµ" name="Release Keys"/>
<menu_item_call label="設定使用者界é¢å¤§å°è‡³é è¨­å€¼" name="Set UI Size to Default"/>
- <menu_item_check label="Show Advanced Menu - legacy shortcut" name="Show Advanced Menu - legacy shortcut"/>
+ <menu_item_check label="顯示進階é¸å–® ï¼ èˆŠç‰ˆæ·å¾‘" name="Show Advanced Menu - legacy shortcut"/>
<menu_item_call label="關閉視窗" name="Close Window"/>
<menu_item_call label="關閉全部視窗" name="Close All Windows"/>
- <menu_item_call label="Snapshot to Disk" name="Snapshot to Disk"/>
+ <menu_item_call label="æ‹æ”快照到硬碟" name="Snapshot to Disk"/>
<menu_item_call label="第一人稱視角" name="Mouselook"/>
<menu_item_check label="Joystick Flycam" name="Joystick Flycam"/>
- <menu_item_call label="Reset View" name="Reset View"/>
- <menu_item_call label="Look at Last Chatter" name="Look at Last Chatter"/>
+ <menu_item_call label="é‡è¨­è¦–è§’" name="Reset View"/>
+ <menu_item_call label="注視上一ä½èŠå¤©è€…" name="Look at Last Chatter"/>
<menu label="鏿“‡å»ºé€ å·¥å…·" name="Select Tool">
<menu_item_call label="èšç„¦å·¥å…·" name="Focus"/>
<menu_item_call label="移動工具" name="Move"/>
@@ -218,10 +217,10 @@
<menu_item_check label="Fast Timers" name="Fast Timers"/>
<menu_item_check label="記憶體" name="Memory"/>
<menu_item_call label="Region Info to Debug Console" name="Region Info to Debug Console"/>
- <menu_item_call label="Group Info to Debug Console" name="Group Info to Debug Console"/>
+ <menu_item_call label="群組資訊至除錯控制å°" name="Group Info to Debug Console"/>
<menu_item_call label="Capabilities Info to Debug Console" name="Capabilities Info to Debug Console"/>
<menu_item_check label="Camera" name="Camera"/>
- <menu_item_check label="Wind" name="Wind"/>
+ <menu_item_check label="風力" name="Wind"/>
<menu_item_check label="FOV" name="FOV"/>
<menu_item_check label="Badge" name="Badge"/>
</menu>
@@ -232,17 +231,17 @@
<menu_item_check label="Show Matrices" name="Show Matrices"/>
<menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/>
<menu_item_check label="顯示記憶體" name="Show Memory"/>
- <menu_item_check label="Show Updates to Objects" name="Show Updates"/>
- </menu>
- <menu label="Force an Error" name="Force Errors">
- <menu_item_call label="Force Breakpoint" name="Force Breakpoint"/>
- <menu_item_call label="Force LLError And Crash" name="Force LLError And Crash"/>
- <menu_item_call label="Force Bad Memory Access" name="Force Bad Memory Access"/>
- <menu_item_call label="Force Infinite Loop" name="Force Infinite Loop"/>
- <menu_item_call label="Force Driver Crash" name="Force Driver Carsh"/>
- <menu_item_call label="Force Software Exception" name="Force Software Exception"/>
- <menu_item_call label="Force Disconnect Viewer" name="Force Disconnect Viewer"/>
- <menu_item_call label="Simulate a Memory Leak" name="Memory Leaking Simulation"/>
+ <menu_item_check label="顯示更新到物件" name="Show Updates"/>
+ </menu>
+ <menu label="強制錯誤" name="Force Errors">
+ <menu_item_call label="強制中斷點" name="Force Breakpoint"/>
+ <menu_item_call label="強制腳本錯誤並崩潰" name="Force LLError And Crash"/>
+ <menu_item_call label="強制ä¸è‰¯çš„記憶體存å–" name="Force Bad Memory Access"/>
+ <menu_item_call label="強制無é™è¿´åœˆ" name="Force Infinite Loop"/>
+ <menu_item_call label="強制驅動程å¼å´©æ½°" name="Force Driver Carsh"/>
+ <menu_item_call label="強制軟體例外異常" name="Force Software Exception"/>
+ <menu_item_call label="強制ç€è¦½å™¨æ–·ç·š" name="Force Disconnect Viewer"/>
+ <menu_item_call label="模擬記憶體ä¸è¶³" name="Memory Leaking Simulation"/>
</menu>
<menu label="Render Tests" name="Render Tests">
<menu_item_check label="Camera Offset" name="Camera Offset"/>
@@ -278,8 +277,8 @@
<menu_item_check label="Global Illumination (experimental)" name="Global Illumination"/>
<menu_item_check label="Debug GL" name="Debug GL"/>
<menu_item_check label="Debug Pipeline" name="Debug Pipeline"/>
- <menu_item_check label="Automatic Alpha Masks (deferred)" name="Automatic Alpha Masks (deferred)"/>
- <menu_item_check label="Automatic Alpha Masks (non-deferred)" name="Automatic Alpha Masks (non-deferred)"/>
+ <menu_item_check label="自動åŠé€æ˜Žé®ç½©ï¼ˆéžå»¶ï¼‰" name="Automatic Alpha Masks (deferred)"/>
+ <menu_item_check label="自動åŠé€æ˜Žé®ç½©ï¼ˆéžéžå»¶ï¼‰" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Animation Textures" name="Animation Textures"/>
<menu_item_check label="Disable Textures" name="Disable Textures"/>
<menu_item_check label="Full Res Textures" name="Rull Res Textures"/>
@@ -310,7 +309,7 @@
<menu_item_check label="Sim Sun Override" name="Sim Sun Override"/>
<menu_item_check label="Cheesy Beacon" name="Cheesy Beacon"/>
<menu_item_check label="Fixed Weather" name="Fixed Weather"/>
- <menu_item_call label="Dump Region Object Cache" name="Dump Region Object Cache"/>
+ <menu_item_call label="傾å°åœ°å€ç‰©ä»¶å¿«å–" name="Dump Region Object Cache"/>
</menu>
<menu label="UI" name="UI">
<menu_item_call label="Media Browser Test" name="Web Browser Test"/>
@@ -325,10 +324,10 @@
<menu_item_check label="Region Debug Console" name="Region Debug Console"/>
<menu_item_check label="Debug SelectMgr" name="Debug SelectMgr"/>
<menu_item_check label="Debug Clicks" name="Debug Clicks"/>
- <menu_item_check label="Debug Views" name="Debug Views"/>
+ <menu_item_check label="視角除錯" name="Debug Views"/>
<menu_item_check label="Debug Name Tooltips" name="Debug Name Tooltips"/>
- <menu_item_check label="Debug Mouse Events" name="Debug Mouse Events"/>
- <menu_item_check label="Debug Keys" name="Debug Keys"/>
+ <menu_item_check label="滑鼠事件除錯" name="Debug Mouse Events"/>
+ <menu_item_check label="按éµé™¤éŒ¯" name="Debug Keys"/>
<menu_item_check label="Debug WindowProc" name="Debug WindowProc"/>
</menu>
<menu label="XUI" name="XUI">
@@ -336,7 +335,7 @@
<menu_item_call label="Show Font Test" name="Show Font Test"/>
<menu_item_check label="Show XUI Names" name="Show XUI Names"/>
<menu_item_call label="é€å‡ºæ¸¬è©¦ IMs" name="Send Test IMs"/>
- <menu_item_call label="Flush Names Caches" name="Flush Names Caches"/>
+ <menu_item_call label="æ²–æ´—å稱快å–資料" name="Flush Names Caches"/>
</menu>
<menu label="化身" name="Character">
<menu label="Grab Baked Texture" name="Grab Baked Texture">
@@ -380,14 +379,14 @@
<menu label="Admin" name="Admin">
<menu label="Object">
<menu_item_call label="å–得副本" name="Take Copy"/>
- <menu_item_call label="Force Owner To Me" name="Force Owner To Me"/>
+ <menu_item_call label="å¼·åˆ¶æ“æœ‰è€…為我" name="Force Owner To Me"/>
<menu_item_call label="Force Owner Permissive" name="Force Owner Permissive"/>
<menu_item_call label="刪除" name="Delete"/>
<menu_item_call label="Lock" name="Lock"/>
<menu_item_call label="Get Assets IDs" name="Get Assets IDs"/>
</menu>
<menu label="地段" name="Parcel">
- <menu_item_call label="Force Owner To Me" name="Owner To Me"/>
+ <menu_item_call label="å¼·åˆ¶æ“æœ‰è€…為我" name="Owner To Me"/>
<menu_item_call label="Set to Linden Content" name="Set to Linden Content"/>
<menu_item_call label="Claim Public Land" name="Claim Public Land"/>
</menu>
@@ -410,9 +409,9 @@
<menu_item_call label="å…§è¡£" name="Menu Undershirt"/>
<menu_item_call label="內褲" name="Menu Underpants"/>
<menu_item_call label="裙å­" name="Skirt"/>
- <menu_item_call label="Alpha" name="Alpha"/>
- <menu_item_call label="Tattoo" name="Tattoo"/>
- <menu_item_call label="Physics" name="Physics"/>
+ <menu_item_call label="åŠé€æ˜Ž" name="Alpha"/>
+ <menu_item_call label="刺é’" name="Tattoo"/>
+ <menu_item_call label="身體物ç†" name="Physics"/>
<menu_item_call label="全部衣æœ" name="All Clothes"/>
</menu>
<menu label="幫助" name="Help">
diff --git a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
index c5c1f661fb..2eea314dd8 100644
--- a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
+++ b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
@@ -2,7 +2,7 @@
<context_menu name="Outfit Wearable Context Menu">
<menu_item_call label="å–代" name="wear_replace"/>
<menu_item_call label="Wear" name="wear_wear"/>
- <menu_item_call label="Add" name="wear_add"/>
+ <menu_item_call label="添加" name="wear_add"/>
<menu_item_call label="Take Off / Detach" name="take_off_or_detach"/>
<menu_item_call label="å¸ä¸‹" name="detach"/>
<context_menu label="Attach to" name="wearable_attach_to"/>
diff --git a/indra/newview/skins/default/xui/zh/mime_types.xml b/indra/newview/skins/default/xui/zh/mime_types.xml
index 3498942f9b..89fe92fabc 100644
--- a/indra/newview/skins/default/xui/zh/mime_types.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types.xml
@@ -5,7 +5,7 @@
ç¶²é å…§å®¹
</label>
<tooltip name="web_tooltip">
- This location has Web content
+ 這ä½ç½®æœ‰ç¶²é å…§å®¹
</tooltip>
<playtip name="web_playtip">
顯示網é å…§å®¹
@@ -35,7 +35,7 @@
</widgetset>
<widgetset name="audio">
<label name="audio_label">
- Audio
+ 音頻
</label>
<tooltip name="audio_tooltip">
There is audio at this location
@@ -61,12 +61,12 @@
</mimetype>
<mimetype name="audio/*">
<label name="audio2_label">
- Audio
+ 音頻
</label>
</mimetype>
<mimetype name="video/*">
<label name="video2_label">
- Video
+ 視頻
</label>
</mimetype>
<mimetype name="image/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -86,7 +86,7 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ Ogg 音頻/視頻
</label>
</mimetype>
<mimetype name="application/pdf">
@@ -106,7 +106,7 @@
</mimetype>
<mimetype name="application/smil">
<label name="application/smil_label">
- Synchronized Multimedia Integration Language (SMIL)
+ åŒæ­¥å¤šåª’體整åˆèªžè¨€ï¼ˆSMIL)
</label>
</mimetype>
<mimetype name="application/xhtml+xml">
@@ -121,22 +121,22 @@
</mimetype>
<mimetype name="audio/mid">
<label name="audio/mid_label">
- Audio (MIDI)
+ 音頻(MIDI)
</label>
</mimetype>
<mimetype name="audio/mpeg">
<label name="audio/mpeg_label">
- Audio (MP3)
+ 音頻(MP3)
</label>
</mimetype>
<mimetype name="audio/x-aiff">
<label name="audio/x-aiff_label">
- Audio (AIFF)
+ 音頻(AIFF)
</label>
</mimetype>
<mimetype name="audio/x-wav">
<label name="audio/x-wav_label">
- Audio (WAV)
+ 音頻(WAV)
</label>
</mimetype>
<mimetype name="image/bmp">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- 影片(MPEG)
+ 視頻(MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- 影片(MP4)
+ 視頻(MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- 影片(Windows Media ASF)
+ 視頻(Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- 影片(Windows Media WMV)
+ 視頻(Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- 影片(AVI)
+ 視頻(AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/zh/mime_types_linux.xml b/indra/newview/skins/default/xui/zh/mime_types_linux.xml
index 3498942f9b..08839abe6a 100644
--- a/indra/newview/skins/default/xui/zh/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types_linux.xml
@@ -35,7 +35,7 @@
</widgetset>
<widgetset name="audio">
<label name="audio_label">
- Audio
+ 音頻
</label>
<tooltip name="audio_tooltip">
There is audio at this location
@@ -61,7 +61,7 @@
</mimetype>
<mimetype name="audio/*">
<label name="audio2_label">
- Audio
+ 音頻
</label>
</mimetype>
<mimetype name="video/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -86,7 +86,7 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ Ogg 音頻/視頻
</label>
</mimetype>
<mimetype name="application/pdf">
@@ -121,22 +121,22 @@
</mimetype>
<mimetype name="audio/mid">
<label name="audio/mid_label">
- Audio (MIDI)
+ 音頻(MIDI)
</label>
</mimetype>
<mimetype name="audio/mpeg">
<label name="audio/mpeg_label">
- Audio (MP3)
+ 音頻(MP3)
</label>
</mimetype>
<mimetype name="audio/x-aiff">
<label name="audio/x-aiff_label">
- Audio (AIFF)
+ 音頻(AIFF)
</label>
</mimetype>
<mimetype name="audio/x-wav">
<label name="audio/x-wav_label">
- Audio (WAV)
+ 音頻(WAV)
</label>
</mimetype>
<mimetype name="image/bmp">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- 影片(MPEG)
+ 視頻(MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- 影片(MP4)
+ 視頻(MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- 影片(Windows Media ASF)
+ 視頻(Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- 影片(Windows Media WMV)
+ 視頻(Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- 影片(AVI)
+ 視頻(AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/zh/mime_types_mac.xml b/indra/newview/skins/default/xui/zh/mime_types_mac.xml
index 3f38c528a6..7958f64219 100644
--- a/indra/newview/skins/default/xui/zh/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/zh/mime_types_mac.xml
@@ -27,21 +27,21 @@
圖åƒ
</label>
<tooltip name="image_tooltip">
- There is an image at this location
+ 有一個影åƒåœ¨æ­¤ä½ç½®
</tooltip>
<playtip name="image_playtip">
- View this location&apos;s image
+ 察看在此ä½ç½®çš„å½±åƒ
</playtip>
</widgetset>
<widgetset name="audio">
<label name="audio_label">
- Audio
+ 音頻
</label>
<tooltip name="audio_tooltip">
- There is audio at this location
+ 有一個音頻在此ä½ç½®
</tooltip>
<playtip name="audio_playtip">
- Play this location&apos;s audio
+ 播放在此ä½ç½®çš„音頻
</playtip>
</widgetset>
<scheme name="rtsp">
@@ -61,12 +61,12 @@
</mimetype>
<mimetype name="audio/*">
<label name="audio2_label">
- Audio
+ 音頻
</label>
</mimetype>
<mimetype name="video/*">
<label name="video2_label">
- Video
+ 視頻
</label>
</mimetype>
<mimetype name="image/*">
@@ -76,7 +76,7 @@
</mimetype>
<mimetype name="video/vnd.secondlife.qt.legacy">
<label name="vnd.secondlife.qt.legacy_label">
- 影片 (QuickTime)
+ 視頻 (QuickTime)
</label>
</mimetype>
<mimetype name="application/javascript">
@@ -86,7 +86,7 @@
</mimetype>
<mimetype name="application/ogg">
<label name="application/ogg_label">
- Ogg Audio/Video
+ OGG 音頻/視頻
</label>
</mimetype>
<mimetype name="application/pdf">
@@ -106,7 +106,7 @@
</mimetype>
<mimetype name="application/smil">
<label name="application/smil_label">
- Synchronized Multimedia Integration Language (SMIL)
+ åŒæ­¥å¤šåª’體整åˆèªžè¨€ï¼ˆSMIL)
</label>
</mimetype>
<mimetype name="application/xhtml+xml">
@@ -121,22 +121,22 @@
</mimetype>
<mimetype name="audio/mid">
<label name="audio/mid_label">
- Audio (MIDI)
+ 音頻 (MIDI)
</label>
</mimetype>
<mimetype name="audio/mpeg">
<label name="audio/mpeg_label">
- Audio (MP3)
+ 音頻(MP3)
</label>
</mimetype>
<mimetype name="audio/x-aiff">
<label name="audio/x-aiff_label">
- Audio (AIFF)
+ 音頻(AIFF)
</label>
</mimetype>
<mimetype name="audio/x-wav">
<label name="audio/x-wav_label">
- Audio (WAV)
+ 音頻(WAV)
</label>
</mimetype>
<mimetype name="image/bmp">
@@ -186,32 +186,32 @@
</mimetype>
<mimetype name="video/mpeg">
<label name="video/mpeg_label">
- 影片(MPEG)
+ 視頻(MPEG)
</label>
</mimetype>
<mimetype name="video/mp4">
<label name="video/mp4_label">
- 影片(MP4)
+ 視頻(MP4)
</label>
</mimetype>
<mimetype name="video/quicktime">
<label name="video/quicktime_label">
- 影片(QuickTime)
+ 視頻(QuickTime)
</label>
</mimetype>
<mimetype name="video/x-ms-asf">
<label name="video/x-ms-asf_label">
- 影片(Windows Media ASF)
+ 視頻(Windows Media ASF)
</label>
</mimetype>
<mimetype name="video/x-ms-wmv">
<label name="video/x-ms-wmv_label">
- 影片(Windows Media WMV)
+ 視頻(Windows Media WMV)
</label>
</mimetype>
<mimetype name="video/x-msvideo">
<label name="video/x-msvideo_label">
- 影片(AVI)
+ 視頻(AVI)
</label>
</mimetype>
</mimetypes>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 65bb8ce517..1c89e9b522 100644
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<notifications>
<global name="skipnexttime">
- Don&apos;t show me this again
+ ä¸å†é¡¯ç¤ºæ­¤æé†’
</global>
<global name="alwayschoose">
- Always choose this option
+ 總是é¸å–這個é¸é …
</global>
<global name="implicitclosebutton">
關閉
@@ -44,7 +44,7 @@
<button name="Cancel_yesnocancelbuttons" text="$canceltext"/>
</form>
</template>
- <notification label="Unknown Notification Message" name="MissingAlert">
+ <notification label="未知的通知訊æ¯" name="MissingAlert">
Your version of [APP_NAME] does not know how to display the notification it just received. Please verify that you have the latest Viewer installed.
Error details: The notification called &apos;[_NAME]&apos; was not found in notifications.xml.
@@ -72,9 +72,9 @@ Error details: The notification called &apos;[_NAME]&apos; was not found in noti
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="LoginFailedNoNetwork">
- Could not connect to the [SECOND_LIFE_GRID].
+ 無法連接到[SECOND_LIFE_GRID].
&apos;[DIAGNOSTIC]&apos;
-Make sure your Internet connection is working properly.
+請確定你的網際網路是正常é‹ä½œçš„。
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="MessageTemplateNotFound">
@@ -82,7 +82,7 @@ Make sure your Internet connection is working properly.
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="WearableSave">
- Save changes to current clothing/body part?
+ 除存變更到目å‰çš„è¡£æœ/身體部ä½ï¼Ÿ
<usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="ä¸è¦å„²å­˜" yestext="儲存"/>
</notification>
<notification name="CompileQueueSaveText">
@@ -132,7 +132,7 @@ Do you want to grant modify rights for the selected Residents?
<usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="UnableToCreateGroup">
- Unable to create group.
+ 無法建立新群組。
[MESSAGE]
<usetemplate name="okbutton" yestext="確定"/>
</notification>
@@ -142,7 +142,7 @@ Do you want to grant modify rights for the selected Residents?
<usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="忽視變更" yestext="套用變更"/>
</notification>
<notification name="MustSpecifyGroupNoticeSubject">
- You must specify a subject to send a group notice.
+ 你必須指定一個主旨以é€å‡ºç¾¤çµ„通知。
<usetemplate name="okbutton" yestext="確定"/>
</notification>
<notification name="AddGroupOwnerWarning">
@@ -150,7 +150,7 @@ Do you want to grant modify rights for the selected Residents?
Members cannot be removed from that role.
The members must resign from the role themselves.
Are you sure you want to continue?
- <usetemplate ignoretext="Confirm before I add a new group Owner" name="okcancelignore" notext="å¦" yestext="是"/>
+ <usetemplate ignoretext="åœ¨æˆ‘æ·»åŠ ä¸€å€‹æ–°çš„ç¾¤çµ„æ“æœ‰è€…å‰ç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="AssignDangerousActionWarning">
You are about to add the Ability &apos;[ACTION_NAME]&apos; to the Role &apos;[ROLE_NAME]&apos;.
@@ -173,17 +173,17 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
<notification name="AttachmentDrop">
You are about to drop your attachment.
Are you sure you want to continue?
- <usetemplate ignoretext="Confirm before dropping attachments" name="okcancelignore" notext="å¦" yestext="是"/>
+ <usetemplate ignoretext="在丟下附件å‰ç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="JoinGroupCanAfford">
- Joining this group costs L$[COST].
-Do you wish to proceed?
- <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Join"/>
+ 加入此群組須花費 L$[COST]。
+你確定è¦ç¹¼çºŒå—Žï¼Ÿ
+ <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="加入"/>
</notification>
<notification name="JoinGroupNoCost">
You are joining group [NAME].
Do you wish to proceed?
- <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Join"/>
+ <usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="加入"/>
</notification>
<notification name="JoinGroupCannotAfford">
Joining this group costs L$[COST].
@@ -193,7 +193,7 @@ You do not have enough L$ to join this group.
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="å–æ¶ˆ" name="okcancelbuttons" notext="å–æ¶ˆ" yestext="Create group for L$100"/>
+ <usetemplate canceltext="å–æ¶ˆ" name="okcancelbuttons" notext="å–æ¶ˆ" yestext="花費 L$100 建立群組"/>
</notification>
<notification name="LandBuyPass">
For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hours. Buy a pass?
@@ -341,7 +341,7 @@ There is no reimbursement for fees paid.
<notification name="DeleteMedia">
You have selected to delete the media associated with this face.
Are you sure you want to continue?
- <usetemplate ignoretext="Confirm before I delete media from an object" name="okcancelignore" notext="å¦" yestext="是"/>
+ <usetemplate ignoretext="在我由一個部件中刪除媒體å‰ç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="ClassifiedSave">
Save changes to classified [NAME]?
@@ -370,14 +370,14 @@ Are you sure you want to continue?
Please select a proposal to view.
</notification>
<notification name="SelectHistoryItemToView">
- Please select a history item to view.
+ è«‹é¸æ“‡ä¸€å€‹æ­·å²ç´€éŒ„物å“去察看。
</notification>
<notification name="CacheWillClear">
- Cache will be cleared after you restart [APP_NAME].
+ ç•¶ä½ é‡æ–°å•Ÿå‹• [APP_NAME] 後快å–資料將會被清除。
</notification>
<notification name="CacheWillBeMoved">
- Cache will be moved after you restart [APP_NAME].
-Note: This will clear the cache.
+ ç•¶ä½ é‡æ–°å•Ÿå‹• [APP_NAME] 後快å–資料將被移動。
+注æ„:這將會清除快å–資料。
</notification>
<notification name="ChangeConnectionPort">
Port settings take effect after you restart [APP_NAME].
@@ -519,7 +519,7 @@ Do you really want to give these items?
<usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="踢出並å°éŽ–" yestext="踢出"/>
</notification>
<notification name="EjectAvatarNoBan">
- 將這一ä½åŒ–身由你的土地踢出?
+ 將這一個化身由你的土地踢出?
<usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="踢出"/>
</notification>
<notification name="EjectAvatarFullnameNoBan">
@@ -527,10 +527,10 @@ Do you really want to give these items?
<usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="踢出"/>
</notification>
<notification name="EjectAvatarFromGroup">
- 你已將 [AVATAR_NAME] 由社團 [GROUP_NAME] 中踢出
+ 你已將 [AVATAR_NAME] 由群組 [GROUP_NAME] 中踢出
</notification>
<notification name="AcquireErrorTooManyObjects">
- ACQUIRE ERROR: Too many objects selected.
+ å–得錯誤:太多物件被é¸å–。
</notification>
<notification name="AcquireErrorObjectSpan">
ACQUIRE ERROR: Objects span more than one region.
@@ -605,7 +605,7 @@ Expected [VALIDS]
[FILE]
</notification>
<notification name="SoundFileInvalidTooLong">
- Audio file is too long (10 second maximum):
+ 音頻檔太長(最大值 10 秒):
[FILE]
</notification>
<notification name="ProblemWithFile">
@@ -738,8 +738,8 @@ If you continue to get this message, please check the [SUPPORT_SITE].
æ”¶ç´å€åŠŸèƒ½ç›®å‰ç„¡æ³•使用。
</notification>
<notification name="CannotSetLandOwnerNothingSelected">
- Unable to set land owner:
-No parcel selected.
+ ç„¡æ³•è¨­å®šåœŸåœ°æ“æœ‰è€…:
+無地段被é¸å–。
</notification>
<notification name="CannotSetLandOwnerMultipleRegions">
Unable to force land ownership because selection spans multiple regions. Please select a smaller area and try again.
@@ -762,8 +762,8 @@ No region selected.
No parcel selected.
</notification>
<notification name="CannotReleaseLandNoRegion">
- Unable to abandon land:
-Cannot find region.
+ 無法放棄土地:
+無法尋找地å€ã€‚
</notification>
<notification name="CannotBuyLandNothingSelected">
Unable to buy land:
@@ -778,11 +778,11 @@ Cannot find the region this land is in.
</notification>
<notification name="CannotDeedLandNothingSelected">
Unable to deed land:
-No parcel selected.
+無地段被é¸å–。
</notification>
<notification name="CannotDeedLandNoGroup">
Unable to deed land:
-No Group selected.
+無群組被é¸å–。
</notification>
<notification name="CannotDeedLandNoRegion">
Unable to deed land:
@@ -1377,11 +1377,11 @@ We must restart [APP_NAME] to install the update.
<notification name="DeedObjectToGroup">
Deeding this object will cause the group to:
* Receive L$ paid into the object
- <usetemplate ignoretext="Confirm before I deed an object to a group" name="okcancelignore" notext="å–æ¶ˆ" yestext="Deed"/>
+ <usetemplate ignoretext="在我讓渡一個物件給群組å‰ç¢ºèª" name="okcancelignore" notext="å–æ¶ˆ" yestext="Deed"/>
</notification>
<notification name="WebLaunchExternalTarget">
- Do you want to open your Web browser to view this content?
- <usetemplate ignoretext="Launch my browser to view a web page" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ 你確定è¦é–‹å•Ÿç¶²é ç€è¦½å™¨åŽ»å¯Ÿçœ‹é€™å€‹å…§å®¹ï¼Ÿ
+ <usetemplate ignoretext="啟動我的網é ç€è¦½å™¨åŽ»å¯Ÿçœ‹ç¶²é " name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="WebLaunchJoinNow">
å‰å¾€ä½ çš„[http://secondlife.com/account/ 塗鴉牆]以進行管ç†ä½ çš„帳戶?
@@ -1389,37 +1389,37 @@ We must restart [APP_NAME] to install the update.
</notification>
<notification name="WebLaunchSecurityIssues">
Visit the [SECOND_LIFE] Wiki for details of how to report a security issue.
- <usetemplate ignoretext="Launch my browser to learn how to report a Security Issue" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å­¸ç¿’如何回報一個安全性的議題" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="WebLaunchQAWiki">
- Visit the [SECOND_LIFE] QA Wiki.
- <usetemplate ignoretext="Launch my browser to view the QA Wiki" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ 拜訪 [SECOND_LIFE] å•與答維基。
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨åŽ»å¯Ÿçœ‹å•與答維基" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="WebLaunchPublicIssue">
- Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and other issues.
- <usetemplate ignoretext="Launch my browser to use the Public Issue Tracker" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/>
+ 拜訪 [SECOND_LIFE] 公共議題追蹤,那裡你將å¯ä»¥å›žå ±è‡­èŸ²èˆ‡å…¶ä»–議題。
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥ä½¿ç”¨å…¬å…±è­°é¡Œè¿½è¹¤ã€‚" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/>
</notification>
<notification name="WebLaunchSupportWiki">
å‰å¾€æž—ç™»å®˜æ–¹éƒ¨è½æ ¼ï¼Œä»¥å–得最新的新èžèˆ‡è³‡è¨Šã€‚
- <usetemplate ignoretext="Launch my browser to view the blog" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å¯Ÿçœ‹éƒ¨è½æ ¼" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="WebLaunchLSLGuide">
- Do you want to open the Scripting Guide for help with scripting?
- <usetemplate ignoretext="Launch my browser to view the Scripting Guide" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ ä½ è¦é–‹å•Ÿè…³æœ¬æ’°å¯«æŒ‡å¼•以幫助你開發腳本嗎?
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å¯Ÿçœ‹è…³æœ¬æ’°å¯«æŒ‡å¼•" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="WebLaunchLSLWiki">
- Do you want to visit the LSL Portal for help with scripting?
- <usetemplate ignoretext="Launch my browser to view the LSL Portal" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/>
+ ä½ è¦æ‹œè¨ª LSL å…¥å£ä»¥å–得腳本設計的幫助嗎?
+ <usetemplate ignoretext="開啟我的網é ç€è¦½å™¨ä»¥å¯Ÿçœ‹ LSL å…¥å£" name="okcancelignore" notext="å–æ¶ˆ" yestext="å‰å¾€é é¢"/>
</notification>
<notification name="ReturnToOwner">
- Are you sure you want to return the selected objects to their owners? Transferable deeded objects will be returned to their previous owners.
+ 你確定è¦é€€å›žæ‰€é¸æ“‡çš„ç‰©ä»¶çµ¦å®ƒå€‘çš„æ“æœ‰è€…嗎? å¯è½‰ç§»ä¸¦è®“渡的物件將會退回給它們的å‰ä¸€ä½æ“有者。
-*WARNING* No-transfer deeded objects will be deleted!
- <usetemplate ignoretext="Confirm before I return objects to their owners" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+*警告* éžå¯è½‰ç§»ä¸¦è®“渡的物件將會被刪除!
+ <usetemplate ignoretext="åœ¨æˆ‘é€€å›žç‰©ä»¶çµ¦å®ƒå€‘çš„æ“æœ‰è€…å‰ç¢ºèª" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="GroupLeaveConfirmMember">
- You are currently a member of the group [GROUP].
-Leave Group?
+ ä½ ç›®å‰æ˜¯ [GROUP] 群組的æˆå“¡ã€‚
+是å¦è¦é›¢é–‹ç¾¤çµ„?
<usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="ConfirmKick">
@@ -1452,12 +1452,12 @@ Leave Group?
<notification name="BusyModeSet">
Busy mode is set.
Chat and instant messages will be hidden. Instant messages will get your Busy mode response. All teleportation offers will be declined. All inventory offers will go to your Trash.
- <usetemplate ignoretext="I change my status to Busy mode" name="okignore" yestext="確定"/>
+ <usetemplate ignoretext="我變更我的狀態為忙碌模å¼" name="okignore" yestext="確定"/>
</notification>
<notification name="JoinedTooManyGroupsMember">
You have reached your maximum number of groups. Please leave another group before joining this one, or decline the offer.
[NAME] has invited you to join a group as a member.
- <usetemplate name="okcancelbuttons" notext="Decline" yestext="Join"/>
+ <usetemplate name="okcancelbuttons" notext="Decline" yestext="加入"/>
</notification>
<notification name="JoinedTooManyGroups">
You have reached your maximum number of groups. Please leave some group before joining or creating a new one.
@@ -1757,7 +1757,7 @@ Publish this classified now for L$[AMOUNT]?
<usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="SetGroupMature">
- Does this group contain Moderate content?
+ 這個群組將包å«é©åº¦æˆäººå…§å®¹ï¼Ÿ
<usetemplate canceltext="å–æ¶ˆ" name="yesnocancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification label="Confirm restart" name="ConfirmRestart">
@@ -1894,7 +1894,7 @@ Move the inventory item(s)?
</notification>
<notification name="DeleteItems">
[QUESTION]
- <usetemplate ignoretext="Confirm before deleting items" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ <usetemplate ignoretext="刪除物å“å‰ç¢ºèª" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="HelpReportAbuseEmailLL">
Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
@@ -1955,37 +1955,37 @@ Do you want to replace it with the selected object?
Would you like to leave Busy Mode before completing this transaction?
<form name="form">
- <ignore name="ignore" text="I am about to pay a person or object while I am in Busy mode"/>
- <button ignore="Always leave Busy Mode" name="Yes" text="確定"/>
- <button ignore="Never leave Busy Mode" name="No" text="å–æ¶ˆ"/>
+ <ignore name="ignore" text="ç•¶æˆ‘åœ¨å¿™ç¢Œæ¨¡å¼æ™‚ï¼Œå°‡è¦æ”¯ä»˜é‡‘錢或給他人物件"/>
+ <button ignore="總是離開忙碌模å¼" name="Yes" text="確定"/>
+ <button ignore="絕ä¸é›¢é–‹å¿™ç¢Œæ¨¡å¼" name="No" text="å–æ¶ˆ"/>
</form>
</notification>
<notification name="ConfirmDeleteProtectedCategory">
- The folder &apos;[FOLDERNAME]&apos; is a system folder. Deleting system folders can cause instability. Are you sure you want to delete it?
- <usetemplate ignoretext="Confirm before I delete a system folder" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ 資料夾 &apos;[FOLDERNAME]&apos; 是系統資料夾。刪除系統資料夾將導致ä¸ç©©å®šã€‚你確定你è¦åˆªé™¤å®ƒï¼Ÿ
+ <usetemplate ignoretext="在我刪除系統資料夾å‰ç¢ºèª" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="ConfirmEmptyTrash">
- Are you sure you want to permanently delete the contents of your Trash?
- <usetemplate ignoretext="Confirm before I empty the inventory Trash folder" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ 你確定你è¦å°ä½ åžƒåœ¾ç­’中的內容進行刪除?
+ <usetemplate ignoretext="在我清空收ç´å€åžƒåœ¾ç­’資料夾å‰ç¢ºèª" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="ConfirmClearBrowserCache">
- Are you sure you want to delete your travel, web, and search history?
+ 你確定è¦åˆªé™¤ä½ çš„æ—…行ã€ç¶²é åŠæœå°‹æ­·å²ç´€éŒ„嗎?
<usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="ConfirmClearCookies">
- Are you sure you want to clear your cookies?
+ ä½ ç¢ºå®šè¦æ¸…除你的 cookies 嗎?
<usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="是"/>
</notification>
<notification name="ConfirmClearMediaUrlList">
- Are you sure you want to clear your list of saved URLs?
+ ä½ ç¢ºå®šè¦æ¸…除你所儲存的 Url 清單嗎?
<usetemplate name="okcancelbuttons" notext="å–æ¶ˆ" yestext="是"/>
</notification>
<notification name="ConfirmEmptyLostAndFound">
- Are you sure you want to permanently delete the contents of your Lost And Found?
- <usetemplate ignoretext="Confirm before I empty the inventory Lost And Found folder" name="okcancelignore" notext="å¦" yestext="是"/>
+ 你確定你è¦é€²è¡Œåˆªé™¤æ‰€æœ‰ Lost And Found 資料夾中的內容?
+ <usetemplate ignoretext="在我清空收ç´å€ä¸­çš„ Lost And Found 資料夾å‰é€²è¡Œç¢ºèª" name="okcancelignore" notext="å¦" yestext="是"/>
</notification>
<notification name="CopySLURL">
- The following SLurl has been copied to your clipboard:
+ 下列的 SLurl ä½ç½®å·²ç¶“覆製到你的剪貼簿上:
[SLURL]
Link to this from a web page to give others easy access to this location, or try it out yourself by pasting it into the address bar of any web browser.
@@ -1994,11 +1994,11 @@ Link to this from a web page to give others easy access to this location, or try
</form>
</notification>
<notification name="WLSavePresetAlert">
- Do you wish to overwrite the saved preset?
- <usetemplate name="okcancelbuttons" notext="No" yestext="是"/>
+ ä½ è¦è¦†å¯«å·²å„²å­˜çš„é è¨­é…置嗎?
+ <usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="WLDeletePresetAlert">
- Do you wish to delete [SKY]?
+ ä½ è¦åˆªé™¤ [SKY]?
<usetemplate name="okcancelbuttons" notext="å¦" yestext="是"/>
</notification>
<notification name="WLNoEditDefault">
@@ -2015,7 +2015,7 @@ Link to this from a web page to give others easy access to this location, or try
Give me a name for the new sky.
<form name="form">
<input name="message">
- New Preset
+ æ–°é è¨­é…é…ç½®
</input>
<button name="OK" text="確定"/>
<button name="Cancel" text="å–æ¶ˆ"/>
@@ -2094,13 +2094,13 @@ Link to this from a web page to give others easy access to this location, or try
[MESSAGE]
</notification>
<notification name="Cancelled">
- Cancelled
+ 已喿¶ˆ
</notification>
<notification name="CancelledSit">
- Cancelled Sit
+ å–æ¶ˆå下
</notification>
<notification name="CancelledAttach">
- Cancelled Attach
+ å–æ¶ˆè²¼ä¸Š
</notification>
<notification name="ReplacedMissingWearable">
Replaced missing clothing/body part with default.
@@ -2131,13 +2131,13 @@ Link to this from a web page to give others easy access to this location, or try
In-world snapshot upload done
</notification>
<notification name="TerrainDownloaded">
- Terrain.raw downloaded
+ 地形 .raw 檔已下載
</notification>
<notification name="GestureMissing">
- Hmm. Gesture [NAME] is missing from the database.
+ 嗯,姿勢 [NAME] 在資料庫中éºå¤±ã€‚
</notification>
<notification name="UnableToLoadGesture">
- Unable to load gesture [NAME].
+ 無法載入姿勢 [NAME]。
</notification>
<notification name="LandmarkMissing">
資料庫中的地標éºå¤±ã€‚
@@ -2146,30 +2146,30 @@ Link to this from a web page to give others easy access to this location, or try
無法載入地標,請å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="CapsKeyOn">
- Your Caps Lock key is on.
-This might affect your password.
+ 你的大寫éµå·²å•Ÿç”¨ã€‚
+這將å¯èƒ½æœƒå½±éŸ¿åˆ°ä½ è¼¸å…¥çš„密碼。
</notification>
<notification name="NotecardMissing">
- Notecard is missing from database.
+ 記事å¡åœ¨è³‡æ–™åº«ä¸­éºå¤±ã€‚
</notification>
<notification name="NotecardNoPermissions">
- You don&apos;t have permission to view this notecard.
+ 你並沒有權é™åŽ»å¯Ÿçœ‹é€™å€‹è¨˜äº‹å¡ã€‚
</notification>
<notification name="RezItemNoPermissions">
- Insufficient permissions to rez object.
+ 產生物件時發生權é™è¡çªã€‚
</notification>
<notification name="UnableToLoadNotecard">
- Unable to load notecard.
-Please try again.
+ 無法載入記事å¡ã€‚
+è«‹å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="ScriptMissing">
- Script is missing from database.
+ 腳本在資料庫中éºå¤±ã€‚
</notification>
<notification name="ScriptNoPermissions">
- Insufficient permissions to view script.
+ 察看腳本時發生權é™è¡çªã€‚
</notification>
<notification name="UnableToLoadScript">
- Unable to load script. Please try again.
+ 無法載入腳本。請å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="IncompleteInventory">
The complete contents you are offering are not yet locally available. Please try offering those items again in a minute.
@@ -2193,31 +2193,31 @@ Please try again.
Please select a single object.
</notification>
<notification name="ObjectNotForSale">
- This object is not for sale.
+ 這物件ä¸å‡ºå”®ã€‚
</notification>
<notification name="EnteringGodMode">
- Entering god mode, level [LEVEL]
+ 進入神之模å¼ä¸­ï¼Œç­‰ç´š [LEVEL]
</notification>
<notification name="LeavingGodMode">
- Now leaving god mode, level [LEVEL]
+ ç¾åœ¨é›¢é–‹ç¥žä¹‹æ¨¡å¼ï¼Œç­‰ç´š [LEVEL]
</notification>
<notification name="CopyFailed">
- You don&apos;t have permission to copy this.
+ 你並沒有權é™åŽ»è¦†è£½é€™å€‹ã€‚
</notification>
<notification name="InventoryAccepted">
- [NAME] received your inventory offer.
+ [NAME] 接收到你æä¾›çš„æ”¶ç´å€ç‰©å“。
</notification>
<notification name="InventoryDeclined">
- [NAME] declined your inventory offer.
+ [NAME] 拒絕你æä¾›çš„æ”¶ç´å€ç‰©å“。
</notification>
<notification name="ObjectMessage">
[NAME]: [MESSAGE]
</notification>
<notification name="CallingCardAccepted">
- Your calling card was accepted.
+ ä½ çš„å片已被接å—。
</notification>
<notification name="CallingCardDeclined">
- Your calling card was declined.
+ ä½ çš„å片已被拒絕。
</notification>
<notification name="TeleportToLandmark">
You can teleport to locations like &apos;[NAME]&apos; by opening the Places panel on the right side of your screen, and then select the Landmarks tab.
@@ -2249,12 +2249,12 @@ Try selecting a smaller piece of land.
[MESSAGE]
</notification>
<notification name="EventNotification">
- Event Notification:
+ 活動通知:
[NAME]
[DATE]
<form name="form">
- <button name="Details" text="Details"/>
+ <button name="Details" text="細節"/>
<button name="Cancel" text="å–æ¶ˆ"/>
</form>
</notification>
@@ -2312,8 +2312,8 @@ Non-transferable objects that are deeded to the group have been deleted.
You can be hurt here. If you die, you will be teleported to your home location.
</notification>
<notification name="NoFly">
- This area has flying disabled.
-You can&apos;t fly here.
+ 這å€åŸŸé—œé–‰ä¸¦ç¦æ­¢é£›è¡Œã€‚
+ä½ ä¸èƒ½åœ¨æ­¤è™•飛行。
</notification>
<notification name="PushRestricted">
This area does not allow pushing. You can&apos;t push others here unless you own the land.
@@ -2353,13 +2353,13 @@ Please go to the Knowledge Base for details on accessing areas with this maturit
You do not have proper payment status to enter this region.
</notification>
<notification name="MustGetAgeRgion">
- You must be age-verified to enter this region.
+ 你必須通éŽå¹´é½¡èªè­‰ä»¥é€²å…¥é€™åœ°å€ã€‚
</notification>
<notification name="MustGetAgeParcel">
- You must be age-verified to enter this parcel.
+ 你必須通éŽå¹´é½¡é©—證以進入這地段。
</notification>
<notification name="NoDestRegion">
- No destination region found.
+ 無目的地地å€ç™¼ç¾ã€‚
</notification>
<notification name="NotAllowedInDest">
You are not allowed into the destination.
@@ -2381,10 +2381,10 @@ Please go to the Knowledge Base for details on accessing areas with this maturit
Please try again in a few moments.
</notification>
<notification name="GeneralFailure">
- General failure.
+ 一般故障。
</notification>
<notification name="RoutedWrongRegion">
- Routed to wrong region. Please try again.
+ 路由導å‘到錯誤地å€ã€‚è«‹å†è©¦ä¸€æ¬¡ã€‚
</notification>
<notification name="NoValidAgentID">
No valid agent id.
@@ -2418,7 +2418,7 @@ Please try again in a few moments.
</notification>
<notification name="ObjectGiveItem">
An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] has given you this [OBJECTTYPE]:
-[ITEM_SLURL]
+&lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;
<form name="form">
<button name="Keep" text="Keep"/>
<button name="Discard" text="Discard"/>
@@ -2442,7 +2442,7 @@ Please try again in a few moments.
<notification name="JoinGroup">
[MESSAGE]
<form name="form">
- <button name="Join" text="Join"/>
+ <button name="Join" text="加入"/>
<button name="Decline" text="Decline"/>
<button name="Info" text="資訊"/>
</form>
@@ -2709,15 +2709,15 @@ They will be blocked for a few seconds for your security.
<notification name="IMToast">
[MESSAGE]
<form name="form">
- <button name="respondbutton" text="Respond"/>
+ <button name="respondbutton" text="回應"/>
</form>
</notification>
<notification name="ConfirmCloseAll">
- Are you sure you want to close all IMs?
- <usetemplate ignoretext="Confirm before I close all IMs" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ 你確定è¦é—œé–‰å…¨éƒ¨ IMs å°è©±è¦–窗?
+ <usetemplate ignoretext="在我關閉全部的 IMs å°è©±è¦–窗å‰ç¢ºèªã€‚" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification name="AttachmentSaved">
- Attachment has been saved.
+ 附件已儲存。
</notification>
<notification name="UnableToFindHelpTopic">
Unable to find the help topic for this element.
@@ -2831,7 +2831,7 @@ This will also cause all residents that later join the call to be
muted, even after you have left the call.
Mute everyone?
- <usetemplate ignoretext="Confirm before I mute all participants in a group call" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
+ <usetemplate ignoretext="åœ¨æˆ‘å°æ‰€æœ‰ç¾¤çµ„通話的åƒèˆ‡è€…予以éœéŸ³å‰ç¢ºèª" name="okcancelignore" notext="å–æ¶ˆ" yestext="確定"/>
</notification>
<notification label="èŠå¤©" name="HintChat">
To join the conversation, type into the chat field below.
@@ -2875,10 +2875,10 @@ Click and drag anywhere on the world to rotate your view
Here&apos;s your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
</notification>
<notification name="PopupAttempt">
- A pop-up was prevented from opening.
+ 一個çªé¡¯å¼è¦–窗開啟時被阻擋。
<form name="form">
- <ignore name="ignore" text="Enable all pop-ups"/>
- <button name="open" text="Open pop-up window"/>
+ <ignore name="ignore" text="啟用全部的çªé¡¯å¼è¦–窗"/>
+ <button name="open" text="開啟çªé¡¯å¼è¦–窗"/>
</form>
</notification>
<notification name="AuthRequest">
@@ -2943,10 +2943,10 @@ If you continue to have problems, please visit the [SUPPORT_SITE].
- Your system memory does not meet the minimum requirements.
</global>
<global name="You can only set your &apos;Home Location&apos; on your land or at a mainland Infohub.">
- If you own a piece of land, you can make it your home location.
-Otherwise, you can look at the Map and find places marked &quot;Infohub&quot;.
+ è‹¥ä½ æ“æœ‰ä¸€å¡ŠåœŸåœ°ï¼Œä½ å¯ä»¥æ¨™è¨˜å®ƒæˆç‚ºä½ çš„å®¶çš„ä½ç½®ã€‚
+或者,你å¯ä»¥å¯Ÿçœ‹åœ°åœ–尋找標記為 &quot;資訊中心&quot; 的地方。
</global>
<global name="You died and have been teleported to your home location">
- You died and have been teleported to your home location.
+ 你已經死亡並且被瞬間傳é€å›žä½ çš„å®¶çš„ä½ç½®ã€‚
</global>
</notifications>
diff --git a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
index 9ef4258f0b..1dfa024138 100644
--- a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
@@ -3,8 +3,8 @@
<text name="title_text">
å°éŽ–æ¸…å–®
</text>
- <scroll_list name="blocked" tool_tip="List of currently blocked Residents"/>
- <button label="Block person" name="Block resident..." tool_tip="Pick a Resident to block"/>
- <button label="Block object by name" name="Block object by name..." tool_tip="Pick an object to block by name"/>
- <button label="Unblock" name="Unblock" tool_tip="Remove Resident or object from blocked list"/>
+ <scroll_list name="blocked" tool_tip="ç›®å‰å°éŽ–çš„å±…æ°‘æ¸…å–®"/>
+ <button label="å°éŽ–ä»–äºº" name="Block resident..." tool_tip="挑é¸ä¸€ä½å±…民以進行å°éŽ–"/>
+ <button label="ä¾å稱å°éŽ–ç‰©ä»¶" name="Block object by name..." tool_tip="ä¾å稱挑é¸ä¸€å€‹ç‰©ä»¶é€²è¡Œå°éŽ–"/>
+ <button label="解除å°éŽ–" name="Unblock" tool_tip="將居民或物件由å°éŽ–æ¸…å–®ä¸­ç§»é™¤"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_classified_info.xml b/indra/newview/skins/default/xui/zh/panel_classified_info.xml
index 94edb7ab71..cf3113ef1c 100644
--- a/indra/newview/skins/default/xui/zh/panel_classified_info.xml
+++ b/indra/newview/skins/default/xui/zh/panel_classified_info.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_classified_info">
<panel.string name="type_mature">
- Moderate
+ é©åº¦æˆäºº
</panel.string>
<panel.string name="type_pg">
- General Content
+ 一般普級內容
</panel.string>
<panel.string name="l$_price">
L$[PRICE]
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml b/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
index 73c59d9ae3..6b17302bf1 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
@@ -2,11 +2,11 @@
<panel name="edit_alpha_panel">
<scroll_container name="avatar_alpha_color_panel_scroll">
<panel name="avatar_alpha_color_panel">
- <texture_picker label="Lower Alpha" name="Lower Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Upper Alpha" name="Upper Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Head Alpha" name="Head Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Eye Alpha" name="Eye Alpha" tool_tip="點擊以挑é¸åœ–片"/>
- <texture_picker label="Hair Alpha" name="Hair Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="下åŠèº«åŠé€æ˜Ž" name="Lower Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="上åŠèº«åŠé€æ˜Ž" name="Upper Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="頭部åŠé€æ˜Ž" name="Head Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="眼ç›åŠé€æ˜Ž" name="Eye Alpha" tool_tip="點擊以挑é¸åœ–片"/>
+ <texture_picker label="é ­é«®åŠé€æ˜Ž" name="Hair Alpha" tool_tip="點擊以挑é¸åœ–片"/>
</panel>
</scroll_container>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
index e749d9e3e7..f12701c981 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
@@ -32,9 +32,9 @@
<button label="Set to Current Location" name="set_to_curr_location_btn"/>
<text name="category_label" value="Category:"/>
<text name="content_type_label" value="Content type:"/>
- <icons_combo_box label="General Content" name="content_type">
- <icons_combo_box.item label="Moderate Content" name="mature_ci" value="Mature"/>
- <icons_combo_box.item label="General Content" name="pg_ci" value="PG"/>
+ <icons_combo_box label="一般普級內容" name="content_type">
+ <icons_combo_box.item label="é©åº¦æˆäººå…§å®¹" name="mature_ci" value="Mature"/>
+ <icons_combo_box.item label="一般普級內容" name="pg_ci" value="PG"/>
</icons_combo_box>
<check_box label="Auto renew each week" name="auto_renew"/>
<text name="price_for_listing_label" value="Price for listing:"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_physics.xml b/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
index 77ee4fd36d..26fedb59be 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
@@ -2,12 +2,12 @@
<panel name="edit_physics_panel">
<panel label="" name="accordion_panel">
<accordion name="physics_accordion">
- <accordion_tab name="physics_breasts_updown_tab" title="Breasts Bounce"/>
- <accordion_tab name="physics_breasts_inout_tab" title="Breasts Cleavage"/>
- <accordion_tab name="physics_breasts_leftright_tab" title="Breasts Sway"/>
- <accordion_tab name="physics_belly_tab" title="Belly Bounce"/>
- <accordion_tab name="physics_butt_tab" title="Butt Bounce"/>
- <accordion_tab name="physics_butt_leftright_tab" title="Butt Sway"/>
+ <accordion_tab name="physics_breasts_updown_tab" title="乳房彈性"/>
+ <accordion_tab name="physics_breasts_inout_tab" title="ä¹³æºæ·±æ·º"/>
+ <accordion_tab name="physics_breasts_leftright_tab" title="ä¹³æˆ¿æ–æ“º"/>
+ <accordion_tab name="physics_belly_tab" title="腹部彈性"/>
+ <accordion_tab name="physics_butt_tab" title="臀部彈性"/>
+ <accordion_tab name="physics_butt_leftright_tab" title="è‡€éƒ¨æ–æ“º"/>
<accordion_tab name="physics_advanced_tab" title="é€²éšŽåƒæ•¸"/>
</accordion>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
index 7bf923b4ca..675caf9e2e 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
@@ -2,7 +2,7 @@
<panel name="edit_shoes_panel">
<panel name="avatar_shoes_color_panel">
<texture_picker label="æè³ª" name="Fabric" tool_tip="點擊以挑é¸åœ–片"/>
- <color_swatch label="Color/Tint" name="Color/Tint" tool_tip="Click to open color picker"/>
+ <color_swatch label="é¡è‰²/色調" name="Color/Tint" tool_tip="點擊以開啟é¡è‰²æŒ‘é¸å™¨"/>
</panel>
<panel name="accordion_panel">
<accordion name="wearable_accordion">
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
index 936a2651ab..066b1fd389 100644
--- a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
@@ -40,13 +40,13 @@
Editing Underpants
</string>
<string name="edit_alpha_title">
- Editing Alpha Mask
+ åŠé€æ˜Žé®ç½©ç·¨è¼¯ä¸­
</string>
<string name="edit_tattoo_title">
- Editing Tattoo
+ 刺é’編輯中
</string>
<string name="edit_physics_title">
- Editing Physics
+ 身體物ç†ç·¨è¼¯ä¸­
</string>
<string name="shape_desc_text">
體形:
@@ -88,13 +88,13 @@
內褲:
</string>
<string name="alpha_desc_text">
- Alpha Mask:
+ åŠé€æ˜Žé®ç½©ï¼š
</string>
<string name="tattoo_desc_text">
刺é’:
</string>
<string name="physics_desc_text">
- Physics:
+ 身體物ç†ï¼š
</string>
<labeled_back_button label="儲存" name="back_btn" tool_tip="å›žåˆ°ç·¨è¼¯è£æ‰®"/>
<text name="edit_wearable_title" value="體形編輯中"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
index 1e3c18f522..3915e80d43 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
@@ -2,16 +2,16 @@
<panel name="panel_im_control_panel">
<layout_stack name="vertical_stack">
<layout_panel name="group_info_btn_panel">
- <button label="社團檔案" name="group_info_btn"/>
+ <button label="群組檔案" name="group_info_btn"/>
</layout_panel>
<layout_panel name="call_btn_panel">
- <button label="Call Group" name="call_btn"/>
+ <button label="群組通話" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
- <button label="Leave Call" name="end_call_btn"/>
+ <button label="çµæŸé€šè©±" name="end_call_btn"/>
</layout_panel>
<layout_panel name="voice_ctrls_btn_panel">
- <button label="Open Voice Controls" name="voice_ctrls_btn"/>
+ <button label="開啟語音控制" name="voice_ctrls_btn"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_general.xml b/indra/newview/skins/default/xui/zh/panel_group_general.xml
index a97a35056b..f70fbf22a8 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_general.xml
@@ -6,7 +6,7 @@
Hover your mouse over the options for more help.
</panel.string>
<panel.string name="group_info_unchanged">
- 一般社團資訊已經被變更
+ 一般群組資訊已經被變更
</panel.string>
<panel.string name="incomplete_member_data_str">
Retrieving member data
@@ -22,7 +22,7 @@ Hover your mouse over the options for more help.
<button label="ç¾åœ¨å°±åŠ å…¥!!" name="btn_join"/>
</panel>
<text_editor name="charter">
- Group Charter
+ 群組è¦ç« 
</text_editor>
<name_list name="visible_members">
<name_list.columns label="æˆå“¡" name="name"/>
@@ -36,11 +36,11 @@ Hover your mouse over the options for more help.
我的頭銜:
</text>
<combo_box name="active_title" tool_tip="Sets the title that appears in your avatar&apos;s name tag when this group is active."/>
- <check_box label="接å—社團通知" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."/>
+ <check_box label="接å—群組通知" name="receive_notices" tool_tip="Sets whether you want to receive Notices from this group. Uncheck this box if this group is spamming you."/>
<check_box label="顯示在我的檔案中" name="list_groups_in_profile" tool_tip="Sets whether you want to show this group in your profile"/>
<panel name="preferences_container">
<text name="group_settngs_label">
- 社團
+ 群組
</text>
<check_box label="任何人都å¯ä»¥åŠ å…¥" name="open_enrollement" tool_tip="Sets whether this group allows new members to join without being invited."/>
<check_box label="加入費用" name="check_enrollment_fee" tool_tip="Sets whether to require an enrollment fee to join the group"/>
@@ -49,8 +49,8 @@ Hover your mouse over the options for more help.
<combo_item name="select_mature">
- 鏿“‡å…§å®¹åˆ†ç´š -
</combo_item>
- <combo_box.item label="Moderate Content" name="mature"/>
- <combo_box.item label="一般內容" name="pg"/>
+ <combo_box.item label="é©åº¦æˆäººå…§å®¹" name="mature"/>
+ <combo_box.item label="一般普級內容" name="pg"/>
</combo_box>
<check_box initial_value="true" label="顯示在æœå°‹ä¸­" name="show_in_group_list" tool_tip="Let people see this group in search results"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
index 320645ea5e..db01edcdb3 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="社團檔案" name="GroupInfo">
+<panel label="群組檔案" name="GroupInfo">
<panel.string name="default_needs_apply_text">
- There are unsaved changes
+ 變更未儲存
</panel.string>
<panel.string name="want_apply_text">
- Do you want to save these changes?
+ ä½ è¦å„²å­˜é€™äº›è®Šæ›´å—Žï¼Ÿ
</panel.string>
<panel.string name="group_join_btn">
- Join (L$[AMOUNT])
+ 加入(L$[AMOUNT])
</panel.string>
<panel.string name="group_join_free">
- Free
+ å…è²»
</panel.string>
<panel name="group_info_top">
<text_editor name="group_name" value="(載入中...)"/>
- <line_editor label="Type your new group name here" name="group_name_editor"/>
+ <line_editor label="在此輸入你的新群組å稱" name="group_name_editor"/>
</panel>
<layout_stack name="layout">
<layout_panel name="group_accordions">
@@ -31,11 +31,11 @@
<button label="èŠå¤©" name="btn_chat"/>
</layout_panel>
<layout_panel name="call_btn_lp">
- <button label="Group Call" name="btn_call" tool_tip="Call this group"/>
+ <button label="群組通話" name="btn_call" tool_tip="與此群組進行通話"/>
</layout_panel>
<layout_panel name="btn_apply_lp">
<button label="儲存" label_selected="儲存" name="btn_apply"/>
- <button label="創造社團" name="btn_create" tool_tip="創造一個新社團"/>
+ <button label="創造群組" name="btn_create" tool_tip="創造一個新群組"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_invite.xml b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
index a1395f454b..07dcb2303e 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_invite.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
@@ -12,7 +12,7 @@
<text name="help_text">
You can select multiple Residents to invite to your group. Click &apos;Open Resident Chooser&apos; to start.
</text>
- <button label="Open Resident Chooser" name="add_button"/>
+ <button label="é–‹å•Ÿå±…æ°‘é¸æ“‡è¦–窗" name="add_button"/>
<name_list name="invitee_list" tool_tip="Hold the Ctrl key and click Resident names to multi-select"/>
<button label="Remove Selected from List" name="remove_button" tool_tip="Removes the Residents selected above from the invite list"/>
<text name="role_text">
@@ -22,6 +22,6 @@
<button label="é€å‡ºé‚€è«‹" name="ok_button"/>
<button label="å–æ¶ˆ" name="cancel_button"/>
<string name="GroupInvitation">
- 社團邀請
+ 群組邀請
</string>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
index 58022c2279..1bf3929683 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
@@ -7,7 +7,7 @@
You don&apos;t have permission to view group owned land
</panel.string>
<panel.string name="epmty_view_group_land_text">
- No entries
+ 沒有項目
</panel.string>
<panel.string name="cant_view_group_accounting_text">
You don&apos;t have permission to view the group&apos;s accounting information.
@@ -16,7 +16,7 @@
載入中...
</panel.string>
<panel.string name="land_contrib_error">
- Unable to set your land contribution
+ 無法設定你的土地æç»
</panel.string>
<panel name="layout_panel_landmoney">
<scroll_list name="group_parcel_list">
@@ -46,7 +46,7 @@
[AREA] m²
</text>
<text name="your_contribution_label">
- Your contribution:
+ ä½ çš„æç»ï¼š
</text>
<text name="your_contribution_units">
m²
@@ -58,7 +58,7 @@
More land credits are needed to support land in use
</text>
<text name="group_money_heading">
- 社團 L$
+ 群組 L$
</text>
</panel>
<tab_container name="group_money_tab_container">
diff --git a/indra/newview/skins/default/xui/zh/panel_group_notices.xml b/indra/newview/skins/default/xui/zh/panel_group_notices.xml
index 65c07e7137..26273dd9ce 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_notices.xml
@@ -10,7 +10,7 @@ You can turn off Notices on the General tab.
</panel.string>
<text name="lbl2">
通知ä¿ç•™ 14 天。
-æ¯å€‹ç¤¾åœ˜ä¸€å¤©æœ€å¤š 200 則
+æ¯å€‹ç¾¤çµ„一天最多 200 則
</text>
<scroll_list name="notice_list">
<scroll_list.columns label="主旨" name="subject"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_notify.xml b/indra/newview/skins/default/xui/zh/panel_group_notify.xml
index 803f34d5a7..00462d8b0b 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_notify.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_notify.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<panel label="instant_message" name="panel_group_notify">
+<panel label="峿™‚訊æ¯" name="panel_group_notify">
<string name="message_max_lines_count" value="7"/>
<string name="subject_font" value="SANSSERIF_BIG"/>
<string name="date_font" value="SANSSERIF"/>
<panel label="header" name="header">
<text name="title" value="Sender Name / Group Name"/>
</panel>
- <text_editor name="message" value="message"/>
+ <text_editor name="message" value="訊æ¯"/>
<text name="attachment" value="Attachment"/>
<button label="確定" name="btn_ok"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
index fff4383893..cf5fc26d14 100644
--- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="æˆå“¡èˆ‡è§’色" name="roles_tab">
<panel.string name="default_needs_apply_text">
- There are unsaved changes
+ 未儲存的設定
</panel.string>
<panel.string name="want_apply_text">
- Do you want to save your changes?
+ ä½ è¦å„²å­˜ä½ çš„變更嗎?
</panel.string>
<tab_container name="roles_tab_container">
<panel label="æˆå“¡" name="members_sub_tab" tool_tip="æˆå“¡">
<panel.string name="help_text">
- You can add or remove Roles assigned to Members.
-Select multiple Members by holding the Ctrl key and
-clicking on their names.
+ ä½ å¯ä»¥æ·»åŠ æˆ–ç§»é™¤ä¸€å€‹è§’è‰²æŒ‡æ´¾çµ¦æˆå“¡ã€‚
+é¸è²¬å¤šå€‹æˆå“¡æ™‚åŒæ™‚按著 Ctrl éµä¸”
+使用滑鼠左éµé»žæ“Šä»–們的å字。
</panel.string>
<panel.string name="donation_area">
[AREA] m²
@@ -55,12 +55,12 @@ things in this group. There&apos;s a broad variety of Abilities.
</tab_container>
<panel name="members_footer">
<text name="static">
- Assigned Roles
+ 指派角色
</text>
<text name="static2">
- Allowed Abilities
+ å…許的能力
</text>
- <scroll_list name="member_allowed_actions" tool_tip="For details of each allowed ability see the abilities tab"/>
+ <scroll_list name="member_allowed_actions" tool_tip="想瞭解有關於å…許的能力的細節請查閱能力é ç±¤"/>
</panel>
<panel name="roles_footer">
<text name="static">
@@ -73,23 +73,23 @@ things in this group. There&apos;s a broad variety of Abilities.
æè¿°
</text>
<text name="static4">
- Assigned Members
+ 指派角色
</text>
<check_box label="Reveal members" name="role_visible_in_list" tool_tip="Sets whether members of this role are visible in the General tab to people outside of the group."/>
<text name="static5">
- Allowed Abilities
+ å…許的能力
</text>
- <scroll_list name="role_allowed_actions" tool_tip="For details of each allowed ability see the abilities tab"/>
+ <scroll_list name="role_allowed_actions" tool_tip="想瞭解有關於æ¯ä¸€é …å…許的能力的細節請查閱能力é ç±¤"/>
</panel>
<panel name="actions_footer">
<text_editor name="action_description">
This Ability is &apos;Eject Members from this Group&apos;. Only an Owner can eject another Owner.
</text_editor>
<text name="static2">
- Roles with this ability
+ 有此能力的角色
</text>
<text name="static3">
- Members with this ability
+ 有此能力的æˆå“¡
</text>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_landmarks.xml b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
index fa907e3d90..eea406170a 100644
--- a/indra/newview/skins/default/xui/zh/panel_landmarks.xml
+++ b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
@@ -4,12 +4,12 @@
<accordion_tab name="tab_favorites" title="最愛列"/>
<accordion_tab name="tab_landmarks" title="我的地標"/>
<accordion_tab name="tab_inventory" title="我的收ç´å€"/>
- <accordion_tab name="tab_library" title="Library"/>
+ <accordion_tab name="tab_library" title="資æºåº«"/>
</accordion>
<panel name="bottom_panel">
<layout_stack name="bottom_panel">
<layout_panel name="options_gear_btn_panel">
- <menu_button name="options_gear_btn" tool_tip="Show additional options"/>
+ <menu_button name="options_gear_btn" tool_tip="顯示é¡å¤–é¸é …"/>
</layout_panel>
<layout_panel name="add_btn_panel">
<button name="add_btn" tool_tip="添加新地標"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
index 059a78cf7d..3e44f2a584 100644
--- a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
@@ -14,7 +14,7 @@
ç›®å‰é é¢ï¼š
</text>
<text name="current_url" tool_tip="The current page for this media source" value=""/>
- <button label="Reset" name="current_url_reset_btn"/>
+ <button label="é‡è¨­" name="current_url_reset_btn"/>
<check_box initial_value="false" label="Auto Loop" name="auto_loop"/>
<check_box initial_value="false" label="First Click Interacts" name="first_click_interact"/>
<check_box initial_value="false" label="Auto Zoom" name="auto_zoom"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
index 3645f471ce..ec62b61c54 100644
--- a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
+++ b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
@@ -17,7 +17,7 @@
<check_box initial_value="false" label="Allow Navigation &amp; Interactivity" name="perms_owner_interact"/>
<check_box initial_value="false" label="顯示控制列" name="perms_owner_control"/>
<text name="group_label">
- 社團:
+ 群組:
</text>
<check_box initial_value="false" label="Allow Navigation &amp; Interactivity" name="perms_group_interact"/>
<check_box initial_value="false" label="顯示控制列" name="perms_group_control"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
index ef56c34b5c..aaaf6bfb94 100644
--- a/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
+++ b/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
@@ -4,7 +4,7 @@
<text name="home_url_fails_some_items_in_whitelist">
Entries that the home page fails against are marked:
</text>
- <button label="Add" name="whitelist_add"/>
+ <button label="添加" name="whitelist_add"/>
<button label="刪除" name="whitelist_del"/>
<text name="home_url_fails_whitelist">
Warning: the home page specified in the General tab fails to pass this whitelist. It has been disabled until a valid entry has been added.
diff --git a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
index 1748d117f4..60a5767d09 100644
--- a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
+++ b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
@@ -9,8 +9,8 @@
<combo_editor label="æœå°‹ [SECOND_LIFE]" name="search_combo_editor"/>
</search_combo_box>
</panel>
- <favorites_bar name="favorite" tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!">
- <label name="favorites_bar_label" tool_tip="Drag Landmarks here for quick access to your favorite places in Second Life!">
+ <favorites_bar name="favorite" tool_tip="拖曳傳é€åœ°æ¨™åˆ°æ­¤ä»¥ä¾¿è®“你在第二人生中能快速傳é€åˆ°ä½ æœ€æ„›çš„地點!!">
+ <label name="favorites_bar_label" tool_tip="拖曳傳é€åœ°æ¨™åˆ°æ­¤ä»¥ä¾¿è®“你在第二人生中能快速傳é€åˆ°ä½ æœ€æ„›çš„地點!!">
最愛列
</label>
<chevron_button name="&gt;&gt;" tool_tip="顯示更多我的最愛"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
index 5ab6837569..6a4b5fcf35 100644
--- a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
@@ -30,9 +30,9 @@
</text>
<combo_box name="show_combo">
<combo_box.item label="全部" name="All"/>
- <combo_box.item label="In this Parcel" name="WithinParcel"/>
- <combo_box.item label="Outside this Parcel" name="OutsideParcel"/>
- <combo_box.item label="On other Avatars" name="OnOthers"/>
+ <combo_box.item label="在此地段內" name="WithinParcel"/>
+ <combo_box.item label="在此地段外部" name="OutsideParcel"/>
+ <combo_box.item label="在其他化身身上" name="OnOthers"/>
</combo_box>
<scroll_list name="media_list">
<scroll_list.columns label="Proximity" name="media_proximity"/>
@@ -53,10 +53,10 @@
<button name="pause_btn" tool_tip="æš«åœæ‰€é¸æ“‡çš„媒體"/>
</layout_panel>
<layout_panel name="volume_slider_ctrl">
- <slider_bar initial_value="0.5" name="volume_slider" tool_tip="Audio volume for selected media"/>
+ <slider_bar initial_value="0.5" name="volume_slider" tool_tip="æ‰€é¸æ“‡çš„媒體之音頻音é‡"/>
</layout_panel>
<layout_panel name="mute">
- <button name="mute_btn" tool_tip="Mute audio on selected media"/>
+ <button name="mute_btn" tool_tip="éœéŸ³æ‰€é¸æ“‡çš„媒體音頻"/>
</layout_panel>
<layout_panel name="zoom">
<button name="zoom_btn" tool_tip="Zoom into selected media"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_notes.xml b/indra/newview/skins/default/xui/zh/panel_notes.xml
index f68fd74d1f..5d0e6760ff 100644
--- a/indra/newview/skins/default/xui/zh/panel_notes.xml
+++ b/indra/newview/skins/default/xui/zh/panel_notes.xml
@@ -27,7 +27,7 @@
<button label="地圖" name="show_on_map_btn" tool_tip="Show the Resident on the map"/>
</layout_panel>
<layout_panel name="teleport_btn_lp">
- <button label="瞬間傳é€" name="teleport" tool_tip="Offer teleport"/>
+ <button label="瞬間傳é€" name="teleport" tool_tip="發給瞬間傳é€è«‹æ±‚"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
index 39a9bcb848..693cdcdeca 100644
--- a/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
+++ b/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="Wearing">
<panel name="bottom_panel">
- <menu_button name="options_gear_btn" tool_tip="Show additional options"/>
+ <menu_button name="options_gear_btn" tool_tip="顯示é¡å¤–é¸é …"/>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_people.xml b/indra/newview/skins/default/xui/zh/panel_people.xml
index 8da75e334e..c97ff2ae96 100644
--- a/indra/newview/skins/default/xui/zh/panel_people.xml
+++ b/indra/newview/skins/default/xui/zh/panel_people.xml
@@ -14,18 +14,18 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<string name="no_filtered_friends_msg">
Didn&apos;t find what you&apos;re looking for? Try [secondlife:///app/search/people/[SEARCH_TERM] Search].
</string>
- <string name="people_filter_label" value="Filter People"/>
- <string name="groups_filter_label" value="Filter Groups"/>
- <string name="no_filtered_groups_msg" value="Didn&apos;t find what you&apos;re looking for? Try [secondlife:///app/search/groups/[SEARCH_TERM] Search]."/>
- <string name="no_groups_msg" value="Looking for Groups to join? Try [secondlife:///app/search/groups Search]."/>
- <string name="MiniMapToolTipMsg" value="[REGION](Double-click to open Map, shift-drag to pan)"/>
- <string name="AltMiniMapToolTipMsg" value="[REGION](Double-click to teleport, shift-drag to pan)"/>
- <filter_editor label="Filter" name="filter_input"/>
+ <string name="people_filter_label" value="äººå“¡éŽæ¿¾å™¨"/>
+ <string name="groups_filter_label" value="ç¾¤çµ„éŽæ¿¾å™¨"/>
+ <string name="no_filtered_groups_msg" value="沒有發ç¾ä½ è¦æ‰¾çš„嗎?何ä¸è©¦è©¦ [secondlife:///app/search/groups/[SEARCH_TERM] æœå°‹]。"/>
+ <string name="no_groups_msg" value="想找尋群組加入嗎?何ä¸è©¦è©¦ [secondlife:///app/search/groups æœå°‹]。"/>
+ <string name="MiniMapToolTipMsg" value="[REGION](雙擊以開啟地圖,按下 shift 鵿‹–曳來平移)"/>
+ <string name="AltMiniMapToolTipMsg" value="[REGION](雙擊以瞬間傳é€ï¼ŒæŒ‰ä¸‹ shift 鵿‹–曳來平移)"/>
+ <filter_editor label="éŽæ¿¾å™¨" name="filter_input"/>
<tab_container name="tabs">
<panel label="附近" name="nearby_panel">
<panel label="bottom_panel" name="bottom_panel">
<menu_button name="nearby_view_sort_btn" tool_tip="é¸é …"/>
- <button name="add_friend_btn" tool_tip="Add selected Resident to your friends List"/>
+ <button name="add_friend_btn" tool_tip="æ·»åŠ å·²é¸æ“‡çš„居民到Adä½ çš„æœ‹å‹æ¸…å–®"/>
</panel>
</panel>
<panel label="我的朋å‹" name="friends_panel">
@@ -39,55 +39,55 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
<menu_button name="friends_viewsort_btn" tool_tip="顯示é¡å¤–é¸é …"/>
</layout_panel>
<layout_panel name="add_btn_panel">
- <button name="add_btn" tool_tip="Offer friendship to a Resident"/>
+ <button name="add_btn" tool_tip="å‘å±…æ°‘æå‡ºåŠ ç‚ºå¥½å‹é‚€è«‹"/>
</layout_panel>
<layout_panel name="trash_btn_panel">
- <dnd_button name="del_btn" tool_tip="Remove selected person from your Friends list"/>
+ <dnd_button name="del_btn" tool_tip="ç”±ä½ çš„æœ‹å‹æ¸…å–®ç§»é™¤æ‰€é¸æ“‡çš„人"/>
</layout_panel>
</layout_stack>
</panel>
</panel>
- <panel label="我的社團" name="groups_panel">
+ <panel label="我的群組" name="groups_panel">
<panel label="bottom_panel" name="bottom_panel">
<menu_button name="groups_viewsort_btn" tool_tip="é¸é …"/>
- <button name="plus_btn" tool_tip="Join group/Create new group"/>
- <button name="activate_btn" tool_tip="Activate selected group"/>
+ <button name="plus_btn" tool_tip="加入群組/創立新群組"/>
+ <button name="activate_btn" tool_tip="å•Ÿç”¨æ‰€é¸æ“‡çš„群組"/>
</panel>
</panel>
- <panel label="RECENT" name="recent_panel">
+ <panel label="最近" name="recent_panel">
<panel label="bottom_panel" name="bottom_panel">
<menu_button name="recent_viewsort_btn" tool_tip="é¸é …"/>
- <button name="add_friend_btn" tool_tip="Add selected Resident to your friends List"/>
+ <button name="add_friend_btn" tool_tip="添加所é¸çš„å±…æ°‘åˆ°ä½ çš„æœ‹å‹æ¸…å–®"/>
</panel>
</panel>
</tab_container>
<panel name="button_bar">
<layout_stack name="bottom_bar_ls">
<layout_panel name="view_profile_btn_lp">
- <button label="檔案" name="view_profile_btn" tool_tip="Show picture, groups, and other Residents information"/>
+ <button label="檔案" name="view_profile_btn" tool_tip="顯示圖片ã€ç¾¤çµ„與其他居民資訊"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
<button label="IM" name="im_btn" tool_tip="é–‹å•Ÿå³æ™‚è¨Šæ¯æœƒè©±"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="通話" name="call_btn" tool_tip="Call this Resident"/>
+ <button label="通話" name="call_btn" tool_tip="與此居民進行通話"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
<button label="分享" name="share_btn" tool_tip="分享一個收ç´å€ç‰©å“"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="瞬間傳é€" name="teleport_btn" tool_tip="Offer teleport"/>
+ <button label="瞬間傳é€" name="teleport_btn" tool_tip="發給瞬間傳é€è«‹æ±‚"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
<layout_panel name="group_info_btn_lp">
- <button label="社團檔案" name="group_info_btn" tool_tip="顯示社團資訊"/>
+ <button label="群組檔案" name="group_info_btn" tool_tip="顯示群組資訊"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="Group Chat" name="chat_btn" tool_tip="開啟èŠå¤©æœƒè©±"/>
+ <button label="群組èŠå¤©" name="chat_btn" tool_tip="開啟èŠå¤©æœƒè©±"/>
</layout_panel>
<layout_panel name="group_call_btn_lp">
- <button label="Group Call" name="group_call_btn" tool_tip="Call this group"/>
+ <button label="群組通話" name="group_call_btn" tool_tip="與此群組進行通話"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_picks.xml b/indra/newview/skins/default/xui/zh/panel_picks.xml
index a233092dc2..15733b71b0 100644
--- a/indra/newview/skins/default/xui/zh/panel_picks.xml
+++ b/indra/newview/skins/default/xui/zh/panel_picks.xml
@@ -19,7 +19,7 @@
<button label="資訊" name="info_btn" tool_tip="顯示精é¸åœ°é»žè³‡è¨Š"/>
</layout_panel>
<layout_panel name="teleport_btn_lp">
- <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°ç›¸å°æ‡‰çš„å€åŸŸ"/>
+ <button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°çš„å€åŸŸ"/>
</layout_panel>
<layout_panel name="show_on_map_btn_lp">
<button label="地圖" name="show_on_map_btn" tool_tip="åœ¨ä¸–ç•Œåœ°åœ–ä¸Šé¡¯ç¤ºç›¸å°æ‡‰çš„å€åŸŸ"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_place_profile.xml b/indra/newview/skins/default/xui/zh/panel_place_profile.xml
index aa7b036398..d7bcb0d027 100644
--- a/indra/newview/skins/default/xui/zh/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_place_profile.xml
@@ -4,33 +4,33 @@
<string name="off" value="Off"/>
<string name="anyone" value="Anyone"/>
<string name="available" value="available"/>
- <string name="allocated" value="allocated"/>
+ <string name="allocated" value="已分é…"/>
<string name="title_place" value="地點檔案"/>
<string name="title_teleport_history" value="çž¬é–“å‚³é€æ­·å²ç´€éŒ„"/>
- <string name="not_available" value="(N\A)"/>
+ <string name="not_available" value="(N\A)"/>
<string name="unknown" value="(未知)"/>
<string name="public" value="(公開)"/>
<string name="none_text" value="(無)"/>
<string name="sale_pending_text" value="(擱置銷售)"/>
- <string name="group_owned_text" value="ï¼ˆç¤¾åœ˜æ‰€æ“æœ‰ï¼‰"/>
+ <string name="group_owned_text" value="ï¼ˆç¾¤çµ„æ‰€æ“æœ‰ï¼‰"/>
<string name="price_text" value="L$"/>
<string name="area_text" value="m²"/>
<string name="all_residents_text" value="全部居民"/>
- <string name="group_text" value="社團"/>
+ <string name="group_text" value="群組"/>
<string name="can_resell">
- Purchased land in this region may be resold.
+ 購買這地å€çš„土地å…許轉售。
</string>
<string name="can_not_resell">
- Purchased land in this region may not be resold.
+ 購買這地å€çš„土地ä¸å…許轉售。
</string>
<string name="can_change">
- Purchased land in this region may be joined or subdivided.
+ 購買這地å€çš„土地å…許進行åˆä½µæˆ–分割。
</string>
<string name="can_not_change">
- Purchased land in this region may not be joined or subdivided.
+ 購買這地å€çš„土地ä¸å…許進行åˆä½µæˆ–分割。
</string>
<string name="server_update_text">
- Place information not available without server update.
+ 地點資訊因無伺æœå™¨æ›´æ–°æ•…無法æä¾›ã€‚
</string>
<string name="server_error_text">
Information about this location is unavailable at this time, please try again later.
@@ -41,7 +41,7 @@
<string name="acquired_date">
[wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local]
</string>
- <button name="back_btn" tool_tip="Back"/>
+ <button name="back_btn" tool_tip="返回"/>
<text name="title" value="地點檔案"/>
<scroll_container name="place_scroll">
<panel name="scrolling_panel">
@@ -56,7 +56,7 @@
<panel name="parcel_characteristics_panel">
<text name="rating_label" value="分級:"/>
<text name="rating_value" value="未知"/>
- <text name="voice_label" value="Voice:"/>
+ <text name="voice_label" value="語音:"/>
<text name="voice_value" value="On"/>
<text name="fly_label" value="飛行:"/>
<text name="fly_value" value="On"/>
@@ -66,7 +66,7 @@
<text name="build_value" value="On"/>
<text name="scripts_label" value="腳本:"/>
<text name="scripts_value" value="On"/>
- <text name="damage_label" value="Damage:"/>
+ <text name="damage_label" value="商害:"/>
<text name="damage_value" value="Off"/>
<button label="關於土地" name="about_land_btn"/>
</panel>
@@ -78,10 +78,10 @@
<text name="region_type_label" value="類型:"/>
<text name="region_type" value="Moose"/>
<text name="region_rating_label" value="分級:"/>
- <text name="region_rating" value="æˆäºº"/>
+ <text name="region_rating" value="完全æˆäºº"/>
<text name="region_owner_label" value="æ“æœ‰è€…:"/>
<text name="region_owner" value="moose Van Moose extra long name moose"/>
- <text name="region_group_label" value="社團:"/>
+ <text name="region_group_label" value="群組:"/>
<text name="region_group">
The Mighty Moose of mooseville soundvillemoose
</text>
@@ -104,8 +104,8 @@
<text name="traffic_label" value="æµé‡ï¼š"/>
<text name="primitives_label" value="Primitives:"/>
<text name="parcel_scripts_label" value="腳本:"/>
- <text name="terraform_limits_label" value="Terraform limits:"/>
- <text name="subdivide_label" value="Subdivide/Join ability:"/>
+ <text name="terraform_limits_label" value="土地變形é™åˆ¶ï¼š"/>
+ <text name="subdivide_label" value="分割土地/åˆä½µåœŸåœ°èƒ½åŠ›ï¼š"/>
<text name="resale_label" value="ReSale ability:"/>
<text name="sale_to_label" value="出售給:"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml
index c141201ab2..8ac464271e 100644
--- a/indra/newview/skins/default/xui/zh/panel_places.xml
+++ b/indra/newview/skins/default/xui/zh/panel_places.xml
@@ -11,7 +11,7 @@
<button label="瞬間傳é€" name="teleport_btn" tool_tip="瞬間傳é€åˆ°æ‰€é¸æ“‡çš„å€åŸŸ"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="地圖" name="map_btn" tool_tip="Show the corresponding area on the World Map"/>
+ <button label="地圖" name="map_btn" tool_tip="åœ¨ä¸–ç•Œåœ°åœ–ä¸Šé¡¯ç¤ºç›¸å°æ‡‰çš„å€åŸŸ"/>
</layout_panel>
</layout_stack>
</layout_panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
index c691edb11c..c083d40a82 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
@@ -10,7 +10,7 @@
</radio_group>
<check_box initial_value="true" label="èŠå¤©æ™‚播放打字動作" name="play_typing_animation"/>
<check_box label="當我離線時將收到的 IM 訊æ¯éƒµå¯„給我" name="send_im_to_email"/>
- <check_box label="Enable plain text IM and chat history" name="plain_text_chat_history"/>
+ <check_box label="啟用純本文 IM 與èŠå¤©æ­·å²ç´€éŒ„" name="plain_text_chat_history"/>
<check_box label="èŠå¤©æ³¡æ³¡" name="bubble_text_chat"/>
<text name="show_ims_in_label">
顯示 IMs 於:
@@ -23,14 +23,14 @@
<radio_item label="é ç±¤" name="radio2" value="1"/>
</radio_group>
<text name="disable_toast_label">
- Enable incoming chat popups:
+ 啟用傳入èŠå¤©çš„çªé¡¯ç¤ºè¦–窗:
</text>
- <check_box label="Group Chats" name="EnableGroupChatPopups" tool_tip="Check to see popups when a Group Chat message arrives"/>
- <check_box label="IM èŠå¤©" name="EnableIMChatPopups" tool_tip="Check to see popups when an instant message arrives"/>
+ <check_box label="群組èŠå¤©" name="EnableGroupChatPopups" tool_tip="當群組èŠå¤©è¨Šæ¯æŠµé”時查看çªé¡¯å¼è¦–窗"/>
+ <check_box label="IM èŠå¤©" name="EnableIMChatPopups" tool_tip="ç•¶å³æ™‚è¨Šæ¯æŠµé”æ™‚查看çªé¡¯å¼è¦–窗"/>
<spinner label="Nearby chat toasts life time:" name="nearby_toasts_lifetime"/>
<spinner label="Nearby chat toasts fading time:" name="nearby_toasts_fadingtime"/>
<text name="translate_chb_label">
- Use machine translation while chatting (powered by Google)
+ èŠå¤©æ™‚使用機器自動進行翻譯(由 Google 所æä¾›ï¼‰
</text>
<text name="translate_language_text">
èŠå¤©ç¿»è­¯ç‚ºï¼š
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
index b7449dad10..cabe13adb8 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
@@ -23,9 +23,9 @@
我想è¦èƒ½é€²å‡ºå…§å®¹åˆ†ç´šçš„地å€ç‚ºï¼š
</text>
<combo_box name="maturity_desired_combobox">
- <combo_box.item label="General, Moderate, Adult" name="Desired_Adult"/>
- <combo_box.item label="General and Moderate" name="Desired_Mature"/>
- <combo_box.item label="一般" name="Desired_PG"/>
+ <combo_box.item label="一般普級,é©åº¦æˆäººï¼Œå®Œå…¨æˆäºº" name="Desired_Adult"/>
+ <combo_box.item label="一般普級與é©åº¦æˆäºº" name="Desired_Mature"/>
+ <combo_box.item label="一般普級" name="Desired_PG"/>
</combo_box>
<text name="start_location_textbox">
é–‹å§‹ä½ç½®ï¼š
@@ -45,9 +45,9 @@
</radio_group>
<check_box label="我的åå­—" name="show_my_name_checkbox1"/>
<check_box label="使用者å稱" name="show_slids" tool_tip="顯示使用者åç¨±ï¼Œå°±åƒ bobsmith123 這類的"/>
- <check_box label="社團頭銜" name="show_all_title_checkbox1" tool_tip="é¡¯ç¤ºç¤¾åœ˜é ­éŠœï¼Œåƒæ˜¯ Officer 或æˆå“¡"/>
- <check_box label="高亮顯示朋å‹" name="show_friends" tool_tip="高亮顯示你朋å‹çš„å稱標籤"/>
- <check_box label="View Display Names" name="display_names_check" tool_tip="Check to use display names in chat, IM, name tags, etc."/>
+ <check_box label="群組頭銜" name="show_all_title_checkbox1" tool_tip="é¡¯ç¤ºç¾¤çµ„é ­éŠœï¼Œåƒæ˜¯ Officer 或æˆå“¡"/>
+ <check_box label="高亮標示朋å‹" name="show_friends" tool_tip="高亮顯示你朋å‹çš„å稱標籤"/>
+ <check_box label="察看顯示å稱" name="display_names_check" tool_tip="Check to use display names in chat, IM, name tags, etc."/>
<text name="inworld_typing_rg_label">
按下字æ¯éµï¼š
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
index 8c728bf779..ee8cd9794a 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
@@ -1,47 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="圖形" name="Display panel">
<text name="QualitySpeed">
- Quality and speed:
+ å“質與速度:
</text>
<text name="FasterText">
- Faster
+ 最快
</text>
<text name="BetterText">
- Better
+ 最佳
</text>
<text name="ShadersPrefText">
- Low
+ 低
</text>
<text name="ShadersPrefText2">
- Mid
+ 中
</text>
<text name="ShadersPrefText3">
- High
+ 高
</text>
<text name="ShadersPrefText4">
- Ultra
+ 超高
</text>
<panel label="自訂圖形" name="CustomGraphics Panel">
<text name="ShadersText">
- Shaders:
+ 著色器:
</text>
- <check_box initial_value="true" label="Transparent Water" name="TransparentWater"/>
- <check_box initial_value="true" label="Bump mapping and shiny" name="BumpShiny"/>
- <check_box initial_value="true" label="Basic shaders" name="BasicShaders" tool_tip="Disabling this option may prevent some graphics card drivers from crashing"/>
- <check_box initial_value="true" label="Atmospheric shaders" name="WindLightUseAtmosShaders"/>
+ <check_box initial_value="true" label="æ¸…æ¾ˆé€æ˜Žçš„æ°´" name="TransparentWater"/>
+ <check_box initial_value="true" label="凹凸映射與光澤效果" name="BumpShiny"/>
+ <check_box initial_value="true" label="基本著色" name="BasicShaders" tool_tip="關閉此一é¸é …å¯èƒ½é¿å…部分顯示å¡é©…å‹•ç¨‹å¼ææ¯€ç•¶æ©Ÿ"/>
+ <check_box initial_value="true" label="大氣著色" name="WindLightUseAtmosShaders"/>
<text name="reflection_label">
- Water Reflections:
+ æ°´æ–‡å射:
</text>
<combo_box name="Reflections">
- <combo_box.item label="Minimal" name="0"/>
- <combo_box.item label="Terrain and trees" name="1"/>
+ <combo_box.item label="最å°" name="0"/>
+ <combo_box.item label="地形與樹木" name="1"/>
<combo_box.item label="å…¨éƒ¨éœæ…‹ç‰©ä»¶" name="2"/>
<combo_box.item label="全部化身與物件" name="3"/>
- <combo_box.item label="Everything" name="4"/>
+ <combo_box.item label="一切" name="4"/>
</combo_box>
- <slider label="Avatar Physics:" name="AvatarPhysicsDetail"/>
+ <slider label="化身物ç†ï¼š" name="AvatarPhysicsDetail"/>
<text name="AvatarPhysicsDetailText">
- Low
+ 低
</text>
<slider label="æç¹ªè·é›¢ï¼š" name="DrawDistance"/>
<text name="DrawDistanceMeterText2">
@@ -49,54 +49,54 @@
</text>
<slider label="Max. particle count:" name="MaxParticleCount"/>
<slider label="Max. # of non-impostor avatars:" name="MaxNumberAvatarDrawn"/>
- <slider label="Post process quality:" name="RenderPostProcess"/>
+ <slider label="後製å“質:" name="RenderPostProcess"/>
<text name="MeshDetailText">
- Mesh detail:
+ ç¶²é¢ç´°ç¯€ï¼š
</text>
- <slider label="Objects:" name="ObjectMeshDetail"/>
+ <slider label="物件:" name="ObjectMeshDetail"/>
<slider label="Flexiprims:" name="FlexibleMeshDetail"/>
- <slider label="Trees:" name="TreeMeshDetail"/>
- <slider label="Avatars:" name="AvatarMeshDetail"/>
- <slider label="Terrain:" name="TerrainMeshDetail"/>
- <slider label="Sky:" name="SkyMeshDetail"/>
+ <slider label="樹木:" name="TreeMeshDetail"/>
+ <slider label="化身:" name="AvatarMeshDetail"/>
+ <slider label="地形:" name="TerrainMeshDetail"/>
+ <slider label="天空:" name="SkyMeshDetail"/>
<text name="PostProcessText">
- Low
+ 低
</text>
<text name="ObjectMeshDetailText">
- Low
+ 低
</text>
<text name="FlexibleMeshDetailText">
- Low
+ 低
</text>
<text name="TreeMeshDetailText">
- Low
+ 低
</text>
<text name="AvatarMeshDetailText">
- Low
+ 低
</text>
<text name="TerrainMeshDetailText">
- Low
+ 低
</text>
<text name="SkyMeshDetailText">
- Low
+ 低
</text>
<text name="AvatarRenderingText">
Avatar Rendering:
</text>
<check_box initial_value="true" label="Avatar impostors" name="AvatarImpostors"/>
<check_box initial_value="true" label="Hardware skinning" name="AvatarVertexProgram"/>
- <check_box initial_value="true" label="Avatar cloth" name="AvatarCloth"/>
+ <check_box initial_value="true" label="化身衣æœ" name="AvatarCloth"/>
<text name="TerrainDetailText">
- Terrain detail:
+ 地形細節:
</text>
<radio_group name="TerrainDetailRadio">
- <radio_item label="Low" name="0"/>
- <radio_item label="High" name="2"/>
+ <radio_item label="低" name="0"/>
+ <radio_item label="高" name="2"/>
</radio_group>
--&gt;
</panel>
<button label="套用" label_selected="套用" name="Apply"/>
- <button label="Reset" name="Defaults"/>
+ <button label="é‡è¨­" name="Defaults"/>
<button label="進階" name="Advanced"/>
<button label="硬體" label_selected="硬體" name="GraphicsHardwareButton"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
index de296f72f3..57e3540b3d 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
@@ -5,20 +5,20 @@
<text name="heading2">
自動ä½ç§»ï¼š
</text>
- <check_box label="建造 / 編輯" name="edit_camera_movement" tool_tip="Use automatic camera positioning when entering and exiting edit mode"/>
- <check_box label="編輯外觀" name="appearance_camera_movement" tool_tip="Use automatic camera positioning while in edit mode"/>
- <check_box initial_value="true" label="å´é‚Šæ¬„" name="appearance_sidebar_positioning" tool_tip="Use automatic camera positioning for sidebar"/>
+ <check_box label="建造 / 編輯" name="edit_camera_movement" tool_tip="ä½¿ç”¨é€²å…¥æˆ–é›¢é–‹ç·¨è¼¯æ¨¡å¼æ™‚自動調整æ”影機ä½ç½®åŠŸèƒ½"/>
+ <check_box label="編輯外觀" name="appearance_camera_movement" tool_tip="ä½¿ç”¨ç·¨è¼¯æ¨¡å¼æ™‚自動調整æ”影機ä½ç½®åŠŸèƒ½"/>
+ <check_box initial_value="true" label="å´é‚Šæ¬„" name="appearance_sidebar_positioning" tool_tip="使用開啟å´é‚Šæ¬„時自動調整æ”影機ä½ç½®åŠŸèƒ½"/>
<check_box label="將我顯示於第一人稱視角中" name="first_person_avatar_visible"/>
<text name=" Mouse Sensitivity">
- Mouselook mouse sensitivity:
+ ç¬¬ä¸€äººç¨±è¦–è§’æ»‘é¼ æ•æ„Ÿåº¦ï¼š
</text>
<check_box label="å轉" name="invert_mouse"/>
<check_box label="總是使用方å‘éµç§»å‹•" name="arrow_keys_move_avatar_check"/>
- <check_box label="Tap-tap-hold to run" name="tap_tap_hold_to_run"/>
+ <check_box label="連點按ä½å¾Œè·‘æ­¥" name="tap_tap_hold_to_run"/>
<check_box label="雙擊以D:" name="double_click_chkbox"/>
<radio_group name="double_click_action">
<radio_item label="瞬間傳é€" name="radio_teleport"/>
- <radio_item label="Auto-pilot" name="radio_autopilot"/>
+ <radio_item label="自動導航駕駛" name="radio_autopilot"/>
</radio_group>
<button label="其他設備" name="joystick_setup_button"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
index 89a1a48abf..bd6d465572 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
@@ -8,8 +8,8 @@
(ä½ç½®ã€åœ–åƒã€ç¶²é ã€æœå°‹çš„æ­·å²ç´€éŒ„)
</text>
<check_box label="將我顯示在æœå°‹çš„çµæžœä¸­" name="online_searchresults"/>
- <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¤¾åœ˜çŸ¥é“我在線上" name="online_visibility"/>
- <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¤¾åœ˜å¯ä»¥ IM 或與我通話。" name="voice_call_friends_only_check"/>
+ <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¾¤çµ„çŸ¥é“æˆ‘在線上" name="online_visibility"/>
+ <check_box label="åªæœ‰æˆ‘的朋å‹å’Œç¾¤çµ„å¯ä»¥ IM 或與我通話。" name="voice_call_friends_only_check"/>
<check_box label="ç•¶é€šè©±çµæŸæ™‚關閉麥克風" name="auto_disengage_mic_check"/>
<check_box label="登入時顯示我最愛的地標ä½ç½®ï¼ˆç¶“ç”± &apos;é–‹å§‹æ–¼&apos; 的下拉å¼é¸å–®ï¼‰" name="favorites_on_login_check"/>
<text name="Logs:">
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
index e7a934c5cc..efefb92df6 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
@@ -21,7 +21,7 @@
å¿«å–ä½ç½®ï¼š
</text>
<button label="ç€è¦½" label_selected="ç€è¦½" name="set_cache"/>
- <button label="é‡è¨­" label_selected="é‡è¨­" name="reset_cache"/>
+ <button label="" label_selected="é‡è¨­" name="reset_cache"/>
<text name="Web:">
ç¶²é ï¼š
</text>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
index 305d1e2ac9..3280b9357b 100644
--- a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
@@ -9,7 +9,7 @@
最å°åŒ–時éœéŸ³
</text>
<slider label="按éµéŸ³" name="UI Volume"/>
- <slider label="Ambient" name="Wind Volume"/>
+ <slider label="環境音" name="Wind Volume"/>
<slider label="音效" name="SFX Volume"/>
<slider label="串æµéŸ³æ¨‚" name="Music Volume"/>
<check_box label="已啟用" name="enable_music"/>
@@ -33,7 +33,7 @@
<check_box label="Toggle speak on/off when I press:" name="push_to_talk_toggle_check" tool_tip="When in toggle mode, press and release the trigger key ONCE to switch your microphone on or off. When not in toggle mode, the microphone broadcasts your voice only while the trigger is being held down."/>
<line_editor label="Push-to-Speak trigger" name="modifier_combo"/>
<button label="設定按éµ" name="set_voice_hotkey_button"/>
- <button name="set_voice_middlemouse_button" tool_tip="Reset to Middle Mouse Button"/>
+ <button name="set_voice_middlemouse_button" tool_tip="é‡è¨­æ»‘鼠䏭鵿Œ‰éˆ•"/>
<button label="輸入 / 輸出設備" name="device_settings_btn"/>
<panel label="設備設定" name="device_settings_panel">
<panel.string name="default_text">
diff --git a/indra/newview/skins/default/xui/zh/panel_profile.xml b/indra/newview/skins/default/xui/zh/panel_profile.xml
index fcf7bb64db..502449ac3a 100644
--- a/indra/newview/skins/default/xui/zh/panel_profile.xml
+++ b/indra/newview/skins/default/xui/zh/panel_profile.xml
@@ -36,9 +36,9 @@
<text name="title_acc_status_text" value="帳戶狀態:"/>
<text name="title_partner_text" value="é…å¶ï¼š"/>
<panel name="partner_data_panel">
- <text initial_value="(retrieving)" name="partner_text"/>
+ <text initial_value="(檢索中)" name="partner_text"/>
</panel>
- <text name="title_groups_text" value="社團:"/>
+ <text name="title_groups_text" value="群組:"/>
</panel>
</scroll_container>
</layout_panel>
@@ -47,7 +47,7 @@
<layout_panel name="profile_buttons_panel">
<layout_stack name="bottom_bar_ls">
<layout_panel name="add_friend_btn_lp">
- <button label="加為朋å‹" name="add_friend" tool_tip="Offer friendship to the Resident"/>
+ <button label="加為朋å‹" name="add_friend" tool_tip="發出交å‹é‚€è«‹çµ¦é€™å±…æ°‘"/>
</layout_panel>
<layout_panel name="im_btn_lp">
<button label="IM" name="im" tool_tip="é–‹å•Ÿå³æ™‚è¨Šæ¯æœƒè©±"/>
@@ -56,7 +56,7 @@
<button label="通話" name="call" tool_tip="與這ä½å±…民通話"/>
</layout_panel>
<layout_panel name="chat_btn_lp">
- <button label="瞬間傳é€" name="teleport" tool_tip="Offer teleport"/>
+ <button label="瞬間傳é€" name="teleport" tool_tip="發給瞬間傳é€è«‹æ±‚"/>
</layout_panel>
<layout_panel name="overflow_btn_lp">
<menu_button label="â–¼" name="overflow_btn" tool_tip="支付金錢,或分享收ç´å€çµ¦å±…æ°‘"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
index 315bc0ac8e..ad94c4c7e9 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
@@ -36,7 +36,7 @@
<text_editor name="covenant_editor">
There is no Covenant provided for this Estate.
</text_editor>
- <button label="Reset" name="reset_covenant"/>
+ <button label="é‡è¨­" name="reset_covenant"/>
<text name="covenant_help_text">
Changes to the covenant will show on all parcels in the estate.
</text>
@@ -62,7 +62,7 @@
分級:
</text>
<text name="region_maturity_text">
- æˆäºº
+ 完全æˆäºº
</text>
<text name="resellable_lbl">
轉售:
diff --git a/indra/newview/skins/default/xui/zh/panel_region_debug.xml b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
index 1ffbcbf8fd..ed5e6e9d2c 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
@@ -7,8 +7,8 @@
未知
</text>
<check_box label="關閉腳本" name="disable_scripts_check" tool_tip="關閉這個地å€ç¾åœ¨çš„全部腳本"/>
- <check_box label="Disable Collisions" name="disable_collisions_check" tool_tip="Disable non-avatar collisions in this region"/>
- <check_box label="Disable Physics" name="disable_physics_check" tool_tip="Disable all physics in this region"/>
+ <check_box label="關閉碰撞" name="disable_collisions_check" tool_tip="關閉這個地å€ç¾åœ¨çš„éžåŒ–身碰撞"/>
+ <check_box label="關閉物ç†" name="disable_physics_check" tool_tip="關閉這個地å€ç¾åœ¨çš„全部物ç†"/>
<button label="套用" name="apply_btn"/>
<text name="objret_text_lbl">
物件退回
@@ -23,12 +23,12 @@
<text name="options_text_lbl">
é¸é …:
</text>
- <check_box label="With scripts" name="return_scripts" tool_tip="åªé€€å›žR包å«è…³æœ¬çš„物件"/>
- <check_box label="On someone else&apos;s land" name="return_other_land" tool_tip="Return only objects which are on land belonging to someone else"/>
- <check_box label="In every region of this estate" name="return_estate_wide" tool_tip="Return objects in all of the regions that make up this estate"/>
+ <check_box label="åŒ…å«æœ‰è…³æœ¬" name="return_scripts" tool_tip="åªé€€å›žåŒ…å«è…³æœ¬çš„物件"/>
+ <check_box label="使–¼å…¶ä»–人土地上" name="return_other_land" tool_tip="åªé€€å›žç‰©ä»¶åœ¨å±¬æ–¼æŸå€‹å…¶ä»–人土地上的物件"/>
+ <check_box label="於這個領地內的æ¯ä¸€å€‹åœ°å€" name="return_estate_wide" tool_tip="退回這個領地內全部地å€ä¸­æ¨™è¨˜ç‚ºä»–的物件"/>
<button label="退回" name="return_btn"/>
- <button label="Get Top Colliders..." name="top_colliders_btn" tool_tip="List of objects experiencing the most potential collisions"/>
- <button label="Get Top Scripts..." name="top_scripts_btn" tool_tip="List of objects spending the most time running scripts"/>
+ <button label="å–得最常碰撞的物件..." name="top_colliders_btn" tool_tip="æ¢åˆ—出目å‰é‹ä½œä¸­æœ€å¸¸ç¢°æ’žçš„物件清單"/>
+ <button label="å–得最耗能腳本..." name="top_scripts_btn" tool_tip="æ¢åˆ—出目å‰é‹ä½œä¸­æœ€è€—能的腳本清單"/>
<button label="地å€é‡æ–°å•Ÿå‹•" name="restart_btn" tool_tip="給予兩分é˜å€’æ•¸è¨ˆæ™‚ä¸¦é‡æ–°å•Ÿå‹•"/>
<button label="å»¶é²é‡æ–°å•Ÿå‹•" name="cancel_restart_btn" tool_tip="å»¶é²åœ°å€é‡æ–°å•Ÿå‹•䏀尿™‚"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_estate.xml b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
index 1f1676167b..efa3be2f51 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_estate.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel label="領地" name="Estate">
<text name="estate_help_text">
- Changes to settings on this tab will affect all regions in the estate.
+ 變更此夜籤中的設定會影響這個領地內的全部地å€è¨­å®šã€‚
</text>
<text name="estate_text">
領地:
@@ -16,9 +16,9 @@
(未知)
</text>
<check_box label="Use Global Time" name="use_global_time_check"/>
- <check_box label="Fixed Sun" name="fixed_sun_check"/>
+ <check_box label="固定太陽" name="fixed_sun_check"/>
<slider label="Phase" name="sun_hour_slider"/>
- <check_box label="Allow Public Access" name="externally_visible_check"/>
+ <check_box label="å…許公開出入" name="externally_visible_check"/>
<text name="Only Allow">
Restrict Access to accounts verified by:
</text>
@@ -40,7 +40,7 @@
<button label="移除..." name="remove_allowed_avatar_btn"/>
<button label="添加..." name="add_allowed_avatar_btn"/>
<text name="allow_group_label">
- å…許的社團:
+ å…許的群組:
</text>
<button label="移除..." name="remove_allowed_group_btn"/>
<button label="添加..." name="add_allowed_group_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_region_general.xml b/indra/newview/skins/default/xui/zh/panel_region_general.xml
index dce75c997d..38fde494aa 100644
--- a/indra/newview/skins/default/xui/zh/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_general.xml
@@ -18,10 +18,10 @@
<text name="region_type">
未知
</text>
- <check_box label="Block Terraform" name="block_terraform_check"/>
- <check_box label="Block Fly" name="block_fly_check"/>
- <check_box label="Allow Damage" name="allow_damage_check"/>
- <check_box label="Restrict Pushing" name="restrict_pushobject"/>
+ <check_box label="阻止變形" name="block_terraform_check"/>
+ <check_box label="阻止飛行" name="block_fly_check"/>
+ <check_box label="å…許傷害" name="allow_damage_check"/>
+ <check_box label="é™åˆ¶æŽ¨æ’ž" name="restrict_pushobject"/>
<check_box label="å…許土地轉售" name="allow_land_resell_check"/>
<check_box label="å…許土地 åˆä½µ/分割" name="allow_parcel_changes_check"/>
<check_box label="阻擋土地顯示於æœå°‹ä¸­" name="block_parcel_search_check" tool_tip="Let people see this region and its parcels in search results"/>
@@ -30,13 +30,13 @@
<text label="Maturity" name="access_text">
分級:
</text>
- <icons_combo_box label="Moderate" name="access_combo">
- <icons_combo_box.item label="æˆäºº" name="Adult" value="42"/>
- <icons_combo_box.item label="Moderate" name="Mature" value="21"/>
- <icons_combo_box.item label="一般" name="PG" value="13"/>
+ <icons_combo_box label="é©åº¦æˆäºº" name="access_combo">
+ <icons_combo_box.item label="完全æˆäºº" name="Adult" value="42"/>
+ <icons_combo_box.item label="é©åº¦æˆäºº" name="Mature" value="21"/>
+ <icons_combo_box.item label="一般普級" name="PG" value="13"/>
</icons_combo_box>
<button label="套用" name="apply_btn"/>
- <button label="強制瞬間傳é€ä¸€ä½å±…民回家..." name="kick_btn"/>
+ <button label="強制瞬間傳é€ä¸€å€‹å±…民回家..." name="kick_btn"/>
<button label="å¼·åˆ¶çž¬é–“å‚³é€æ‰€æœ‰å±…民回家..." name="kick_all_btn"/>
<button label="é€å‡ºè¨Šæ¯åˆ°åœ°å€..." name="im_btn"/>
<button label="管ç†çž¬é–“傳é€ä¸­å¿ƒ..." name="manage_telehub_btn"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
index e42d904f32..1dc7c1e089 100644
--- a/indra/newview/skins/default/xui/zh/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
@@ -4,10 +4,10 @@
載入中...
</panel.string>
<panel.string name="can_not_view">
- You can not view or edit this script, since it has been set as &quot;no copy&quot;. You need full permissions to view or edit a script inside an object.
+ ä½ ä¸å¯Ÿçœ‹æˆ–編輯此腳本,自從它被設定為 &quot;no copy&quot; 後。你需è¦å®Œæ•´æ¬Šé™åŽ»å¯Ÿçœ‹æˆ–ç·¨è¼¯æœ‰åŒ…å«è…³æœ¬åœ¨å…§çš„物件。
</panel.string>
<panel.string name="public_objects_can_not_run">
- Public Objects cannot run scripts
+ 公開物件ä¸èƒ½åŸ·è¡Œè…³æœ¬
</panel.string>
<panel.string name="script_running">
執行中
@@ -16,7 +16,7 @@
腳本:[NAME]
</panel.string>
<panel.string name="external_editor_not_set">
- Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting.
+ 由環境變數設定 LL_SCRIPT_EDITOR 或是 ExternalEditor è¨­å®šä¾†é¸æ“‡ä¸€å€‹ç·¨è¼¯å™¨ã€‚
</panel.string>
<menu_bar name="script_menu">
<menu label="檔案" name="File">
diff --git a/indra/newview/skins/default/xui/zh/panel_side_tray.xml b/indra/newview/skins/default/xui/zh/panel_side_tray.xml
index 625213e376..b706f1839a 100644
--- a/indra/newview/skins/default/xui/zh/panel_side_tray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_side_tray.xml
@@ -13,7 +13,7 @@
</sidetray_tab>
<sidetray_tab description="Find your friends, contacts and people nearby." name="sidebar_people" tab_title="People">
<panel_container name="panel_container">
- <panel label="社團檔案" name="panel_group_info_sidetray"/>
+ <panel label="群組檔案" name="panel_group_info_sidetray"/>
<panel label="Blocked Residents &amp; Objects" name="panel_block_list_sidetray"/>
</panel_container>
</sidetray_tab>
diff --git a/indra/newview/skins/default/xui/zh/panel_status_bar.xml b/indra/newview/skins/default/xui/zh/panel_status_bar.xml
index 9a59d627d0..808e14f3c3 100644
--- a/indra/newview/skins/default/xui/zh/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/zh/panel_status_bar.xml
@@ -16,12 +16,12 @@
L$ [AMT]
</panel.string>
<panel name="balance_bg">
- <text name="balance" tool_tip="Click to refresh your L$ balance" value="L$20"/>
+ <text name="balance" tool_tip="é»žæ“Šä»¥é‡æ–°æ›´æ–°ä½ çš„ L$ 帳戶餘é¡" value="L$20"/>
<button label="購買 L$" name="buyL" tool_tip="點擊以購買更多 L$"/>
</panel>
<text name="TimeText" tool_tip="ç›®å‰æ™‚å€ï¼ˆå¤ªå¹³æ´‹ï¼‰">
24:00 AM PST
</text>
<button name="media_toggle_btn" tool_tip="é–‹å§‹ / åœæ­¢å…¨éƒ¨åª’體(音樂ã€å½±ç‰‡ã€ç¶²é ï¼‰"/>
- <button name="volume_btn" tool_tip="Global Volume Control"/>
+ <button name="volume_btn" tool_tip="å…¨åŸŸéŸ³é‡æŽ§åˆ¶"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_world_map.xml b/indra/newview/skins/default/xui/zh/panel_world_map.xml
index ad28361a7f..b5aa659bf0 100644
--- a/indra/newview/skins/default/xui/zh/panel_world_map.xml
+++ b/indra/newview/skins/default/xui/zh/panel_world_map.xml
@@ -4,7 +4,7 @@
載入中...
</panel.string>
<panel.string name="InvalidLocation">
- Invalid Location
+ 無效的ä½ç½®
</panel.string>
<panel.string name="world_map_north">
N
diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml
index 534c0f39fc..d5c3096b22 100644
--- a/indra/newview/skins/default/xui/zh/role_actions.xml
+++ b/indra/newview/skins/default/xui/zh/role_actions.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<role_actions>
<action_set description="These Abilities include powers to add and remove group Members, and allow new Members to join without an invitation." name="Membership">
- <action description="Invite People to this Group" longdescription="Invite People to this Group using the &apos;Invite&apos; button in the Roles section &gt; Members tab." name="member invite" value="1"/>
- <action description="將會員由這個社團中踢出" longdescription="Eject Members from this Group using the &apos;Eject&apos; button in the Roles section &gt; Members tab. An Owner can eject anyone except another Owner. If you&apos;re not an Owner, a Member can be ejected from a group if, and only if, they&apos;re only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the &apos;Remove Members from Roles&apos; Ability." name="member eject" value="2"/>
+ <action description="邀請他人加入這個群組" longdescription="é‚€è«‹ä»–äººåŠ å…¥é€™å€‹ç¾¤çµ„ï¼Œè«‹æŒ‰ä¸‹æ–¼è§’è‰²å€æ®µä¸­çš„æˆå“¡é ç±¤ä¸­çš„ &apos;邀請&apos; 按鈕。" name="member invite" value="1"/>
+ <action description="將會員由這個群組中踢出" longdescription="Eject Members from this Group using the &apos;Eject&apos; button in the Roles section &gt; Members tab. An Owner can eject anyone except another Owner. If you&apos;re not an Owner, a Member can be ejected from a group if, and only if, they&apos;re only in the Everyone Role, and NO other Roles. To remove Members from Roles, you need to have the &apos;Remove Members from Roles&apos; Ability." name="member eject" value="2"/>
<action description="Toggle &apos;Open Enrollment&apos; and change &apos;Enrollment fee&apos;" longdescription="Toggle &apos;Open Enrollment&apos; to let new Members join without an invitation, and change the &apos;Enrollment fee&apos; in the General section." name="member options" value="3"/>
</action_set>
<action_set description="These Abilities include powers to add, remove, and change group Roles, add and remove Members in Roles, and assign Abilities to Roles." name="Roles">
- <action description="Create new Roles" longdescription="Create new Roles in the Roles section &gt; Roles tab." name="role create" value="4"/>
+ <action description="創立一個新角色" longdescription="å‰µç«‹ä¸€å€‹æ–°è§’è‰²æ–¼è§’è‰²å€æ®µ &gt; 角色é ç±¤ã€‚" name="role create" value="4"/>
<action description="刪除角色" longdescription="Delete Roles in the Roles section &gt; Roles tab." name="role delete" value="5"/>
<action description="Change Role names, titles, descriptions, and whether Role members are publicly revealed" longdescription="Change Role names, titles, descriptions, and whether Role members are publicly revealed. This is done at the bottom of the the Roles section &gt; Roles tab after selecting a Role." name="role properties" value="6"/>
<action description="Assign Members to Assigner&apos;s Roles" longdescription="Assign Members to Roles in the list of Assigned Roles (Roles section &gt; Members tab). A Member with this Ability can only add Members to a Role that the assigner is already in." name="role assign member limited" value="7"/>
@@ -50,7 +50,7 @@
<action_set description="These Abilities include powers to allow members to return objects and place and move Linden plants. This is useful for Members to clean up litter and do landscaping, but it should also be used with care, because there&apos;s no undo for returning objects." name="Parcel Content">
<action description="Return objects owned by group" longdescription="Return objects on group-owned parcels that are owned by the group in About Land &gt; Objects tab." name="land return group owned" value="48"/>
<action description="Return objects set to group" longdescription="Return objects on group-owned parcels that are set to the group in About Land &gt; Objects tab." name="land return group set" value="33"/>
- <action description="Return non-group objects" longdescription="Return objects on group-owned parcels that are non-group in About Land &gt; Objects tab." name="land return non group" value="34"/>
+ <action description="退回éžç¾¤çµ„物件" longdescription="Return objects on group-owned parcels that are non-group in About Land &gt; Objects tab." name="land return non group" value="34"/>
<action description="Landscaping using Linden plants" longdescription="Landscaping ability to place and move Linden trees, plants, and grasses. These items can be found in your inventory&apos;s Library &gt; Objects folder, or they can be created via the Build menu." name="land gardening" value="35"/>
</action_set>
<action_set description="These Abilities include powers to deed, modify, and sell group-owned objects. These changes are done in the Build Tools &gt; General tab. Right-click an object and Edit to see its settings." name="Object Management">
@@ -66,8 +66,8 @@
<action description="接收通知與察看éŽåŽ»é€šçŸ¥" longdescription="Members in a Role with this Ability can receive Notices and view past Notices in Group &gt; Notices section." name="notices receive" value="43"/>
</action_set>
<action_set description="These Abilities include powers to allow or restrict access to group chat sessions and group voice chat." name="Chat">
- <action description="Join Group Chat" longdescription="Members in a Role with this Ability can join group chat sessions, for text and voice." name="join group chat" value="16"/>
- <action description="Join Group Voice Chat" longdescription="Members in a Role with this Ability can join group voice chat sessions. NOTE: The Join Group Chat ability is required to access the voice chat session." name="join voice chat" value="27"/>
- <action description="Moderate Group Chat" longdescription="Members in a Role with this Ability can control access and participation in group voice and text chat sessions." name="moderate group chat" value="37"/>
+ <action description="加入群組èŠå¤©" longdescription="Members in a Role with this Ability can join group chat sessions, for text and voice." name="join group chat" value="16"/>
+ <action description="加入群組語音èŠå¤©" longdescription="Members in a Role with this Ability can join group voice chat sessions. NOTE: The Join Group Chat ability is required to access the voice chat session." name="join voice chat" value="27"/>
+ <action description="é©åº¦æˆäººå…§å®¹çš„群組èŠå¤©" longdescription="Members in a Role with this Ability can control access and participation in group voice and text chat sessions." name="moderate group chat" value="37"/>
</action_set>
</role_actions>
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
index f28638d93d..adc815fb4b 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
@@ -52,7 +52,7 @@
</text>
<check_box label="覆製" name="CheckEveryoneCopy"/>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="CheckShareWithGroup" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/>
<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
index f308f2d4d0..5aad4568bd 100644
--- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
@@ -7,19 +7,19 @@
Deed
</panel.string>
<panel.string name="text modify info 1">
- You can modify this object
+ ä½ å¯ä»¥ä¿®æ”¹é€™å€‹ç‰©ä»¶
</panel.string>
<panel.string name="text modify info 2">
- You can modify these objects
+ ä½ å¯ä»¥ä¿®æ”¹é€™äº›ç‰©ä»¶
</panel.string>
<panel.string name="text modify info 3">
- You can&apos;t modify this object
+ ä½ ä¸å¯ä»¥ä¿®æ”¹é€™å€‹ç‰©ä»¶
</panel.string>
<panel.string name="text modify info 4">
- You can&apos;t modify these objects
+ ä½ ä¸å¯ä»¥ä¿®æ”¹é€™äº›ç‰©ä»¶
</panel.string>
<panel.string name="text modify warning">
- This object has linked parts
+ 這個物件有è¯çµåˆ°å…¶ä»–部分
</panel.string>
<panel.string name="Cost Default">
價格: L$
@@ -28,13 +28,13 @@
總價: L$
</panel.string>
<panel.string name="Cost Per Unit">
- Price Per: L$
+ 單價: L$
</panel.string>
<panel.string name="Cost Mixed">
- Mixed Price
+ æ··åˆåƒ¹æ ¼
</panel.string>
<panel.string name="Sale Mixed">
- Mixed Sale
+ æ··åˆéŠ·å”®
</panel.string>
<text name="title" value="物件檔案"/>
<text name="where" value="(Inworld)"/>
@@ -52,9 +52,9 @@
æ“æœ‰è€…:
</text>
<text name="Group_label">
- 社團:
+ 群組:
</text>
- <button name="button set group" tool_tip="Choose a group to share this object&apos;s permissions"/>
+ <button name="button set group" tool_tip="鏿“‡ä¸€å€‹ç¾¤çµ„以分享這個物件的權é™"/>
<name_box initial_value="載入中..." name="Group Name Proxy"/>
<button label="Deed" label_selected="Deed" name="button deed" tool_tip="Deeding gives this item away with next owner permissions. Group shared objects can be deeded by a group officer."/>
<text name="label click action">
@@ -77,7 +77,7 @@
<check_box label="覆製" name="checkbox allow everyone copy"/>
<check_box label="移動" name="checkbox allow everyone move"/>
<text name="GroupLabel">
- 社團:
+ 群組:
</text>
<check_box label="分享" name="checkbox share with group" tool_tip="Allow all members of the set group to share your modify permissions for this object. You must Deed to enable role restrictions."/>
<text name="NextOwnerLabel">
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 986ab82523..0949e61fa1 100644
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -38,25 +38,25 @@
回存中...
</string>
<string name="ProgressChangingResolution">
- Changing Resolution...
+ 變更解æžåº¦...
</string>
<string name="Fullbright">
- Fullbright (Legacy)
+ 全亮(舊版)
</string>
<string name="LoginInProgress">
- Logging in. [APP_NAME] may appear frozen. Please wait.
+ 登入中。[APP_NAME] å¯èƒ½å‡ºç¾å‡çµç‹€æ…‹ã€‚è«‹è€å¿ƒç¨ç­‰ã€‚
</string>
<string name="LoginInProgressNoFrozen">
- Logging in...
+ 登入中...
</string>
<string name="LoginAuthenticating">
- Authenticating
+ 身份驗證中
</string>
<string name="LoginMaintenance">
- Performing account maintenance...
+ 進行帳戶維護...
</string>
<string name="LoginAttempt">
- Previous login attempt failed. Logging in, attempt [NUMBER]
+ å…ˆå‰ä¼åœ–嘗試登入失敗。ç¾ç™»å…¥ä¸­ï¼Œå˜—試 [NUMBER]
</string>
<string name="LoginPrecaching">
世界載入中...
@@ -101,7 +101,7 @@
æœè£ä¸‹è¼‰ä¸­...
</string>
<string name="InvalidCertificate">
- The server returned an invalid or corrupt certificate. Please contact the Grid administrator.
+ 伺æœå™¨å›žå‚³ä¸€å€‹ç„¡æ•ˆæžœæå£žçš„æ†‘證。請連繫網格管ç†è€…。
</string>
<string name="CertInvalidHostname">
An invalid hostname was used to access the server, please check your SLURL or Grid hostname.
@@ -146,7 +146,7 @@
你已經被所在的地å€ä¸­æ–·è¯çµã€‚
</string>
<string name="SentToInvalidRegion">
- You were sent to an invalid region.
+ 你被傳é€åˆ°ä¸€å€‹ç„¡æ•ˆçš„地å€ã€‚
</string>
<string name="TestingDisconnect">
測試ç€è¦½å™¨æ–·ç·š
@@ -155,28 +155,28 @@
人
</string>
<string name="TooltipNoName">
- (no name)
+ (無å稱)
</string>
<string name="TooltipOwner">
æ“æœ‰è€…:
</string>
<string name="TooltipPublic">
- Public
+ 公開
</string>
<string name="TooltipIsGroup">
- (社團)
+ (群組)
</string>
<string name="TooltipForSaleL$">
出售: L$[AMOUNT]
</string>
<string name="TooltipFlagGroupBuild">
- Group Build
+ 群組建造
</string>
<string name="TooltipFlagNoBuild">
ç¦æ­¢å»ºé€ 
</string>
<string name="TooltipFlagNoEdit">
- 社團建造
+ 群組建造
</string>
<string name="TooltipFlagNotSafe">
éžå®‰å…¨
@@ -185,7 +185,7 @@
ç¦æ­¢é£›è¡Œ
</string>
<string name="TooltipFlagGroupScripts">
- 社團腳本
+ 群組腳本
</string>
<string name="TooltipFlagNoScripts">
ç¦æ­¢è…³æœ¬
@@ -210,10 +210,10 @@
瞭解更多有關這個居民
</string>
<string name="TooltipAgentMute">
- Click to mute this Resident
+ 點擊以å°éޖ這ä½å±…æ°‘
</string>
<string name="TooltipAgentUnmute">
- Click to unmute this Resident
+ 點擊以解除å°éޖ這ä½å±…æ°‘
</string>
<string name="TooltipAgentIM">
點擊開始 IM 這ä½å±…æ°‘
@@ -222,47 +222,47 @@
點擊以支付這ä½å±…æ°‘
</string>
<string name="TooltipAgentOfferTeleport">
- Click to offer a teleport request to this Resident
+ 點擊以é€å‡ºçž¬é–“傳é€é‚€è«‹çµ¦é€™ä½å±…æ°‘
</string>
<string name="TooltipAgentRequestFriend">
- Click to send a friend request to this Resident
+ 點擊以é€å‡ºäº¤å‹é‚€è«‹çµ¦é€™ä½å±…æ°‘
</string>
<string name="TooltipGroupUrl">
- Click to view this group&apos;s description
+ 點擊以察看這個群組的æè¿°
</string>
<string name="TooltipEventUrl">
- Click to view this event&apos;s description
+ 點擊以察看這個活動的æè¿°
</string>
<string name="TooltipClassifiedUrl">
Click to view this classified
</string>
<string name="TooltipParcelUrl">
- Click to view this parcel&apos;s description
+ 點擊以察看這個地段的æè¿°
</string>
<string name="TooltipTeleportUrl">
- Click to teleport to this location
+ 點擊以傳é€åˆ°é€™å€‹ä½ç½®
</string>
<string name="TooltipObjectIMUrl">
- Click to view this object&apos;s description
+ 點擊以察看這個物件的æè¿°
</string>
<string name="TooltipMapUrl">
- Click to view this location on a map
+ 點擊以察看此處在地圖上的ä½ç½®
</string>
<string name="TooltipSLAPP">
- Click to run the secondlife:// command
+ 點擊以執行 secondlife:// 指令
</string>
- <string name="CurrentURL" value="CurrentURL: [CurrentURL]"/>
+ <string name="CurrentURL" value="ç›®å‰ç¶²å€ï¼š[CurrentURL]"/>
<string name="SLurlLabelTeleport">
瞬間傳é€åˆ°
</string>
<string name="SLurlLabelShowOnMap">
- Show Map for
+ 顯示地圖為了
</string>
<string name="SLappAgentMute">
- Mute
+ å°éŽ–
</string>
<string name="SLappAgentUnmute">
- Unmute
+ 解除å°éŽ–
</string>
<string name="SLappAgentIM">
IM
@@ -271,7 +271,7 @@
支付
</string>
<string name="SLappAgentOfferTeleport">
- Offer Teleport to
+ 發給瞬間傳é€è«‹æ±‚到
</string>
<string name="SLappAgentRequestFriend">
交å‹è¦æ±‚
@@ -295,7 +295,7 @@
脫下
</string>
<string name="BUTTON_DOCK">
- Dock
+ åœæ³Šå›ºå®š
</string>
<string name="BUTTON_HELP">
顯示幫助
@@ -307,22 +307,22 @@
未發ç¾ã€‚
</string>
<string name="RetrievingData">
- Retrieving...
+ 檢索...
</string>
<string name="ReleaseNotes">
- Release Notes
+ 釋出版本說明
</string>
<string name="LoadingData">
載入中...
</string>
<string name="AvatarNameNobody">
- (nobody)
+ (沒有人)
</string>
<string name="AvatarNameWaiting">
- (waiting)
+ (等待中)
</string>
<string name="AvatarNameMultiple">
- (multiple)
+ (多個)
</string>
<string name="GroupNameNone">
(無)
@@ -334,25 +334,25 @@
無錯誤
</string>
<string name="AssetErrorRequestFailed">
- Asset request: failed
+ 資產請求:失敗
</string>
<string name="AssetErrorNonexistentFile">
- Asset request: non-existent file
+ è³‡ç”¢è¦æ±‚:éžå·²å­˜åœ¨æª”案
</string>
<string name="AssetErrorNotInDatabase">
- Asset request: asset not found in database
+ è³‡ç”¢è¦æ±‚ï¼šè³‡ç”¢ä¸¦æœªç™¼ç¾æ–¼è³‡æ–™åº«ä¸­
</string>
<string name="AssetErrorEOF">
- End of file
+ 檔案çµå°¾
</string>
<string name="AssetErrorCannotOpenFile">
- Cannot open file
+ 無法開啟檔案
</string>
<string name="AssetErrorFileNotFound">
- File not found
+ 檔案未發ç¾
</string>
<string name="AssetErrorTCPTimeout">
- File transfer timeout
+ 檔案傳輸逾時
</string>
<string name="AssetErrorCircuitGone">
Circuit gone
@@ -370,13 +370,13 @@
è²éŸ³
</string>
<string name="calling card">
- calling card
+ å片
</string>
<string name="landmark">
地標
</string>
<string name="legacy script">
- legacy script
+ 舊版腳本
</string>
<string name="clothing">
æœè£
@@ -427,16 +427,16 @@
å§¿å‹¢
</string>
<string name="simstate">
- simstate
+ 模擬器狀態
</string>
<string name="favorite">
- favorite
+ 我的最愛
</string>
<string name="symbolic link">
- link
+ è¯çµ
</string>
<string name="symbolic folder link">
- folder link
+ 資料夾è¯çµ
</string>
<string name="AvatarEditingAppearance">
(外觀編輯中)
@@ -448,13 +448,13 @@
忙碌
</string>
<string name="AvatarMuted">
- Blocked
+ å°éŽ–çš„
</string>
<string name="anim_express_afraid">
- Afraid
+ 害怕
</string>
<string name="anim_express_anger">
- Angry
+ 生氣
</string>
<string name="anim_away">
Away
@@ -472,19 +472,19 @@
Blow Kiss
</string>
<string name="anim_express_bored">
- Bored
+ ç„¡èŠ
</string>
<string name="anim_bow">
Bow
</string>
<string name="anim_clap">
- Clap
+ æ‹æ‰‹
</string>
<string name="anim_courtbow">
Court Bow
</string>
<string name="anim_express_cry">
- Cry
+ å“­æ³£
</string>
<string name="anim_dance1">
Dance 1
@@ -541,19 +541,19 @@
Kiss My Butt
</string>
<string name="anim_express_kiss">
- Kiss
+ 親å»
</string>
<string name="anim_laugh_short">
- Laugh
+ 笑
</string>
<string name="anim_musclebeach">
Muscle Beach
</string>
<string name="anim_no_unhappy">
- No (Unhappy)
+ ä¸ï¼ˆä¸å¿«æ¨‚)
</string>
<string name="anim_no_head">
- No
+ ä¸
</string>
<string name="anim_nyanya">
Nya-nya-nya
@@ -598,10 +598,10 @@
Roundhouse Kick
</string>
<string name="anim_express_sad">
- Sad
+ 傷心
</string>
<string name="anim_salute">
- Salute
+ 敬禮
</string>
<string name="anim_shout">
Shout
@@ -610,7 +610,7 @@
Shrug
</string>
<string name="anim_express_smile">
- Smile
+ 微笑
</string>
<string name="anim_smoke_idle">
Smoke Idle
@@ -622,7 +622,7 @@
Smoke Throw Down
</string>
<string name="anim_express_surprise">
- Surprise
+ 驚喜
</string>
<string name="anim_sword_strike_r">
Sword Strike
@@ -637,22 +637,22 @@
Wave
</string>
<string name="anim_whisper">
- Whisper
+ 耳語
</string>
<string name="anim_whistle">
- Whistle
+ å¹å£å“¨
</string>
<string name="anim_express_wink">
- Wink
+ 眨眼
</string>
<string name="anim_wink_hollywood">
- Wink (Hollywood)
+ 眨眼(好èŠå¡¢ï¼‰
</string>
<string name="anim_express_worry">
- Worry
+ 擔心
</string>
<string name="anim_yes_happy">
- Yes (Happy)
+ 是(快樂)
</string>
<string name="anim_yes_head">
是
@@ -679,25 +679,25 @@
Can&apos;t find ROOT or JOINT.
</string>
<string name="whisper">
- whispers:
+ 低語:
</string>
<string name="shout">
- shouts:
+ å¶å–Šï¼š
</string>
<string name="ringing">
- Connecting to in-world Voice Chat...
+ è¯æŽ¥åˆ°è™›æ“¬ä¸–ç•Œçš„èªžéŸ³åŠŸèƒ½ä¸­...
</string>
<string name="connected">
- Connected
+ å·²è¯æŽ¥
</string>
<string name="unavailable">
- Voice not available at your current location
+ 語音èŠå¤©åŠŸèƒ½æ–¼ä½ ç›®å‰æ‰€åœ¨çš„ä½ç½®ç„¡æ³•使用
</string>
<string name="hang_up">
- Disconnected from in-world Voice Chat
+ 虛擬世界中的語音èŠå¤©ä¸­æ–·
</string>
<string name="reconnect_nearby">
- You will now be reconnected to Nearby Voice Chat
+ ç¾åœ¨ä½ å°‡é‡æ–°è¯æŽ¥åˆ°é™„近的語音èŠå¤©
</string>
<string name="ScriptQuestionCautionChatGranted">
&apos;[OBJECTNAME]&apos;, an object owned by &apos;[OWNERNAME]&apos;, located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS].
@@ -706,7 +706,7 @@
&apos;[OBJECTNAME]&apos;, an object owned by &apos;[OWNERNAME]&apos;, located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].
</string>
<string name="ScriptTakeMoney">
- Take Linden dollars (L$) from you
+ 由你身上拿走林登幣(L$)
</string>
<string name="ActOnControlInputs">
Act on your control inputs
@@ -730,25 +730,25 @@
Add and remove joints with other objects
</string>
<string name="ChangePermissions">
- Change its permissions
+ 變更它的權é™
</string>
<string name="TrackYourCamera">
- Track your camera
+ 追蹤你的æ”影機
</string>
<string name="ControlYourCamera">
- Control your camera
+ 控制你的æ”影機
</string>
<string name="NotConnected">
- Not Connected
+ æœªè¯æŽ¥
</string>
<string name="SIM_ACCESS_PG">
- 一般
+ 一般普級
</string>
<string name="SIM_ACCESS_MATURE">
- Moderate
+ é©åº¦æˆäºº
</string>
<string name="SIM_ACCESS_ADULT">
- æˆäºº
+ 完全æˆäºº
</string>
<string name="SIM_ACCESS_DOWN">
離線
@@ -796,16 +796,16 @@
Bitmap 圖åƒ
</string>
<string name="avi_movie_file">
- AVI 影片檔案
+ AVI 視頻檔案
</string>
<string name="xaf_animation_file">
XAF Anim File
</string>
<string name="xml_file">
- XML File
+ XML 檔案
</string>
<string name="raw_file">
- RAW File
+ RAW 檔案
</string>
<string name="compressed_image_files">
壓縮的圖åƒ
@@ -868,13 +868,13 @@
裙å­
</string>
<string name="alpha">
- Alpha
+ åŠé€æ˜Ž
</string>
<string name="tattoo">
刺é’
</string>
<string name="physics">
- Physics
+ 身體物ç†
</string>
<string name="invalid">
無效
@@ -910,13 +910,13 @@
è£™å­æœªç©¿
</string>
<string name="alpha_not_worn">
- Alpha not worn
+ åŠé€æ˜Žæœªç©¿
</string>
<string name="tattoo_not_worn">
åˆºé’æœªç©¿
</string>
<string name="physics_not_worn">
- Physics not worn
+ èº«é«”ç‰©ç†æœªç©¿
</string>
<string name="invalid_not_worn">
無效
@@ -961,13 +961,13 @@
創造新裙å­
</string>
<string name="create_new_alpha">
- Create new alpha
+ 創造新åŠé€æ˜Ž
</string>
<string name="create_new_tattoo">
創造新刺é’
</string>
<string name="create_new_physics">
- Create new physics
+ 創造新身體物ç†
</string>
<string name="create_new_invalid">
無效
@@ -982,10 +982,10 @@
確定
</string>
<string name="GroupNotifyGroupNotice">
- 社團通知
+ 群組通知
</string>
<string name="GroupNotifyGroupNotices">
- 社團通知
+ 群組通知
</string>
<string name="GroupNotifySentBy">
é€å‡ºç”±
@@ -1012,34 +1012,34 @@
你有約 %d 通知
</string>
<string name="BodyPartsRightArm">
- Right Arm
+ å³è‡‚
</string>
<string name="BodyPartsHead">
頭部
</string>
<string name="BodyPartsLeftArm">
- Left Arm
+ 左臂
</string>
<string name="BodyPartsLeftLeg">
- Left Leg
+ 左腿
</string>
<string name="BodyPartsTorso">
軀幹
</string>
<string name="BodyPartsRightLeg">
- Right Leg
+ å³è…¿
</string>
<string name="GraphicsQualityLow">
- Low
+ 低
</string>
<string name="GraphicsQualityMid">
- Mid
+ 中
</string>
<string name="GraphicsQualityHigh">
- High
+ 高
</string>
<string name="LeaveMouselook">
- Press ESC to return to World View
+ 按下 ESC éµå›žå¾©åˆ°ä¸–界的視角
</string>
<string name="InventoryNoMatchingItems">
Didn&apos;t find what you&apos;re looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search].
@@ -1053,19 +1053,19 @@
<string name="InventoryNoTexture">
You do not have a copy of this texture in your inventory
</string>
- <string name="no_transfer" value="(no transfer)"/>
- <string name="no_modify" value="(no modify)"/>
- <string name="no_copy" value="(no copy)"/>
- <string name="worn" value="(worn)"/>
- <string name="link" value="(link)"/>
- <string name="broken_link" value="(broken_link)"/>
+ <string name="no_transfer" value="ï¼ˆç¦æ­¢è½‰è®“)"/>
+ <string name="no_modify" value="ï¼ˆç¦æ­¢ä¿®æ”¹ï¼‰"/>
+ <string name="no_copy" value="ï¼ˆç¦æ­¢è¤‡è£½ï¼‰"/>
+ <string name="worn" value="(已穿)"/>
+ <string name="link" value="(è¯çµï¼‰"/>
+ <string name="broken_link" value="(æå£žçš„è¯çµï¼‰"/>
<string name="LoadingContents">
內容載入中...
</string>
<string name="NoContents">
- No contents
+ 無內容
</string>
- <string name="WornOnAttachmentPoint" value="(worn on [ATTACHMENT_POINT])"/>
+ <string name="WornOnAttachmentPoint" value="(已穿 [ATTACHMENT_POINT])"/>
<string name="ActiveGesture" value="[GESLABEL] (active)"/>
<string name="PermYes">
是
@@ -1084,7 +1084,7 @@
<string name="ViewAllGestures" value="察看全部 &gt;&gt;"/>
<string name="GetMoreGestures" value="å–得更多 &gt;&gt;"/>
<string name="Animations" value="動作,"/>
- <string name="Calling Cards" value="Calling Cards,"/>
+ <string name="Calling Cards" value="å片,"/>
<string name="Clothing" value="æœè£,"/>
<string name="Gestures" value="å§¿å‹¢,"/>
<string name="Landmarks" value="地標,"/>
@@ -1093,17 +1093,17 @@
<string name="Scripts" value="腳本,"/>
<string name="Sounds" value="è²éŸ³,"/>
<string name="Textures" value="æè³ª,"/>
- <string name="Snapshots" value="Snapshots,"/>
+ <string name="Snapshots" value="å¿«ç…§,"/>
<string name="No Filters" value="No"/>
<string name="Since Logoff" value="- 自上次登出"/>
<string name="InvFolder My Inventory">
我的收ç´å€
</string>
<string name="InvFolder My Favorites">
- My Favorites
+ 我的最愛
</string>
<string name="InvFolder Library">
- Library
+ 資æºåº«
</string>
<string name="InvFolder Textures">
æè³ª
@@ -1112,7 +1112,7 @@
è²éŸ³
</string>
<string name="InvFolder Calling Cards">
- Calling Cards
+ å片
</string>
<string name="InvFolder Landmarks">
地標
@@ -1151,7 +1151,7 @@
Lost And Found
</string>
<string name="InvFolder Uncompressed Sounds">
- Uncompressed Sounds
+ 無壓縮è²éŸ³
</string>
<string name="InvFolder Animations">
動作
@@ -1160,10 +1160,10 @@
å§¿å‹¢
</string>
<string name="InvFolder Favorite">
- Favorites
+ 我的最愛
</string>
<string name="InvFolder favorite">
- Favorites
+ 我的最愛
</string>
<string name="InvFolder Current Outfit">
ç›®å‰è£æ‰®
@@ -1220,34 +1220,34 @@
Ctrl
</string>
<string name="Chest">
- Chest
+ 胸部
</string>
<string name="Skull">
- Skull
+ 頭顱
</string>
<string name="Left Shoulder">
- Left Shoulder
+ 左肩
</string>
<string name="Right Shoulder">
- Right Shoulder
+ å³è‚©
</string>
<string name="Left Hand">
- Left Hand
+ 左手
</string>
<string name="Right Hand">
- Right Hand
+ 峿‰‹
</string>
<string name="Left Foot">
- Left Foot
+ 左腳
</string>
<string name="Right Foot">
- Right Foot
+ å³è…³
</string>
<string name="Spine">
- Spine
+ 脊椎
</string>
<string name="Pelvis">
- Pelvis
+ 骨盆
</string>
<string name="Mouth">
嘴
@@ -1271,46 +1271,46 @@
é¼»å­
</string>
<string name="R Upper Arm">
- R Upper Arm
+ å³ä¸Šè‡‚
</string>
<string name="R Forearm">
- R Forearm
+ å³å‰è‡‚
</string>
<string name="L Upper Arm">
- L Upper Arm
+ 左上臂
</string>
<string name="L Forearm">
- L Forearm
+ å·¦å‰è‡‚
</string>
<string name="Right Hip">
- Right Hip
+ å³è‡€
</string>
<string name="R Upper Leg">
- R Upper Leg
+ å³å¤§è…¿
</string>
<string name="R Lower Leg">
- R Lower Leg
+ å³å°è…¿
</string>
<string name="Left Hip">
- Left Hip
+ 左臀
</string>
<string name="L Upper Leg">
- L Upper Leg
+ 左大腿
</string>
<string name="L Lower Leg">
- L Lower Leg
+ å·¦å°è…¿
</string>
<string name="Stomach">
- Stomach
+ 腹肌
</string>
<string name="Left Pec">
- Left Pec
+ 左胸肌
</string>
<string name="Right Pec">
- Right Pec
+ å³èƒ¸è‚Œ
</string>
<string name="Invalid Attachment">
- Invalid Attachment Point
+ ç„¡æ•ˆçš„é™„ä»¶è¯æŽ¥é»ž
</string>
<string name="YearsMonthsOld">
[AGEYEARS] [AGEMONTHS] old
@@ -1328,7 +1328,7 @@
[AGEDAYS] old
</string>
<string name="TodayOld">
- 高日剛加入
+ 今日剛加入
</string>
<string name="AgeYearsA">
[COUNT] å¹´
@@ -1397,40 +1397,40 @@
No Payment Info On File
</string>
<string name="AgeVerified">
- Age-verified
+ 已年齡驗證
</string>
<string name="NotAgeVerified">
- Not Age-verified
+ 未年齡驗證
</string>
<string name="Center 2">
- Center 2
+ 中央 2
</string>
<string name="Top Right">
- Top Right
+ å³ä¸Š
</string>
<string name="Top">
- Top
+ 上方
</string>
<string name="Top Left">
- Top Left
+ 左上
</string>
<string name="Center">
- Center
+ 中央
</string>
<string name="Bottom Left">
- Bottom Left
+ 左下
</string>
<string name="Bottom">
- Bottom
+ 下方
</string>
<string name="Bottom Right">
- Bottom Right
+ å³ä¸‹
</string>
<string name="CompileQueueDownloadedCompiling">
- Downloaded, now compiling
+ 已下載,ç¾åœ¨é€²è¡Œç·¨è­¯ä¸­
</string>
<string name="CompileQueueScriptNotFound">
- Script not found on server.
+ 伺æœå™¨ä¸Šæœªç™¼ç¾è…³æœ¬ã€‚
</string>
<string name="CompileQueueProblemDownloading">
Problem downloading
@@ -1445,16 +1445,16 @@
Unknown failure to download
</string>
<string name="CompileQueueTitle">
- Recompilation Progress
+ 釿–°ç·¨è­¯é€²åº¦
</string>
<string name="CompileQueueStart">
- recompile
+ 釿–°ç·¨è­¯
</string>
<string name="ResetQueueTitle">
- Reset Progress
+ é‡è¨­é€²åº¦
</string>
<string name="ResetQueueStart">
- reset
+ é‡è¨­
</string>
<string name="RunQueueTitle">
設定執行中程åº
@@ -1481,19 +1481,19 @@
腳本(物件超出範åœï¼‰
</string>
<string name="GodToolsObjectOwnedBy">
- Object [OBJECT] owned by [OWNER]
+ 物件 [OBJECT] 為 [OWNER] æ‰€æ“æœ‰
</string>
<string name="GroupsNone">
ç„¡
</string>
- <string name="Group" value="(社團)"/>
+ <string name="Group" value="(群組)"/>
<string name="Unknown">
(未知)
</string>
<string name="SummaryForTheWeek" value="Summary for this week, beginning on"/>
<string name="NextStipendDay" value="The next stipend day is"/>
<string name="GroupIndividualShare" value="Group Individual Share"/>
- <string name="GroupColumn" value="社團"/>
+ <string name="GroupColumn" value="群組"/>
<string name="Balance">
Balance
</string>
@@ -1534,7 +1534,7 @@
Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS])
</string>
<string name="RegionInfoAllowedGroups">
- Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS])
+ å…許的群群組:([ALLOWEDGROUPS],最大 [MAXACCESS])
</string>
<string name="ScriptLimitsParcelScriptMemory">
地段腳本記憶體
@@ -1549,7 +1549,7 @@
Memory used: [COUNT] kb
</string>
<string name="ScriptLimitsParcelScriptURLs">
- Parcel Script URLs
+ 地段腳本 URLs
</string>
<string name="ScriptLimitsURLsUsed">
URLs used: [COUNT] out of [MAX]; [AVAILABLE] available
@@ -1561,7 +1561,7 @@
Error requesting information
</string>
<string name="ScriptLimitsRequestNoParcelSelected">
- No Parcel Selected
+ ç„¡åœ°æ®µè¢«é¸æ“‡
</string>
<string name="ScriptLimitsRequestWrongRegion">
Error: script information is only available in your current region
@@ -1576,46 +1576,46 @@
Sitting On
</string>
<string name="ATTACH_CHEST">
- Chest
+ 胸部
</string>
<string name="ATTACH_HEAD">
頭部
</string>
<string name="ATTACH_LSHOULDER">
- Left Shoulder
+ 左肩
</string>
<string name="ATTACH_RSHOULDER">
- Right Shoulder
+ å³è‚©
</string>
<string name="ATTACH_LHAND">
- Left Hand
+ 左手
</string>
<string name="ATTACH_RHAND">
- Right Hand
+ 峿‰‹
</string>
<string name="ATTACH_LFOOT">
- Left Foot
+ 左腳
</string>
<string name="ATTACH_RFOOT">
- Right Foot
+ å³è…³
</string>
<string name="ATTACH_BACK">
- Back
+ 背部
</string>
<string name="ATTACH_PELVIS">
- Pelvis
+ 骨盆
</string>
<string name="ATTACH_MOUTH">
- Mouth
+ 嘴巴
</string>
<string name="ATTACH_CHIN">
下巴
</string>
<string name="ATTACH_LEAR">
- Left Ear
+ 左耳
</string>
<string name="ATTACH_REAR">
- Right Ear
+ å³è€³
</string>
<string name="ATTACH_LEYE">
左眼
@@ -1627,43 +1627,43 @@
é¼»å­
</string>
<string name="ATTACH_RUARM">
- Right Upper Arm
+ å³ä¸Šè‡‚
</string>
<string name="ATTACH_RLARM">
- Right Lower Arm
+ å³å‰è‡‚
</string>
<string name="ATTACH_LUARM">
- Left Upper Arm
+ 左上臂
</string>
<string name="ATTACH_LLARM">
- Left Lower Arm
+ å·¦å‰è‡‚
</string>
<string name="ATTACH_RHIP">
- Right Hip
+ å³è‡€
</string>
<string name="ATTACH_RULEG">
- Right Upper Leg
+ å³å¤§è…¿
</string>
<string name="ATTACH_RLLEG">
- Right Lower Leg
+ å³å°è…¿
</string>
<string name="ATTACH_LHIP">
- Left Hip
+ 左臀
</string>
<string name="ATTACH_LULEG">
- Left Upper Leg
+ 左大腿
</string>
<string name="ATTACH_LLLEG">
- Left Lower Leg
+ å·¦å°è…¿
</string>
<string name="ATTACH_BELLY">
- Belly
+ 腹部
</string>
<string name="ATTACH_RPEC">
- Right Pec
+ å³èƒ¸è‚Œ
</string>
<string name="ATTACH_LPEC">
- Left Pec
+ 左胸肌
</string>
<string name="ATTACH_HUD_CENTER_2">
HUD Center 2
@@ -1702,13 +1702,13 @@
[mthnum,datetime,slt]/[day,datetime,slt]
</string>
<string name="PanelContentsTooltip">
- Content of object
+ 物件的內容
</string>
<string name="PanelContentsNewScript">
- New Script
+ 新腳本
</string>
<string name="BusyModeResponseDefault">
- The Resident you messaged is in &apos;busy mode&apos; which means they have requested not to be disturbed. Your message will still be shown in their IM panel for later viewing.
+ 你傳é€è¨Šæ¯çš„å±…æ°‘ç›®å‰è™•於忙碌模å¼ä¸­ï¼Œé€™æ„å‘³è‘—ä»–è¦æ±‚ä¸è¢«æ‰“擾。你所傳的訊æ¯ä»å°‡æœƒç•™å­˜ä¸¦é¡¯ç¤ºæ–¼ IM 颿¿ä¸Šä¾›ä»–ç¨å¾Œæ™‚查閱。
</string>
<string name="MuteByName">
(由å稱)
@@ -1720,22 +1720,22 @@
(物件)
</string>
<string name="MuteGroup">
- (社團)
+ (群組)
</string>
<string name="MuteExternal">
- (External)
+ (外部)
</string>
<string name="RegionNoCovenant">
- There is no Covenant provided for this Estate.
+ 此領地未æä¾›ä»»ä½•å¥‘ç´„è¦æ±‚。
</string>
<string name="RegionNoCovenantOtherOwner">
There is no Covenant provided for this Estate. The land on this estate is being sold by the Estate owner, not Linden Lab. Please contact the Estate Owner for sales details.
</string>
- <string name="covenant_last_modified" value="Last Modified:"/>
+ <string name="covenant_last_modified" value="最後修改於:"/>
<string name="none_text" value="(無)"/>
<string name="never_text" value="(絕ä¸ï¼‰"/>
<string name="GroupOwned">
- ç¤¾åœ˜æ‰€æ“æœ‰
+ ç¾¤çµ„æ‰€æ“æœ‰
</string>
<string name="Public">
公開
@@ -1744,7 +1744,7 @@
Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile
</string>
<string name="ClassifiedUpdateAfterPublish">
- (will update after publish)
+ (將於發布後自動更新)
</string>
<string name="NoPicksClassifiedsText">
You haven&apos;t created any Picks or Classifieds. Click the Plus button below to create a Pick or Classified.
@@ -1765,10 +1765,10 @@
An object named
</string>
<string name="InvOfferOwnedByGroup">
- owned by the group
+ ç¾¤çµ„æ‰€æ“æœ‰
</string>
<string name="InvOfferOwnedByUnknownGroup">
- owned by an unknown group
+ ç”±ä¸€å€‹æœªçŸ¥çš„ç¾¤çµ„æ‰€æ“æœ‰
</string>
<string name="InvOfferOwnedBy">
owned by
@@ -1955,7 +1955,7 @@
Linden Location
</string>
<string name="Adult">
- æˆäºº
+ 完全æˆäºº
</string>
<string name="Arts&amp;Culture">
Arts &amp; Culture
@@ -2060,7 +2060,7 @@ If this message persists, restart your computer.
Would you like to send a crash report?
</string>
<string name="MBAlert">
- Notification
+ 通知
</string>
<string name="MBNoDirectX">
[APP_NAME] is unable to detect DirectX 9.0b or greater.
@@ -2069,7 +2069,7 @@ Would you like to send a crash report?
Do you wish to continue?
</string>
<string name="MBWarning">
- Warning
+ 警告
</string>
<string name="MBNoAutoUpdate">
Automatic updating is not yet implemented for Linux.
@@ -2079,7 +2079,7 @@ Please download the latest version from www.secondlife.com.
RegisterClass failed
</string>
<string name="MBError">
- Error
+ 錯誤
</string>
<string name="MBFullScreenErr">
Unable to run fullscreen at [WIDTH] x [HEIGHT].
@@ -3577,13 +3577,13 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Health
</string>
<string name="LocationCtrlAdultIconTooltip">
- æˆäººåœ°å€
+ 完全æˆäººåœ°å€
</string>
<string name="LocationCtrlModerateIconTooltip">
- Moderate Region
+ é©åº¦æˆäººåœ°å€
</string>
<string name="LocationCtrlGeneralIconTooltip">
- 一般地å€
+ 一般普級地å€
</string>
<string name="UpdaterWindowTitle">
[APP_NAME] æ›´æ–°
@@ -3640,10 +3640,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Your text chat has been disabled by a Group Moderator.
</string>
<string name="IM_default_text_label">
- Click here to instant message.
+ 點擊此處以傳é€å³æ™‚訊æ¯ã€‚
</string>
<string name="IM_to_label">
- To
+ 至
</string>
<string name="IM_moderator_label">
(Moderator)
@@ -3742,10 +3742,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Error while moderating.
</string>
<string name="removed">
- You have been removed from the group.
+ 你已經由群組中被移除。
</string>
<string name="removed_from_group">
- You have been removed from the group.
+ 你已經由群組中被移除。
</string>
<string name="close_on_no_ability">
You no longer have the ability to be in the chat session.
@@ -3793,10 +3793,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
for deeding land
</string>
<string name="to create a group">
- 以創造社團
+ 以創造群組
</string>
<string name="to join a group">
- 以加入社團
+ 以加入群組
</string>
<string name="to upload">
以上傳
@@ -3826,7 +3826,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
Officers
</string>
<string name="group_role_owners">
- Owners
+ æ“æœ‰è€…
</string>
<string name="group_member_status_online">
上線
@@ -3876,16 +3876,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
新裙å­
</string>
<string name="New Alpha">
- New Alpha
+ æ–°åŠé€æ˜Ž
</string>
<string name="New Tattoo">
新刺é’
</string>
<string name="New Physics">
- New Physics
+ 新身體物ç†
</string>
<string name="Invalid Wearable">
- Invalid Wearable
+ 無效的å¯ç©¿è£æ‰®
</string>
<string name="New Gesture">
æ–°å§¿å‹¢
diff --git a/indra/newview/skins/default/xui/zh/teleport_strings.xml b/indra/newview/skins/default/xui/zh/teleport_strings.xml
index b18eb4a390..ffb4c903bb 100644
--- a/indra/newview/skins/default/xui/zh/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/zh/teleport_strings.xml
@@ -3,25 +3,25 @@
<message_set name="errors">
<message name="invalid_tport">
Problem encountered processing your teleport request. You may need to log back in before you can teleport.
-If you continue to get this message, please check the [SUPPORT_SITE].
+如果你æŒçºŒå¾—到此訊æ¯ï¼Œè«‹æŸ¥é–± [SUPPORT_SITE]。
</message>
<message name="invalid_region_handoff">
Problem encountered processing your region crossing. You may need to log back in before you can cross regions.
-If you continue to get this message, please check the [SUPPORT_SITE].
+如果你æŒçºŒå¾—到此訊æ¯ï¼Œè«‹æŸ¥é–± [SUPPORT_SITE]。
</message>
<message name="blocked_tport">
- Sorry, teleport is currently blocked. Try again in a moment.
-If you still cannot teleport, please log out and log back in to resolve the problem.
+ 抱歉,目å‰çž¬é–“傳é€å·²è¢«é˜»æ“‹ã€‚è«‹ç¨å¾Œå†è©¦ã€‚
+如果你ä»ç„¡æ³•進行瞬間傳é€ï¼Œè«‹ç™»å‡ºå¾Œé‡æ–°å…¥ä¾†è§£æ±ºæ­¤ä¸€å•題。
</message>
<message name="nolandmark_tport">
- Sorry, but system was unable to locate landmark destination.
+ 抱歉,ä¸éŽç³»çµ±ç„¡æ³•找到地標所在目的地。
</message>
<message name="timeout_tport">
- Sorry, but system was unable to complete the teleport connection.
-Try again in a moment.
+ 抱歉,ä¸éŽç³»çµ±ç„¡æ³•完æˆçž¬é–“傳é€çš„è¯æŽ¥ã€‚
+è«‹ç¨å¾Œå†è©¦ã€‚
</message>
<message name="noaccess_tport">
- Sorry, you do not have access to that teleport destination.
+ 抱歉,你並沒有權é™é€²å…¥è¦çž¬é–“傳é€çš„目的地。
</message>
<message name="missing_attach_tport">
Your attachments have not arrived yet. Try waiting for a few more seconds or log out and back in again before attempting to teleport.
@@ -47,7 +47,7 @@ Try again in a moment.
Sending to destination.
</message>
<message name="redirecting">
- Redirecting to different location.
+ 釿–°å°Žå‘至ä¸åŒä½ç½®ã€‚
</message>
<message name="relaying">
Relaying to destination.
diff --git a/indra/newview/skins/minimal/xui/da/notifications.xml b/indra/newview/skins/minimal/xui/da/notifications.xml
index e77eeee8df..3d003ea3b3 100644
--- a/indra/newview/skins/minimal/xui/da/notifications.xml
+++ b/indra/newview/skins/minimal/xui/da/notifications.xml
@@ -1327,7 +1327,7 @@ Prøv igen om lidt.
No valid parcel could be found.
</notification>
<notification name="ObjectGiveItem">
- Et objekt ved navn &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] tilbyder dig [ITEM_SLURL]. For at bruge denne genstand skal du skifte til avanceret tilstand, hvor du kan finde genstanden i din beholdning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes på login skærmbilledet.
+ Et objekt ved navn &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ejet af [NAME_SLURL] tilbyder dig &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. For at bruge denne genstand skal du skifte til avanceret tilstand, hvor du kan finde genstanden i din beholdning. Ønsker du at logge ud for at skifte tilstand? Valg af tilstand findes på login skærmbilledet.
<form name="form">
<button name="Keep" text="Behold genstand"/>
<button name="Discard" text="Afvis genstand"/>
diff --git a/indra/newview/skins/minimal/xui/da/panel_people.xml b/indra/newview/skins/minimal/xui/da/panel_people.xml
index 49cd2c71f2..8be4d695bd 100644
--- a/indra/newview/skins/minimal/xui/da/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/da/panel_people.xml
@@ -66,16 +66,16 @@ Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor.
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Ã…ben session med privat besked (IM)"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Opkald" name="call_btn" tool_tip="Kald til denne beboer"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/de/notifications.xml b/indra/newview/skins/minimal/xui/de/notifications.xml
index 1eee1d1c9b..9abf8cdbb9 100644
--- a/indra/newview/skins/minimal/xui/de/notifications.xml
+++ b/indra/newview/skins/minimal/xui/de/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, bietet Ihnen [ITEM_SLURL] an. Zur Verwendung dieses Artikels müssen Sie in den erweiterten Modus umschalten, wo Sie den Artikel in Ihrem Inventar finden werden. Um in den erweiterten Modus umzuschalten, beenden Sie die Anwendung, starten Sie sie neu und ändern Sie die Moduseinstellung auf dem Anmeldebildschirm.
+ Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, bietet Ihnen &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; an. Zur Verwendung dieses Artikels müssen Sie in den erweiterten Modus umschalten, wo Sie den Artikel in Ihrem Inventar finden werden. Um in den erweiterten Modus umzuschalten, beenden Sie die Anwendung, starten Sie sie neu und ändern Sie die Moduseinstellung auf dem Anmeldebildschirm.
<form name="form">
<button name="Keep" text="Artikel behalten"/>
<button name="Discard" text="Artikel ablehnen"/>
diff --git a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
index 0ef2234fec..56c2310f2f 100644
--- a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Unbekannt"/>
<layout_stack name="button_stack">
<layout_panel name="view_profile_btn_panel">
<button label="Profil" name="view_profile_btn"/>
@@ -11,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Teilen" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Bezahlen" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Anrufen" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Anruf beenden" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Voice-Steuerung" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Ignorieren" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Freischalten" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Anrufvolumen" value="0,5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml
index 4f8f70ad17..1b6565eb73 100644
--- a/indra/newview/skins/minimal/xui/de/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/de/panel_people.xml
@@ -48,13 +48,13 @@
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="IM-Sitzung öffnen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
index cc551f7d58..477f210352 100644
--- a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
+++ b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
@@ -3,14 +3,13 @@
legacy_header_height="18"
can_resize="true"
can_minimize="false"
- height="360"
+ height="460"
layout="topleft"
min_height="360"
- left="645"
+ left="10000"
top="10"
- min_width="345"
+ min_width="335"
name="floater_help_browser"
- save_rect="true"
single_instance="true"
title="HOW TO"
width="335">
@@ -22,7 +21,7 @@
name="done_text">
</floater.string>
<layout_stack
- bottom="360"
+ bottom="460"
follows="left|right|top|bottom"
layout="topleft"
left="5"
@@ -38,7 +37,7 @@
user_resize="false"
width="325">
<web_browser
- trusted_content="true"
+ trusted_content="true"
bottom="-5"
follows="left|right|top|bottom"
layout="topleft"
diff --git a/indra/newview/skins/minimal/xui/en/floater_web_content.xml b/indra/newview/skins/minimal/xui/en/floater_web_content.xml
index 50cb5b14ce..1d9a967d5a 100644
--- a/indra/newview/skins/minimal/xui/en/floater_web_content.xml
+++ b/indra/newview/skins/minimal/xui/en/floater_web_content.xml
@@ -17,6 +17,7 @@
follows="left|right|top|bottom"
layout="topleft"
left="5"
+ animate="false"
name="stack1"
orientation="vertical"
top="20"
@@ -155,14 +156,20 @@
name="external_controls"
top_delta="0"
user_resize="false"
+ auto_resize="true"
width="585">
<web_browser
- bottom="-22"
+ bottom="-2"
follows="all"
layout="topleft"
left="0"
name="webbrowser"
top="0"/>
+ </layout_panel>
+ <layout_panel name="status_bar"
+ height="23"
+ auto_resize="false"
+ user_resize="false">
<text
type="string"
length="200"
@@ -173,7 +180,7 @@
name="statusbartext"
parse_urls="false"
text_color="0.4 0.4 0.4 1"
- top_pad="5"
+ top_pad="3"
width="495"/>
<progress_bar
color_bar="0.3 1.0 0.3 1"
diff --git a/indra/newview/skins/minimal/xui/en/main_view.xml b/indra/newview/skins/minimal/xui/en/main_view.xml
index 6e8ad9adaf..0ce6cbc984 100644
--- a/indra/newview/skins/minimal/xui/en/main_view.xml
+++ b/indra/newview/skins/minimal/xui/en/main_view.xml
@@ -187,9 +187,9 @@
name="status_bar_container"
tab_stop="false"
height="30"
- left="-70"
+ left="-160"
top="0"
- width="70"
+ width="160"
visible="false"/>
<panel follows="top|bottom"
height="500"
diff --git a/indra/newview/skins/minimal/xui/en/notifications.xml b/indra/newview/skins/minimal/xui/en/notifications.xml
index 84da9472cc..7b7cdb5fc6 100644
--- a/indra/newview/skins/minimal/xui/en/notifications.xml
+++ b/indra/newview/skins/minimal/xui/en/notifications.xml
@@ -24,7 +24,7 @@
icon="notify.tga"
name="ObjectGiveItem"
type="offer">
- An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] is offering you [ITEM_SLURL]. Using this item requires you to switch to Advanced mode where you will find the item in your Inventory. To switch to Advanced mode, quit and restart this application and change the mode setting on the login screen.
+ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] is offering you &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Using this item requires you to switch to Advanced mode where you will find the item in your Inventory. To switch to Advanced mode, quit and restart this application and change the mode setting on the login screen.
<form name="form">
<button
index="0"
diff --git a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
index be13bc1bb7..2cb77bcdf3 100644
--- a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
@@ -23,102 +23,172 @@
orientation="vertical"
top_pad="5"
width="145">
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="20"
- layout="topleft"
- left="2"
- min_height="20"
- width="140"
- name="view_profile_btn_panel"
- top="0"
- user_resize="false">
- <button
- follows="left|top|right"
- height="23"
- label="Profile"
- name="view_profile_btn"
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="20"
+ layout="topleft"
+ left="2"
+ min_height="20"
+ width="140"
+ name="view_profile_btn_panel"
top="0"
- width="140" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="25"
- layout="topleft"
- min_height="25"
- width="140"
- name="add_friend_btn_panel"
- user_resize="false">
- <button
- follows="left|top|right"
- height="23"
- label="Add Friend"
- name="add_friend_btn"
- top="5"
- width="140" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="25"
- layout="topleft"
- min_height="25"
- width="140"
- name="teleport_btn_panel"
- user_resize="false">
- <button
- auto_resize="false"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Profile"
+ name="view_profile_btn"
+ top="0"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="add_friend_btn_panel"
+ user_resize="false">
+ <button
follows="left|top|right"
height="23"
- label="Teleport"
- name="teleport_btn"
- tool_tip = "Offer to teleport this person"
+ label="Add Friend"
+ name="add_friend_btn"
+ top="5"
width="140" />
- </layout_panel>
- <layout_panel
+ </layout_panel>
+ <layout_panel
auto_resize="false"
follows="top|left|right"
height="25"
layout="topleft"
min_height="25"
width="140"
- name="call_btn_panel"
+ name="teleport_btn_panel"
user_resize="false">
- <button
- follows="left|top|right"
- height="23"
- label="Call"
- name="call_btn"
- width="140" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- follows="top|left|right"
- height="25"
- layout="topleft"
- min_height="25"
- width="140"
- name="end_call_btn_panel"
- user_resize="false"
- visible="false">
- <button
- follows="left|top|right"
- height="23"
- label="End Call"
- name="end_call_btn"
- width="140" />
- </layout_panel>
- <layout_panel
- mouse_opaque="false"
- auto_resize="true"
- follows="top|left"
- height="0"
- layout="topleft"
- min_height="0"
- width="140"
- name="spacer"
- user_resize="false" />
+ <button
+ auto_resize="false"
+ follows="left|top|right"
+ height="23"
+ label="Teleport"
+ name="teleport_btn"
+ tool_tip = "Offer to teleport this person"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="call_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Call"
+ name="call_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="end_call_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="End Call"
+ name="end_call_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="block_btn_panel"
+ user_resize="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Block"
+ name="block_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="140"
+ name="unblock_btn_panel"
+ user_resize="false"
+ visible="false">
+ <button
+ follows="left|top|right"
+ height="23"
+ label="Unblock"
+ name="unblock_btn"
+ width="140" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="54"
+ width="140"
+ name="volume_ctrl_panel"
+ visible="false"
+ user_resize="false">
+ <slider
+ follows="top|left"
+ height="23"
+ increment="0.01"
+ left="0"
+ max_val="0.95"
+ min_val="0.05"
+ name="volume_slider"
+ show_text="false"
+ tool_tip="Call Volume"
+ top_pad="32"
+ value="0.5"
+ width="125" />
+ <button
+ follows="top|left"
+ height="16"
+ image_disabled="Audio_Off"
+ image_disabled_selected="AudioMute_Off"
+ image_hover_selected="AudioMute_Over"
+ image_selected="AudioMute_Off"
+ image_unselected="Audio_Off"
+ is_toggle="true"
+ left_pad="0"
+ top_delta="4"
+ name="mute_btn"
+ width="16" />
+ </layout_panel>
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="true"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ min_height="0"
+ width="140"
+ name="spacer"
+ user_resize="false" />
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_login.xml b/indra/newview/skins/minimal/xui/en/panel_login.xml
index 3903658e71..40d2df78e1 100644
--- a/indra/newview/skins/minimal/xui/en/panel_login.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_login.xml
@@ -124,27 +124,27 @@ label="Remember password"
height="15"
left_pad="10"
name="mode_selection_text"
-top="20"
+ top="20"
width="130">
- Mode:
- </text>
-<combo_box
+ Mode:
+ </text>
+ <combo_box
follows="left|bottom"
height="23"
max_chars="128"
- top_pad="0"
tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+ top_pad="0"
name="mode_combo"
- width="120">
-<combo_box.item
- label="Basic"
- name="Basic"
- value="settings_minimal.xml" />
-<combo_box.item
- label="Advanced"
- name="Advanced"
- value="" />
-</combo_box>
+ width="110">
+ <combo_box.item
+ label="Basic"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced"
+ name="Advanced"
+ value="" />
+ </combo_box>
</layout_panel>
<layout_panel
tab_stop="false"
diff --git a/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
index 6dc1a1c9b0..73a8564274 100644
--- a/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
@@ -63,7 +63,7 @@ width="31" />
mouse_opaque="false"
name="location_combo"
top_delta="0"
- width="440">
+ width="325">
</location_input>
<icon follows="right"
height="20"
diff --git a/indra/newview/skins/minimal/xui/en/panel_people.xml b/indra/newview/skins/minimal/xui/en/panel_people.xml
index 76baacb091..4739f86e95 100644
--- a/indra/newview/skins/minimal/xui/en/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_people.xml
@@ -428,7 +428,7 @@ Looking for people to hang out with? Try the Destinations button below.
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="im_btn_lp"
user_resize="false"
auto_resize="true"
width="41">
@@ -449,7 +449,7 @@ Looking for people to hang out with? Try the Destinations button below.
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="call_btn_lp"
user_resize="false"
auto_resize="true"
width="52">
@@ -470,7 +470,7 @@ Looking for people to hang out with? Try the Destinations button below.
height="23"
layout="bottomleft"
left_pad="3"
- name="chat_btn_lp"
+ name="teleport_btn_lp"
user_resize="false"
auto_resize="true"
width="77">
diff --git a/indra/newview/skins/minimal/xui/en/panel_status_bar.xml b/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
index 6ccd0e938d..fdd6b5d6ec 100644
--- a/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
@@ -12,7 +12,7 @@
name="status"
top="19"
tab_stop="false"
- width="70">
+ width="185">
<panel.string
name="packet_loss_tooltip">
Packet Loss
@@ -33,6 +33,27 @@
name="buycurrencylabel">
L$ [AMT]
</panel.string>
+ <combo_box
+ follows="right|top"
+ left_pad="5"
+ drop_down_button.pad_left="10"
+ left="0"
+ top="5"
+ pad_left="5"
+ width="120"
+ height="23"
+ name="mode_combo"
+ tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+ >
+ <combo_box.item
+ label="Basic Mode"
+ name="Basic"
+ value="settings_minimal.xml" />
+ <combo_box.item
+ label="Advanced Mode"
+ name="Advanced"
+ value="" />
+ </combo_box>
<button
follows="right|top"
height="16"
@@ -41,7 +62,7 @@
image_pressed="Pause_Press"
image_pressed_selected="Play_Press"
is_toggle="true"
- left="15"
+ left_pad="5"
top="7"
name="media_toggle_btn"
tool_tip="Start/Stop All Media (Music, Video, Web pages)"
diff --git a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
index fe06a2d816..ba148cf421 100644
--- a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
+++ b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
@@ -113,6 +113,14 @@
font="SansSerifSmall"
text_color="TextFgColor"
/>
+ <see_avatars_icon
+ name="see_avatars_icon"
+ width="0"
+ height="0"
+ visible="false"
+ top="21"
+ follows="right|top"
+ />
<combo_button
name="Location History"
label=""
diff --git a/indra/newview/skins/minimal/xui/es/notifications.xml b/indra/newview/skins/minimal/xui/es/notifications.xml
index b08ebb5f76..78b617c429 100644
--- a/indra/newview/skins/minimal/xui/es/notifications.xml
+++ b/indra/newview/skins/minimal/xui/es/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ofrece un/a [ITEM_SLURL]. Para utilizar este ítem, cambia al modo Avanzado y búscalo en el inventario. Para cambiar al modo Avanzado, sal de la aplicación, reiníciala y cambia el ajuste de modo en la pantalla de inicio de sesión.
+ Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ofrece un/a &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Para utilizar este ítem, cambia al modo Avanzado y búscalo en el inventario. Para cambiar al modo Avanzado, sal de la aplicación, reiníciala y cambia el ajuste de modo en la pantalla de inicio de sesión.
<form name="form">
<button name="Keep" text="Conservar ítem"/>
<button name="Discard" text="Rechazar ítem"/>
diff --git a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
index 1be6997813..93b6526f77 100644
--- a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
@@ -10,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Compartir" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Pagar" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Llamar" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Colgar" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de la voz" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Ignorar" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="No ignorar" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volumen de la llamada" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_people.xml b/indra/newview/skins/minimal/xui/es/panel_people.xml
index 1e1c3411ae..a06f3010d7 100644
--- a/indra/newview/skins/minimal/xui/es/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/es/panel_people.xml
@@ -49,14 +49,14 @@
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Teleportarte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/minimal/xui/fr/notifications.xml b/indra/newview/skins/minimal/xui/fr/notifications.xml
index 41dd42c39f..05fa03cdc1 100644
--- a/indra/newview/skins/minimal/xui/fr/notifications.xml
+++ b/indra/newview/skins/minimal/xui/fr/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous offre [ITEM_SLURL]. Pour utiliser cet article, vous devez passer en mode Avancé. L&apos;article se trouve dans votre inventaire. Pour changer de mode, quittez l&apos;application, redémarrez-la, puis sélectionnez un autre mode sur l&apos;écran de connexion.
+ Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous offre &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Pour utiliser cet article, vous devez passer en mode Avancé. L&apos;article se trouve dans votre inventaire. Pour changer de mode, quittez l&apos;application, redémarrez-la, puis sélectionnez un autre mode sur l&apos;écran de connexion.
<form name="form">
<button name="Keep" text="Garder l&apos;article"/>
<button name="Discard" text="Refuser l&apos;article"/>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
index fdc5aeca49..1643cf3229 100644
--- a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="Inconnu"/>
<layout_stack name="button_stack">
<layout_panel name="view_profile_btn_panel">
<button label="Profil" name="view_profile_btn"/>
@@ -11,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne."/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Partager" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Payer" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Appeler" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Quitter l&apos;appel" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Contrôles vocaux" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Ignorer" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Ne plus ignorer" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volume de l&apos;appel." value="0,5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_people.xml b/indra/newview/skins/minimal/xui/fr/panel_people.xml
index 72fb4d807f..427a420b91 100644
--- a/indra/newview/skins/minimal/xui/fr/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/fr/panel_people.xml
@@ -49,14 +49,14 @@ Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouto
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
+ <layout_panel name="im_btn_lp">
+ <button label="IM" name="im_btn" tool_tip="Ouvrir une session IM."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident."/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
- <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
+ <layout_panel name="teleport_btn_lp">
+ <button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation."/>
</layout_panel>
</layout_stack>
<layout_stack name="bottom_bar_ls1">
diff --git a/indra/newview/skins/minimal/xui/it/notifications.xml b/indra/newview/skins/minimal/xui/it/notifications.xml
index 05e13bc4f3..998e38ff5a 100644
--- a/indra/newview/skins/minimal/xui/it/notifications.xml
+++ b/indra/newview/skins/minimal/xui/it/notifications.xml
@@ -2418,7 +2418,7 @@ Riprova tra qualche istante.
Non è stato trovato nessun territorio valido.
</notification>
<notification name="ObjectGiveItem">
- Un oggetto denominato &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; di proprietà di [NAME_SLURL] ti ha offerto [ITEM_SLURL]: Per usare questo oggetto è necessario passare alla modalità Avanzata e cercarlo nell&apos;Inventario. Per passare alla modalità Avanzata, esci e riavvia l&apos;applicazione e cambia le impostazioni della modalità nella schermata di accesso.
+ Un oggetto denominato &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; di proprietà di &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; ti ha offerto [ITEM_SLURL]: Per usare questo oggetto è necessario passare alla modalità Avanzata e cercarlo nell&apos;Inventario. Per passare alla modalità Avanzata, esci e riavvia l&apos;applicazione e cambia le impostazioni della modalità nella schermata di accesso.
<form name="form">
<button name="Keep" text="Mantieni oggetto"/>
<button name="Discard" text="Rifiuta oggetto"/>
diff --git a/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml
index 756db84c1c..269931a1a4 100644
--- a/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/it/panel_im_control_panel.xml
@@ -10,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport a questa persona"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Condividi" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Paga" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Chiama" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Chiudi chiamata" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Regolazione voce" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Blocca" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Sblocca" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volume chiamata" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/it/panel_people.xml b/indra/newview/skins/minimal/xui/it/panel_people.xml
index 068c8bb808..81e886acf0 100644
--- a/indra/newview/skins/minimal/xui/it/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/it/panel_people.xml
@@ -66,16 +66,16 @@ Stai cercando persone da frequentare? Prova il pulsante Destinazioni in basso.
<layout_panel name="view_profile_btn_lp">
<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/ja/notifications.xml b/indra/newview/skins/minimal/xui/ja/notifications.xml
index 6ad0ed1ac6..43934c9317 100644
--- a/indra/newview/skins/minimal/xui/ja/notifications.xml
+++ b/indra/newview/skins/minimal/xui/ja/notifications.xml
@@ -2465,7 +2465,7 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚»ã
有効ãªåŒºç”»ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
</notification>
<notification name="ObjectGiveItem">
- [NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« [ITEM_SLURL] を渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’使ã†ã«ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒå¿…è¦ã§ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ãªãŠã™ã¨ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ãŒè¦‹ã¤ã‹ã‚Šã¾ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã«ã¯ã€ã“ã®ã‚¢ãƒ—リケーションを終了ã—ã¦å†èµ·å‹•ã—ã€ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ã§ãƒ¢ãƒ¼ãƒ‰è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。
+ [NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt; を渡ãã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’使ã†ã«ã¯ã‚¢ãƒ‰ãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒå¿…è¦ã§ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ãªãŠã™ã¨ã€ã‚ãªãŸã®æŒã¡ç‰©ã«ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ãŒè¦‹ã¤ã‹ã‚Šã¾ã™ã€‚アドãƒãƒ³ã‚¹ãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã«ã¯ã€ã“ã®ã‚¢ãƒ—リケーションを終了ã—ã¦å†èµ·å‹•ã—ã€ãƒ­ã‚°ã‚¤ãƒ³ç”»é¢ã§ãƒ¢ãƒ¼ãƒ‰è¨­å®šã‚’変更ã—ã¦ãã ã•ã„。
<form name="form">
<button name="Keep" text="アイテムをå—ã‘å–ã‚‹"/>
<button name="Discard" text="アイテムを拒å¦ã™ã‚‹"/>
diff --git a/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml
index f2429ac12a..14c38c796f 100644
--- a/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/ja/panel_im_control_panel.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_im_control_panel">
- <text name="avatar_name" value="䏿˜Ž"/>
<layout_stack name="button_stack">
<layout_panel name="view_profile_btn_panel">
<button label="プロフィール" name="view_profile_btn"/>
@@ -11,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="ã“ã®äººã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="共有" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="支払ã†" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="コール" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="コール終了" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="ボイスコントロール" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="ブロック" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="ブロック解除" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="コールã®éŸ³é‡" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/ja/panel_people.xml b/indra/newview/skins/minimal/xui/ja/panel_people.xml
index 9eb45d9a80..5caeebc151 100644
--- a/indra/newview/skins/minimal/xui/ja/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/ja/panel_people.xml
@@ -66,16 +66,16 @@
<layout_panel name="view_profile_btn_lp">
<button label="プロフィール" name="view_profile_btn" tool_tip="写真ã€ã‚°ãƒ«ãƒ¼ãƒ—ã€ãã®ä»–ä½äººæƒ…報を表示"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開ãã¾ã™"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="コール" name="call_btn" tool_tip="ã“ã®ä½äººã«ã‚³ãƒ¼ãƒ«ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="共有" name="share_btn" tool_tip="「æŒã¡ç‰©ã€ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’共有ã™ã‚‹"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="テレãƒãƒ¼ãƒˆ" name="teleport_btn" tool_tip="テレãƒãƒ¼ãƒˆã‚’é€ã‚Šã¾ã™"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/pl/notifications.xml b/indra/newview/skins/minimal/xui/pl/notifications.xml
index 6e62478ed0..6475a37465 100644
--- a/indra/newview/skins/minimal/xui/pl/notifications.xml
+++ b/indra/newview/skins/minimal/xui/pl/notifications.xml
@@ -2384,7 +2384,7 @@ Spróbuj ponowanie za kilka minut.
Nieważana posiadłość.
</notification>
<notification name="ObjectGiveItem">
- Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, którego właścicielem jest [NAME_SLURL] oferuje Tobie [ITEM_SLURL]. Korzystanie z tego obieku wymaga przelączenia się na tryb zaawansowany, w którym będzie można odszukać obiekt w Twojej Szafie. W celu przełączenia trybu życia na zaawansowany, zamknij i uruchom ponownie aplikację. Przed ponownym zalogowaniem zmień tryb życia na ekranie logowania.
+ Obiekt o nazwie &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, którego właścicielem jest [NAME_SLURL] oferuje Tobie &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Korzystanie z tego obieku wymaga przelączenia się na tryb zaawansowany, w którym będzie można odszukać obiekt w Twojej Szafie. W celu przełączenia trybu życia na zaawansowany, zamknij i uruchom ponownie aplikację. Przed ponownym zalogowaniem zmień tryb życia na ekranie logowania.
<form name="form">
<button name="Keep" text="Zaakceptuj obiekt"/>
<button name="Discard" text="Odrzuć obiekt"/>
diff --git a/indra/newview/skins/minimal/xui/pl/panel_people.xml b/indra/newview/skins/minimal/xui/pl/panel_people.xml
index dbfee739f4..3b3aaa0987 100644
--- a/indra/newview/skins/minimal/xui/pl/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/pl/panel_people.xml
@@ -66,16 +66,16 @@ Chcesz spotkać ludzi? Skorzystaj z przycisku &quot;Atrakcje turystyczne&quot; p
<layout_panel name="view_profile_btn_lp">
<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="share_btn_lp">
<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/minimal/xui/pt/notifications.xml b/indra/newview/skins/minimal/xui/pt/notifications.xml
index 30ba6f68bf..9e5ff6fe60 100644
--- a/indra/newview/skins/minimal/xui/pt/notifications.xml
+++ b/indra/newview/skins/minimal/xui/pt/notifications.xml
@@ -9,7 +9,7 @@
</form>
</notification>
<notification name="ObjectGiveItem">
- Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], está lhe oferecendo [ITEM_SLURL]. Esta ação requer o modo Avançado. Passe para o modo Avançado e você verá o item em seu Inventário. Para passar para o modo Avançado, feche e reinicialize esse aplicativo e mude o modo (indicado na tela de login).
+ Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], está lhe oferecendo &lt;nolink&gt;[ITEM_SLURL]&lt;/nolink&gt;. Esta ação requer o modo Avançado. Passe para o modo Avançado e você verá o item em seu Inventário. Para passar para o modo Avançado, feche e reinicialize esse aplicativo e mude o modo (indicado na tela de login).
<form name="form">
<button name="Keep" text="Guardar item"/>
<button name="Discard" text="Recusar item"/>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
index d223ee9c69..190323c3b0 100644
--- a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
+++ b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
@@ -10,20 +10,20 @@
<layout_panel name="teleport_btn_panel">
<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
</layout_panel>
- <layout_panel name="share_btn_panel">
- <button label="Compartilhar" name="share_btn"/>
- </layout_panel>
- <layout_panel name="pay_btn_panel">
- <button label="Pagar" name="pay_btn"/>
- </layout_panel>
<layout_panel name="call_btn_panel">
<button label="Ligar" name="call_btn"/>
</layout_panel>
<layout_panel name="end_call_btn_panel">
<button label="Encerrar ligação" name="end_call_btn"/>
</layout_panel>
- <layout_panel name="voice_ctrls_btn_panel">
- <button label="Controles de voz" name="voice_ctrls_btn"/>
+ <layout_panel name="block_btn_panel">
+ <button label="Bloquear" name="block_btn"/>
+ </layout_panel>
+ <layout_panel name="unblock_btn_panel">
+ <button label="Desbloquear" name="unblock_btn"/>
+ </layout_panel>
+ <layout_panel name="volume_ctrl_panel">
+ <slider name="volume_slider" tool_tip="Volume da ligação" value="0.5"/>
</layout_panel>
</layout_stack>
</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_people.xml b/indra/newview/skins/minimal/xui/pt/panel_people.xml
index d46c440eb9..0e98c586c6 100644
--- a/indra/newview/skins/minimal/xui/pt/panel_people.xml
+++ b/indra/newview/skins/minimal/xui/pt/panel_people.xml
@@ -49,13 +49,13 @@ Em busca de alguém para conversar? Confira o botão Destinos abaixo.
<layout_panel name="view_profile_btn_lp">
<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="im_btn_lp">
<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="call_btn_lp">
<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>
</layout_panel>
- <layout_panel name="chat_btn_lp">
+ <layout_panel name="teleport_btn_lp">
<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/tests/lldir_stub.cpp b/indra/newview/tests/lldir_stub.cpp
new file mode 100644
index 0000000000..18cf4e7419
--- /dev/null
+++ b/indra/newview/tests/lldir_stub.cpp
@@ -0,0 +1,62 @@
+/**
+ * @file lldir_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Use me only if you need to stub out some helper functions, not if you e.g. need sane numbers from countFilesInDir
+
+LLDir::LLDir() {}
+LLDir::~LLDir() {}
+BOOL LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask) { return true; }
+void LLDir::setChatLogsDir(const std::string &path) {}
+void LLDir::setPerAccountChatLogsDir(const std::string &first, const std::string &last) {}
+void LLDir::setLindenUserDir(const std::string &first, const std::string &last) {}
+void LLDir::setSkinFolder(const std::string &skin_folder) {}
+bool LLDir::setCacheDir(const std::string &path) { return true; }
+void LLDir::dumpCurrentDirectories() {}
+
+class LLDir_stub : public LLDir
+{
+public:
+ LLDir_stub() {}
+ ~LLDir_stub() {}
+
+ /*virtual*/ void initAppDirs(const std::string &app_name) {}
+
+ /*virtual*/ std::string getCurPath() { return "CUR_PATH_FROM_LLDIR"; }
+ /*virtual*/ U32 countFilesInDir(const std::string &dirname, const std::string &mask) { return 42; }
+ /*virtual*/ BOOL getNextFileInDir(const std::string &dirname, const std::string &mask, std::string &fname, BOOL wrap) { fname = fname + "_NEXT"; return false; }
+ /*virtual*/ void getRandomFileInDir(const std::string &dirname, const std::string &mask, std::string &fname) { fname = "RANDOM_FILE"; }
+ /*virtual*/ BOOL fileExists(const std::string &filename) const { return false; }
+};
+
+LLDir_stub gDirUtil;
+
+LLDir* gDirUtilp = &gDirUtil;
+
+std::string LLDir::getExpandedFilename(ELLPath loc, const std::string& subdir, const std::string& filename) const
+{
+ return subdir + " --- " + filename + " --- expanded!";
+}
+
diff --git a/indra/newview/tests/llglslshader_stub.cpp b/indra/newview/tests/llglslshader_stub.cpp
new file mode 100644
index 0000000000..8947a632c8
--- /dev/null
+++ b/indra/newview/tests/llglslshader_stub.cpp
@@ -0,0 +1,39 @@
+/**
+ * @file llglslshader_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llglslshader.h"
+
+void LLGLSLShader::uniform1f(const std::string& uniform, F32 num)
+{
+}
+
+void LLGLSLShader::uniform3fv(const std::string& uniform, U32 count, const GLfloat *v)
+{
+}
+
+void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)
+{
+}
diff --git a/indra/newview/tests/llpipeline_stub.cpp b/indra/newview/tests/llpipeline_stub.cpp
new file mode 100644
index 0000000000..ad112cbf6a
--- /dev/null
+++ b/indra/newview/tests/llpipeline_stub.cpp
@@ -0,0 +1,32 @@
+/**
+ * @file llpipeline_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+class LLPipeline
+{
+public: BOOL canUseWindLightShaders() const;
+};
+BOOL LLPipeline::canUseWindLightShaders() const {return TRUE;}
+LLPipeline gPipeline;
diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp
index daa10819fc..0235400976 100644
--- a/indra/newview/tests/llsechandler_basic_test.cpp
+++ b/indra/newview/tests/llsechandler_basic_test.cpp
@@ -86,6 +86,9 @@ std::string LLControlGroup::getString(const std::string& name)
return "";
}
+// Stub for --no-verify-ssl-cert
+BOOL LLControlGroup::getBOOL(const std::string& name) { return FALSE; }
+
LLSD LLCredential::getLoginParams()
{
LLSD result = LLSD::emptyMap();
diff --git a/indra/newview/tests/llsky_stub.cpp b/indra/newview/tests/llsky_stub.cpp
new file mode 100644
index 0000000000..241d740635
--- /dev/null
+++ b/indra/newview/tests/llsky_stub.cpp
@@ -0,0 +1,37 @@
+/**
+ * @file llsky_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+class LLSky
+{
+public:
+ void setOverrideSun(BOOL override);
+ void setSunDirection(const LLVector3 &sun_direction, const LLVector3 &sun_ang_velocity);
+};
+
+void LLSky::setOverrideSun(BOOL override) {}
+void LLSky::setSunDirection(const LLVector3 &sun_direction, const LLVector3 &sun_ang_velocity) {}
+
+LLSky gSky;
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
index dd7761475e..3c89b64d52 100644
--- a/indra/newview/tests/llviewernetwork_test.cpp
+++ b/indra/newview/tests/llviewernetwork_test.cpp
@@ -164,7 +164,7 @@ namespace tut
std::string("https://secondlife.com/helpers/"));
ensure_equals("Agni login page is correct",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure("Agni is a favorite",
grid.has(GRID_IS_FAVORITE_VALUE));
ensure("Agni is a system grid",
@@ -208,7 +208,7 @@ namespace tut
std::string("https://secondlife.com/helpers/"));
ensure_equals("Agni login page the same after grid file",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure("Agni still a favorite after grid file",
grid.has(GRID_IS_FAVORITE_VALUE));
ensure("Agni system grid still set after grid file",
@@ -310,7 +310,7 @@ namespace tut
std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/"));
ensure_equals("Override known grid login uri: login page is not set",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
// Override with loginuri
// override custom grid
@@ -359,7 +359,7 @@ namespace tut
std::string("https://my.helper.uri/mycustomhelpers"));
ensure_equals("Override known grid helper uri: login page is not changed",
grid[GRID_LOGIN_PAGE_VALUE].asString(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
// Override with helperuri
// override custom grid
@@ -451,9 +451,9 @@ namespace tut
ensure_equals("getHelperURI", LLGridManager::getInstance()->getHelperURI(),
std::string("https://secondlife.com/helpers/"));
ensure_equals("getLoginPage", LLGridManager::getInstance()->getLoginPage(),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure_equals("getLoginPage2", LLGridManager::getInstance()->getLoginPage("util.agni.lindenlab.com"),
- std::string("http://secondlife.com/app/login/"));
+ std::string("http://viewer-login.agni.lindenlab.com/"));
ensure("Is Agni a production grid", LLGridManager::getInstance()->isInProductionGrid());
std::vector<std::string> uris;
LLGridManager::getInstance()->getLoginURIs(uris);
diff --git a/indra/newview/tests/llviewershadermgr_stub.cpp b/indra/newview/tests/llviewershadermgr_stub.cpp
new file mode 100644
index 0000000000..18eff72f3c
--- /dev/null
+++ b/indra/newview/tests/llviewershadermgr_stub.cpp
@@ -0,0 +1,50 @@
+/**
+ * @file llglslshader_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "../llviewershadermgr.h"
+
+LLShaderMgr::LLShaderMgr() {}
+LLShaderMgr::~LLShaderMgr() {}
+
+LLViewerShaderMgr::LLViewerShaderMgr() {}
+LLViewerShaderMgr::~LLViewerShaderMgr() {}
+
+LLViewerShaderMgr* stub_instance = NULL;
+
+LLViewerShaderMgr* LLViewerShaderMgr::instance() {
+ if(NULL == stub_instance)
+ {
+ stub_instance = new LLViewerShaderMgr();
+ }
+
+ return stub_instance;
+}
+LLViewerShaderMgr::shader_iter fake_iter;
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::beginShaders() const {return fake_iter;}
+LLViewerShaderMgr::shader_iter LLViewerShaderMgr::endShaders() const {return fake_iter;}
+
+void LLViewerShaderMgr::updateShaderUniforms(LLGLSLShader* shader) {return;}
+std::string LLViewerShaderMgr::getShaderDirPrefix() {return "SHADER_DIR_PREFIX-";}
diff --git a/indra/newview/tests/llwlanimator_stub.cpp b/indra/newview/tests/llwlanimator_stub.cpp
new file mode 100644
index 0000000000..f5e15b2e7b
--- /dev/null
+++ b/indra/newview/tests/llwlanimator_stub.cpp
@@ -0,0 +1,29 @@
+/**
+ * @file llwlanimator_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+LLWLAnimator::LLWLAnimator(void) {}
+void LLWLAnimator::update(LLWLParamSet& set) {}
+void LLWLAnimator::setTrack(std::map<F32, LLWLParamKey>& track, F32 dayRate, F64 dayTime, bool run) {}
diff --git a/indra/newview/tests/llwldaycycle_stub.cpp b/indra/newview/tests/llwldaycycle_stub.cpp
new file mode 100644
index 0000000000..a7bc9a7b83
--- /dev/null
+++ b/indra/newview/tests/llwldaycycle_stub.cpp
@@ -0,0 +1,52 @@
+/**
+ * @file llwldaycycle_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+LLWLDayCycle::LLWLDayCycle(void)
+{
+}
+
+LLWLDayCycle::~LLWLDayCycle(void)
+{
+}
+
+bool LLWLDayCycle::getKeytime(LLWLParamKey keyFrame, F32& keyTime)
+{
+ keyTime = 0.5;
+ return true;
+}
+
+bool LLWLDayCycle::removeKeyframe(F32 time)
+{
+ return true;
+}
+
+void LLWLDayCycle::loadDayCycleFromFile(const std::string& fileName)
+{
+}
+
+void LLWLDayCycle::removeReferencesTo(const LLWLParamKey &keyframe)
+{
+}
diff --git a/indra/newview/tests/llwlparammanager_test.cpp b/indra/newview/tests/llwlparammanager_test.cpp
new file mode 100644
index 0000000000..be0dc9fd0c
--- /dev/null
+++ b/indra/newview/tests/llwlparammanager_test.cpp
@@ -0,0 +1,271 @@
+/**
+ * @file llwlparammanager_test.cpp
+ * @brief LLWLParamManager tests
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+// Precompiled headers
+#include "../llviewerprecompiledheaders.h"
+
+// Class to test
+#include "../llwlparammanager.h"
+
+// Dependencies
+#include "linden_common.h"
+
+// TUT header
+#include "lltut.h"
+
+// Stubs
+#include "llwldaycycle_stub.cpp"
+#include "llwlparamset_stub.cpp"
+#include "llwlanimator_stub.cpp"
+#include "llglslshader_stub.cpp"
+#include "lldir_stub.cpp"
+#include "llsky_stub.cpp"
+#include "llpipeline_stub.cpp"
+#include "llviewershadermgr_stub.cpp"
+
+void assert_glerror(void) {}
+LLViewerCamera::LLViewerCamera() {}
+void LLViewerCamera::setView(F32 vertical_fov_rads) {}
+std::string LLTrans::getString(const std::string &xml_desc, const LLStringUtil::format_map_t& args) { return std::string(""); }
+
+char* curl_unescape(const char* c_str, int length)
+{
+ char* copy = new char[length+4];
+ memcpy(copy, c_str, length);
+ copy[length+0] = 'E';
+ copy[length+1] = 'S';
+ copy[length+2] = 'C';
+ copy[length+3] = '\0';
+ return copy;
+}
+void curl_free(void* p) {delete[] ((char*)p);}
+char* curl_escape(const char* c_str, int length) {
+ char* copy = new char[length+6];
+ memcpy(copy, c_str, length);
+ copy[length+0] = 'U';
+ copy[length+1] = 'N';
+ copy[length+2] = 'E';
+ copy[length+3] = 'S';
+ copy[length+4] = 'C';
+ copy[length+5] = '\0';
+ return copy;
+}
+
+namespace tut
+{
+ // Main Setup
+ struct LLWLParamManagerFixture
+ {
+ class LLWLParamManagerTest
+ {
+ };
+
+ LLWLParamManager* mTestManager;
+
+ LLWLParamManagerFixture()
+ : mTestManager(LLWLParamManager::getInstance())
+ {
+ }
+
+ ~LLWLParamManagerFixture()
+ {
+ }
+ };
+ typedef test_group<LLWLParamManagerFixture> factory;
+ typedef factory::object object;
+ factory tf("LLWLParamManager test");
+
+ // Tests
+ template<> template<>
+ void object::test<1>()
+ {
+ try
+ {
+ std::string preset =
+ "<llsd>\
+ <map>\
+ <key>ambient</key>\
+ <array>\
+ <real>1.0499999523162842</real>\
+ <real>1.0499999523162842</real>\
+ <real>1.0499999523162842</real>\
+ <real>0.34999999403953552</real>\
+ </array>\
+ <key>blue_density</key>\
+ <array>\
+ <real>0.2447581488182351</real>\
+ <real>0.44872328639030457</real>\
+ <real>0.75999999046325684</real>\
+ <real>0.38000004053115788</real>\
+ </array>\
+ <key>blue_horizon</key>\
+ <array>\
+ <real>0.49548382097675159</real>\
+ <real>0.49548381382419748</real>\
+ <real>0.63999999284744291</real>\
+ <real>0.31999999642372146</real>\
+ </array>\
+ <key>cloud_color</key>\
+ <array>\
+ <real>0.40999999165535073</real>\
+ <real>0.40999999165535073</real>\
+ <real>0.40999999165535073</real>\
+ <real>0.40999999165535073</real>\
+ </array>\
+ <key>cloud_pos_density1</key>\
+ <array>\
+ <real>1.6884100437164307</real>\
+ <real>0.52609699964523315</real>\
+ <real>0.99999999999999289</real>\
+ <real>1</real>\
+ </array>\
+ <key>cloud_pos_density2</key>\
+ <array>\
+ <real>1.6884100437164307</real>\
+ <real>0.52609699964523315</real>\
+ <real>0.125</real>\
+ <real>1</real>\
+ </array>\
+ <key>cloud_scale</key>\
+ <array>\
+ <real>0.4199999868869746</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>cloud_scroll_rate</key>\
+ <array>\
+ <real>10.199999809265137</real>\
+ <real>10.01099967956543</real>\
+ </array>\
+ <key>cloud_shadow</key>\
+ <array>\
+ <real>0.26999998092651367</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>density_multiplier</key>\
+ <array>\
+ <real>0.00017999998817685818</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>distance_multiplier</key>\
+ <array>\
+ <real>0.80000001192093606</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>east_angle</key>\
+ <real>0</real>\
+ <key>enable_cloud_scroll</key>\
+ <array>\
+ <boolean>1</boolean>\
+ <boolean>1</boolean>\
+ </array>\
+ <key>gamma</key>\
+ <array>\
+ <real>1</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>glow</key>\
+ <array>\
+ <real>5</real>\
+ <real>0.0010000000474974513</real>\
+ <real>-0.47999998927116394</real>\
+ <real>1</real>\
+ </array>\
+ <key>haze_density</key>\
+ <array>\
+ <real>0.69999998807907104</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>haze_horizon</key>\
+ <array>\
+ <real>0.18999999761581243</real>\
+ <real>0.19915600121021271</real>\
+ <real>0.19915600121021271</real>\
+ <real>1</real>\
+ </array>\
+ <key>lightnorm</key>\
+ <array>\
+ <real>0</real>\
+ <real>0.70710659027099609</real>\
+ <real>-0.70710694789886475</real>\
+ <real>0</real>\
+ </array>\
+ <key>max_y</key>\
+ <array>\
+ <real>1605</real>\
+ <real>0</real>\
+ <real>0</real>\
+ <real>1</real>\
+ </array>\
+ <key>preset_num</key>\
+ <integer>22</integer>\
+ <key>star_brightness</key>\
+ <real>0</real>\
+ <key>sun_angle</key>\
+ <real>2.3561947345733643</real>\
+ <key>sunlight_color</key>\
+ <array>\
+ <real>0.73421055078505759</real>\
+ <real>0.78157895803450828</real>\
+ <real>0.89999997615813498</real>\
+ <real>0.29999998211860301</real>\
+ </array>\
+ </map>\
+ </llsd>";
+
+ std::stringstream preset_stream(preset);
+ mTestManager->loadPresetFromXML(LLWLParamKey("test1", LLWLParamKey::SCOPE_LOCAL), preset_stream);
+ LLWLParamSet dummy;
+ ensure("Couldn't get ParamSet after loading it", mTestManager->getParamSet(LLWLParamKey("test1", LLWLParamKey::SCOPE_LOCAL), dummy));
+ }
+ catch (...)
+ {
+ fail("loadPresetFromXML test crashed!");
+ }
+ }
+
+ template<> template<>
+ void object::test<2>()
+ {
+ mTestManager->propagateParameters();
+ ensure_equals("Wrong value from getDomeOffset()", mTestManager->getDomeOffset(), 0.96f);
+ ensure_equals("Wrong value from getDomeRadius()", mTestManager->getDomeRadius(), 15000.f);
+ ensure_equals("Wrong value from getLightDir()", mTestManager->getLightDir(), LLVector4(-0,0,1,0));
+ ensure_equals("Wrong value from getClampedLightDir()", mTestManager->getClampedLightDir(), LLVector4(-0,0,1,0));
+ ensure_equals("Wrong value from getRotatedLightDir()", mTestManager->getRotatedLightDir(), LLVector4(0,0,0,1));
+ }
+}
diff --git a/indra/newview/tests/llwlparamset_stub.cpp b/indra/newview/tests/llwlparamset_stub.cpp
new file mode 100644
index 0000000000..ccb99db475
--- /dev/null
+++ b/indra/newview/tests/llwlparamset_stub.cpp
@@ -0,0 +1,41 @@
+/**
+ * @file llwlparamset_stub.cpp
+ * @brief stub class to allow unit testing
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+LLWLParamSet::LLWLParamSet(void)
+{
+}
+
+void LLWLParamSet::updateCloudScrolling()
+{
+}
+
+void LLWLParamSet::set(const std::string& name, const LLVector4& val)
+{
+}
+
+void LLWLParamSet::update(LLGLSLShader *shader) const
+{
+}
diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp
index acc6e814bc..102294959a 100644
--- a/indra/newview/tests/llworldmap_test.cpp
+++ b/indra/newview/tests/llworldmap_test.cpp
@@ -27,7 +27,6 @@
// Dependencies
#include "linden_common.h"
-#include "llapr.h"
#include "llsingleton.h"
#include "lltrans.h"
#include "lluistring.h"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 8aa94616d6..0a21d8714c 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -31,6 +31,7 @@ import os.path
import re
import tarfile
import time
+import random
viewer_dir = os.path.dirname(__file__)
# add llmanifest library to our path so we don't have to muck with PYTHONPATH
sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
@@ -62,6 +63,26 @@ class ViewerManifest(LLManifest):
# include the entire shaders directory recursively
self.path("shaders")
+ # include the extracted list of contributors
+ contributor_names = self.extract_names("../../doc/contributions.txt")
+ self.put_in_file(contributor_names, "contributors.txt")
+ # include the extracted list of translators
+ translator_names = self.extract_names("../../doc/translations.txt")
+ self.put_in_file(translator_names, "translators.txt")
+ # include the list of Lindens (if any)
+ # see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits
+ linden_names_path = os.getenv("linden_credits")
+ if linden_names_path :
+ try:
+ linden_file = open(linden_names_path,'r')
+ # all names should be one line, but the join below also converts to a string
+ linden_names = ', '.join(linden_file.readlines())
+ self.put_in_file(linden_names, "lindens.txt")
+ linden_file.close()
+ except IOError:
+ print "No Linden names found at '%s', using built-in list" % linden_names_path
+ pass
+
# ... and the entire windlight directory
self.path("windlight")
self.end_prefix("app_settings")
@@ -143,6 +164,21 @@ class ViewerManifest(LLManifest):
def channel_lowerword(self):
return self.channel_oneword().lower()
+ def icon_path(self):
+ icon_path="icons/"
+ channel_type=self.channel_lowerword()
+ if channel_type == 'release' \
+ or channel_type == 'development' \
+ :
+ icon_path += channel_type
+ elif channel_type == 'betaviewer' :
+ icon_path += 'beta'
+ elif re.match('project.*',channel_type) :
+ icon_path += 'project'
+ else :
+ icon_path += 'test'
+ return icon_path
+
def flags_list(self):
""" Convenience function that returns the command-line flags
for the grid"""
@@ -174,6 +210,28 @@ class ViewerManifest(LLManifest):
return " ".join((channel_flags, grid_flags, setting_flags)).strip()
+ def extract_names(self,src):
+ try:
+ contrib_file = open(src,'r')
+ except IOError:
+ print "Failed to open '%s'" % src
+ raise
+ lines = contrib_file.readlines()
+ contrib_file.close()
+
+ # All lines up to and including the first blank line are the file header; skip them
+ lines.reverse() # so that pop will pull from first to last line
+ while not re.match("\s*$", lines.pop()) :
+ pass # do nothing
+
+ # A line that starts with a non-whitespace character is a name; all others describe contributions, so collect the names
+ names = []
+ for line in lines :
+ if re.match("\S", line) :
+ names.append(line.rstrip())
+ # It's not fair to always put the same people at the head of the list
+ random.shuffle(names)
+ return ', '.join(names)
class WindowsManifest(ViewerManifest):
def final_exe(self):
@@ -609,12 +667,11 @@ class DarwinManifest(ViewerManifest):
self.path("featuretable_mac.txt")
self.path("SecondLife.nib")
- # If we are not using the default channel, use the 'Firstlook
- # icon' to show that it isn't a stable release.
- if self.default_channel() and self.default_grid():
+ icon_path = self.icon_path()
+ if self.prefix(src=icon_path, dst="") :
self.path("secondlife.icns")
- else:
- self.path("secondlife_firstlook.icns", "secondlife.icns")
+ self.end_prefix(icon_path)
+
self.path("SecondLife.nib")
# Translations
@@ -693,7 +750,7 @@ class DarwinManifest(ViewerManifest):
"libexpat.1.5.2.dylib",
"libexception_handler.dylib",
"libGLOD.dylib",
- "libcollada14dom.dylib"
+ "libcollada14dom.dylib"
):
target_lib = os.path.join('../../..', libfile)
self.run_command("ln -sf %(target)r %(link)r" %
@@ -795,9 +852,7 @@ class DarwinManifest(ViewerManifest):
# will use the release .DS_Store, and will look broken.
# - Ambroff 2008-08-20
dmg_template = os.path.join(
- 'installers',
- 'darwin',
- '%s-dmg' % "".join(self.channel_unique().split()).lower())
+ 'installers', 'darwin', '%s-dmg' % self.channel_lowerword())
if not os.path.exists (self.src_path_of(dmg_template)):
dmg_template = os.path.join ('installers', 'darwin', 'release-dmg')
@@ -853,7 +908,6 @@ class LinuxManifest(ViewerManifest):
def construct(self):
super(LinuxManifest, self).construct()
self.path("licenses-linux.txt","licenses.txt")
- self.path("res/ll_icon.png","secondlife_icon.png")
if self.prefix("linux_tools", dst=""):
self.path("client-readme.txt","README-linux.txt")
self.path("client-readme-voice.txt","README-linux-voice.txt")
@@ -879,6 +933,15 @@ class LinuxManifest(ViewerManifest):
# recurse
self.end_prefix("res-sdl")
+ # Get the icons based on the channel
+ icon_path = self.icon_path()
+ if self.prefix(src=icon_path, dst="") :
+ self.path("secondlife_256.png","secondlife_icon.png")
+ if self.prefix(src="",dst="res-sdl") :
+ self.path("secondlife_256.BMP","ll_icon.BMP")
+ self.end_prefix("res-sdl")
+ self.end_prefix(icon_path)
+
self.path("../viewer_components/updater/scripts/linux/update_install", "bin/update_install")
# plugins
@@ -964,15 +1027,15 @@ class Linux_i686Manifest(LinuxManifest):
self.path("libbreakpad_client.so.0.0.0")
self.path("libbreakpad_client.so.0")
self.path("libbreakpad_client.so")
- self.path("libcollada14dom.so")
+ self.path("libcollada14dom.so")
self.path("libdb-5.1.so")
self.path("libdb-5.so")
self.path("libdb.so")
self.path("libcrypto.so.1.0.0")
self.path("libexpat.so.1.5.2")
self.path("libssl.so.1.0.0")
- self.path("libglod.so")
- self.path("libminizip.so")
+ self.path("libglod.so")
+ self.path("libminizip.so")
self.path("libuuid.so")
self.path("libuuid.so.16")
self.path("libuuid.so.16.0.22")
diff --git a/indra/test/io.cpp b/indra/test/io.cpp
index c06c1b153b..c8e53e77a0 100644
--- a/indra/test/io.cpp
+++ b/indra/test/io.cpp
@@ -823,22 +823,19 @@ namespace tut
class PumpAndChainTestData
{
protected:
- apr_pool_t* mPool;
LLPumpIO* mPump;
LLPumpIO::chain_t mChain;
public:
PumpAndChainTestData()
{
- apr_pool_create(&mPool, NULL);
- mPump = new LLPumpIO(mPool);
+ mPump = new LLPumpIO();
}
~PumpAndChainTestData()
{
mChain.clear();
delete mPump;
- apr_pool_destroy(mPool);
}
};
typedef test_group<PumpAndChainTestData> PumpAndChainTestGroup;
@@ -910,10 +907,8 @@ namespace tut
pipe_and_pump_fitness()
{
LLFrameTimer::updateFrameTime();
- apr_pool_create(&mPool, NULL);
- mPump = new LLPumpIO(mPool);
+ mPump = new LLPumpIO();
mSocket = LLSocket::create(
- mPool,
LLSocket::STREAM_TCP,
SERVER_LISTEN_PORT);
}
@@ -922,7 +917,6 @@ namespace tut
{
mSocket.reset();
delete mPump;
- apr_pool_destroy(mPool);
}
protected:
@@ -948,7 +942,6 @@ namespace tut
new LLPipeStringInjector("suckers never play me"));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS);
@@ -963,7 +956,7 @@ namespace tut
// Set up the client
//lldebugs << "fitness_test_object::test<1> - connecting client."
// << llendl;
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -995,7 +988,6 @@ namespace tut
emitter_t* emitter = new emitter_t(new LLIOFuzz(1000000));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS);
@@ -1006,7 +998,7 @@ namespace tut
pump_loop(mPump, 0.1f);
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1038,7 +1030,6 @@ namespace tut
emitter_t* emitter = new emitter_t(new LLIOFuzz(1000000));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS);
@@ -1049,7 +1040,7 @@ namespace tut
pump_loop(mPump, 0.1f);
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1081,7 +1072,6 @@ namespace tut
emitter_t* emitter = new emitter_t(new LLIOFuzz(1000000));
boost::shared_ptr<LLChainIOFactory> factory(emitter);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(SHORT_CHAIN_EXPIRY_SECS + 1.80f);
@@ -1092,7 +1082,7 @@ namespace tut
pump_loop(mPump, 0.1f);
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1122,7 +1112,6 @@ namespace tut
sleeper_t* sleeper = new sleeper_t(new LLIOSleeper);
boost::shared_ptr<LLChainIOFactory> factory(sleeper);
LLIOServerSocket* server = new LLIOServerSocket(
- mPool,
mSocket,
factory);
server->setResponseTimeout(1.0);
@@ -1135,7 +1124,7 @@ namespace tut
lldebugs << "** Server is up." << llendl;
// Set up the client
- LLSocket::ptr_t client = LLSocket::create(mPool, LLSocket::STREAM_TCP);
+ LLSocket::ptr_t client = LLSocket::create(LLSocket::STREAM_TCP);
LLHost server_host("127.0.0.1", SERVER_LISTEN_PORT);
bool connected = client->blockingConnect(server_host);
ensure("Connected to server", connected);
@@ -1249,19 +1238,16 @@ namespace tut
}
};
- apr_pool_t* mPool;
LLPumpIO* mPump;
LLPumpIO::chain_t mChain;
LLSimpleRPCClient* mClient;
LLSD mResponse;
rpc_server_data() :
- mPool(NULL),
mPump(NULL),
mClient(NULL)
{
- apr_pool_create(&mPool, NULL);
- mPump = new LLPumpIO(mPool);
+ mPump = new LLPumpIO();
mClient = new LLSimpleRPCClient(&mResponse);
mChain.push_back(LLIOPipe::ptr_t(mClient));
mChain.push_back(LLIOPipe::ptr_t(new LLFilterSD2XMLRPCRequest));
@@ -1276,8 +1262,6 @@ namespace tut
mChain.clear();
delete mPump;
mPump = NULL;
- apr_pool_destroy(mPool);
- mPool = NULL;
}
void pump_loop(const LLSD& request)
{
diff --git a/indra/test/lliohttpserver_tut.cpp b/indra/test/lliohttpserver_tut.cpp
index 2fdc455f45..b7274b662d 100644
--- a/indra/test/lliohttpserver_tut.cpp
+++ b/indra/test/lliohttpserver_tut.cpp
@@ -104,11 +104,8 @@ namespace tut
LLPipeStringInjector* injector = new LLPipeStringInjector(httpRequest);
LLPipeStringExtractor* extractor = new LLPipeStringExtractor();
- apr_pool_t* pool;
- apr_pool_create(&pool, NULL);
-
LLPumpIO* pump;
- pump = new LLPumpIO(pool);
+ pump = new LLPumpIO();
LLPumpIO::chain_t chain;
LLSD context;
@@ -131,7 +128,6 @@ namespace tut
chain.clear();
delete pump;
- apr_pool_destroy(pool);
if(mResponse.notNull() && timeout)
{
diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp
index 6e1c82bb24..fb3dd18fd3 100644
--- a/indra/test/lltemplatemessagebuilder_tut.cpp
+++ b/indra/test/lltemplatemessagebuilder_tut.cpp
@@ -29,7 +29,6 @@
#include "linden_common.h"
#include "lltut.h"
-#include "llapr.h"
#include "llmessagetemplate.h"
#include "llmath.h"
#include "llquaternion.h"
@@ -54,7 +53,6 @@ namespace tut
static bool init = false;
if(! init)
{
- ll_init_apr();
const F32 circuit_heartbeat_interval=5;
const F32 circuit_timeout=100;
diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp
index d971b33475..9a6ccd4d68 100644
--- a/indra/test/message_tut.cpp
+++ b/indra/test/message_tut.cpp
@@ -29,7 +29,6 @@
#include "linden_common.h"
#include "lltut.h"
-#include "llapr.h"
#include "llmessageconfig.h"
#include "llsdserialize.h"
#include "llversionserver.h"
@@ -62,7 +61,6 @@ namespace tut
static bool init = false;
if(!init)
{
- ll_init_apr();
//init_prehash_data();
init = true;
}
diff --git a/indra/test/test.cpp b/indra/test/test.cpp
index ffdb0cb976..45e8aef99a 100644
--- a/indra/test/test.cpp
+++ b/indra/test/test.cpp
@@ -37,8 +37,8 @@
#include "linden_common.h"
#include "llerrorcontrol.h"
#include "lltut.h"
+#include "llaprpool.h"
-#include "apr_pools.h"
#include "apr_getopt.h"
// the CTYPE_WORKAROUND is needed for linux dev stations that don't
@@ -349,17 +349,12 @@ int main(int argc, char **argv)
ctype_workaround();
#endif
- apr_initialize();
- apr_pool_t* pool = NULL;
- if(APR_SUCCESS != apr_pool_create(&pool, NULL))
- {
- std::cerr << "Unable to initialize pool" << std::endl;
- return 1;
- }
+ LLAPRPool pool;
+ pool.create();
apr_getopt_t* os = NULL;
- if(APR_SUCCESS != apr_getopt_init(&os, pool, argc, argv))
+ if(APR_SUCCESS != apr_getopt_init(&os, pool(), argc, argv))
{
- std::cerr << "Unable to pool" << std::endl;
+ std::cerr << "Unable to initialize the arguments for parsing by apr_getopt()." << std::endl;
return 1;
}
@@ -477,8 +472,6 @@ int main(int argc, char **argv)
s.close();
}
- apr_terminate();
-
int retval = (success ? 0 : 1);
return retval;
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 884b00f0cc..d5ee09c5bc 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -27,7 +27,6 @@
#include "linden_common.h"
#include "indra_constants.h"
-#include "llapr.h"
#include "llerrorcontrol.h"
#include <math.h>
@@ -186,9 +185,6 @@ LLMediaPluginTest::LLMediaPluginTest( int app_window, int window_width, int wind
std::cout << "Unable to read bookmarks from file: " << bookmarks_filename << std::endl;
};
- // initialize linden lab APR module
- ll_init_apr();
-
// Set up llerror logging
{
LLError::initForApplication(".");
diff --git a/indra/viewer_components/updater/CMakeLists.txt b/indra/viewer_components/updater/CMakeLists.txt
index 0e288bb496..ef82290b47 100644
--- a/indra/viewer_components/updater/CMakeLists.txt
+++ b/indra/viewer_components/updater/CMakeLists.txt
@@ -17,8 +17,8 @@ include_directories(
${LLCOMMON_INCLUDE_DIRS}
${LLMESSAGE_INCLUDE_DIRS}
${LLPLUGIN_INCLUDE_DIRS}
- ${LLVFS_INCLUDE_DIRS}
- ${CURL_INCLUDE_DIRS}
+ ${LLVFS_INCLUDE_DIRS}
+ ${CURL_INCLUDE_DIRS}
)
set(updater_service_SOURCE_FILES
@@ -51,7 +51,7 @@ target_link_libraries(llupdaterservice
${LLCOMMON_LIBRARIES}
${LLMESSAGE_LIBRARIES}
${LLPLUGIN_LIBRARIES}
- ${LLVFS_LIBRARIES}
+ ${LLVFS_LIBRARIES}
)
if(LL_TESTS)
diff --git a/indra/viewer_components/updater/llupdateinstaller.cpp b/indra/viewer_components/updater/llupdateinstaller.cpp
index c7b70c2de8..24ba00ad8e 100644
--- a/indra/viewer_components/updater/llupdateinstaller.cpp
+++ b/indra/viewer_components/updater/llupdateinstaller.cpp
@@ -26,6 +26,7 @@
#include "linden_common.h"
#include <apr_file_io.h>
#include "llapr.h"
+#include "llscopedvolatileaprpool.h"
#include "llprocesslauncher.h"
#include "llupdateinstaller.h"
#include "lldir.h"
@@ -45,7 +46,8 @@ namespace {
{
std::string scriptFile = gDirUtilp->getBaseFileName(path);
std::string newPath = gDirUtilp->getExpandedFilename(LL_PATH_TEMP, scriptFile);
- apr_status_t status = apr_file_copy(path.c_str(), newPath.c_str(), APR_FILE_SOURCE_PERMS, gAPRPoolp);
+ LLScopedVolatileAPRPool pool;
+ apr_status_t status = apr_file_copy(path.c_str(), newPath.c_str(), APR_FILE_SOURCE_PERMS, pool);
if(status != APR_SUCCESS) throw RelocateError();
return newPath;
diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt
index 990dc6783e..5329c89554 100644
--- a/indra/win_crash_logger/CMakeLists.txt
+++ b/indra/win_crash_logger/CMakeLists.txt
@@ -89,4 +89,4 @@ if (WINDOWS)
)
endif (WINDOWS)
-ll_deploy_sharedlibs_command(windows-crash-logger) \ No newline at end of file
+ll_deploy_sharedlibs_command(windows-crash-logger)
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp
index 51ff754c27..170babbb98 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.cpp
+++ b/indra/win_crash_logger/llcrashloggerwindows.cpp
@@ -296,6 +296,7 @@ void LLCrashLoggerWindows::gatherPlatformSpecificFiles()
bool LLCrashLoggerWindows::mainLoop()
{
+ llinfos << "CrashSubmitBehavior is " << mCrashBehavior << llendl;
// Note: parent hwnd is 0 (the desktop). No dlg proc. See Petzold (5th ed) HexCalc example, Chapter 11, p529
// win_crash_logger.rc has been edited by hand.
@@ -308,6 +309,7 @@ bool LLCrashLoggerWindows::mainLoop()
if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
{
+ llinfos << "Showing crash report submit progress window." << llendl;
ShowWindow(gHwndProgress, SW_SHOW );
sendCrashLogs();
}
@@ -354,7 +356,7 @@ bool LLCrashLoggerWindows::mainLoop()
void LLCrashLoggerWindows::updateApplication(const std::string& message)
{
- LLCrashLogger::updateApplication();
+ LLCrashLogger::updateApplication(message);
if(!message.empty()) show_progress(message);
update_messages();
}
@@ -370,6 +372,3 @@ bool LLCrashLoggerWindows::cleanup()
PostQuitMessage(0);
return true;
}
-
-
-
diff --git a/indra/win_crash_logger/llcrashloggerwindows.h b/indra/win_crash_logger/llcrashloggerwindows.h
index 24c564457c..5c45a998b3 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.h
+++ b/indra/win_crash_logger/llcrashloggerwindows.h
@@ -41,7 +41,6 @@ public:
virtual void updateApplication(const std::string& message = LLStringUtil::null);
virtual bool cleanup();
virtual void gatherPlatformSpecificFiles();
- //void annotateCallStack();
void setHandle(HINSTANCE hInst) { mhInst = hInst; }
private:
void ProcessDlgItemText(HWND hWnd, int nIDDlgItem);
diff --git a/indra/win_crash_logger/win_crash_logger.cpp b/indra/win_crash_logger/win_crash_logger.cpp
index 5c22053317..8e916ae437 100644
--- a/indra/win_crash_logger/win_crash_logger.cpp
+++ b/indra/win_crash_logger/win_crash_logger.cpp
@@ -24,51 +24,30 @@
* $/LicenseInfo$
*/
-// win_crash_logger.cpp : Defines the entry point for the application.
-//
-
-// Must be first include, precompiled headers.
#include "linden_common.h"
-
#include "stdafx.h"
-
#include <stdlib.h>
-
#include "llcrashloggerwindows.h"
-
-
-//
-// Implementation
-//
-
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
- llinfos << "Starting crash reporter" << llendl;
+ llinfos << "Starting crash reporter." << llendl;
LLCrashLoggerWindows app;
app.setHandle(hInstance);
- bool ok = app.init();
- if(!ok)
+ app.parseCommandOptions(__argc, __argv);
+
+ if (! app.init())
{
llwarns << "Unable to initialize application." << llendl;
return -1;
}
- // Run the application main loop
- if(!LLApp::isQuitting()) app.mainLoop();
-
- if (!app.isError())
- {
- //
- // We don't want to do cleanup here if the error handler got called -
- // the assumption is that the error handler is responsible for doing
- // app cleanup if there was a problem.
- //
- app.cleanup();
- }
+ app.mainLoop();
+ app.cleanup();
+ llinfos << "Crash reporter finished normally." << llendl;
return 0;
}